diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index b852bec68697906b0d8bc847f58564b7741efc9b..70727fc15adc7656224e8b7fdbd9b95b08c4f6f5 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,8 +1,10 @@ variables: IMAGE_NAME: funkwhale/funkwhale IMAGE: $IMAGE_NAME:$CI_COMMIT_REF_NAME + IMAGE_LATEST: $IMAGE_NAME:latest ALL_IN_ONE_IMAGE_NAME: funkwhale/all-in-one ALL_IN_ONE_IMAGE: $ALL_IN_ONE_IMAGE_NAME:$CI_COMMIT_REF_NAME + ALL_IN_ONE_IMAGE_LATEST: $ALL_IN_ONE_IMAGE_NAME:latest PIP_CACHE_DIR: "$CI_PROJECT_DIR/pip-cache" PYTHONDONTWRITEBYTECODE: "true" REVIEW_DOMAIN: preview.funkwhale.audio @@ -16,6 +18,7 @@ stages: - deploy review_front: + interruptible: true stage: review image: node:11 when: manual @@ -54,8 +57,8 @@ review_front: 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 when: manual allow_failure: true @@ -68,7 +71,7 @@ review_docs: - cd docs - apt-get update - apt-get install -y graphviz - - pip install sphinx + - pip install sphinx sphinx_rtd_theme script: - ./build_docs.sh cache: @@ -87,8 +90,8 @@ review_docs: 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 - black: + interruptible: true image: python:3.6 stage: lint variables: @@ -99,6 +102,7 @@ black: - black --check --diff api/ flake8: + interruptible: true image: python:3.6 stage: lint variables: @@ -113,6 +117,7 @@ flake8: - "$PIP_CACHE_DIR" test_api: + interruptible: true services: - postgres:11 - redis:3 @@ -129,6 +134,7 @@ test_api: only: - branches before_script: + - apk add make - cd api - sed -i '/Pillow/d' requirements/base.txt - pip3 install -r requirements/base.txt @@ -140,6 +146,7 @@ test_api: - docker test_front: + interruptible: true stage: test image: node:11 before_script: @@ -196,7 +203,7 @@ pages: - cd docs - apt-get update - apt-get install -y graphviz - - pip install sphinx + - pip install sphinx sphinx_rtd_theme script: - ./build_docs.sh cache: @@ -218,10 +225,12 @@ docker_release: - docker login -u $DOCKER_LOGIN -p $DOCKER_PASSWORD - cp -r front/dist api/frontend - (if [ "$CI_COMMIT_REF_NAME" == "develop" ]; then ./scripts/set-api-build-metadata.sh $(echo $CI_COMMIT_SHA | cut -c 1-8); fi); - - cd api script: - - docker build -t $IMAGE . + - if [[ ! -z "$CI_COMMIT_TAG" ]]; then (./docs/get-releases-json.py | scripts/is-docker-latest.py $CI_COMMIT_TAG -) && export DOCKER_LATEST_TAG="-t $IMAGE_LATEST" || export DOCKER_LATEST_TAG=; fi + - cd api + - docker build -t $IMAGE $DOCKER_LATEST_TAG . - docker push $IMAGE + - if [[ ! -z "$DOCKER_LATEST_TAG" ]]; then docker push $IMAGE_LATEST; fi only: - develop@funkwhale/funkwhale - tags@funkwhale/funkwhale @@ -239,6 +248,7 @@ docker_all_in_one_release: - docker login -u $DOCKER_LOGIN -p $DOCKER_PASSWORD - (if [ "$CI_COMMIT_REF_NAME" == "develop" ]; then ./scripts/set-api-build-metadata.sh $(echo $CI_COMMIT_SHA | cut -c 1-8); fi); script: + - if [[ ! -z "$CI_COMMIT_TAG" ]]; then (./docs/get-releases-json.py | scripts/is-docker-latest.py $CI_COMMIT_TAG -) && export DOCKER_LATEST_TAG="-t $ALL_IN_ONE_IMAGE_LATEST" || export DOCKER_LATEST_TAG=; fi - wget $ALL_IN_ONE_ARTIFACT_URL -O all_in_one.zip - unzip -o all_in_one.zip -d tmpdir - mv tmpdir/docker-funkwhale-$ALL_IN_ONE_REF $BUILD_PATH && rmdir tmpdir @@ -246,8 +256,9 @@ docker_all_in_one_release: - cp -r front $BUILD_PATH/src/front - cd $BUILD_PATH - ./scripts/download-nginx-template.sh src/ $CI_COMMIT_REF_NAME - - docker build -t $ALL_IN_ONE_IMAGE . + - docker build -t $ALL_IN_ONE_IMAGE $DOCKER_LATEST_TAG . - docker push $ALL_IN_ONE_IMAGE + - if [[ ! -z "$DOCKER_LATEST_TAG" ]]; then docker push $ALL_IN_ONE_IMAGE_LATEST; fi only: - develop@funkwhale/funkwhale - tags@funkwhale/funkwhale diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst index 2722502c094c3982ea988b0f987544fc25e1a0de..2d85efa746371ea2f72d9a30056e98b4a5806ef3 100644 --- a/CONTRIBUTING.rst +++ b/CONTRIBUTING.rst @@ -185,9 +185,9 @@ If you prefer to launch them in the background instead, use the ``-d`` flag, and Once everything is up, you can access the various funkwhale's components: -- The Vue webapp, on http://localhost:8080 -- The API, on http://localhost:8080/api/v1/ -- The django admin, on http://localhost:8080/api/admin/ +- The Vue webapp, on http://localhost:8000 +- The API, on http://localhost:8000/api/v1/ +- The django admin, on http://localhost:800/api/admin/ Stopping everything ^^^^^^^^^^^^^^^^^^^ diff --git a/api/Dockerfile b/api/Dockerfile index c735ab3976b369d8a119bab4f880e46d0515312b..958af297df2364718d9852c5ba761fa4bcddbf1e 100644 --- a/api/Dockerfile +++ b/api/Dockerfile @@ -17,6 +17,7 @@ RUN \ libpq \ libmagic \ libffi-dev \ + make \ zlib-dev \ openldap-dev && \ \ @@ -44,7 +45,7 @@ RUN \ if [ "$install_dev_deps" = "1" ] ; then echo "Installing dev dependencies" && pip3 install --no-cache-dir -r /requirements/local.txt -r /requirements/test.txt ; else echo "Skipping dev deps installation" ; fi ENTRYPOINT ["./compose/django/entrypoint.sh"] -CMD ["./compose/django/daphne.sh"] +CMD ["./compose/django/server.sh"] COPY . /app WORKDIR /app diff --git a/api/compose/django/daphne.sh b/api/compose/django/daphne.sh deleted file mode 100755 index b99cb18720ccda9923ae4071707f3cf209d843b7..0000000000000000000000000000000000000000 --- a/api/compose/django/daphne.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash -eux -python /app/manage.py collectstatic --noinput -daphne -b 0.0.0.0 -p 5000 config.asgi:application --proxy-headers diff --git a/api/compose/django/server.sh b/api/compose/django/server.sh new file mode 100755 index 0000000000000000000000000000000000000000..0e4c737afcbd52cd104e618614197e2f52d82534 --- /dev/null +++ b/api/compose/django/server.sh @@ -0,0 +1,3 @@ +#!/bin/bash -eux +python /app/manage.py collectstatic --noinput +gunicorn config.asgi:application -w ${FUNKWHALE_WEB_WORKERS-1} -k uvicorn.workers.UvicornWorker -b 0.0.0.0:5000 diff --git a/api/config/api_urls.py b/api/config/api_urls.py index a40ff3047a33b3b66dc8ef1bf2342c7c082cfc0e..cdcc7439120d97fd4c097f2d15f988f05d5ed43b 100644 --- a/api/config/api_urls.py +++ b/api/config/api_urls.py @@ -2,18 +2,20 @@ from django.conf.urls import include, url from dynamic_preferences.api.viewsets import GlobalPreferencesViewSet from rest_framework import routers from rest_framework.urlpatterns import format_suffix_patterns -from rest_framework_jwt import views as jwt_views from funkwhale_api.activity import views as activity_views from funkwhale_api.common import views as common_views +from funkwhale_api.common import routers as common_routers 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 +from funkwhale_api.users import jwt_views -router = routers.SimpleRouter() +router = common_routers.OptionalSlashRouter() router.register(r"settings", GlobalPreferencesViewSet, basename="settings") router.register(r"activity", activity_views.ActivityViewSet, "activity") -router.register(r"tags", views.TagViewSet, "tags") +router.register(r"tags", tags_views.TagViewSet, "tags") router.register(r"tracks", views.TrackViewSet, "tracks") router.register(r"uploads", views.UploadViewSet, "uploads") router.register(r"libraries", views.LibraryViewSet, "libraries") @@ -79,8 +81,9 @@ v1_patterns += [ r"^oauth/", include(("funkwhale_api.users.oauth.urls", "oauth"), namespace="oauth"), ), - url(r"^token/$", jwt_views.obtain_jwt_token, name="token"), - url(r"^token/refresh/$", jwt_views.refresh_jwt_token, name="token_refresh"), + url(r"^token/?$", jwt_views.obtain_jwt_token, name="token"), + url(r"^token/refresh/?$", jwt_views.refresh_jwt_token, name="token_refresh"), + url(r"^rate-limit/?$", common_views.RateLimitView.as_view(), name="rate-limit"), ] urlpatterns = [ diff --git a/api/config/settings/common.py b/api/config/settings/common.py index 654b58b40a8aa3bf016e707d9a96d087815e1e21..a20081dd2f3905c90baade172c51ee1fbe506f13 100644 --- a/api/config/settings/common.py +++ b/api/config/settings/common.py @@ -11,7 +11,8 @@ https://docs.djangoproject.com/en/dev/ref/settings/ from __future__ import absolute_import, unicode_literals import datetime -import logging +import logging.config +import sys from urllib.parse import urlsplit @@ -20,13 +21,44 @@ from celery.schedules import crontab from funkwhale_api import __version__ -logger = logging.getLogger(__name__) +logger = logging.getLogger("funkwhale_api.config") ROOT_DIR = environ.Path(__file__) - 3 # (/a/b/myfile.py - 3 = /) APPS_DIR = ROOT_DIR.path("funkwhale_api") env = environ.Env() + +LOGLEVEL = env("LOGLEVEL", default="info").upper() +LOGGING_CONFIG = None +logging.config.dictConfig( + { + "version": 1, + "disable_existing_loggers": False, + "formatters": { + "console": {"format": "%(asctime)s %(name)-12s %(levelname)-8s %(message)s"} + }, + "handlers": { + "console": {"class": "logging.StreamHandler", "formatter": "console"}, + # # Add Handler for Sentry for `warning` and above + # 'sentry': { + # 'level': 'WARNING', + # 'class': 'raven.contrib.django.raven_compat.handlers.SentryHandler', + # }, + }, + "loggers": { + "funkwhale_api": { + "level": LOGLEVEL, + "handlers": ["console"], + # required to avoid double logging with root logger + "propagate": False, + }, + "": {"level": "WARNING", "handlers": ["console"]}, + }, + } +) + env_file = env("ENV_FILE", default=None) if env_file: + logger.info("Loading specified env file at %s", env_file) # we have an explicitely specified env file # so we try to load and it fail loudly if it does not exist env.read_env(env_file) @@ -49,6 +81,11 @@ else: logger.info("Loaded env file at %s/.env", path) break +FUNKWHALE_PLUGINS_PATH = env( + "FUNKWHALE_PLUGINS_PATH", default="/srv/funkwhale/plugins/" +) +sys.path.append(FUNKWHALE_PLUGINS_PATH) + FUNKWHALE_HOSTNAME = None FUNKWHALE_HOSTNAME_SUFFIX = env("FUNKWHALE_HOSTNAME_SUFFIX", default=None) FUNKWHALE_HOSTNAME_PREFIX = env("FUNKWHALE_HOSTNAME_PREFIX", default=None) @@ -124,7 +161,6 @@ THIRD_PARTY_APPS = ( "oauth2_provider", "rest_framework", "rest_framework.authtoken", - "taggit", "rest_auth", "rest_auth.registration", "dynamic_preferences", @@ -147,7 +183,6 @@ if RAVEN_ENABLED: } THIRD_PARTY_APPS += ("raven.contrib.django.raven_compat",) - # Apps specific for this project go here. LOCAL_APPS = ( "funkwhale_api.common.apps.CommonConfig", @@ -160,29 +195,44 @@ LOCAL_APPS = ( "funkwhale_api.requests", "funkwhale_api.favorites", "funkwhale_api.federation", - "funkwhale_api.moderation", + "funkwhale_api.moderation.apps.ModerationConfig", "funkwhale_api.radios", "funkwhale_api.history", "funkwhale_api.playlists", "funkwhale_api.subsonic", + "funkwhale_api.tags", ) # See: https://docs.djangoproject.com/en/dev/ref/settings/#installed-apps -INSTALLED_APPS = DJANGO_APPS + THIRD_PARTY_APPS + LOCAL_APPS + +PLUGINS = [p for p in env.list("FUNKWHALE_PLUGINS", default=[]) if p] +if PLUGINS: + logger.info("Running with the following plugins enabled: %s", ", ".join(PLUGINS)) +else: + logger.info("Running with no plugins") + +INSTALLED_APPS = ( + DJANGO_APPS + + THIRD_PARTY_APPS + + LOCAL_APPS + + tuple(["{}.apps.Plugin".format(p) for p in PLUGINS]) +) # MIDDLEWARE CONFIGURATION # ------------------------------------------------------------------------------ MIDDLEWARE = ( + "django.middleware.security.SecurityMiddleware", + "django.middleware.clickjacking.XFrameOptionsMiddleware", + "corsheaders.middleware.CorsMiddleware", "funkwhale_api.common.middleware.SPAFallbackMiddleware", "django.contrib.sessions.middleware.SessionMiddleware", - "corsheaders.middleware.CorsMiddleware", "django.middleware.common.CommonMiddleware", "django.middleware.csrf.CsrfViewMiddleware", "django.contrib.auth.middleware.AuthenticationMiddleware", "django.contrib.messages.middleware.MessageMiddleware", - "django.middleware.clickjacking.XFrameOptionsMiddleware", "funkwhale_api.users.middleware.RecordActivityMiddleware", + "funkwhale_api.common.middleware.ThrottleStatusMiddleware", ) # DEBUG @@ -350,6 +400,8 @@ ASGI_APPLICATION = "config.routing.application" # This ensures that Django will be able to detect a secure connection SECURE_PROXY_SSL_HEADER = ("HTTP_X_FORWARDED_PROTO", "https") +SECURE_BROWSER_XSS_FILTER = True +SECURE_CONTENT_TYPE_NOSNIFF = True # AUTHENTICATION CONFIGURATION # ------------------------------------------------------------------------------ @@ -516,14 +568,32 @@ CELERY_BEAT_SCHEDULE = { NODEINFO_REFRESH_DELAY = env.int("NODEINFO_REFRESH_DELAY", default=3600 * 24) + +def get_user_secret_key(user): + from django.conf import settings + + return settings.SECRET_KEY + str(user.secret_key) + + JWT_AUTH = { "JWT_ALLOW_REFRESH": True, "JWT_EXPIRATION_DELTA": datetime.timedelta(days=7), "JWT_REFRESH_EXPIRATION_DELTA": datetime.timedelta(days=30), "JWT_AUTH_HEADER_PREFIX": "JWT", - "JWT_GET_USER_SECRET_KEY": lambda user: user.secret_key, + "JWT_GET_USER_SECRET_KEY": get_user_secret_key, } OLD_PASSWORD_FIELD_ENABLED = True +AUTH_PASSWORD_VALIDATORS = [ + { + "NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator" + }, + { + "NAME": "django.contrib.auth.password_validation.MinimumLengthValidator", + "OPTIONS": {"min_length": env.int("PASSWORD_MIN_LENGTH", default=8)}, + }, + {"NAME": "django.contrib.auth.password_validation.CommonPasswordValidator"}, + {"NAME": "django.contrib.auth.password_validation.NumericPasswordValidator"}, +] ACCOUNT_ADAPTER = "funkwhale_api.users.adapters.FunkwhaleAccountAdapter" CORS_ORIGIN_ALLOW_ALL = True # CORS_ORIGIN_WHITELIST = ( @@ -557,8 +627,151 @@ REST_FRAMEWORK = { "django_filters.rest_framework.DjangoFilterBackend", ), "DEFAULT_RENDERER_CLASSES": ("rest_framework.renderers.JSONRenderer",), + "NUM_PROXIES": env.int("NUM_PROXIES", default=1), +} +THROTTLING_ENABLED = env.bool("THROTTLING_ENABLED", default=True) +if THROTTLING_ENABLED: + REST_FRAMEWORK["DEFAULT_THROTTLE_CLASSES"] = env.list( + "THROTTLE_CLASSES", + default=["funkwhale_api.common.throttling.FunkwhaleThrottle"], + ) + +THROTTLING_SCOPES = { + "*": {"anonymous": "anonymous-wildcard", "authenticated": "authenticated-wildcard"}, + "create": { + "authenticated": "authenticated-create", + "anonymous": "anonymous-create", + }, + "list": {"authenticated": "authenticated-list", "anonymous": "anonymous-list"}, + "retrieve": { + "authenticated": "authenticated-retrieve", + "anonymous": "anonymous-retrieve", + }, + "destroy": { + "authenticated": "authenticated-destroy", + "anonymous": "anonymous-destroy", + }, + "update": { + "authenticated": "authenticated-update", + "anonymous": "anonymous-update", + }, + "partial_update": { + "authenticated": "authenticated-update", + "anonymous": "anonymous-update", + }, } +THROTTLING_USER_RATES = env.dict("THROTTLING_RATES", default={}) + +THROTTLING_RATES = { + "anonymous-wildcard": { + "rate": THROTTLING_USER_RATES.get("anonymous-wildcard", "1000/h"), + "description": "Anonymous requests not covered by other limits", + }, + "authenticated-wildcard": { + "rate": THROTTLING_USER_RATES.get("authenticated-wildcard", "2000/h"), + "description": "Authenticated requests not covered by other limits", + }, + "authenticated-create": { + "rate": THROTTLING_USER_RATES.get("authenticated-create", "1000/hour"), + "description": "Authenticated POST requests", + }, + "anonymous-create": { + "rate": THROTTLING_USER_RATES.get("anonymous-create", "1000/day"), + "description": "Anonymous POST requests", + }, + "authenticated-list": { + "rate": THROTTLING_USER_RATES.get("authenticated-list", "10000/hour"), + "description": "Authenticated GET requests on resource lists", + }, + "anonymous-list": { + "rate": THROTTLING_USER_RATES.get("anonymous-list", "10000/day"), + "description": "Anonymous GET requests on resource lists", + }, + "authenticated-retrieve": { + "rate": THROTTLING_USER_RATES.get("authenticated-retrieve", "10000/hour"), + "description": "Authenticated GET requests on resource detail", + }, + "anonymous-retrieve": { + "rate": THROTTLING_USER_RATES.get("anonymous-retrieve", "10000/day"), + "description": "Anonymous GET requests on resource detail", + }, + "authenticated-destroy": { + "rate": THROTTLING_USER_RATES.get("authenticated-destroy", "500/hour"), + "description": "Authenticated DELETE requests on resource detail", + }, + "anonymous-destroy": { + "rate": THROTTLING_USER_RATES.get("anonymous-destroy", "1000/day"), + "description": "Anonymous DELETE requests on resource detail", + }, + "authenticated-update": { + "rate": THROTTLING_USER_RATES.get("authenticated-update", "1000/hour"), + "description": "Authenticated PATCH and PUT requests on resource detail", + }, + "anonymous-update": { + "rate": THROTTLING_USER_RATES.get("anonymous-update", "1000/day"), + "description": "Anonymous PATCH and PUT requests on resource detail", + }, + # potentially spammy / dangerous endpoints + "authenticated-reports": { + "rate": THROTTLING_USER_RATES.get("authenticated-reports", "100/day"), + "description": "Authenticated report submission", + }, + "anonymous-reports": { + "rate": THROTTLING_USER_RATES.get("anonymous-reports", "10/day"), + "description": "Anonymous report submission", + }, + "authenticated-oauth-app": { + "rate": THROTTLING_USER_RATES.get("authenticated-oauth-app", "10/hour"), + "description": "Authenticated OAuth app creation", + }, + "anonymous-oauth-app": { + "rate": THROTTLING_USER_RATES.get("anonymous-oauth-app", "10/day"), + "description": "Anonymous OAuth app creation", + }, + "oauth-authorize": { + "rate": THROTTLING_USER_RATES.get("oauth-authorize", "100/hour"), + "description": "OAuth app authorization", + }, + "oauth-token": { + "rate": THROTTLING_USER_RATES.get("oauth-token", "100/hour"), + "description": "OAuth token creation", + }, + "oauth-revoke-token": { + "rate": THROTTLING_USER_RATES.get("oauth-revoke-token", "100/hour"), + "description": "OAuth token deletion", + }, + "jwt-login": { + "rate": THROTTLING_USER_RATES.get("jwt-login", "30/hour"), + "description": "JWT token creation", + }, + "jwt-refresh": { + "rate": THROTTLING_USER_RATES.get("jwt-refresh", "30/hour"), + "description": "JWT token refresh", + }, + "signup": { + "rate": THROTTLING_USER_RATES.get("signup", "10/day"), + "description": "Account creation", + }, + "verify-email": { + "rate": THROTTLING_USER_RATES.get("verify-email", "20/h"), + "description": "Email address confirmation", + }, + "password-change": { + "rate": THROTTLING_USER_RATES.get("password-change", "20/h"), + "description": "Password change (when authenticated)", + }, + "password-reset": { + "rate": THROTTLING_USER_RATES.get("password-reset", "20/h"), + "description": "Password reset request", + }, + "password-reset-confirm": { + "rate": THROTTLING_USER_RATES.get("password-reset-confirm", "20/h"), + "description": "Password reset confirmation", + }, +} + + BROWSABLE_API_ENABLED = env.bool("BROWSABLE_API_ENABLED", default=False) if BROWSABLE_API_ENABLED: REST_FRAMEWORK["DEFAULT_RENDERER_CLASSES"] += ( @@ -661,3 +874,17 @@ ACTOR_KEY_ROTATION_DELAY = env.int("ACTOR_KEY_ROTATION_DELAY", default=3600 * 48 SUBSONIC_DEFAULT_TRANSCODING_FORMAT = ( env("SUBSONIC_DEFAULT_TRANSCODING_FORMAT", default="mp3") or None ) + +# extra tags will be ignored +TAGS_MAX_BY_OBJ = env.int("TAGS_MAX_BY_OBJ", default=30) +FEDERATION_OBJECT_FETCH_DELAY = env.int( + "FEDERATION_OBJECT_FETCH_DELAY", default=60 * 24 * 3 +) + +MODERATION_EMAIL_NOTIFICATIONS_ENABLED = env.bool( + "MODERATION_EMAIL_NOTIFICATIONS_ENABLED", default=True +) + +# Delay in days after signup before we show the "support us" messages +INSTANCE_SUPPORT_MESSAGE_DELAY = env.int("INSTANCE_SUPPORT_MESSAGE_DELAY", default=15) +FUNKWHALE_SUPPORT_MESSAGE_DELAY = env.int("FUNKWHALE_SUPPORT_MESSAGE_DELAY", default=15) diff --git a/api/config/settings/production.py b/api/config/settings/production.py index 26def9fd036c3077721862dbd505af6aabfb56d2..1ee9b8f7e6ef0270096a295bf7bc23d137a75c86 100644 --- a/api/config/settings/production.py +++ b/api/config/settings/production.py @@ -73,50 +73,4 @@ TEMPLATES[0]["OPTIONS"]["loaders"] = [ # ------------------------------------------------------------------------------ # Heroku URL does not pass the DB number, so we parse it in - -# LOGGING CONFIGURATION -# ------------------------------------------------------------------------------ -# See: https://docs.djangoproject.com/en/dev/ref/settings/#logging -# A sample logging configuration. The only tangible logging -# performed by this configuration is to send an email to -# the site admins on every HTTP 500 error when DEBUG=False. -# See http://docs.djangoproject.com/en/dev/topics/logging for -# more details on how to customize your logging configuration. -LOGGING = { - "version": 1, - "disable_existing_loggers": False, - "filters": {"require_debug_false": {"()": "django.utils.log.RequireDebugFalse"}}, - "formatters": { - "verbose": { - "format": "%(levelname)s %(asctime)s %(module)s " - "%(process)d %(thread)d %(message)s" - } - }, - "handlers": { - "mail_admins": { - "level": "ERROR", - "filters": ["require_debug_false"], - "class": "django.utils.log.AdminEmailHandler", - }, - "console": { - "level": "DEBUG", - "class": "logging.StreamHandler", - "formatter": "verbose", - }, - }, - "loggers": { - "django.request": { - "handlers": ["mail_admins"], - "level": "ERROR", - "propagate": True, - }, - "django.security.DisallowedHost": { - "level": "ERROR", - "handlers": ["console", "mail_admins"], - "propagate": True, - }, - }, -} - - # Your production stuff: Below this line define 3rd party library settings diff --git a/api/config/spa_urls.py b/api/config/spa_urls.py index 071965b048b30ffb9aaf15c80d63cc5249389d10..246338d2dd535186fbd64bfd73c99ed95bd6b5a8 100644 --- a/api/config/spa_urls.py +++ b/api/config/spa_urls.py @@ -15,4 +15,9 @@ urlpatterns = [ spa_views.library_artist, name="library_artist", ), + urls.re_path( + r"^library/playlists/(?P<pk>\d+)/?$", + spa_views.library_playlist, + name="library_playlist", + ), ] diff --git a/api/config/urls.py b/api/config/urls.py index 99fc32f1fce09e6a3b8c227e530102ba0e9abd17..015047f67fd0834bbba477b98d7fca4f63acf81a 100644 --- a/api/config/urls.py +++ b/api/config/urls.py @@ -19,8 +19,7 @@ urlpatterns = [ ("funkwhale_api.federation.urls", "federation"), namespace="federation" ), ), - url(r"^api/v1/auth/", include("rest_auth.urls")), - url(r"^api/v1/auth/registration/", include("funkwhale_api.users.rest_auth_urls")), + url(r"^api/v1/auth/", include("funkwhale_api.users.rest_auth_urls")), url(r"^accounts/", include("allauth.urls")), # Your stuff: custom urls includes go here ] diff --git a/api/funkwhale_api/__init__.py b/api/funkwhale_api/__init__.py index 7805b764635fcb706ddbbc8d0118261700bb83ac..655fc990523e9272816caf9f1ecd2a89d7519fdd 100644 --- a/api/funkwhale_api/__init__.py +++ b/api/funkwhale_api/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -__version__ = "0.19.1" +__version__ = "0.20.0-rc1" __version_info__ = tuple( [ int(num) if num.isdigit() else num diff --git a/api/funkwhale_api/common/fields.py b/api/funkwhale_api/common/fields.py index b8e217ba4eca9ef0954236124a577a88cf4e72d5..f206b626eaa5e9f939bafb8adaeb6dec64177eb1 100644 --- a/api/funkwhale_api/common/fields.py +++ b/api/funkwhale_api/common/fields.py @@ -1,7 +1,10 @@ import django_filters from django import forms +from django.core.serializers.json import DjangoJSONEncoder from django.db import models +from rest_framework import serializers + from . import search PRIVACY_LEVEL_CHOICES = [ @@ -52,3 +55,118 @@ class SmartSearchFilter(django_filters.CharFilter): except (forms.ValidationError): return qs.none() return search.apply(qs, cleaned) + + +def get_generic_filter_query(value, relation_name, choices): + parts = value.split(":", 1) + type = parts[0] + try: + conf = choices[type] + except KeyError: + raise forms.ValidationError("Invalid type") + related_queryset = conf["queryset"] + related_model = related_queryset.model + filter_query = models.Q( + **{ + "{}_content_type__app_label".format( + relation_name + ): related_model._meta.app_label, + "{}_content_type__model".format( + relation_name + ): related_model._meta.model_name, + } + ) + if len(parts) > 1: + id_attr = conf.get("id_attr", "id") + id_field = conf.get("id_field", serializers.IntegerField(min_value=1)) + try: + id_value = parts[1] + id_value = id_field.to_internal_value(id_value) + except (TypeError, KeyError, serializers.ValidationError): + raise forms.ValidationError("Invalid id") + query_getter = conf.get( + "get_query", lambda attr, value: models.Q(**{attr: value}) + ) + obj_query = query_getter(id_attr, id_value) + try: + obj = related_queryset.get(obj_query) + except related_queryset.model.DoesNotExist: + raise forms.ValidationError("Invalid object") + filter_query &= models.Q(**{"{}_id".format(relation_name): obj.id}) + + return filter_query + + +class GenericRelationFilter(django_filters.CharFilter): + def __init__(self, relation_name, choices, *args, **kwargs): + self.relation_name = relation_name + self.choices = choices + super().__init__(*args, **kwargs) + + def filter(self, qs, value): + if not value: + return qs + try: + filter_query = get_generic_filter_query( + value, relation_name=self.relation_name, choices=self.choices + ) + except forms.ValidationError: + return qs.none() + return qs.filter(filter_query) + + +class GenericRelation(serializers.JSONField): + def __init__(self, choices, *args, **kwargs): + self.choices = choices + self.encoder = kwargs.setdefault("encoder", DjangoJSONEncoder) + super().__init__(*args, **kwargs) + + def to_representation(self, value): + if not value: + return + type = None + id = None + id_attr = None + for key, choice in self.choices.items(): + if isinstance(value, choice["queryset"].model): + type = key + id_attr = choice.get("id_attr", "id") + id = getattr(value, id_attr) + break + + if type: + return {"type": type, id_attr: id} + + def to_internal_value(self, v): + v = super().to_internal_value(v) + + if not v or not isinstance(v, dict): + raise serializers.ValidationError("Invalid data") + + try: + type = v["type"] + field = serializers.ChoiceField(choices=list(self.choices.keys())) + type = field.to_internal_value(type) + except (TypeError, KeyError, serializers.ValidationError): + raise serializers.ValidationError("Invalid type") + + conf = self.choices[type] + id_attr = conf.get("id_attr", "id") + id_field = conf.get("id_field", serializers.IntegerField(min_value=1)) + queryset = conf["queryset"] + try: + id_value = v[id_attr] + id_value = id_field.to_internal_value(id_value) + except (TypeError, KeyError, serializers.ValidationError): + raise serializers.ValidationError("Invalid {}".format(id_attr)) + + query_getter = conf.get( + "get_query", lambda attr, value: models.Q(**{attr: value}) + ) + query = query_getter(id_attr, id_value) + try: + obj = queryset.get(query) + except queryset.model.DoesNotExist: + raise serializers.ValidationError("Object not found") + + return obj diff --git a/api/funkwhale_api/common/filters.py b/api/funkwhale_api/common/filters.py index 364a1fba18a276cef05a34976a95749408132dc9..feca948bb6b71c6f388522ea5a1ca234e3b6b81d 100644 --- a/api/funkwhale_api/common/filters.py +++ b/api/funkwhale_api/common/filters.py @@ -15,7 +15,7 @@ class NoneObject(object): NONE = NoneObject() -NULL_BOOLEAN_CHOICES = [ +BOOLEAN_CHOICES = [ (True, True), ("true", True), ("True", True), @@ -26,6 +26,8 @@ NULL_BOOLEAN_CHOICES = [ ("False", False), ("0", False), ("no", False), +] +NULL_BOOLEAN_CHOICES = BOOLEAN_CHOICES + [ ("None", NONE), ("none", NONE), ("Null", NONE), @@ -76,10 +78,26 @@ def clean_null_boolean_filter(v): return v +def clean_boolean_filter(v): + return CoerceChoiceField(choices=BOOLEAN_CHOICES).clean(v) + + def get_null_boolean_filter(name): return {"handler": lambda v: Q(**{name: clean_null_boolean_filter(v)})} +def get_boolean_filter(name): + return {"handler": lambda v: Q(**{name: clean_boolean_filter(v)})} + + +def get_generic_relation_filter(relation_name, choices): + return { + "handler": lambda v: fields.get_generic_filter_query( + v, relation_name=relation_name, choices=choices + ) + } + + class DummyTypedMultipleChoiceField(forms.TypedMultipleChoiceField): def valid_value(self, value): return True @@ -142,7 +160,7 @@ class MutationFilter(filters.FilterSet): "domain": {"to": "created_by__domain__name__iexact"}, "is_approved": get_null_boolean_filter("is_approved"), "target": {"handler": filter_target}, - "is_applied": {"to": "is_applied"}, + "is_applied": get_boolean_filter("is_applied"), }, ) ) diff --git a/api/funkwhale_api/common/management/commands/load_test_data.py b/api/funkwhale_api/common/management/commands/load_test_data.py new file mode 100644 index 0000000000000000000000000000000000000000..9eab5ff083c7843f19e5846baf830f54d23bcc7c --- /dev/null +++ b/api/funkwhale_api/common/management/commands/load_test_data.py @@ -0,0 +1,325 @@ +import math +import random + +from django.conf import settings +from django.core.management.base import BaseCommand +from django.db import transaction + + +from funkwhale_api.federation import keys +from funkwhale_api.federation import models as federation_models +from funkwhale_api.music import models as music_models +from funkwhale_api.tags import models as tags_models +from funkwhale_api.users import models as users_models + + +BATCH_SIZE = 500 + + +def create_local_accounts(factories, count, dependencies): + password = factories["users.User"].build().password + users = factories["users.User"].build_batch(size=count) + for user in users: + # we set the hashed password by hand, because computing one for each user + # is CPU intensive + user.password = password + users = users_models.User.objects.bulk_create(users, batch_size=BATCH_SIZE) + actors = [] + domain = federation_models.Domain.objects.get_or_create( + name=settings.FEDERATION_HOSTNAME + )[0] + users = [u for u in users if u.pk] + private, public = keys.get_key_pair() + for user in users: + if not user.pk: + continue + actor = federation_models.Actor( + private_key=private.decode("utf-8"), + public_key=public.decode("utf-8"), + **users_models.get_actor_data(user.username, domain=domain) + ) + actors.append(actor) + actors = federation_models.Actor.objects.bulk_create(actors, batch_size=BATCH_SIZE) + for user, actor in zip(users, actors): + user.actor = actor + users_models.User.objects.bulk_update(users, ["actor"]) + return actors + + +def create_taggable_items(dependency): + def inner(factories, count, dependencies): + + objs = [] + tagged_objects = dependencies.get( + dependency, list(CONFIG_BY_ID[dependency]["model"].objects.all().only("pk")) + ) + tags = dependencies.get("tags", list(tags_models.Tag.objects.all().only("pk"))) + for i in range(count): + tag = random.choice(tags) + tagged_object = random.choice(tagged_objects) + objs.append( + factories["tags.TaggedItem"].build( + content_object=tagged_object, tag=tag + ) + ) + + return tags_models.TaggedItem.objects.bulk_create( + objs, batch_size=BATCH_SIZE, ignore_conflicts=True + ) + + return inner + + +CONFIG = [ + { + "id": "tracks", + "model": music_models.Track, + "factory": "music.Track", + "factory_kwargs": {"artist": None, "album": None}, + "depends_on": [ + {"field": "album", "id": "albums", "default_factor": 0.1}, + {"field": "artist", "id": "artists", "default_factor": 0.05}, + ], + }, + { + "id": "albums", + "model": music_models.Album, + "factory": "music.Album", + "factory_kwargs": {"artist": None}, + "depends_on": [{"field": "artist", "id": "artists", "default_factor": 0.3}], + }, + {"id": "artists", "model": music_models.Artist, "factory": "music.Artist"}, + { + "id": "local_accounts", + "model": federation_models.Actor, + "handler": create_local_accounts, + }, + { + "id": "local_libraries", + "model": music_models.Library, + "factory": "music.Library", + "factory_kwargs": {"actor": None}, + "depends_on": [{"field": "actor", "id": "local_accounts", "default_factor": 1}], + }, + { + "id": "local_uploads", + "model": music_models.Upload, + "factory": "music.Upload", + "factory_kwargs": {"import_status": "finished", "library": None, "track": None}, + "depends_on": [ + { + "field": "library", + "id": "local_libraries", + "default_factor": 0.05, + "queryset": music_models.Library.objects.all().select_related( + "actor__user" + ), + }, + {"field": "track", "id": "tracks", "default_factor": 1}, + ], + }, + {"id": "tags", "model": tags_models.Tag, "factory": "tags.Tag"}, + { + "id": "track_tags", + "model": tags_models.TaggedItem, + "queryset": tags_models.TaggedItem.objects.filter( + content_type__app_label="music", content_type__model="track" + ), + "handler": create_taggable_items("tracks"), + "depends_on": [ + { + "field": "tag", + "id": "tags", + "default_factor": 0.1, + "queryset": tags_models.Tag.objects.all(), + "set": False, + }, + { + "field": "content_object", + "id": "tracks", + "default_factor": 1, + "set": False, + }, + ], + }, + { + "id": "album_tags", + "model": tags_models.TaggedItem, + "queryset": tags_models.TaggedItem.objects.filter( + content_type__app_label="music", content_type__model="album" + ), + "handler": create_taggable_items("albums"), + "depends_on": [ + { + "field": "tag", + "id": "tags", + "default_factor": 0.1, + "queryset": tags_models.Tag.objects.all(), + "set": False, + }, + { + "field": "content_object", + "id": "albums", + "default_factor": 1, + "set": False, + }, + ], + }, + { + "id": "artist_tags", + "model": tags_models.TaggedItem, + "queryset": tags_models.TaggedItem.objects.filter( + content_type__app_label="music", content_type__model="artist" + ), + "handler": create_taggable_items("artists"), + "depends_on": [ + { + "field": "tag", + "id": "tags", + "default_factor": 0.1, + "queryset": tags_models.Tag.objects.all(), + "set": False, + }, + { + "field": "content_object", + "id": "artists", + "default_factor": 1, + "set": False, + }, + ], + }, +] + +CONFIG_BY_ID = {c["id"]: c for c in CONFIG} + + +class Rollback(Exception): + pass + + +def create_objects(row, factories, count, **factory_kwargs): + return factories[row["factory"]].build_batch(size=count, **factory_kwargs) + + +class Command(BaseCommand): + help = """ + Inject demo data into your database. Useful for load testing, or setting up a demo instance. + + Use with caution and only if you know what you are doing. + """ + + def add_arguments(self, parser): + parser.add_argument( + "--no-dry-run", + action="store_false", + dest="dry_run", + help="Commit the changes to the database", + ) + parser.add_argument( + "--create-dependencies", action="store_true", dest="create_dependencies" + ) + for row in CONFIG: + parser.add_argument( + "--{}".format(row["id"].replace("_", "-")), + dest=row["id"], + type=int, + help="Number of {} objects to create".format(row["id"]), + ) + dependencies = row.get("depends_on", []) + for dependency in dependencies: + parser.add_argument( + "--{}-{}-factor".format(row["id"], dependency["field"]), + dest="{}_{}_factor".format(row["id"], dependency["field"]), + type=float, + help="Number of {} objects to create per {} object".format( + dependency["id"], row["id"] + ), + ) + + def handle(self, *args, **options): + from django.apps import apps + from funkwhale_api import factories + + app_names = [app.name for app in apps.app_configs.values()] + factories.registry.autodiscover(app_names) + try: + return self.inner_handle(*args, **options) + except Rollback: + pass + + @transaction.atomic + def inner_handle(self, *args, **options): + results = {} + for row in CONFIG: + self.create_batch(row, results, options, count=options.get(row["id"])) + + self.stdout.write("\nFinal state of database:\n\n") + for row in CONFIG: + qs = row.get("queryset", row["model"].objects.all()) + total = qs.count() + self.stdout.write("- {} {} objects".format(total, row["id"])) + + self.stdout.write("") + if options["dry_run"]: + + self.stdout.write( + "Run this command with --no-dry-run to commit the changes to the database" + ) + raise Rollback() + + self.stdout.write(self.style.SUCCESS("Done!")) + + def create_batch(self, row, results, options, count): + from funkwhale_api import factories + + if row["id"] in results: + # already generated + return results[row["id"]] + if not count: + return [] + dependencies = row.get("depends_on", []) + create_dependencies = options.get("create_dependencies") + for dependency in dependencies: + dep_count = options.get(dependency["id"]) + if not create_dependencies and dep_count is None: + continue + if dep_count is None: + factor = options[ + "{}_{}_factor".format(row["id"], dependency["field"]) + ] or dependency.get("default_factor") + dep_count = math.ceil(factor * count) + + results[dependency["id"]] = self.create_batch( + CONFIG_BY_ID[dependency["id"]], results, options, count=dep_count + ) + self.stdout.write("Creating {} {}…".format(count, row["id"])) + handler = row.get("handler") + if handler: + objects = handler(factories.registry, count, dependencies=results) + else: + objects = create_objects( + row, factories.registry, count, **row.get("factory_kwargs", {}) + ) + for dependency in dependencies: + if not dependency.get("set", True): + continue + if create_dependencies: + candidates = results[dependency["id"]] + else: + # we use existing objects in the database + queryset = dependency.get( + "queryset", CONFIG_BY_ID[dependency["id"]]["model"].objects.all() + ) + candidates = list(queryset.values_list("pk", flat=True)) + picked_pks = [random.choice(candidates) for _ in objects] + picked_objects = {o.pk: o for o in queryset.filter(pk__in=picked_pks)} + for i, obj in enumerate(objects): + if create_dependencies: + value = random.choice(candidates) + else: + value = picked_objects[picked_pks[i]] + setattr(obj, dependency["field"], value) + if not handler: + objects = row["model"].objects.bulk_create(objects, batch_size=BATCH_SIZE) + results[row["id"]] = objects + return objects diff --git a/api/funkwhale_api/common/middleware.py b/api/funkwhale_api/common/middleware.py index c7bcf4b19b97126bb8e4681f30873076cf8f9e00..6866148b998ea4e3b837628420aae752ff0953c8 100644 --- a/api/funkwhale_api/common/middleware.py +++ b/api/funkwhale_api/common/middleware.py @@ -1,13 +1,16 @@ import html import requests +import time import xml.sax.saxutils from django import http from django.conf import settings from django.core.cache import caches from django import urls +from rest_framework import views from . import preferences +from . import throttling from . import utils EXCLUDED_PATHS = ["/api", "/federation", "/.well-known"] @@ -176,3 +179,66 @@ class DevHttpsMiddleware: lambda: request.__class__.get_host(request).replace(":80", ":443"), ) return self.get_response(request) + + +def monkey_patch_rest_initialize_request(): + """ + Rest framework use it's own APIRequest, meaning we can't easily + access our throttling info in the middleware. So me monkey patch the + `initialize_request` method from rest_framework to keep a link between both requests + """ + original = views.APIView.initialize_request + + def replacement(self, request, *args, **kwargs): + r = original(self, request, *args, **kwargs) + setattr(request, "_api_request", r) + return r + + setattr(views.APIView, "initialize_request", replacement) + + +monkey_patch_rest_initialize_request() + + +class ThrottleStatusMiddleware: + """ + Include useful information regarding throttling in API responses to + ensure clients can adapt. + """ + + def __init__(self, get_response): + self.get_response = get_response + + def __call__(self, request): + try: + response = self.get_response(request) + except throttling.TooManyRequests: + # manual throttling in non rest_framework view, we have to return + # the proper response ourselves + response = http.HttpResponse(status=429) + request_to_check = request + try: + request_to_check = request._api_request + except AttributeError: + pass + throttle_status = getattr(request_to_check, "_throttle_status", None) + if throttle_status: + response["X-RateLimit-Limit"] = str(throttle_status["num_requests"]) + response["X-RateLimit-Scope"] = str(throttle_status["scope"]) + response["X-RateLimit-Remaining"] = throttle_status["num_requests"] - len( + throttle_status["history"] + ) + response["X-RateLimit-Duration"] = str(throttle_status["duration"]) + if throttle_status["history"]: + now = int(time.time()) + # At this point, the client can send additional requests + oldtest_request = throttle_status["history"][-1] + remaining = throttle_status["duration"] - (now - int(oldtest_request)) + response["Retry-After"] = str(remaining) + # At this point, all Rate Limit is reset to 0 + latest_request = throttle_status["history"][0] + remaining = throttle_status["duration"] - (now - int(latest_request)) + response["X-RateLimit-Reset"] = str(now + remaining) + response["X-RateLimit-ResetSeconds"] = str(remaining) + + return response diff --git a/api/funkwhale_api/common/migrations/0003_cit_extension.py b/api/funkwhale_api/common/migrations/0003_cit_extension.py new file mode 100644 index 0000000000000000000000000000000000000000..94ca96c49ad7cfec25148bb08d1db088df517484 --- /dev/null +++ b/api/funkwhale_api/common/migrations/0003_cit_extension.py @@ -0,0 +1,22 @@ +# Generated by Django 2.0.2 on 2018-02-27 18:43 +from django.db import migrations +from django.contrib.postgres.operations import CITextExtension + + +class CustomCITExtension(CITextExtension): + def database_forwards(self, app_label, schema_editor, from_state, to_state): + check_sql = "SELECT 1 FROM pg_extension WHERE extname = 'citext'" + with schema_editor.connection.cursor() as cursor: + cursor.execute(check_sql) + result = cursor.fetchall() + + if result: + return + return super().database_forwards(app_label, schema_editor, from_state, to_state) + + +class Migration(migrations.Migration): + + dependencies = [("common", "0002_mutation")] + + operations = [CustomCITExtension()] diff --git a/api/funkwhale_api/common/models.py b/api/funkwhale_api/common/models.py index 52a02cad9433f4e79972b6cfe858534c830cb513..9fd1a3c7647922bcea73113bb9af45762a84a483 100644 --- a/api/funkwhale_api/common/models.py +++ b/api/funkwhale_api/common/models.py @@ -73,7 +73,7 @@ class LocalFromFidQuerySet: return self.filter(~query) -class MutationQuerySet(models.QuerySet): +class GenericTargetQuerySet(models.QuerySet): def get_for_target(self, target): content_type = ContentType.objects.get_for_model(target) return self.filter(target_content_type=content_type, target_id=target.pk) @@ -119,7 +119,7 @@ class Mutation(models.Model): ) target = GenericForeignKey("target_content_type", "target_id") - objects = MutationQuerySet.as_manager() + objects = GenericTargetQuerySet.as_manager() def get_federation_id(self): if self.fid: diff --git a/api/funkwhale_api/common/mutations.py b/api/funkwhale_api/common/mutations.py index dfc8ba85e525bcfe442739b97966c794b6fbb58f..13a5a97de03619f90b81e26b6ce8d6dabd502963 100644 --- a/api/funkwhale_api/common/mutations.py +++ b/api/funkwhale_api/common/mutations.py @@ -86,6 +86,7 @@ class MutationSerializer(serializers.Serializer): class UpdateMutationSerializer(serializers.ModelSerializer, MutationSerializer): serialized_relations = {} + previous_state_handlers = {} def __init__(self, *args, **kwargs): # we force partial mode, because update mutations are partial @@ -139,16 +140,20 @@ class UpdateMutationSerializer(serializers.ModelSerializer, MutationSerializer): return get_update_previous_state( obj, *list(validated_data.keys()), - serialized_relations=self.serialized_relations + serialized_relations=self.serialized_relations, + handlers=self.previous_state_handlers, ) -def get_update_previous_state(obj, *fields, serialized_relations={}): +def get_update_previous_state(obj, *fields, serialized_relations={}, handlers={}): if not fields: raise ValueError("You need to provide at least one field") state = {} for field in fields: + if field in handlers: + state[field] = handlers[field](obj) + continue value = getattr(obj, field) if isinstance(value, models.Model): # we store the related object id and repr for better UX diff --git a/api/funkwhale_api/common/preferences.py b/api/funkwhale_api/common/preferences.py index 527d00c0424c6e006d905be5e37d816f0e4eacbe..668a7c8976d2d784696f10fcaf8843e8e01c8d30 100644 --- a/api/funkwhale_api/common/preferences.py +++ b/api/funkwhale_api/common/preferences.py @@ -14,6 +14,11 @@ def get(pref): return manager[pref] +def all(): + manager = global_preferences_registry.manager() + return manager.all() + + def set(pref, value): manager = global_preferences_registry.manager() manager[pref] = value diff --git a/api/funkwhale_api/common/routers.py b/api/funkwhale_api/common/routers.py new file mode 100644 index 0000000000000000000000000000000000000000..11e9dec615394f44d52d2b92d9dd84bb1eb2e647 --- /dev/null +++ b/api/funkwhale_api/common/routers.py @@ -0,0 +1,7 @@ +from rest_framework.routers import SimpleRouter + + +class OptionalSlashRouter(SimpleRouter): + def __init__(self): + super().__init__() + self.trailing_slash = "/?" diff --git a/api/funkwhale_api/common/throttling.py b/api/funkwhale_api/common/throttling.py new file mode 100644 index 0000000000000000000000000000000000000000..fe4a5d93464f5c1560352e490ef9f79c6262acc9 --- /dev/null +++ b/api/funkwhale_api/common/throttling.py @@ -0,0 +1,151 @@ +import collections + +from django.core.cache import cache +from rest_framework import throttling as rest_throttling + +from django.conf import settings + + +def get_ident(request): + if hasattr(request, "user") and request.user.is_authenticated: + return {"type": "authenticated", "id": request.user.pk} + ident = rest_throttling.BaseThrottle().get_ident(request) + + return {"type": "anonymous", "id": ident} + + +def get_cache_key(scope, ident): + parts = ["throttling", scope, ident["type"], str(ident["id"])] + return ":".join(parts) + + +def get_scope_for_action_and_ident_type(action, ident_type, view_conf={}): + config = collections.ChainMap(view_conf, settings.THROTTLING_SCOPES) + + try: + action_config = config[action] + except KeyError: + action_config = config.get("*", {}) + + try: + return action_config[ident_type] + except KeyError: + return + + +def get_status(ident, now): + data = [] + throttle = FunkwhaleThrottle() + for key in sorted(settings.THROTTLING_RATES.keys()): + conf = settings.THROTTLING_RATES[key] + row_data = {"id": key, "rate": conf["rate"], "description": conf["description"]} + if conf["rate"]: + num_requests, duration = throttle.parse_rate(conf["rate"]) + history = cache.get(get_cache_key(key, ident)) or [] + + relevant_history = [h for h in history if h > now - duration] + row_data["limit"] = num_requests + row_data["duration"] = duration + row_data["remaining"] = num_requests - len(relevant_history) + if relevant_history and len(relevant_history) >= num_requests: + # At this point, the endpoint becomes available again + now_request = relevant_history[-1] + remaining = duration - (now - int(now_request)) + row_data["available"] = int(now + remaining) or None + row_data["available_seconds"] = int(remaining) or None + else: + row_data["available"] = None + row_data["available_seconds"] = None + + if relevant_history: + # At this point, all Rate Limit is reset to 0 + latest_request = relevant_history[0] + remaining = duration - (now - int(latest_request)) + row_data["reset"] = int(now + remaining) + row_data["reset_seconds"] = int(remaining) + else: + row_data["reset"] = None + row_data["reset_seconds"] = None + else: + row_data["limit"] = None + row_data["duration"] = None + row_data["remaining"] = None + row_data["available"] = None + row_data["available_seconds"] = None + row_data["reset"] = None + row_data["reset_seconds"] = None + + data.append(row_data) + + return data + + +class FunkwhaleThrottle(rest_throttling.SimpleRateThrottle): + def __init__(self): + pass + + def get_cache_key(self, request, view): + return get_cache_key(self.scope, self.ident) + + def allow_request(self, request, view): + self.request = request + self.ident = get_ident(request) + action = getattr(view, "action", "*") + view_scopes = getattr(view, "throttling_scopes", {}) + if view_scopes is None: + return True + self.scope = get_scope_for_action_and_ident_type( + action=action, ident_type=self.ident["type"], view_conf=view_scopes + ) + if not self.scope or self.scope not in settings.THROTTLING_RATES: + return True + self.rate = settings.THROTTLING_RATES[self.scope].get("rate") + self.num_requests, self.duration = self.parse_rate(self.rate) + self.request = request + + return super().allow_request(request, view) + + def attach_info(self): + info = { + "num_requests": self.num_requests, + "duration": self.duration, + "scope": self.scope, + "history": self.history or [], + "wait": self.wait(), + } + setattr(self.request, "_throttle_status", info) + + def throttle_success(self): + self.attach_info() + return super().throttle_success() + + def throttle_failure(self): + self.attach_info() + return super().throttle_failure() + + +class TooManyRequests(Exception): + pass + + +DummyView = collections.namedtuple("DummyView", "action throttling_scopes") + + +def check_request(request, scope): + """ + A simple wrapper around FunkwhaleThrottle for views that aren't API views + or cannot use rest_framework automatic throttling. + + Raise TooManyRequests if limit is reached. + """ + if not settings.THROTTLING_ENABLED: + return True + + view = DummyView( + action=scope, + throttling_scopes={scope: {"anonymous": scope, "authenticated": scope}}, + ) + throttle = FunkwhaleThrottle() + if not throttle.allow_request(request, view): + raise TooManyRequests() + return True diff --git a/api/funkwhale_api/common/utils.py b/api/funkwhale_api/common/utils.py index 7763e9b7f810090018fb9845a7fb390df812c0d9..55e4fdfbd8f2ae282ca35e187bb2515da3af6902 100644 --- a/api/funkwhale_api/common/utils.py +++ b/api/funkwhale_api/common/utils.py @@ -154,7 +154,7 @@ def order_for_search(qs, field): def recursive_getattr(obj, key, permissive=False): """ - Given a dictionary such as {'user': {'name': 'Bob'}} and + Given a dictionary such as {'user': {'name': 'Bob'}} or and object and a dotted string such as user.name, returns 'Bob'. If the value is not present, returns None @@ -162,7 +162,10 @@ def recursive_getattr(obj, key, permissive=False): v = obj for k in key.split("."): try: - v = v.get(k) + if hasattr(v, "get"): + v = v.get(k) + else: + v = getattr(v, k) except (TypeError, AttributeError): if not permissive: raise diff --git a/api/funkwhale_api/common/views.py b/api/funkwhale_api/common/views.py index db39c56d1afbb5eed7fa0ba7c89693fb32c57ab4..d197dbe9088541fdb159d20f5c95993af21b4abb 100644 --- a/api/funkwhale_api/common/views.py +++ b/api/funkwhale_api/common/views.py @@ -1,3 +1,6 @@ +import time + +from django.conf import settings from django.db import transaction from rest_framework.decorators import action @@ -5,6 +8,7 @@ from rest_framework import exceptions from rest_framework import mixins from rest_framework import permissions from rest_framework import response +from rest_framework import views from rest_framework import viewsets from . import filters @@ -13,6 +17,7 @@ from . import mutations from . import serializers from . import signals from . import tasks +from . import throttling from . import utils @@ -121,3 +126,17 @@ class MutationViewSet( new_is_approved=instance.is_approved, ) return response.Response({}, status=200) + + +class RateLimitView(views.APIView): + permission_classes = [] + throttle_classes = [] + + def get(self, request, *args, **kwargs): + ident = throttling.get_ident(request) + data = { + "enabled": settings.THROTTLING_ENABLED, + "ident": ident, + "scopes": throttling.get_status(ident, time.time()), + } + return response.Response(data, status=200) diff --git a/api/funkwhale_api/factories.py b/api/funkwhale_api/factories.py index 3517ea007981b4745887791a807f4bad32e30f99..f75f327f4476f478d5d60df4d8ee5491a32c6c10 100644 --- a/api/funkwhale_api/factories.py +++ b/api/funkwhale_api/factories.py @@ -1,5 +1,6 @@ import uuid import factory +import random import persisting_theory from django.conf import settings @@ -46,6 +47,268 @@ class NoUpdateOnCreate: return +TAGS_DATA = { + "type": [ + "acoustic", + "acid", + "ambient", + "alternative", + "brutalist", + "chill", + "club", + "cold", + "cool", + "contemporary", + "dark", + "doom", + "electro", + "folk", + "freestyle", + "fusion", + "garage", + "glitch", + "hard", + "healing", + "industrial", + "instrumental", + "hardcore", + "holiday", + "hot", + "liquid", + "modern", + "minimalist", + "new", + "parody", + "postmodern", + "progressive", + "smooth", + "symphonic", + "traditional", + "tribal", + "metal", + ], + "genre": [ + "blues", + "classical", + "chiptune", + "dance", + "disco", + "funk", + "jazz", + "house", + "hiphop", + "NewAge", + "pop", + "punk", + "rap", + "RnB", + "reggae", + "rock", + "soul", + "soundtrack", + "ska", + "swing", + "trance", + ], + "nationality": [ + "Afghan", + "Albanian", + "Algerian", + "American", + "Andorran", + "Angolan", + "Antiguans", + "Argentinean", + "Armenian", + "Australian", + "Austrian", + "Azerbaijani", + "Bahamian", + "Bahraini", + "Bangladeshi", + "Barbadian", + "Barbudans", + "Batswana", + "Belarusian", + "Belgian", + "Belizean", + "Beninese", + "Bhutanese", + "Bolivian", + "Bosnian", + "Brazilian", + "British", + "Bruneian", + "Bulgarian", + "Burkinabe", + "Burmese", + "Burundian", + "Cambodian", + "Cameroonian", + "Canadian", + "Cape Verdean", + "Central African", + "Chadian", + "Chilean", + "Chinese", + "Colombian", + "Comoran", + "Congolese", + "Costa Rican", + "Croatian", + "Cuban", + "Cypriot", + "Czech", + "Danish", + "Djibouti", + "Dominican", + "Dutch", + "East Timorese", + "Ecuadorean", + "Egyptian", + "Emirian", + "Equatorial Guinean", + "Eritrean", + "Estonian", + "Ethiopian", + "Fijian", + "Filipino", + "Finnish", + "French", + "Gabonese", + "Gambian", + "Georgian", + "German", + "Ghanaian", + "Greek", + "Grenadian", + "Guatemalan", + "Guinea-Bissauan", + "Guinean", + "Guyanese", + "Haitian", + "Herzegovinian", + "Honduran", + "Hungarian", + "I-Kiribati", + "Icelander", + "Indian", + "Indonesian", + "Iranian", + "Iraqi", + "Irish", + "Israeli", + "Italian", + "Ivorian", + "Jamaican", + "Japanese", + "Jordanian", + "Kazakhstani", + "Kenyan", + "Kittian and Nevisian", + "Kuwaiti", + "Kyrgyz", + "Laotian", + "Latvian", + "Lebanese", + "Liberian", + "Libyan", + "Liechtensteiner", + "Lithuanian", + "Luxembourger", + "Macedonian", + "Malagasy", + "Malawian", + "Malaysian", + "Maldivian", + "Malian", + "Maltese", + "Marshallese", + "Mauritanian", + "Mauritian", + "Mexican", + "Micronesian", + "Moldovan", + "Monacan", + "Mongolian", + "Moroccan", + "Mosotho", + "Motswana", + "Mozambican", + "Namibian", + "Nauruan", + "Nepalese", + "New Zealander", + "Ni-Vanuatu", + "Nicaraguan", + "Nigerian", + "Nigerien", + "North Korean", + "Northern Irish", + "Norwegian", + "Omani", + "Pakistani", + "Palauan", + "Panamanian", + "Papua New Guinean", + "Paraguayan", + "Peruvian", + "Polish", + "Portuguese", + "Qatari", + "Romanian", + "Russian", + "Rwandan", + "Saint Lucian", + "Salvadoran", + "Samoan", + "San Marinese", + "Sao Tomean", + "Saudi", + "Scottish", + "Senegalese", + "Serbian", + "Seychellois", + "Sierra Leonean", + "Singaporean", + "Slovakian", + "Slovenian", + "Solomon Islander", + "Somali", + "South African", + "South Korean", + "Spanish", + "Sri Lankan", + "Sudanese", + "Surinamer", + "Swazi", + "Swedish", + "Swiss", + "Syrian", + "Taiwanese", + "Tajik", + "Tanzanian", + "Thai", + "Togolese", + "Tongan", + "Trinidadian", + "Tunisian", + "Turkish", + "Tuvaluan", + "Ugandan", + "Ukrainian", + "Uruguayan", + "Uzbekistani", + "Venezuelan", + "Vietnamese", + "Welsh", + "Yemenite", + "Zambian", + "Zimbabwean", + ], +} + + class FunkwhaleProvider(internet_provider.Provider): """ Our own faker data generator, since built-in ones are sometimes @@ -61,5 +324,40 @@ class FunkwhaleProvider(internet_provider.Provider): path = path_generator() return "{}://{}/{}".format(protocol, domain, path) + def user_name(self): + u = super().user_name() + return "{}{}".format(u, random.randint(10, 999)) + + def music_genre(self): + return random.choice(TAGS_DATA["genre"]) + + def music_type(self): + return random.choice(TAGS_DATA["type"]) + + def music_nationality(self): + return random.choice(TAGS_DATA["nationality"]) + + def music_hashtag(self, prefix_length=4): + genre = self.music_genre() + prefixes = [genre] + nationality = False + while len(prefixes) < prefix_length: + if nationality: + t = "type" + else: + t = random.choice(["type", "nationality", "genre"]) + + if t == "nationality": + nationality = True + + choice = random.choice(TAGS_DATA[t]) + if choice in prefixes: + continue + prefixes.append(choice) + + return "".join( + [p.capitalize().strip().replace(" ", "") for p in reversed(prefixes)] + ) + factory.Faker.add_provider(FunkwhaleProvider) diff --git a/api/funkwhale_api/favorites/serializers.py b/api/funkwhale_api/favorites/serializers.py index 66e10a1b49275781fc5b68d785b613b6b46a2079..dd28dcd07cbaff216d9988f9641d890f069b0d50 100644 --- a/api/funkwhale_api/favorites/serializers.py +++ b/api/funkwhale_api/favorites/serializers.py @@ -1,6 +1,7 @@ from rest_framework import serializers from funkwhale_api.activity import serializers as activity_serializers +from funkwhale_api.federation import serializers as federation_serializers from funkwhale_api.music.serializers import TrackActivitySerializer, TrackSerializer from funkwhale_api.users.serializers import UserActivitySerializer, UserBasicSerializer @@ -27,10 +28,17 @@ class TrackFavoriteActivitySerializer(activity_serializers.ModelSerializer): class UserTrackFavoriteSerializer(serializers.ModelSerializer): track = TrackSerializer(read_only=True) user = UserBasicSerializer(read_only=True) + actor = serializers.SerializerMethodField() class Meta: model = models.TrackFavorite - fields = ("id", "user", "track", "creation_date") + fields = ("id", "user", "track", "creation_date", "actor") + actor = serializers.SerializerMethodField() + + def get_actor(self, obj): + actor = obj.user.actor + if actor: + return federation_serializers.APIActorSerializer(actor).data class UserTrackFavoriteWriteSerializer(serializers.ModelSerializer): diff --git a/api/funkwhale_api/favorites/urls.py b/api/funkwhale_api/favorites/urls.py index 28d0c867667d24c7daa8cd090b670e2060e5d147..51f3078038e882aeb90a41bf1f4a1c870e7d9d56 100644 --- a/api/funkwhale_api/favorites/urls.py +++ b/api/funkwhale_api/favorites/urls.py @@ -1,8 +1,8 @@ -from rest_framework import routers +from funkwhale_api.common import routers from . import views -router = routers.SimpleRouter() +router = routers.OptionalSlashRouter() router.register(r"tracks", views.TrackFavoriteViewSet, "tracks") urlpatterns = router.urls diff --git a/api/funkwhale_api/favorites/views.py b/api/funkwhale_api/favorites/views.py index dce285d85c65061fe81a86ceaa1886a6efe35ee7..7d1991bc67ebbba7f22932f91301265308ff9f32 100644 --- a/api/funkwhale_api/favorites/views.py +++ b/api/funkwhale_api/favorites/views.py @@ -22,7 +22,7 @@ class TrackFavoriteViewSet( filterset_class = filters.TrackFavoriteFilter serializer_class = serializers.UserTrackFavoriteSerializer - queryset = models.TrackFavorite.objects.all().select_related("user") + queryset = models.TrackFavorite.objects.all().select_related("user__actor") permission_classes = [ oauth_permissions.ScopePermission, permissions.OwnerPermission, @@ -54,7 +54,7 @@ class TrackFavoriteViewSet( ) tracks = Track.objects.with_playable_uploads( music_utils.get_actor_from_request(self.request) - ).select_related("artist", "album__artist") + ).select_related("artist", "album__artist", "attributed_to") queryset = queryset.prefetch_related(Prefetch("track", queryset=tracks)) return queryset diff --git a/api/funkwhale_api/federation/activity.py b/api/funkwhale_api/federation/activity.py index 979b8aa1befb356e1c423163d1d863de96393b30..e3fb7be3200c97f3d70a9b89494f6a7754f53b41 100644 --- a/api/funkwhale_api/federation/activity.py +++ b/api/funkwhale_api/federation/activity.py @@ -1,5 +1,6 @@ import uuid import logging +import urllib.parse from django.core.cache import cache from django.conf import settings @@ -122,32 +123,38 @@ def receive(activity, on_behalf_of): from . import serializers from . import tasks from .routes import inbox + from funkwhale_api.moderation import mrf + logger.debug( + "[federation] Received activity from %s : %s", on_behalf_of.fid, activity + ) # we ensure the activity has the bare minimum structure before storing # it in our database serializer = serializers.BaseActivitySerializer( data=activity, context={"actor": on_behalf_of, "local_recipients": True} ) serializer.is_valid(raise_exception=True) - if not inbox.get_matching_handlers(activity): - # discard unhandlable activity - return - if should_reject( - fid=serializer.validated_data.get("id"), - actor_id=serializer.validated_data["actor"].fid, - payload=activity, - ): + payload, updated = mrf.inbox.apply(activity, sender_id=on_behalf_of.fid) + if not payload: logger.info( - "[federation] Discarding activity due to instance policies %s", + "[federation] Discarding activity due to mrf %s", serializer.validated_data.get("id"), ) return + + if not inbox.get_matching_handlers(payload): + # discard unhandlable activity + logger.debug( + "[federation] No matching route found for activity, discarding: %s", payload + ) + return + try: - copy = serializer.save() + copy = serializer.save(payload=payload, type=payload["type"]) except IntegrityError: logger.warning( - "[federation] Discarding already elivered activity %s", + "[federation] Discarding already delivered activity %s", serializer.validated_data.get("id"), ) return @@ -283,9 +290,19 @@ class OutboxRouter(Router): and may yield data that should be persisted in the Activity model for further delivery. """ + from funkwhale_api.common import preferences from . import models from . import tasks + allow_list_enabled = preferences.get("moderation__allow_list_enabled") + allowed_domains = None + if allow_list_enabled: + allowed_domains = set( + models.Domain.objects.filter(allowed=True).values_list( + "name", flat=True + ) + ) + for route, handler in self.routes: if not match_route(route, routing): continue @@ -314,10 +331,10 @@ class OutboxRouter(Router): a = models.Activity(**activity_data) a.uuid = uuid.uuid4() to_inbox_items, to_deliveries, new_to = prepare_deliveries_and_inbox_items( - to, "to" + to, "to", allowed_domains=allowed_domains ) cc_inbox_items, cc_deliveries, new_cc = prepare_deliveries_and_inbox_items( - cc, "cc" + cc, "cc", allowed_domains=allowed_domains ) if not any( [to_inbox_items, to_deliveries, cc_inbox_items, cc_deliveries] @@ -368,13 +385,23 @@ class OutboxRouter(Router): def match_route(route, payload): for key, value in route.items(): payload_value = recursive_getattr(payload, key, permissive=True) - if payload_value != value: + if isinstance(value, list): + if payload_value not in value: + return False + elif payload_value != value: return False return True -def prepare_deliveries_and_inbox_items(recipient_list, type): +def is_allowed_url(url, allowed_domains): + return ( + allowed_domains is None + or urllib.parse.urlparse(url).hostname in allowed_domains + ) + + +def prepare_deliveries_and_inbox_items(recipient_list, type, allowed_domains=None): """ Given a list of recipients ( either actor instances, public adresses, a dictionnary with a "type" and "target" @@ -384,10 +411,12 @@ def prepare_deliveries_and_inbox_items(recipient_list, type): """ from . import models + if allowed_domains is not None: + allowed_domains = set(allowed_domains) + allowed_domains.add(settings.FEDERATION_HOSTNAME) local_recipients = set() remote_inbox_urls = set() urls = [] - for r in recipient_list: if isinstance(r, models.Actor): if r.is_local: @@ -424,15 +453,39 @@ def prepare_deliveries_and_inbox_items(recipient_list, type): .exclude(actor__domain=None) ) ) + followed_domains = list(follows.values_list("actor__domain_id", flat=True)) actors = models.Actor.objects.filter( - managed_domains__name__in=follows.values_list( - "actor__domain_id", flat=True - ) + managed_domains__name__in=followed_domains ) - values = actors.values("shared_inbox_url", "inbox_url") + values = actors.values("shared_inbox_url", "inbox_url", "domain_id") + handled_domains = set() for v in values: remote_inbox_urls.add(v["shared_inbox_url"] or v["inbox_url"]) - deliveries = [models.Delivery(inbox_url=url) for url in remote_inbox_urls] + handled_domains.add(v["domain_id"]) + + if len(handled_domains) >= len(followed_domains): + continue + + # for all remaining domains (probably non-funkwhale instances, with no + # service actors), we also pick the latest known actor per domain and send the message + # there instead + remaining_domains = models.Domain.objects.exclude(name__in=handled_domains) + remaining_domains = remaining_domains.filter(name__in=followed_domains) + actors = models.Actor.objects.filter(domain__in=remaining_domains) + actors = ( + actors.order_by("domain_id", "-last_fetch_date") + .distinct("domain_id") + .values("shared_inbox_url", "inbox_url") + ) + for v in actors: + remote_inbox_urls.add(v["shared_inbox_url"] or v["inbox_url"]) + + deliveries = [ + models.Delivery(inbox_url=url) + for url in remote_inbox_urls + if is_allowed_url(url, allowed_domains) + ] + urls = [url for url in urls if is_allowed_url(url, allowed_domains)] inbox_items = [ models.InboxItem(actor=actor, type=type) for actor in local_recipients ] diff --git a/api/funkwhale_api/federation/admin.py b/api/funkwhale_api/federation/admin.py index 263af80cb175e1235ebfd654a3daf142c19ea927..8e66708cfcd13054ff57f5477a3feef9788a446b 100644 --- a/api/funkwhale_api/federation/admin.py +++ b/api/funkwhale_api/federation/admin.py @@ -26,7 +26,8 @@ redeliver_activities.short_description = "Redeliver" @admin.register(models.Domain) class DomainAdmin(admin.ModelAdmin): - list_display = ["name", "creation_date"] + list_display = ["name", "allowed", "creation_date"] + list_filter = ["allowed"] search_fields = ["name"] @@ -40,7 +41,7 @@ class FetchAdmin(admin.ModelAdmin): @admin.register(models.Activity) class ActivityAdmin(admin.ModelAdmin): - list_display = ["type", "fid", "url", "actor", "creation_date"] + list_display = ["uuid", "type", "fid", "url", "actor", "creation_date"] search_fields = ["payload", "fid", "url", "actor__domain__name"] list_filter = ["type", "actor__domain__name"] actions = [redeliver_activities] diff --git a/api/funkwhale_api/federation/api_urls.py b/api/funkwhale_api/federation/api_urls.py index bd2258de961f8d0c80f8b2a3b73d5dd6a9a8ca07..896fa2430448bcb275e05688b9863dff0ed3528e 100644 --- a/api/funkwhale_api/federation/api_urls.py +++ b/api/funkwhale_api/federation/api_urls.py @@ -1,8 +1,8 @@ -from rest_framework import routers +from funkwhale_api.common import routers from . import api_views -router = routers.SimpleRouter() +router = routers.OptionalSlashRouter() router.register(r"fetches", api_views.FetchViewSet, "fetches") router.register(r"follows/library", api_views.LibraryFollowViewSet, "library-follows") router.register(r"inbox", api_views.InboxItemViewSet, "inbox") diff --git a/api/funkwhale_api/federation/authentication.py b/api/funkwhale_api/federation/authentication.py index 75e0332421feb115eac1ee58acc2906b2ae06ae5..123d7bd89679ae0ece57b49b3f6f21fcfcc17193 100644 --- a/api/funkwhale_api/federation/authentication.py +++ b/api/funkwhale_api/federation/authentication.py @@ -1,13 +1,14 @@ import cryptography import logging import datetime - +import urllib.parse from django.contrib.auth.models import AnonymousUser from django.utils import timezone from rest_framework import authentication, exceptions as rest_exceptions +from funkwhale_api.common import preferences from funkwhale_api.moderation import models as moderation_models -from . import actors, exceptions, keys, signing, tasks, utils +from . import actors, exceptions, keys, models, signing, tasks, utils logger = logging.getLogger(__name__) @@ -37,6 +38,16 @@ class SignatureAuthentication(authentication.BaseAuthentication): if policies.exists(): raise exceptions.BlockedActorOrDomain() + if request.method.lower() == "get" and preferences.get( + "moderation__allow_list_enabled" + ): + # Only GET requests because POST requests with messages will be handled through + # MRF + domain = urllib.parse.urlparse(actor_url).hostname + allowed = models.Domain.objects.filter(name=domain, allowed=True).exists() + if not allowed: + raise exceptions.BlockedActorOrDomain() + try: actor = actors.get_actor(actor_url) except Exception as e: diff --git a/api/funkwhale_api/federation/contexts.py b/api/funkwhale_api/federation/contexts.py index 0873bcd46b04d715e861a9244a1327187d50167d..b3fc112f0e0c233595ba9a63d4af9bf6bee73d2a 100644 --- a/api/funkwhale_api/federation/contexts.py +++ b/api/funkwhale_api/federation/contexts.py @@ -214,6 +214,7 @@ CONTEXTS = [ "shares": {"@id": "as:shares", "@type": "@id"}, # Added manually "manuallyApprovesFollowers": "as:manuallyApprovesFollowers", + "Hashtag": "as:Hashtag", } }, }, diff --git a/api/funkwhale_api/federation/dynamic_preferences_registry.py b/api/funkwhale_api/federation/dynamic_preferences_registry.py index 01bfdf72744b51d6d9c86638c2a40004cbc6171f..cf1faa7048141101547c71165da07e416690dbc2 100644 --- a/api/funkwhale_api/federation/dynamic_preferences_registry.py +++ b/api/funkwhale_api/federation/dynamic_preferences_registry.py @@ -14,7 +14,7 @@ class MusicCacheDuration(types.IntPreference): default = 60 * 24 * 2 verbose_name = "Music cache duration" help_text = ( - "How much minutes do you want to keep a copy of federated tracks" + "How many minutes do you want to keep a copy of federated tracks " "locally? Federated files that were not listened in this interval " "will be erased and refetched from the remote on the next listening." ) @@ -38,7 +38,7 @@ class CollectionPageSize(preferences.DefaultFromSettingMixin, types.IntPreferenc name = "collection_page_size" setting = "FEDERATION_COLLECTION_PAGE_SIZE" verbose_name = "Federation collection page size" - help_text = "How much items to display in ActivityPub collections." + help_text = "How many items to display in ActivityPub collections." field_kwargs = {"required": False} @@ -49,7 +49,7 @@ class ActorFetchDelay(preferences.DefaultFromSettingMixin, types.IntPreference): setting = "FEDERATION_ACTOR_FETCH_DELAY" verbose_name = "Federation actor fetch delay" help_text = ( - "How much minutes to wait before refetching actors on " + "How many minutes to wait before refetching actors on " "request authentication." ) field_kwargs = {"required": False} diff --git a/api/funkwhale_api/federation/factories.py b/api/funkwhale_api/federation/factories.py index 14bb4e8c96ea150a09fbf95bdbbbcb021f270a8c..95d68779b9b2facd7eb33df9c1b7913c691c760c 100644 --- a/api/funkwhale_api/federation/factories.py +++ b/api/funkwhale_api/federation/factories.py @@ -70,6 +70,7 @@ def create_user(actor): class DomainFactory(NoUpdateOnCreate, factory.django.DjangoModelFactory): name = factory.Faker("domain_name") nodeinfo_fetch_date = factory.LazyFunction(lambda: timezone.now()) + allowed = None class Meta: model = "federation.Domain" diff --git a/api/funkwhale_api/federation/migrations/0019_auto_20190611_0851.py b/api/funkwhale_api/federation/migrations/0019_auto_20190611_0851.py new file mode 100644 index 0000000000000000000000000000000000000000..4ae5e31fb24316c27dc032e8f89a22a6b1179c24 --- /dev/null +++ b/api/funkwhale_api/federation/migrations/0019_auto_20190611_0851.py @@ -0,0 +1,19 @@ +# Generated by Django 2.2.2 on 2019-06-11 08:51 + +import django.contrib.postgres.fields.jsonb +import django.core.serializers.json +from django.db import migrations, models +import funkwhale_api.federation.models + + +class Migration(migrations.Migration): + + dependencies = [("federation", "0018_fetch")] + + operations = [ + migrations.AddField( + model_name="domain", + name="allowed", + field=models.BooleanField(default=None, null=True), + ) + ] diff --git a/api/funkwhale_api/federation/migrations/0020_auto_20190730_0846.py b/api/funkwhale_api/federation/migrations/0020_auto_20190730_0846.py new file mode 100644 index 0000000000000000000000000000000000000000..efed1d306afa2450b600d33fbc117b3e8420ce26 --- /dev/null +++ b/api/funkwhale_api/federation/migrations/0020_auto_20190730_0846.py @@ -0,0 +1,31 @@ +# Generated by Django 2.2.3 on 2019-07-30 08:46 + +import django.contrib.postgres.fields.jsonb +import django.core.serializers.json +from django.db import migrations +import funkwhale_api.federation.models + + +class Migration(migrations.Migration): + + dependencies = [ + ('federation', '0019_auto_20190611_0851'), + ] + + operations = [ + migrations.AlterField( + model_name='activity', + name='payload', + field=django.contrib.postgres.fields.jsonb.JSONField(blank=True, default=funkwhale_api.federation.models.empty_dict, encoder=django.core.serializers.json.DjangoJSONEncoder, max_length=50000), + ), + migrations.AlterField( + model_name='fetch', + name='detail', + field=django.contrib.postgres.fields.jsonb.JSONField(blank=True, default=funkwhale_api.federation.models.empty_dict, encoder=django.core.serializers.json.DjangoJSONEncoder, max_length=50000), + ), + migrations.AlterField( + model_name='librarytrack', + name='metadata', + field=django.contrib.postgres.fields.jsonb.JSONField(blank=True, default=funkwhale_api.federation.models.empty_dict, encoder=django.core.serializers.json.DjangoJSONEncoder, max_length=10000), + ), + ] diff --git a/api/funkwhale_api/federation/models.py b/api/funkwhale_api/federation/models.py index d530c62df1007d4012609eec6fd530ed347cacb2..c734939b3fb1c56dd30c224ad66a3838afe943ac 100644 --- a/api/funkwhale_api/federation/models.py +++ b/api/funkwhale_api/federation/models.py @@ -21,6 +21,7 @@ from . import utils as federation_utils TYPE_CHOICES = [ ("Person", "Person"), + ("Tombstone", "Tombstone"), ("Application", "Application"), ("Group", "Group"), ("Organization", "Organization"), @@ -118,6 +119,9 @@ class Domain(models.Model): null=True, blank=True, ) + # are interactions with this domain allowed (only applies when allow-listing is on) + allowed = models.BooleanField(default=None, null=True) + objects = DomainQuerySet.as_manager() def __str__(self): @@ -201,6 +205,10 @@ class Actor(models.Model): class Meta: unique_together = ["domain", "preferred_username"] + verbose_name = "Account" + + def get_moderation_url(self): + return "/manage/moderation/accounts/{}".format(self.full_username) @property def webfinger_subject(self): @@ -245,6 +253,7 @@ class Actor(models.Model): def get_stats(self): from funkwhale_api.music import models as music_models + from funkwhale_api.moderation import models as moderation_models data = Actor.objects.filter(pk=self.pk).aggregate( outbox_activities=models.Count("outbox_activities", distinct=True), @@ -257,6 +266,7 @@ class Actor(models.Model): data["artists"] = music_models.Artist.objects.filter( from_activity__actor=self.pk ).count() + data["reports"] = moderation_models.Report.objects.get_for_target(self).count() data["albums"] = music_models.Album.objects.filter( from_activity__actor=self.pk ).count() diff --git a/api/funkwhale_api/federation/mrf_policies.py b/api/funkwhale_api/federation/mrf_policies.py new file mode 100644 index 0000000000000000000000000000000000000000..220c0d3cba65948235c3ebd0afd707ccb226ed72 --- /dev/null +++ b/api/funkwhale_api/federation/mrf_policies.py @@ -0,0 +1,15 @@ +from funkwhale_api.moderation import mrf + + +from . import activity + + +@mrf.inbox.register(name="instance_policies") +def instance_policies(payload, **kwargs): + reject = activity.should_reject( + fid=payload.get("id"), + actor_id=kwargs.get("sender_id", payload.get("id")), + payload=payload, + ) + if reject: + raise mrf.Discard() diff --git a/api/funkwhale_api/federation/routes.py b/api/funkwhale_api/federation/routes.py index bae2812cea0c678d1024e96a4b50233528cb8e2e..41497e9f232f8bc8e29e583ff3859ca7d1633738 100644 --- a/api/funkwhale_api/federation/routes.py +++ b/api/funkwhale_api/federation/routes.py @@ -4,6 +4,7 @@ from funkwhale_api.music import models as music_models from . import activity from . import actors +from . import models from . import serializers logger = logging.getLogger(__name__) @@ -380,3 +381,63 @@ def outbox_update_artist(context): to=[activity.PUBLIC_ADDRESS, {"type": "instances_with_followers"}], ), } + + +@outbox.register( + { + "type": "Delete", + "object.type": [ + "Tombstone", + "Actor", + "Person", + "Application", + "Organization", + "Service", + "Group", + ], + } +) +def outbox_delete_actor(context): + actor = context["actor"] + serializer = serializers.ActivitySerializer( + {"type": "Delete", "object": {"type": actor.type, "id": actor.fid}} + ) + yield { + "type": "Delete", + "actor": actor, + "payload": with_recipients( + serializer.data, + to=[activity.PUBLIC_ADDRESS, {"type": "instances_with_followers"}], + ), + } + + +@inbox.register( + { + "type": "Delete", + "object.type": [ + "Tombstone", + "Actor", + "Person", + "Application", + "Organization", + "Service", + "Group", + ], + } +) +def inbox_delete_actor(payload, context): + actor = context["actor"] + serializer = serializers.ActorDeleteSerializer(data=payload) + if not serializer.is_valid(): + logger.info("Skipped actor %s deletion, invalid payload", actor.fid) + return + + deleted_fid = serializer.validated_data["fid"] + try: + # ensure the actor only can delete itself, and is a remote one + actor = models.Actor.objects.local(False).get(fid=deleted_fid, pk=actor.pk) + except models.Actor.DoesNotExist: + logger.warn("Cannot delete actor %s, no matching object found", actor.fid) + return + actor.delete() diff --git a/api/funkwhale_api/federation/serializers.py b/api/funkwhale_api/federation/serializers.py index f7210e324bc2092b99a4e692b4d63bdc43ad7978..697c2acc9152305227a1714e072ebea8efa4cf2b 100644 --- a/api/funkwhale_api/federation/serializers.py +++ b/api/funkwhale_api/federation/serializers.py @@ -11,6 +11,7 @@ from funkwhale_api.common import utils as funkwhale_utils from funkwhale_api.music import licenses from funkwhale_api.music import models as music_models from funkwhale_api.music import tasks as music_tasks +from funkwhale_api.tags import models as tags_models from . import activity, actors, contexts, jsonld, models, tasks, utils @@ -778,9 +779,24 @@ MUSIC_ENTITY_JSONLD_MAPPING = { "published": jsonld.first_val(contexts.AS.published), "musicbrainzId": jsonld.first_val(contexts.FW.musicbrainzId), "attributedTo": jsonld.first_id(contexts.AS.attributedTo), + "tags": jsonld.raw(contexts.AS.tag), } +class TagSerializer(jsonld.JsonLdSerializer): + type = serializers.ChoiceField(choices=[contexts.AS.Hashtag]) + name = serializers.CharField(max_length=100) + + class Meta: + jsonld_mapping = {"name": jsonld.first_val(contexts.AS.name)} + + def validate_name(self, value): + if value.startswith("#"): + # remove trailing # + value = value[1:] + return value + + class MusicEntitySerializer(jsonld.JsonLdSerializer): id = serializers.URLField(max_length=500) published = serializers.DateTimeField() @@ -788,6 +804,9 @@ class MusicEntitySerializer(jsonld.JsonLdSerializer): name = serializers.CharField(max_length=1000) attributedTo = serializers.URLField(max_length=500, allow_null=True, required=False) updateable_fields = [] + tags = serializers.ListField( + child=TagSerializer(), min_length=0, required=False, allow_null=True + ) def update(self, instance, validated_data): attributed_to_fid = validated_data.get("attributedTo") @@ -797,10 +816,18 @@ class MusicEntitySerializer(jsonld.JsonLdSerializer): self.updateable_fields, validated_data, instance ) if updated_fields: - return music_tasks.update_library_entity(instance, updated_fields) + music_tasks.update_library_entity(instance, updated_fields) + tags = [t["name"] for t in validated_data.get("tags", []) or []] + tags_models.set_tags(instance, *tags) return instance + def get_tags_repr(self, instance): + return [ + {"type": "Hashtag", "name": "#{}".format(tag)} + for tag in sorted(instance.tagged_items.values_list("tag__name", flat=True)) + ] + class ArtistSerializer(MusicEntitySerializer): updateable_fields = [ @@ -823,6 +850,7 @@ class ArtistSerializer(MusicEntitySerializer): "attributedTo": instance.attributed_to.fid if instance.attributed_to else None, + "tag": self.get_tags_repr(instance), } if self.context.get("include_ap_context", self.parent is None): @@ -872,6 +900,7 @@ class AlbumSerializer(MusicEntitySerializer): "attributedTo": instance.attributed_to.fid if instance.attributed_to else None, + "tag": self.get_tags_repr(instance), } if instance.cover: d["cover"] = { @@ -941,6 +970,7 @@ class TrackSerializer(MusicEntitySerializer): "attributedTo": instance.attributed_to.fid if instance.attributed_to else None, + "tag": self.get_tags_repr(instance), } if self.context.get("include_ap_context", self.parent is None): @@ -981,7 +1011,6 @@ class TrackSerializer(MusicEntitySerializer): if not url: continue references[url] = actors.get_actor(url) - metadata = music_tasks.federation_audio_track_to_metadata( validated_data, references ) @@ -990,6 +1019,7 @@ class TrackSerializer(MusicEntitySerializer): if from_activity: metadata["from_activity_id"] = from_activity.pk track = music_tasks.get_track_from_import_metadata(metadata, update_cover=True) + return track def update(self, obj, validated_data): @@ -1108,6 +1138,13 @@ class UploadSerializer(jsonld.JsonLdSerializer): return d +class ActorDeleteSerializer(jsonld.JsonLdSerializer): + fid = serializers.URLField(max_length=500) + + class Meta: + jsonld_mapping = {"fid": jsonld.first_id(contexts.AS.object)} + + class NodeInfoLinkSerializer(serializers.Serializer): href = serializers.URLField() rel = serializers.URLField() diff --git a/api/funkwhale_api/federation/tasks.py b/api/funkwhale_api/federation/tasks.py index f6471ef215f9a2528786407f7b24a29045e008e2..163ac778852e78dea1b91c3ee20f3cb8eefef64c 100644 --- a/api/funkwhale_api/federation/tasks.py +++ b/api/funkwhale_api/federation/tasks.py @@ -190,7 +190,11 @@ def update_domain_nodeinfo(domain): now = timezone.now() try: nodeinfo = {"status": "ok", "payload": fetch_nodeinfo(domain.name)} - except (requests.RequestException, serializers.serializers.ValidationError) as e: + except ( + requests.RequestException, + serializers.serializers.ValidationError, + ValueError, + ) as e: nodeinfo = {"status": "error", "error": str(e)} service_actor_id = common_utils.recursive_getattr( diff --git a/api/funkwhale_api/federation/urls.py b/api/funkwhale_api/federation/urls.py index f7d5006da0cdf50df601da96e78fc5b8e97d00ca..a193087dbfcdd08eb2e4b14c9748da1eec36dd83 100644 --- a/api/funkwhale_api/federation/urls.py +++ b/api/funkwhale_api/federation/urls.py @@ -9,6 +9,7 @@ music_router = routers.SimpleRouter(trailing_slash=False) router.register(r"federation/shared", views.SharedViewSet, "shared") router.register(r"federation/actors", views.ActorViewSet, "actors") router.register(r"federation/edits", views.EditViewSet, "edits") +router.register(r"federation/reports", views.ReportViewSet, "reports") router.register(r".well-known", views.WellKnownViewSet, "well-known") music_router.register(r"libraries", views.MusicLibraryViewSet, "libraries") diff --git a/api/funkwhale_api/federation/utils.py b/api/funkwhale_api/federation/utils.py index 8f73c57350a2290f4fea9e106859b460052a24c0..c2eacfe9d658ee8dd48b3bfe144e0d828de1a279 100644 --- a/api/funkwhale_api/federation/utils.py +++ b/api/funkwhale_api/federation/utils.py @@ -4,7 +4,7 @@ from django.conf import settings from django.db.models import Q from funkwhale_api.common import session -from funkwhale_api.moderation import models as moderation_models +from funkwhale_api.moderation import mrf from . import exceptions from . import signing @@ -64,10 +64,10 @@ def slugify_username(username): def retrieve_ap_object( fid, actor, serializer_class=None, queryset=None, apply_instance_policies=True ): - from . import activity - - policies = moderation_models.InstancePolicy.objects.active().filter(block_all=True) - if apply_instance_policies and policies.matching_url(fid): + # we have a duplicate check here because it's less expensive to do those checks + # twice than to trigger a HTTP request + payload, updated = mrf.inbox.apply({"id": fid}) + if not payload: raise exceptions.BlockedActorOrDomain() if queryset: try: @@ -94,15 +94,12 @@ def retrieve_ap_object( response.raise_for_status() data = response.json() - # we match against moderation policies here again, because the FID of the returned - # object may not be the same as the URL used to access it - try: - id = data["id"] - except KeyError: - pass - else: - if apply_instance_policies and activity.should_reject(fid=id, payload=data): - raise exceptions.BlockedActorOrDomain() + # we match against mrf here again, because new data may yield different + # results + data, updated = mrf.inbox.apply(data) + if not data: + raise exceptions.BlockedActorOrDomain() + if not serializer_class: return data serializer = serializer_class(data=data, context={"fetch_actor": actor}) @@ -131,3 +128,32 @@ def is_local(url): return url.startswith("http://{}/".format(d)) or url.startswith( "https://{}/".format(d) ) + + +def get_actor_data_from_username(username): + + parts = username.split("@") + + return { + "username": parts[0], + "domain": parts[1] if len(parts) > 1 else settings.FEDERATION_HOSTNAME, + } + + +def get_actor_from_username_data_query(field, data): + if not data: + return Q(**{field: None}) + if field: + return Q( + **{ + "{}__preferred_username__iexact".format(field): data["username"], + "{}__domain__name__iexact".format(field): data["domain"], + } + ) + else: + return Q( + **{ + "preferred_username__iexact": data["username"], + "domain__name__iexact": data["domain"], + } + ) diff --git a/api/funkwhale_api/federation/views.py b/api/funkwhale_api/federation/views.py index 97bcebbfb374d5a765f30386ab430935d84f68f5..85594e02bfb55a086328f08e546117490b9b6dc4 100644 --- a/api/funkwhale_api/federation/views.py +++ b/api/funkwhale_api/federation/views.py @@ -2,17 +2,28 @@ from django import forms from django.core import paginator from django.http import HttpResponse from django.urls import reverse -from rest_framework import exceptions, mixins, response, viewsets +from rest_framework import exceptions, mixins, permissions, response, viewsets from rest_framework.decorators import action from funkwhale_api.common import preferences +from funkwhale_api.moderation import models as moderation_models from funkwhale_api.music import models as music_models from funkwhale_api.music import utils as music_utils from . import activity, authentication, models, renderers, serializers, utils, webfinger +class AuthenticatedIfAllowListEnabled(permissions.BasePermission): + def has_permission(self, request, view): + allow_list_enabled = preferences.get("moderation__allow_list_enabled") + if not allow_list_enabled: + return True + return bool(request.actor) + + class FederationMixin(object): + permission_classes = [AuthenticatedIfAllowListEnabled] + def dispatch(self, request, *args, **kwargs): if not preferences.get("federation__enabled"): return HttpResponse(status=405) @@ -20,7 +31,6 @@ class FederationMixin(object): class SharedViewSet(FederationMixin, viewsets.GenericViewSet): - permission_classes = [] authentication_classes = [authentication.SignatureAuthentication] renderer_classes = renderers.get_ap_renderers() @@ -38,7 +48,6 @@ class SharedViewSet(FederationMixin, viewsets.GenericViewSet): class ActorViewSet(FederationMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet): lookup_field = "preferred_username" authentication_classes = [authentication.SignatureAuthentication] - permission_classes = [] renderer_classes = renderers.get_ap_renderers() queryset = models.Actor.objects.local().select_related("user") serializer_class = serializers.ActorSerializer @@ -73,12 +82,20 @@ class ActorViewSet(FederationMixin, mixins.RetrieveModelMixin, viewsets.GenericV class EditViewSet(FederationMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet): lookup_field = "uuid" authentication_classes = [authentication.SignatureAuthentication] - permission_classes = [] renderer_classes = renderers.get_ap_renderers() # queryset = common_models.Mutation.objects.local().select_related() # serializer_class = serializers.ActorSerializer +class ReportViewSet( + FederationMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet +): + lookup_field = "uuid" + authentication_classes = [authentication.SignatureAuthentication] + renderer_classes = renderers.get_ap_renderers() + queryset = moderation_models.Report.objects.none() + + class WellKnownViewSet(viewsets.GenericViewSet): authentication_classes = [] permission_classes = [] @@ -146,7 +163,6 @@ class MusicLibraryViewSet( FederationMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet ): authentication_classes = [authentication.SignatureAuthentication] - permission_classes = [] renderer_classes = renderers.get_ap_renderers() serializer_class = serializers.LibrarySerializer queryset = music_models.Library.objects.all().select_related("actor") @@ -201,7 +217,6 @@ class MusicUploadViewSet( FederationMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet ): authentication_classes = [authentication.SignatureAuthentication] - permission_classes = [] renderer_classes = renderers.get_ap_renderers() queryset = music_models.Upload.objects.local().select_related( "library__actor", "track__artist", "track__album__artist" @@ -219,7 +234,6 @@ class MusicArtistViewSet( FederationMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet ): authentication_classes = [authentication.SignatureAuthentication] - permission_classes = [] renderer_classes = renderers.get_ap_renderers() queryset = music_models.Artist.objects.local() serializer_class = serializers.ArtistSerializer @@ -230,7 +244,6 @@ class MusicAlbumViewSet( FederationMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet ): authentication_classes = [authentication.SignatureAuthentication] - permission_classes = [] renderer_classes = renderers.get_ap_renderers() queryset = music_models.Album.objects.local().select_related("artist") serializer_class = serializers.AlbumSerializer @@ -241,7 +254,6 @@ class MusicTrackViewSet( FederationMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet ): authentication_classes = [authentication.SignatureAuthentication] - permission_classes = [] renderer_classes = renderers.get_ap_renderers() queryset = music_models.Track.objects.local().select_related( "album__artist", "artist" diff --git a/api/funkwhale_api/history/serializers.py b/api/funkwhale_api/history/serializers.py index 2254aee8cee370f4124c82acf59ad4c2c0d3148f..c894ec59ab093026f014b467dadf2f2f8db1af79 100644 --- a/api/funkwhale_api/history/serializers.py +++ b/api/funkwhale_api/history/serializers.py @@ -1,6 +1,7 @@ from rest_framework import serializers from funkwhale_api.activity import serializers as activity_serializers +from funkwhale_api.federation import serializers as federation_serializers from funkwhale_api.music.serializers import TrackActivitySerializer, TrackSerializer from funkwhale_api.users.serializers import UserActivitySerializer, UserBasicSerializer @@ -27,16 +28,22 @@ class ListeningActivitySerializer(activity_serializers.ModelSerializer): class ListeningSerializer(serializers.ModelSerializer): track = TrackSerializer(read_only=True) user = UserBasicSerializer(read_only=True) + actor = serializers.SerializerMethodField() class Meta: model = models.Listening - fields = ("id", "user", "track", "creation_date") + fields = ("id", "user", "track", "creation_date", "actor") def create(self, validated_data): validated_data["user"] = self.context["user"] return super().create(validated_data) + def get_actor(self, obj): + actor = obj.user.actor + if actor: + return federation_serializers.APIActorSerializer(actor).data + class ListeningWriteSerializer(serializers.ModelSerializer): class Meta: diff --git a/api/funkwhale_api/history/urls.py b/api/funkwhale_api/history/urls.py index 707e95cd7d3056ced030a6f52b584456134c19e3..c22e58062d38a3eb6c497467dc811e38dcbc212a 100644 --- a/api/funkwhale_api/history/urls.py +++ b/api/funkwhale_api/history/urls.py @@ -1,8 +1,8 @@ -from rest_framework import routers +from funkwhale_api.common import routers from . import views -router = routers.SimpleRouter() +router = routers.OptionalSlashRouter() router.register(r"listenings", views.ListeningViewSet, "listenings") urlpatterns = router.urls diff --git a/api/funkwhale_api/history/views.py b/api/funkwhale_api/history/views.py index 30219629a4b0c5a2852d0cff1f9f04605604a654..6cdbc8a80f848c074adde2dee2f04f4ff5eefec1 100644 --- a/api/funkwhale_api/history/views.py +++ b/api/funkwhale_api/history/views.py @@ -19,7 +19,7 @@ class ListeningViewSet( ): serializer_class = serializers.ListeningSerializer - queryset = models.Listening.objects.all().select_related("user") + queryset = models.Listening.objects.all().select_related("user__actor") permission_classes = [ oauth_permissions.ScopePermission, @@ -47,7 +47,7 @@ class ListeningViewSet( ) tracks = Track.objects.with_playable_uploads( music_utils.get_actor_from_request(self.request) - ).select_related("artist", "album__artist") + ).select_related("artist", "album__artist", "attributed_to") return queryset.prefetch_related(Prefetch("track", queryset=tracks)) def get_serializer_context(self): diff --git a/api/funkwhale_api/instance/dynamic_preferences_registry.py b/api/funkwhale_api/instance/dynamic_preferences_registry.py index 9d1f1c8f77706562fcdc8a2ecc1c863533a033f2..be360701dd7cb626eee8d6eafb7f3e867b2c7a13 100644 --- a/api/funkwhale_api/instance/dynamic_preferences_registry.py +++ b/api/funkwhale_api/instance/dynamic_preferences_registry.py @@ -1,4 +1,6 @@ from django.forms import widgets +from django.core.validators import FileExtensionValidator + from dynamic_preferences import types from dynamic_preferences.registries import global_preferences_registry @@ -43,6 +45,72 @@ class InstanceLongDescription(types.StringPreference): field_kwargs = {"required": False} +@global_preferences_registry.register +class InstanceTerms(types.StringPreference): + show_in_api = True + section = instance + name = "terms" + verbose_name = "Terms of service" + default = "" + help_text = ( + "Terms of service and privacy policy for your instance (markdown allowed)." + ) + widget = widgets.Textarea + field_kwargs = {"required": False} + + +@global_preferences_registry.register +class InstanceRules(types.StringPreference): + show_in_api = True + section = instance + name = "rules" + verbose_name = "Rules" + default = "" + help_text = "Rules/Code of Conduct (markdown allowed)." + widget = widgets.Textarea + field_kwargs = {"required": False} + + +@global_preferences_registry.register +class InstanceContactEmail(types.StringPreference): + show_in_api = True + section = instance + name = "contact_email" + verbose_name = "Contact email" + default = "" + help_text = "A contact email for visitors who need to contact an admin or moderator" + field_kwargs = {"required": False} + + +@global_preferences_registry.register +class InstanceSupportMessage(types.StringPreference): + show_in_api = True + section = instance + name = "support_message" + verbose_name = "Support message" + default = "" + help_text = ( + "A short message that will be displayed periodically to local users. " + "Use it to ask for financial support or anything else you might need. " + "(markdown allowed)." + ) + widget = widgets.Textarea + field_kwargs = {"required": False} + + +@global_preferences_registry.register +class InstanceFunkwhaleSupportMessageEnabled(types.BooleanPreference): + show_in_api = True + section = instance + name = "funkwhale_support_message_enabled" + verbose_name = "Funkwhale Support message" + default = True + help_text = ( + "If this is enabled, we will periodically display a message to encourage " + "local users to support Funkwhale." + ) + + @global_preferences_registry.register class RavenDSN(types.StringPreference): show_in_api = True @@ -115,3 +183,27 @@ class CustomCSS(types.StringPreference): ) widget = widgets.Textarea field_kwargs = {"required": False} + + +class ImageWidget(widgets.ClearableFileInput): + pass + + +class ImagePreference(types.FilePreference): + widget = ImageWidget + field_kwargs = { + "validators": [ + FileExtensionValidator(allowed_extensions=["png", "jpg", "jpeg", "webp"]) + ] + } + + +@global_preferences_registry.register +class Banner(ImagePreference): + show_in_api = True + section = instance + name = "banner" + verbose_name = "Banner image" + 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} diff --git a/api/funkwhale_api/instance/nodeinfo.py b/api/funkwhale_api/instance/nodeinfo.py index f45fbb129402ac0437147ac8eff1147f99335d1b..712578c3c809a92df007043992cd3da6de3061a5 100644 --- a/api/funkwhale_api/instance/nodeinfo.py +++ b/api/funkwhale_api/instance/nodeinfo.py @@ -2,7 +2,9 @@ import memoize.djangocache import funkwhale_api from funkwhale_api.common import preferences -from funkwhale_api.federation import actors +from funkwhale_api.federation import actors, models as federation_models +from funkwhale_api.federation import utils as federation_utils +from funkwhale_api.moderation import models as moderation_models from funkwhale_api.music import utils as music_utils from . import stats @@ -12,32 +14,62 @@ memo = memoize.Memoizer(store, namespace="instance:stats") def get(): - share_stats = preferences.get("instance__nodeinfo_stats_enabled") + all_preferences = preferences.all() + share_stats = all_preferences.get("instance__nodeinfo_stats_enabled") + allow_list_enabled = all_preferences.get("moderation__allow_list_enabled") + allow_list_public = all_preferences.get("moderation__allow_list_public") + banner = all_preferences.get("instance__banner") + unauthenticated_report_types = all_preferences.get( + "moderation__unauthenticated_report_types" + ) + if allow_list_enabled and allow_list_public: + allowed_domains = list( + federation_models.Domain.objects.filter(allowed=True) + .order_by("name") + .values_list("name", flat=True) + ) + else: + allowed_domains = None data = { "version": "2.0", "software": {"name": "funkwhale", "version": funkwhale_api.__version__}, "protocols": ["activitypub"], "services": {"inbound": [], "outbound": []}, - "openRegistrations": preferences.get("users__registration_enabled"), + "openRegistrations": all_preferences.get("users__registration_enabled"), "usage": {"users": {"total": 0, "activeHalfyear": 0, "activeMonth": 0}}, "metadata": { "actorId": actors.get_service_actor().fid, - "private": preferences.get("instance__nodeinfo_private"), - "shortDescription": preferences.get("instance__short_description"), - "longDescription": preferences.get("instance__long_description"), - "nodeName": preferences.get("instance__name"), + "private": all_preferences.get("instance__nodeinfo_private"), + "shortDescription": all_preferences.get("instance__short_description"), + "longDescription": all_preferences.get("instance__long_description"), + "rules": all_preferences.get("instance__rules"), + "contactEmail": all_preferences.get("instance__contact_email"), + "terms": all_preferences.get("instance__terms"), + "nodeName": all_preferences.get("instance__name"), + "banner": federation_utils.full_url(banner.url) if banner else None, + "defaultUploadQuota": all_preferences.get("users__upload_quota"), "library": { - "federationEnabled": preferences.get("federation__enabled"), - "federationNeedsApproval": preferences.get( + "federationEnabled": all_preferences.get("federation__enabled"), + "federationNeedsApproval": all_preferences.get( "federation__music_needs_approval" ), - "anonymousCanListen": not preferences.get( + "anonymousCanListen": not all_preferences.get( "common__api_authentication_required" ), }, "supportedUploadExtensions": music_utils.SUPPORTED_EXTENSIONS, + "allowList": {"enabled": allow_list_enabled, "domains": allowed_domains}, + "reportTypes": [ + {"type": t, "label": l, "anonymous": t in unauthenticated_report_types} + for t, l in moderation_models.REPORT_TYPES + ], + "funkwhaleSupportMessageEnabled": all_preferences.get( + "instance__funkwhale_support_message_enabled" + ), + "instanceSupportMessage": all_preferences.get("instance__support_message"), }, } + if share_stats: getter = memo(lambda: stats.get(), max_age=600) statistics = getter() diff --git a/api/funkwhale_api/instance/urls.py b/api/funkwhale_api/instance/urls.py index 05682b1e762ace43a2f9f14168f9ca42530ef439..eff731b26453f86586c513903fdcafde2cda3df7 100644 --- a/api/funkwhale_api/instance/urls.py +++ b/api/funkwhale_api/instance/urls.py @@ -1,12 +1,12 @@ from django.conf.urls import url -from rest_framework import routers +from funkwhale_api.common import routers from . import views -admin_router = routers.SimpleRouter() +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"^settings/$", views.InstanceSettings.as_view(), name="settings"), + url(r"^nodeinfo/2.0/?$", views.NodeInfo.as_view(), name="nodeinfo-2.0"), + url(r"^settings/?$", views.InstanceSettings.as_view(), name="settings"), ] + admin_router.urls diff --git a/api/funkwhale_api/manage/filters.py b/api/funkwhale_api/manage/filters.py index 984b83133734e81a87194de73016a4f0ca5ee11f..5791afba3011cbccb5743c72a34932afc2515ac9 100644 --- a/api/funkwhale_api/manage/filters.py +++ b/api/funkwhale_api/manage/filters.py @@ -1,18 +1,21 @@ from django import forms from django.db.models import Q -from django.conf import settings import django_filters from django_filters import rest_framework as filters from funkwhale_api.common import fields +from funkwhale_api.common import filters as common_filters from funkwhale_api.common import search from funkwhale_api.federation import models as federation_models from funkwhale_api.federation import utils as federation_utils from funkwhale_api.moderation import models as moderation_models +from funkwhale_api.moderation import serializers as moderation_serializers +from funkwhale_api.moderation import utils as moderation_utils from funkwhale_api.music import models as music_models from funkwhale_api.users import models as users_models +from funkwhale_api.tags import models as tags_models class ActorField(forms.CharField): @@ -21,24 +24,12 @@ class ActorField(forms.CharField): if not value: return value - parts = value.split("@") - - return { - "username": parts[0], - "domain": parts[1] if len(parts) > 1 else settings.FEDERATION_HOSTNAME, - } + return federation_utils.get_actor_data_from_username(value) def get_actor_filter(actor_field): def handler(v): - if not v: - return Q(**{actor_field: None}) - return Q( - **{ - "{}__preferred_username__iexact".format(actor_field): v["username"], - "{}__domain__name__iexact".format(actor_field): v["domain"], - } - ) + return federation_utils.get_actor_from_username_data_query(actor_field, v) return {"field": ActorField(), "handler": handler} @@ -61,6 +52,7 @@ class ManageArtistFilterSet(filters.FilterSet): "field": forms.IntegerField(), "distinct": True, }, + "tag": {"to": "tagged_items__tag__name", "distinct": True}, }, ) ) @@ -90,6 +82,7 @@ class ManageAlbumFilterSet(filters.FilterSet): "field": forms.IntegerField(), "distinct": True, }, + "tag": {"to": "tagged_items__tag__name", "distinct": True}, }, ) ) @@ -128,6 +121,7 @@ class ManageTrackFilterSet(filters.FilterSet): "field": forms.IntegerField(), "distinct": True, }, + "tag": {"to": "tagged_items__tag__name", "distinct": True}, }, ) ) @@ -235,12 +229,23 @@ class ManageUploadFilterSet(filters.FilterSet): ] +def filter_allowed(queryset, name, value): + """ + If value=false, we want to include object with value=null as well + """ + if value: + return queryset.filter(allowed=True) + else: + return queryset.filter(Q(allowed=False) | Q(allowed__isnull=True)) + + class ManageDomainFilterSet(filters.FilterSet): q = fields.SearchFilter(search_fields=["name"]) + allowed = filters.BooleanFilter(method=filter_allowed) class Meta: model = federation_models.Domain - fields = ["name"] + fields = ["name", "allowed"] class ManageActorFilterSet(filters.FilterSet): @@ -320,6 +325,10 @@ class ManageInstancePolicyFilterSet(filters.FilterSet): ] ) + target_domain = filters.CharFilter("target_domain__name") + target_account_domain = filters.CharFilter("target_actor__domain__name") + target_account_username = filters.CharFilter("target_actor__preferred_username") + class Meta: model = moderation_models.InstancePolicy fields = [ @@ -328,4 +337,60 @@ class ManageInstancePolicyFilterSet(filters.FilterSet): "silence_activity", "silence_notifications", "reject_media", + "target_domain", + "target_account_domain", + "target_account_username", ] + + +class ManageTagFilterSet(filters.FilterSet): + q = fields.SearchFilter(search_fields=["name"]) + + class Meta: + model = tags_models.Tag + fields = ["q"] + + +class ManageReportFilterSet(filters.FilterSet): + q = fields.SmartSearchFilter( + config=search.SearchConfig( + search_fields={"summary": {"to": "summary"}}, + filter_fields={ + "uuid": {"to": "uuid"}, + "id": {"to": "id"}, + "resolved": common_filters.get_boolean_filter("is_handled"), + "domain": {"to": "target_owner__domain_id"}, + "category": {"to": "type"}, + "submitter": get_actor_filter("submitter"), + "assigned_to": get_actor_filter("assigned_to"), + "target_owner": get_actor_filter("target_owner"), + "submitter_email": {"to": "submitter_email"}, + "target": common_filters.get_generic_relation_filter( + "target", moderation_serializers.TARGET_CONFIG + ), + }, + ) + ) + + class Meta: + model = moderation_models.Report + fields = ["q", "is_handled", "type", "submitter_email"] + + +class ManageNoteFilterSet(filters.FilterSet): + q = fields.SmartSearchFilter( + config=search.SearchConfig( + search_fields={"summary": {"to": "summary"}}, + filter_fields={ + "uuid": {"to": "uuid"}, + "author": get_actor_filter("author"), + "target": common_filters.get_generic_relation_filter( + "target", moderation_utils.NOTE_TARGET_FIELDS + ), + }, + ) + ) + + class Meta: + model = moderation_models.Note + fields = ["q"] diff --git a/api/funkwhale_api/manage/serializers.py b/api/funkwhale_api/manage/serializers.py index a9b19939d822f3d07053aaa7a28f8d6f20b57f50..48ea1dc50132f4b41b5b6426773addd3ba6654d9 100644 --- a/api/funkwhale_api/manage/serializers.py +++ b/api/funkwhale_api/manage/serializers.py @@ -1,15 +1,20 @@ +from django.conf import settings from django.db import transaction from rest_framework import serializers +from funkwhale_api.common import fields as common_fields from funkwhale_api.common import serializers as common_serializers from funkwhale_api.common import utils as common_utils from funkwhale_api.federation import models as federation_models from funkwhale_api.federation import fields as federation_fields from funkwhale_api.federation import tasks as federation_tasks from funkwhale_api.moderation import models as moderation_models +from funkwhale_api.moderation import serializers as moderation_serializers +from funkwhale_api.moderation import utils as moderation_utils from funkwhale_api.music import models as music_models from funkwhale_api.music import serializers as music_serializers +from funkwhale_api.tags import models as tags_models from funkwhale_api.users import models as users_models from . import filters @@ -136,6 +141,7 @@ class ManageDomainSerializer(serializers.ModelSerializer): "nodeinfo", "nodeinfo_fetch_date", "instance_policy", + "allowed", ] read_only_fields = [ "creation_date", @@ -151,8 +157,17 @@ class ManageDomainSerializer(serializers.ModelSerializer): return getattr(o, "outbox_activities_count", 0) +class ManageDomainUpdateSerializer(ManageDomainSerializer): + class Meta(ManageDomainSerializer.Meta): + read_only_fields = ["name"] + ManageDomainSerializer.Meta.read_only_fields + + class ManageDomainActionSerializer(common_serializers.ActionSerializer): - actions = [common_serializers.Action("purge", allow_all=False)] + actions = [ + common_serializers.Action("purge", allow_all=False), + common_serializers.Action("allow_list_add", allow_all=True), + common_serializers.Action("allow_list_remove", allow_all=True), + ] filterset_class = filters.ManageDomainFilterSet pk_field = "name" @@ -161,8 +176,18 @@ class ManageDomainActionSerializer(common_serializers.ActionSerializer): ids = objects.values_list("pk", flat=True) common_utils.on_commit(federation_tasks.purge_actors.delay, domains=list(ids)) + @transaction.atomic + def handle_allow_list_add(self, objects): + objects.update(allowed=True) + + @transaction.atomic + def handle_allow_list_remove(self, objects): + objects.update(allowed=False) + class ManageBaseActorSerializer(serializers.ModelSerializer): + is_local = serializers.SerializerMethodField() + class Meta: model = federation_models.Actor fields = [ @@ -181,9 +206,13 @@ class ManageBaseActorSerializer(serializers.ModelSerializer): "outbox_url", "shared_inbox_url", "manually_approves_followers", + "is_local", ] read_only_fields = ["creation_date", "instance_policy"] + def get_is_local(self, o): + return o.domain_id == settings.FEDERATION_HOSTNAME + class ManageActorSerializer(ManageBaseActorSerializer): uploads_count = serializers.SerializerMethodField() @@ -358,6 +387,7 @@ class ManageArtistSerializer(ManageBaseArtistSerializer): albums = ManageNestedAlbumSerializer(many=True) tracks = ManageNestedTrackSerializer(many=True) attributed_to = ManageBaseActorSerializer() + tags = serializers.SerializerMethodField() class Meta: model = music_models.Artist @@ -365,8 +395,13 @@ class ManageArtistSerializer(ManageBaseArtistSerializer): "albums", "tracks", "attributed_to", + "tags", ] + def get_tags(self, obj): + tagged_items = getattr(obj, "_prefetched_tagged_items", []) + return [ti.tag.name for ti in tagged_items] + class ManageNestedArtistSerializer(ManageBaseArtistSerializer): pass @@ -376,6 +411,7 @@ class ManageAlbumSerializer(ManageBaseAlbumSerializer): tracks = ManageNestedTrackSerializer(many=True) attributed_to = ManageBaseActorSerializer() artist = ManageNestedArtistSerializer() + tags = serializers.SerializerMethodField() class Meta: model = music_models.Album @@ -383,8 +419,13 @@ class ManageAlbumSerializer(ManageBaseAlbumSerializer): "artist", "tracks", "attributed_to", + "tags", ] + def get_tags(self, obj): + tagged_items = getattr(obj, "_prefetched_tagged_items", []) + return [ti.tag.name for ti in tagged_items] + class ManageTrackAlbumSerializer(ManageBaseAlbumSerializer): artist = ManageNestedArtistSerializer() @@ -399,6 +440,7 @@ class ManageTrackSerializer(ManageNestedTrackSerializer): album = ManageTrackAlbumSerializer() attributed_to = ManageBaseActorSerializer() uploads_count = serializers.SerializerMethodField() + tags = serializers.SerializerMethodField() class Meta: model = music_models.Track @@ -407,11 +449,16 @@ class ManageTrackSerializer(ManageNestedTrackSerializer): "album", "attributed_to", "uploads_count", + "tags", ] def get_uploads_count(self, obj): return getattr(obj, "uploads_count", None) + def get_tags(self, obj): + tagged_items = getattr(obj, "_prefetched_tagged_items", []) + return [ti.tag.name for ti in tagged_items] + class ManageTrackActionSerializer(common_serializers.ActionSerializer): actions = [common_serializers.Action("delete", allow_all=False)] @@ -482,6 +529,15 @@ class ManageLibrarySerializer(serializers.ModelSerializer): "followers_url", "actor", ] + read_only_fields = [ + "fid", + "uuid", + "id", + "url", + "domain", + "actor", + "creation_date", + ] def get_uploads_count(self, obj): return getattr(obj, "_uploads_count", obj.uploads_count) @@ -546,3 +602,101 @@ class ManageUploadSerializer(serializers.ModelSerializer): "track", "library", ) + + +class ManageTagSerializer(ManageBaseAlbumSerializer): + + tracks_count = serializers.SerializerMethodField() + albums_count = serializers.SerializerMethodField() + artists_count = serializers.SerializerMethodField() + + class Meta: + model = tags_models.Tag + fields = [ + "id", + "name", + "creation_date", + "tracks_count", + "albums_count", + "artists_count", + ] + + def get_tracks_count(self, obj): + return getattr(obj, "_tracks_count", None) + + def get_albums_count(self, obj): + return getattr(obj, "_albums_count", None) + + def get_artists_count(self, obj): + return getattr(obj, "_artists_count", None) + + +class ManageTagActionSerializer(common_serializers.ActionSerializer): + actions = [common_serializers.Action("delete", allow_all=False)] + filterset_class = filters.ManageTagFilterSet + pk_field = "name" + + @transaction.atomic + def handle_delete(self, objects): + return objects.delete() + + +class ManageBaseNoteSerializer(serializers.ModelSerializer): + author = ManageBaseActorSerializer(required=False, read_only=True) + + class Meta: + model = moderation_models.Note + fields = ["id", "uuid", "creation_date", "summary", "author"] + read_only_fields = ["uuid", "creation_date", "author"] + + +class ManageNoteSerializer(ManageBaseNoteSerializer): + target = common_fields.GenericRelation(moderation_utils.NOTE_TARGET_FIELDS) + + class Meta(ManageBaseNoteSerializer.Meta): + fields = ManageBaseNoteSerializer.Meta.fields + ["target"] + + +class ManageReportSerializer(serializers.ModelSerializer): + assigned_to = ManageBaseActorSerializer() + target_owner = ManageBaseActorSerializer() + submitter = ManageBaseActorSerializer() + target = moderation_serializers.TARGET_FIELD + notes = serializers.SerializerMethodField() + + class Meta: + model = moderation_models.Report + fields = [ + "id", + "uuid", + "fid", + "creation_date", + "handled_date", + "summary", + "type", + "target", + "target_state", + "is_handled", + "assigned_to", + "target_owner", + "submitter", + "submitter_email", + "notes", + ] + read_only_fields = [ + "id", + "uuid", + "fid", + "submitter", + "submitter_email", + "creation_date", + "handled_date", + "target", + "target_state", + "target_owner", + "summary", + ] + + def get_notes(self, o): + notes = getattr(o, "_prefetched_notes", []) + return ManageBaseNoteSerializer(notes, many=True).data diff --git a/api/funkwhale_api/manage/urls.py b/api/funkwhale_api/manage/urls.py index 2d5da59e3ed6b8656c3438fb9121819e18079d47..36997b24aff1c3ab1df59bea43a308f7fb3b41b3 100644 --- a/api/funkwhale_api/manage/urls.py +++ b/api/funkwhale_api/manage/urls.py @@ -1,29 +1,32 @@ from django.conf.urls import include, url -from rest_framework import routers +from funkwhale_api.common import routers from . import views -federation_router = routers.SimpleRouter() +federation_router = routers.OptionalSlashRouter() federation_router.register(r"domains", views.ManageDomainViewSet, "domains") -library_router = routers.SimpleRouter() +library_router = routers.OptionalSlashRouter() library_router.register(r"albums", views.ManageAlbumViewSet, "albums") library_router.register(r"artists", views.ManageArtistViewSet, "artists") library_router.register(r"libraries", views.ManageLibraryViewSet, "libraries") library_router.register(r"tracks", views.ManageTrackViewSet, "tracks") library_router.register(r"uploads", views.ManageUploadViewSet, "uploads") -moderation_router = routers.SimpleRouter() +moderation_router = routers.OptionalSlashRouter() moderation_router.register( r"instance-policies", views.ManageInstancePolicyViewSet, "instance-policies" ) +moderation_router.register(r"reports", views.ManageReportViewSet, "reports") +moderation_router.register(r"notes", views.ManageNoteViewSet, "notes") -users_router = routers.SimpleRouter() +users_router = routers.OptionalSlashRouter() users_router.register(r"users", views.ManageUserViewSet, "users") users_router.register(r"invitations", views.ManageInvitationViewSet, "invitations") -other_router = routers.SimpleRouter() +other_router = routers.OptionalSlashRouter() other_router.register(r"accounts", views.ManageActorViewSet, "accounts") +other_router.register(r"tags", views.ManageTagViewSet, "tags") urlpatterns = [ url( diff --git a/api/funkwhale_api/manage/views.py b/api/funkwhale_api/manage/views.py index 6e4edc888b858698236fd2b98e85724996572baa..200dccf1fd934081cb3f4e2fd1f44f464feed5f3 100644 --- a/api/funkwhale_api/manage/views.py +++ b/api/funkwhale_api/manage/views.py @@ -2,7 +2,7 @@ from rest_framework import mixins, response, viewsets from rest_framework import decorators as rest_decorators from django.db.models import Count, Prefetch, Q, Sum, OuterRef, Subquery -from django.db.models.functions import Coalesce +from django.db.models.functions import Coalesce, Length from django.shortcuts import get_object_or_404 from funkwhale_api.common import models as common_models @@ -12,8 +12,10 @@ from funkwhale_api.federation import models as federation_models from funkwhale_api.federation import tasks as federation_tasks from funkwhale_api.history import models as history_models from funkwhale_api.music import models as music_models +from funkwhale_api.music import views as music_views from funkwhale_api.moderation import models as moderation_models from funkwhale_api.playlists import models as playlists_models +from funkwhale_api.tags import models as tags_models from funkwhale_api.users import models as users_models @@ -39,6 +41,7 @@ def get_stats(tracks, target): ).count() data["libraries"] = uploads.values_list("library", flat=True).distinct().count() data["uploads"] = uploads.count() + data["reports"] = moderation_models.Report.objects.get_for_target(target).count() data.update(get_media_stats(uploads)) return data @@ -70,6 +73,7 @@ class ManageArtistViewSet( tracks_count=Count("tracks") ), ), + music_views.TAG_PREFETCH, ) ) serializer_class = serializers.ManageArtistSerializer @@ -107,7 +111,7 @@ class ManageAlbumViewSet( music_models.Album.objects.all() .order_by("-id") .select_related("attributed_to", "artist") - .prefetch_related("tracks") + .prefetch_related("tracks", music_views.TAG_PREFETCH) ) serializer_class = serializers.ManageAlbumSerializer filterset_class = filters.ManageAlbumFilterSet @@ -151,6 +155,7 @@ class ManageTrackViewSet( .order_by("-id") .select_related("attributed_to", "artist", "album__artist") .annotate(uploads_count=Coalesce(Subquery(uploads_subquery), 0)) + .prefetch_related(music_views.TAG_PREFETCH) ) serializer_class = serializers.ManageTrackSerializer filterset_class = filters.ManageTrackFilterSet @@ -200,6 +205,7 @@ follows_subquery = ( class ManageLibraryViewSet( mixins.ListModelMixin, mixins.RetrieveModelMixin, + mixins.UpdateModelMixin, mixins.DestroyModelMixin, viewsets.GenericViewSet, ): @@ -243,6 +249,7 @@ class ManageLibraryViewSet( "tracks": tracks.count(), "albums": albums.count(), "artists": len(artists), + "reports": moderation_models.Report.objects.get_for_target(library).count(), } data.update(get_media_stats(uploads.all())) return response.Response(data, status=200) @@ -339,6 +346,7 @@ class ManageDomainViewSet( mixins.CreateModelMixin, mixins.ListModelMixin, mixins.RetrieveModelMixin, + mixins.UpdateModelMixin, viewsets.GenericViewSet, ): lookup_value_regex = r"[a-zA-Z0-9\-\.]+" @@ -361,6 +369,13 @@ class ManageDomainViewSet( "instance_policy", ] + def get_serializer_class(self): + if self.action in ["update", "partial_update"]: + # A dedicated serializer for update + # to ensure domain name can't be changed + return serializers.ManageDomainUpdateSerializer + return super().get_serializer_class() + def perform_create(self, serializer): domain = serializer.save() federation_tasks.update_domain_nodeinfo(domain_name=domain.name) @@ -444,3 +459,115 @@ class ManageInstancePolicyViewSet( def perform_create(self, serializer): serializer.save(actor=self.request.user.actor) + + +class ManageReportViewSet( + mixins.ListModelMixin, + mixins.RetrieveModelMixin, + mixins.UpdateModelMixin, + viewsets.GenericViewSet, +): + lookup_field = "uuid" + queryset = ( + moderation_models.Report.objects.all() + .order_by("-creation_date") + .select_related( + "submitter", "target_owner", "assigned_to", "target_content_type" + ) + .prefetch_related("target") + .prefetch_related( + Prefetch( + "notes", + queryset=moderation_models.Note.objects.order_by( + "creation_date" + ).select_related("author"), + to_attr="_prefetched_notes", + ) + ) + ) + serializer_class = serializers.ManageReportSerializer + filterset_class = filters.ManageReportFilterSet + required_scope = "instance:reports" + ordering_fields = ["id", "creation_date", "handled_date"] + + def perform_update(self, serializer): + is_handled = serializer.instance.is_handled + if not is_handled and serializer.validated_data.get("is_handled") is True: + # report was resolved, we assign to the mod making the request + serializer.save(assigned_to=self.request.user.actor) + else: + serializer.save() + + +class ManageNoteViewSet( + mixins.ListModelMixin, + mixins.RetrieveModelMixin, + mixins.DestroyModelMixin, + mixins.CreateModelMixin, + viewsets.GenericViewSet, +): + lookup_field = "uuid" + queryset = ( + moderation_models.Note.objects.all() + .order_by("-creation_date") + .select_related("author", "target_content_type") + .prefetch_related("target") + ) + serializer_class = serializers.ManageNoteSerializer + filterset_class = filters.ManageNoteFilterSet + required_scope = "instance:notes" + ordering_fields = ["id", "creation_date"] + + def perform_create(self, serializer): + author = self.request.user.actor + return serializer.save(author=author) + + +class ManageTagViewSet( + mixins.ListModelMixin, + mixins.RetrieveModelMixin, + mixins.DestroyModelMixin, + mixins.CreateModelMixin, + viewsets.GenericViewSet, +): + lookup_field = "name" + queryset = ( + tags_models.Tag.objects.all() + .order_by("-creation_date") + .annotate(items_count=Count("tagged_items")) + .annotate(length=Length("name")) + ) + serializer_class = serializers.ManageTagSerializer + filterset_class = filters.ManageTagFilterSet + required_scope = "instance:libraries" + ordering_fields = ["id", "creation_date", "name", "items_count", "length"] + + def get_queryset(self): + queryset = super().get_queryset() + from django.contrib.contenttypes.models import ContentType + + album_ct = ContentType.objects.get_for_model(music_models.Album) + track_ct = ContentType.objects.get_for_model(music_models.Track) + artist_ct = ContentType.objects.get_for_model(music_models.Artist) + queryset = queryset.annotate( + _albums_count=Count( + "tagged_items", filter=Q(tagged_items__content_type=album_ct) + ), + _tracks_count=Count( + "tagged_items", filter=Q(tagged_items__content_type=track_ct) + ), + _artists_count=Count( + "tagged_items", filter=Q(tagged_items__content_type=artist_ct) + ), + ) + return queryset + + @rest_decorators.action(methods=["post"], detail=False) + def action(self, request, *args, **kwargs): + queryset = self.get_queryset() + serializer = serializers.ManageTagActionSerializer( + request.data, queryset=queryset + ) + serializer.is_valid(raise_exception=True) + result = serializer.save() + return response.Response(result, status=200) diff --git a/api/funkwhale_api/moderation/admin.py b/api/funkwhale_api/moderation/admin.py index 9f8340030e3aa4108ee7f63a87b0c2f8a50e85d9..1a44ea283f7d6e90f2e2abb92ee026b7f88cbb2b 100644 --- a/api/funkwhale_api/moderation/admin.py +++ b/api/funkwhale_api/moderation/admin.py @@ -30,6 +30,22 @@ class InstancePolicyAdmin(admin.ModelAdmin): list_select_related = True +@admin.register(models.Report) +class ReportAdmin(admin.ModelAdmin): + list_display = [ + "uuid", + "submitter", + "type", + "assigned_to", + "is_handled", + "creation_date", + "handled_date", + ] + list_filter = ["type", "is_handled"] + search_fields = ["summary"] + list_select_related = True + + @admin.register(models.UserFilter) class UserFilterAdmin(admin.ModelAdmin): list_display = ["uuid", "user", "target_artist", "creation_date"] diff --git a/api/funkwhale_api/moderation/apps.py b/api/funkwhale_api/moderation/apps.py new file mode 100644 index 0000000000000000000000000000000000000000..840393af10dee426b7561d5a8a13e587e7505a60 --- /dev/null +++ b/api/funkwhale_api/moderation/apps.py @@ -0,0 +1,13 @@ +from django.apps import AppConfig, apps + +from . import mrf + + +class ModerationConfig(AppConfig): + name = "funkwhale_api.moderation" + + def ready(self): + super().ready() + + app_names = [app.name for app in apps.app_configs.values()] + mrf.inbox.autodiscover(app_names) diff --git a/api/funkwhale_api/moderation/dynamic_preferences_registry.py b/api/funkwhale_api/moderation/dynamic_preferences_registry.py new file mode 100644 index 0000000000000000000000000000000000000000..29390434197062fce2fb5a031c0b40c93367b4b0 --- /dev/null +++ b/api/funkwhale_api/moderation/dynamic_preferences_registry.py @@ -0,0 +1,42 @@ +from dynamic_preferences import types +from dynamic_preferences.registries import global_preferences_registry + +from funkwhale_api.common import preferences as common_preferences + +from . import models + +moderation = types.Section("moderation") + + +@global_preferences_registry.register +class AllowListEnabled(types.BooleanPreference): + section = moderation + name = "allow_list_enabled" + verbose_name = "Enable allow-listing" + help_text = "If enabled, only interactions with explicitely allowed domains will be authorized." + default = False + + +@global_preferences_registry.register +class AllowListPublic(types.BooleanPreference): + section = moderation + name = "allow_list_public" + verbose_name = "Publish your allowed-domains list" + help_text = ( + "If enabled, everyone will be able to retrieve the list of domains you allowed. " + "This is useful on open setups, to help people decide if they want to join your pod, or to " + "make your moderation policy public." + ) + default = False + + +@global_preferences_registry.register +class UnauthenticatedReportTypes(common_preferences.StringListPreference): + show_in_api = True + section = moderation + name = "unauthenticated_report_types" + default = ["takedown_request", "illegal_content"] + verbose_name = "Accountless report categories" + help_text = "A list of categories for which external users (without an account) can submit a report" + choices = models.REPORT_TYPES + field_kwargs = {"choices": choices, "required": False} diff --git a/api/funkwhale_api/moderation/factories.py b/api/funkwhale_api/moderation/factories.py index 8829caa2bacf60b444b18984c71b24b5f8b788d0..b426a6cea2a4d36ceca75aa56726c5a9f75c6a0d 100644 --- a/api/funkwhale_api/moderation/factories.py +++ b/api/funkwhale_api/moderation/factories.py @@ -5,6 +5,8 @@ from funkwhale_api.federation import factories as federation_factories from funkwhale_api.music import factories as music_factories from funkwhale_api.users import factories as users_factories +from . import serializers + @registry.register class InstancePolicyFactory(NoUpdateOnCreate, factory.DjangoModelFactory): @@ -37,3 +39,37 @@ class UserFilterFactory(NoUpdateOnCreate, factory.DjangoModelFactory): for_artist = factory.Trait( target_artist=factory.SubFactory(music_factories.ArtistFactory) ) + + +@registry.register +class NoteFactory(NoUpdateOnCreate, factory.DjangoModelFactory): + author = factory.SubFactory(federation_factories.ActorFactory) + target = None + summary = factory.Faker("paragraph") + + class Meta: + model = "moderation.Note" + + +@registry.register +class ReportFactory(NoUpdateOnCreate, factory.DjangoModelFactory): + submitter = factory.SubFactory(federation_factories.ActorFactory) + target = factory.SubFactory(music_factories.ArtistFactory) + summary = factory.Faker("paragraph") + type = "other" + + class Meta: + model = "moderation.Report" + + class Params: + anonymous = factory.Trait(actor=None, submitter_email=factory.Faker("email")) + assigned = factory.Trait( + assigned_to=factory.SubFactory(federation_factories.ActorFactory) + ) + + @factory.post_generation + def _set_target_owner(self, create, extracted, **kwargs): + if not self.target: + return + + self.target_owner = serializers.get_target_owner(self.target) diff --git a/api/funkwhale_api/moderation/management/__init__.py b/api/funkwhale_api/moderation/management/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/api/funkwhale_api/moderation/management/commands/__init__.py b/api/funkwhale_api/moderation/management/commands/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/api/funkwhale_api/moderation/management/commands/mrf_check.py b/api/funkwhale_api/moderation/management/commands/mrf_check.py new file mode 100644 index 0000000000000000000000000000000000000000..b518daa08ccf9f5c929fb3f7fc18025e3e10ce86 --- /dev/null +++ b/api/funkwhale_api/moderation/management/commands/mrf_check.py @@ -0,0 +1,117 @@ +import json +import sys +import uuid +import logging + +from django.core.management.base import BaseCommand, CommandError +from django.core import validators + +from django.conf import settings + +from funkwhale_api.common import session +from funkwhale_api.federation import models +from funkwhale_api.moderation import mrf + + +def is_uuid(v): + try: + uuid.UUID(v) + except ValueError: + return False + return True + + +def is_url(v): + validator = validators.URLValidator() + try: + validator(v) + except (ValueError, validators.ValidationError): + return False + + return True + + +class Command(BaseCommand): + help = "Check a given message against all or a specific MRF rule" + + def add_arguments(self, parser): + parser.add_argument( + "type", + type=str, + choices=["inbox"], + help=("The type of MRF. Only inbox is supported at the moment"), + ) + parser.add_argument( + "input", + nargs="?", + help=( + "The path to a file containing JSON data. Use - to read from stdin. " + "If no input is provided, registered MRF policies will be listed " + "instead.", + ), + ) + parser.add_argument( + "--policy", + "-p", + dest="policies", + nargs="+", + default=False, + help="Restrict to a list of MRF policies that will be applied, in that order", + ) + + def handle(self, *args, **options): + logger = logging.getLogger("funkwhale.mrf") + logger.setLevel(logging.DEBUG) + logger.addHandler(logging.StreamHandler(stream=sys.stderr)) + + input = options["input"] + if not input: + registry = getattr(mrf, options["type"]) + self.stdout.write( + "No input given, listing registered policies for '{}' MRF:".format( + options["type"] + ) + ) + for name in registry.keys(): + self.stdout.write("- {}".format(name)) + return + raw_content = None + content = None + if input == "-": + raw_content = sys.stdin.read() + elif is_uuid(input): + self.stderr.write("UUID provided, retrieving payload from db") + content = models.Activity.objects.get(uuid=input).payload + elif is_url(input): + response = session.get_session().get( + input, + timeout=5, + verify=settings.EXTERNAL_REQUESTS_VERIFY_SSL, + headers={"Content-Type": "application/activity+json"}, + ) + response.raise_for_status() + content = response.json() + else: + with open(input, "rb") as f: + raw_content = f.read() + content = json.loads(raw_content) if content is None else content + + policies = options["policies"] or [] + registry = getattr(mrf, options["type"]) + for policy in policies: + if policy not in registry: + raise CommandError( + "Unknown policy '{}' for MRF '{}'".format(policy, options["type"]) + ) + + payload, updated = registry.apply(content, policies=policies) + if not payload: + self.stderr.write("Payload was discarded by MRF") + elif updated: + self.stderr.write("Payload was modified by MRF") + self.stderr.write("Initial payload:\n") + self.stdout.write(json.dumps(content, indent=2, sort_keys=True)) + self.stderr.write("Modified payload:\n") + self.stdout.write(json.dumps(payload, indent=2, sort_keys=True)) + else: + self.stderr.write("Payload left untouched by MRF") diff --git a/api/funkwhale_api/moderation/migrations/0003_report.py b/api/funkwhale_api/moderation/migrations/0003_report.py new file mode 100644 index 0000000000000000000000000000000000000000..c560924587bcd9f53afdc55d34afaa98a6bf1d21 --- /dev/null +++ b/api/funkwhale_api/moderation/migrations/0003_report.py @@ -0,0 +1,100 @@ +# Generated by Django 2.2.3 on 2019-08-01 08:34 + +import django.contrib.postgres.fields.jsonb +from django.db import migrations, models +import django.db.models.deletion +import django.utils.timezone +import uuid + + +class Migration(migrations.Migration): + + dependencies = [ + ("contenttypes", "0002_remove_content_type_name"), + ("federation", "0020_auto_20190730_0846"), + ("moderation", "0002_auto_20190213_0927"), + ] + + operations = [ + migrations.CreateModel( + name="Report", + fields=[ + ( + "id", + models.AutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("fid", models.URLField(db_index=True, max_length=500, unique=True)), + ("url", models.URLField(blank=True, max_length=500, null=True)), + ("uuid", models.UUIDField(default=uuid.uuid4, unique=True)), + ( + "creation_date", + models.DateTimeField(default=django.utils.timezone.now), + ), + ("summary", models.TextField(max_length=50000, null=True)), + ("handled_date", models.DateTimeField(null=True)), + ("is_handled", models.BooleanField(default=False)), + ( + "type", + models.CharField( + choices=[ + ("takedown_request", "Takedown request"), + ("invalid_metadata", "Invalid metadata"), + ("illegal_content", "Illegal content"), + ("offensive_content", "Offensive content"), + ("other", "Other"), + ], + max_length=40, + ), + ), + ("submitter_email", models.EmailField(max_length=254, null=True)), + ("target_id", models.IntegerField(null=True)), + ( + "target_state", + django.contrib.postgres.fields.jsonb.JSONField(null=True), + ), + ( + "submitter", + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="reports", + to="federation.Actor", + ), + ), + ( + "assigned_to", + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="assigned_reports", + to="federation.Actor", + ), + ), + ( + "target_content_type", + models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.CASCADE, + to="contenttypes.ContentType", + ), + ), + ( + "target_owner", + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + to="federation.Actor", + ), + ), + ], + options={"abstract": False}, + ) + ] diff --git a/api/funkwhale_api/moderation/migrations/0004_note.py b/api/funkwhale_api/moderation/migrations/0004_note.py new file mode 100644 index 0000000000000000000000000000000000000000..8e7454b69f6a8834d794681b2e03a6933f2f24c7 --- /dev/null +++ b/api/funkwhale_api/moderation/migrations/0004_note.py @@ -0,0 +1,30 @@ +# Generated by Django 2.2.4 on 2019-08-29 09:08 + +from django.db import migrations, models +import django.db.models.deletion +import django.utils.timezone +import uuid + + +class Migration(migrations.Migration): + + dependencies = [ + ('federation', '0020_auto_20190730_0846'), + ('contenttypes', '0002_remove_content_type_name'), + ('moderation', '0003_report'), + ] + + operations = [ + migrations.CreateModel( + name='Note', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('uuid', models.UUIDField(default=uuid.uuid4, unique=True)), + ('creation_date', models.DateTimeField(default=django.utils.timezone.now)), + ('summary', models.TextField(max_length=50000)), + ('target_id', models.IntegerField(null=True)), + ('author', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='moderation_notes', to='federation.Actor')), + ('target_content_type', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType')), + ], + ), + ] diff --git a/api/funkwhale_api/moderation/models.py b/api/funkwhale_api/moderation/models.py index 7ade5d05a1e5a1ff0bfb0e259b5770b100a77489..e6b9cf09eb2d0032985962ffcdf534f5721c5abb 100644 --- a/api/funkwhale_api/moderation/models.py +++ b/api/funkwhale_api/moderation/models.py @@ -1,9 +1,19 @@ import urllib.parse import uuid +from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation +from django.contrib.contenttypes.models import ContentType +from django.contrib.postgres.fields import JSONField from django.db import models +from django.db.models.signals import pre_save +from django.dispatch import receiver +from django.urls import reverse from django.utils import timezone +from funkwhale_api.common import models as common_models +from funkwhale_api.federation import models as federation_models +from funkwhale_api.federation import utils as federation_utils + class InstancePolicyQuerySet(models.QuerySet): def active(self): @@ -92,3 +102,92 @@ class UserFilter(models.Model): def target(self): if self.target_artist: return {"type": "artist", "obj": self.target_artist} + + +REPORT_TYPES = [ + ("takedown_request", "Takedown request"), + ("invalid_metadata", "Invalid metadata"), + ("illegal_content", "Illegal content"), + ("offensive_content", "Offensive content"), + ("other", "Other"), +] + + +class Report(federation_models.FederationMixin): + uuid = models.UUIDField(default=uuid.uuid4, unique=True) + creation_date = models.DateTimeField(default=timezone.now) + summary = models.TextField(null=True, blank=True, max_length=50000) + handled_date = models.DateTimeField(null=True) + is_handled = models.BooleanField(default=False) + type = models.CharField(max_length=40, choices=REPORT_TYPES) + submitter_email = models.EmailField(null=True) + submitter = models.ForeignKey( + "federation.Actor", + related_name="reports", + on_delete=models.SET_NULL, + null=True, + blank=True, + ) + + assigned_to = models.ForeignKey( + "federation.Actor", + related_name="assigned_reports", + on_delete=models.SET_NULL, + null=True, + blank=True, + ) + + target_id = models.IntegerField(null=True) + target_content_type = models.ForeignKey( + ContentType, null=True, on_delete=models.CASCADE + ) + target = GenericForeignKey("target_content_type", "target_id") + target_owner = models.ForeignKey( + "federation.Actor", on_delete=models.SET_NULL, null=True, blank=True + ) + # frozen state of the target being reported, to ensure we still have info in the event of a + # delete + target_state = JSONField(null=True) + + notes = GenericRelation( + "Note", content_type_field="target_content_type", object_id_field="target_id" + ) + + objects = common_models.GenericTargetQuerySet.as_manager() + + def get_federation_id(self): + if self.fid: + return self.fid + + return federation_utils.full_url( + reverse("federation:reports-detail", kwargs={"uuid": self.uuid}) + ) + + def save(self, **kwargs): + if not self.pk and not self.fid: + self.fid = self.get_federation_id() + + return super().save(**kwargs) + + +class Note(models.Model): + uuid = models.UUIDField(default=uuid.uuid4, unique=True) + creation_date = models.DateTimeField(default=timezone.now) + summary = models.TextField(max_length=50000) + author = models.ForeignKey( + "federation.Actor", related_name="moderation_notes", on_delete=models.CASCADE + ) + + target_id = models.IntegerField(null=True) + target_content_type = models.ForeignKey( + ContentType, null=True, on_delete=models.CASCADE + ) + target = GenericForeignKey("target_content_type", "target_id") + + +@receiver(pre_save, sender=Report) +def set_handled_date(sender, instance, **kwargs): + if instance.is_handled is True and not instance.handled_date: + instance.handled_date = timezone.now() + elif not instance.is_handled: + instance.handled_date = None diff --git a/api/funkwhale_api/moderation/mrf.py b/api/funkwhale_api/moderation/mrf.py new file mode 100644 index 0000000000000000000000000000000000000000..207b63e5d7ae3235876bcb113c4c4ed8fde010dd --- /dev/null +++ b/api/funkwhale_api/moderation/mrf.py @@ -0,0 +1,78 @@ +""" +Inspired from the MRF logic from Pleroma, see https://docs-develop.pleroma.social/mrf.html +To support pluggable / customizable moderation using a programming language if +our exposed features aren't enough. +""" + +import logging + +import persisting_theory + +logger = logging.getLogger("funkwhale.mrf") + + +class MRFException(Exception): + pass + + +class Discard(MRFException): + pass + + +class Skip(MRFException): + pass + + +class Registry(persisting_theory.Registry): + look_into = "mrf_policies" + + def __init__(self, name=""): + self.name = name + + super().__init__() + + def apply(self, payload, **kwargs): + policy_names = kwargs.pop("policies", []) + if not policy_names: + policies = self.items() + else: + logger.debug( + "[MRF.%s] Running restricted list of policies %s…", + self.name, + ", ".join(policy_names), + ) + policies = [(name, self[name]) for name in policy_names] + updated = False + for policy_name, policy in policies: + logger.debug("[MRF.%s] Applying mrf policy '%s'…", self.name, policy_name) + try: + new_payload = policy(payload, **kwargs) + except Skip as e: + logger.debug( + "[MRF.%s] Skipped policy %s because '%s'", + self.name, + policy_name, + str(e), + ) + continue + except Discard as e: + logger.info( + "[MRF.%s] Discarded message per policy '%s' because '%s'", + self.name, + policy_name, + str(e), + ) + return (None, False) + except Exception: + logger.exception( + "[MRF.%s] Error while applying policy '%s'!", self.name, policy_name + ) + continue + if new_payload: + updated = True + payload = new_payload + + return payload, updated + + +inbox = Registry("inbox") diff --git a/api/funkwhale_api/moderation/mrf_policies.py b/api/funkwhale_api/moderation/mrf_policies.py new file mode 100644 index 0000000000000000000000000000000000000000..ec6b2f6d890ffe5565f138e5e2a5bbfd0770bf55 --- /dev/null +++ b/api/funkwhale_api/moderation/mrf_policies.py @@ -0,0 +1,47 @@ +import urllib.parse + +from funkwhale_api.common import preferences +from funkwhale_api.common import utils +from funkwhale_api.federation import models as federation_models +from funkwhale_api.moderation import mrf + + +@mrf.inbox.register(name="allow_list") +def check_allow_list(payload, **kwargs): + """ + A MRF policy that only works when the moderation__allow_list_enabled + setting is on. + + It will extract domain names from the activity ID, actor ID and activity object ID + and discard the activity if any of those domain names isn't on the allow list. + """ + if not preferences.get("moderation__allow_list_enabled"): + raise mrf.Skip("Allow-listing is disabled") + + allowed_domains = set( + federation_models.Domain.objects.filter(allowed=True).values_list( + "name", flat=True + ) + ) + + relevant_ids = [ + payload.get("actor"), + kwargs.get("sender_id", payload.get("id")), + utils.recursive_getattr(payload, "object.id", permissive=True), + ] + + relevant_domains = set( + [ + domain + for domain in [urllib.parse.urlparse(i).hostname for i in relevant_ids if i] + if domain + ] + ) + + if relevant_domains - allowed_domains: + + raise mrf.Discard( + "These domains are not allowed: {}".format( + ", ".join(relevant_domains - allowed_domains) + ) + ) diff --git a/api/funkwhale_api/moderation/serializers.py b/api/funkwhale_api/moderation/serializers.py index 20c34242102d4f302ac29a9781a059c08fef2fb9..81e5846bb4a9c5c3e887a1a6a0cb9a92bd36b321 100644 --- a/api/funkwhale_api/moderation/serializers.py +++ b/api/funkwhale_api/moderation/serializers.py @@ -1,7 +1,20 @@ +import json +import urllib.parse + +from django.conf import settings +from django.core.serializers.json import DjangoJSONEncoder +import persisting_theory from rest_framework import serializers +from funkwhale_api.common import fields as common_fields +from funkwhale_api.common import preferences +from funkwhale_api.federation import models as federation_models +from funkwhale_api.federation import utils as federation_utils from funkwhale_api.music import models as music_models +from funkwhale_api.playlists import models as playlists_models + from . import models +from . import tasks class FilteredArtistSerializer(serializers.ModelSerializer): @@ -43,3 +56,208 @@ class UserFilterSerializer(serializers.ModelSerializer): data["target_artist"] = target["obj"] return data + + +state_serializers = persisting_theory.Registry() + + +TAGS_FIELD = serializers.ListField(source="get_tags") + + +@state_serializers.register(name="music.Artist") +class ArtistStateSerializer(serializers.ModelSerializer): + tags = TAGS_FIELD + + class Meta: + model = music_models.Artist + fields = ["id", "name", "mbid", "fid", "creation_date", "uuid", "tags"] + + +@state_serializers.register(name="music.Album") +class AlbumStateSerializer(serializers.ModelSerializer): + tags = TAGS_FIELD + artist = ArtistStateSerializer() + + class Meta: + model = music_models.Album + fields = [ + "id", + "title", + "mbid", + "fid", + "creation_date", + "uuid", + "artist", + "release_date", + "tags", + ] + + +@state_serializers.register(name="music.Track") +class TrackStateSerializer(serializers.ModelSerializer): + tags = TAGS_FIELD + artist = ArtistStateSerializer() + album = AlbumStateSerializer() + + class Meta: + model = music_models.Track + fields = [ + "id", + "title", + "mbid", + "fid", + "creation_date", + "uuid", + "artist", + "album", + "disc_number", + "position", + "license", + "copyright", + "tags", + ] + + +@state_serializers.register(name="music.Library") +class LibraryStateSerializer(serializers.ModelSerializer): + class Meta: + model = music_models.Library + fields = [ + "id", + "uuid", + "fid", + "name", + "description", + "creation_date", + "privacy_level", + ] + + +@state_serializers.register(name="playlists.Playlist") +class PlaylistStateSerializer(serializers.ModelSerializer): + class Meta: + model = playlists_models.Playlist + fields = ["id", "name", "creation_date", "privacy_level"] + + +@state_serializers.register(name="federation.Actor") +class ActorStateSerializer(serializers.ModelSerializer): + class Meta: + model = federation_models.Actor + fields = [ + "fid", + "name", + "preferred_username", + "full_username", + "summary", + "domain", + "type", + "creation_date", + ] + + +def get_actor_query(attr, value): + data = federation_utils.get_actor_data_from_username(value) + return federation_utils.get_actor_from_username_data_query(None, data) + + +def get_target_owner(target): + mapping = { + music_models.Artist: lambda t: t.attributed_to, + music_models.Album: lambda t: t.attributed_to, + music_models.Track: lambda t: t.attributed_to, + music_models.Library: lambda t: t.actor, + playlists_models.Playlist: lambda t: t.user.actor, + federation_models.Actor: lambda t: t, + } + + return mapping[target.__class__](target) + + +TARGET_CONFIG = { + "artist": {"queryset": music_models.Artist.objects.all()}, + "album": {"queryset": music_models.Album.objects.all()}, + "track": {"queryset": music_models.Track.objects.all()}, + "library": { + "queryset": music_models.Library.objects.all(), + "id_attr": "uuid", + "id_field": serializers.UUIDField(), + }, + "playlist": {"queryset": playlists_models.Playlist.objects.all()}, + "account": { + "queryset": federation_models.Actor.objects.all(), + "id_attr": "full_username", + "id_field": serializers.EmailField(), + "get_query": get_actor_query, + }, +} +TARGET_FIELD = common_fields.GenericRelation(TARGET_CONFIG) + + +class ReportSerializer(serializers.ModelSerializer): + target = TARGET_FIELD + + class Meta: + model = models.Report + fields = [ + "uuid", + "summary", + "creation_date", + "handled_date", + "is_handled", + "submitter_email", + "target", + "type", + ] + read_only_fields = ["uuid", "is_handled", "creation_date", "handled_date"] + + def validate(self, validated_data): + validated_data = super().validate(validated_data) + submitter = self.context.get("submitter") + if submitter: + # we have an authenticated actor so no need to check further + return validated_data + + unauthenticated_report_types = preferences.get( + "moderation__unauthenticated_report_types" + ) + if validated_data["type"] not in unauthenticated_report_types: + raise serializers.ValidationError( + "You need an account to submit this report" + ) + + if not validated_data.get("submitter_email"): + raise serializers.ValidationError( + "You need to provide an email address to submit this report" + ) + + return validated_data + + def create(self, validated_data): + target_state_serializer = state_serializers[ + validated_data["target"]._meta.label + ] + + validated_data["target_state"] = target_state_serializer( + validated_data["target"] + ).data + # freeze target type/id in JSON so even if the corresponding object is deleted + # we can have the info and display it in the frontend + target_data = self.fields["target"].to_representation(validated_data["target"]) + validated_data["target_state"]["_target"] = json.loads( + json.dumps(target_data, cls=DjangoJSONEncoder) + ) + + if "fid" in validated_data["target_state"]: + validated_data["target_state"]["domain"] = urllib.parse.urlparse( + validated_data["target_state"]["fid"] + ).hostname + + validated_data["target_state"]["is_local"] = ( + validated_data["target_state"].get("domain", settings.FEDERATION_HOSTNAME) + == settings.FEDERATION_HOSTNAME + ) + validated_data["target_owner"] = get_target_owner(validated_data["target"]) + r = super().create(validated_data) + tasks.signals.report_created.send(sender=None, report=r) + return r diff --git a/api/funkwhale_api/moderation/signals.py b/api/funkwhale_api/moderation/signals.py new file mode 100644 index 0000000000000000000000000000000000000000..16be236e0c6f07d691d2072a5d4c7c2f6b8e92ac --- /dev/null +++ b/api/funkwhale_api/moderation/signals.py @@ -0,0 +1,3 @@ +import django.dispatch + +report_created = django.dispatch.Signal(providing_args=["report"]) diff --git a/api/funkwhale_api/moderation/tasks.py b/api/funkwhale_api/moderation/tasks.py new file mode 100644 index 0000000000000000000000000000000000000000..0d0e970521d804baf5e92fc6202ddaf50ae179ea --- /dev/null +++ b/api/funkwhale_api/moderation/tasks.py @@ -0,0 +1,116 @@ +import logging +from django.core import mail +from django.dispatch import receiver +from django.conf import settings + +from funkwhale_api.common import channels +from funkwhale_api.common import utils +from funkwhale_api.taskapp import celery +from funkwhale_api.federation import utils as federation_utils +from funkwhale_api.users import models as users_models + +from . import models +from . import signals + +logger = logging.getLogger(__name__) + + +@receiver(signals.report_created) +def broadcast_report_created(report, **kwargs): + from . import serializers + + channels.group_send( + "admin.moderation", + { + "type": "event.send", + "text": "", + "data": { + "type": "report.created", + "report": serializers.ReportSerializer(report).data, + "unresolved_count": models.Report.objects.filter( + is_handled=False + ).count(), + }, + }, + ) + + +@receiver(signals.report_created) +def trigger_moderator_email(report, **kwargs): + if settings.MODERATION_EMAIL_NOTIFICATIONS_ENABLED: + utils.on_commit(send_new_report_email_to_moderators.delay, report_id=report.pk) + + +@celery.app.task(name="moderation.send_new_report_email_to_moderators") +@celery.require_instance( + models.Report.objects.select_related("submitter").filter(is_handled=False), "report" +) +def send_new_report_email_to_moderators(report): + moderators = users_models.User.objects.filter( + is_active=True, permission_moderation=True + ) + if not moderators: + # we fallback on superusers + moderators = users_models.User.objects.filter(is_superuser=True) + moderators = sorted(moderators, key=lambda m: m.pk) + submitter_repr = ( + report.submitter.full_username if report.submitter else report.submitter_email + ) + subject = "[{} moderation - {}] New report from {}".format( + settings.FUNKWHALE_HOSTNAME, report.get_type_display(), submitter_repr + ) + detail_url = federation_utils.full_url( + "/manage/moderation/reports/{}".format(report.uuid) + ) + unresolved_reports_url = federation_utils.full_url( + "/manage/moderation/reports?q=resolved:no" + ) + unresolved_reports = models.Report.objects.filter(is_handled=False).count() + body = [ + '{} just submitted a report in the "{}" category.'.format( + submitter_repr, report.get_type_display() + ), + "", + "Reported object: {} - {}".format( + report.target._meta.verbose_name.title(), str(report.target) + ), + ] + if hasattr(report.target, "get_absolute_url"): + body.append( + "Open public page: {}".format( + federation_utils.full_url(report.target.get_absolute_url()) + ) + ) + if hasattr(report.target, "get_moderation_url"): + body.append( + "Open moderation page: {}".format( + federation_utils.full_url(report.target.get_moderation_url()) + ) + ) + if report.summary: + body += ["", "Report content:", "", report.summary] + + body += [ + "", + "- To handle this report, please visit {}".format(detail_url), + "- To view all unresolved reports (currently {}), please visit {}".format( + unresolved_reports, unresolved_reports_url + ), + "", + "—", + "", + "You are receiving this email because you are a moderator for {}.".format( + settings.FUNKWHALE_HOSTNAME + ), + ] + + for moderator in moderators: + if not moderator.email: + logger.warning("Moderator %s has no email configured", moderator.username) + continue + mail.send_mail( + subject, + message="\n".join(body), + recipient_list=[moderator.email], + from_email=settings.DEFAULT_FROM_EMAIL, + ) diff --git a/api/funkwhale_api/moderation/urls.py b/api/funkwhale_api/moderation/urls.py index 05d2e7a9223774db0329f66ae295255cb88d9b7a..597aacadbccb5e7a37afb0bd46e8d1cc6a881a1d 100644 --- a/api/funkwhale_api/moderation/urls.py +++ b/api/funkwhale_api/moderation/urls.py @@ -1,8 +1,9 @@ -from rest_framework import routers +from funkwhale_api.common import routers from . import views -router = routers.SimpleRouter() +router = routers.OptionalSlashRouter() router.register(r"content-filters", views.UserFilterViewSet, "content-filters") +router.register(r"reports", views.ReportsViewSet, "reports") urlpatterns = router.urls diff --git a/api/funkwhale_api/moderation/utils.py b/api/funkwhale_api/moderation/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..d4a1b879a537b0666c372a061e780057c8b90313 --- /dev/null +++ b/api/funkwhale_api/moderation/utils.py @@ -0,0 +1,21 @@ +from rest_framework import serializers + +from funkwhale_api.federation import models as federation_models + +from . import models +from . import serializers as moderation_serializers + + +NOTE_TARGET_FIELDS = { + "report": { + "queryset": models.Report.objects.all(), + "id_attr": "uuid", + "id_field": serializers.UUIDField(), + }, + "account": { + "queryset": federation_models.Actor.objects.all(), + "id_attr": "full_username", + "id_field": serializers.EmailField(), + "get_query": moderation_serializers.get_actor_query, + }, +} diff --git a/api/funkwhale_api/moderation/views.py b/api/funkwhale_api/moderation/views.py index 4d4e3e039abdd68858fe96df79ad965a02e49771..67de68001d507ce688ae20bba33b050fdc08e026 100644 --- a/api/funkwhale_api/moderation/views.py +++ b/api/funkwhale_api/moderation/views.py @@ -39,3 +39,31 @@ class UserFilterViewSet( def perform_create(self, serializer): serializer.save(user=self.request.user) + + +class ReportsViewSet(mixins.CreateModelMixin, viewsets.GenericViewSet): + lookup_field = "uuid" + queryset = models.Report.objects.all().order_by("-creation_date") + serializer_class = serializers.ReportSerializer + required_scope = "reports" + ordering_fields = ("creation_date",) + anonymous_policy = "setting" + anonymous_scopes = {"write:reports"} + throttling_scopes = { + "create": { + "anonymous": "anonymous-reports", + "authenticated": "authenticated-reports", + } + } + + def get_serializer_context(self): + context = super().get_serializer_context() + if self.request.user.is_authenticated: + context["submitter"] = self.request.user.actor + return context + + def perform_create(self, serializer): + submitter = None + if self.request.user.is_authenticated: + submitter = self.request.user.actor + serializer.save(submitter=submitter) diff --git a/api/funkwhale_api/music/factories.py b/api/funkwhale_api/music/factories.py index 430c82439805957c007c1a3c80aa8d02e2dcefb8..52e5020bbfd961635562b3f0eaced0dbd759d9b5 100644 --- a/api/funkwhale_api/music/factories.py +++ b/api/funkwhale_api/music/factories.py @@ -2,10 +2,11 @@ import os import factory -from funkwhale_api.factories import ManyToManyFromList, registry, NoUpdateOnCreate +from funkwhale_api.factories import registry, NoUpdateOnCreate from funkwhale_api.federation import factories as federation_factories from funkwhale_api.music import licenses +from funkwhale_api.tags import factories as tags_factories from funkwhale_api.users import factories as users_factories SAMPLES_PATH = os.path.join( @@ -55,7 +56,9 @@ class LicenseFactory(NoUpdateOnCreate, factory.django.DjangoModelFactory): @registry.register -class ArtistFactory(NoUpdateOnCreate, factory.django.DjangoModelFactory): +class ArtistFactory( + tags_factories.TaggableFactory, NoUpdateOnCreate, factory.django.DjangoModelFactory +): name = factory.Faker("name") mbid = factory.Faker("uuid4") fid = factory.Faker("federation_url") @@ -72,7 +75,9 @@ class ArtistFactory(NoUpdateOnCreate, factory.django.DjangoModelFactory): @registry.register -class AlbumFactory(NoUpdateOnCreate, factory.django.DjangoModelFactory): +class AlbumFactory( + tags_factories.TaggableFactory, NoUpdateOnCreate, factory.django.DjangoModelFactory +): title = factory.Faker("sentence", nb_words=3) mbid = factory.Faker("uuid4") release_date = factory.Faker("date_object") @@ -96,14 +101,14 @@ class AlbumFactory(NoUpdateOnCreate, factory.django.DjangoModelFactory): @registry.register -class TrackFactory(NoUpdateOnCreate, factory.django.DjangoModelFactory): +class TrackFactory( + tags_factories.TaggableFactory, NoUpdateOnCreate, factory.django.DjangoModelFactory +): fid = factory.Faker("federation_url") title = factory.Faker("sentence", nb_words=3) mbid = factory.Faker("uuid4") album = factory.SubFactory(AlbumFactory) - artist = factory.SelfAttribute("album.artist") position = 1 - tags = ManyToManyFromList("tags") playable = playable_factory("track") class Meta: @@ -118,6 +123,26 @@ class TrackFactory(NoUpdateOnCreate, factory.django.DjangoModelFactory): fid=factory.Faker("federation_url", local=True), album__local=True ) + @factory.post_generation + def artist(self, created, extracted, **kwargs): + """ + A bit intricated, because we want to be able to specify a different + track artist with a fallback on album artist if nothing is specified. + + And handle cases where build or build_batch are used (so no db calls) + """ + if extracted: + self.artist = extracted + elif kwargs: + if created: + self.artist = ArtistFactory(**kwargs) + else: + self.artist = ArtistFactory.build(**kwargs) + elif self.album: + self.artist = self.album.artist + if created: + self.save() + @factory.post_generation def license(self, created, extracted, **kwargs): if not created: @@ -164,18 +189,6 @@ class UploadVersionFactory(NoUpdateOnCreate, factory.django.DjangoModelFactory): model = "music.UploadVersion" -@registry.register -class TagFactory(NoUpdateOnCreate, factory.django.DjangoModelFactory): - name = factory.SelfAttribute("slug") - slug = factory.Faker("slug") - - class Meta: - model = "taggit.Tag" - - -# XXX To remove - - class ImportBatchFactory(NoUpdateOnCreate, factory.django.DjangoModelFactory): submitted_by = factory.SubFactory(users_factories.UserFactory) diff --git a/api/funkwhale_api/music/filters.py b/api/funkwhale_api/music/filters.py index fa5a10f6d4397ed296d8710d6b76d6dc6646ec28..44763b966ebe7a0eb02a28988b2213e725e1ffdb 100644 --- a/api/funkwhale_api/music/filters.py +++ b/api/funkwhale_api/music/filters.py @@ -9,9 +9,20 @@ from . import models from . import utils +def filter_tags(queryset, name, value): + non_empty_tags = [v.lower() for v in value if v] + for tag in non_empty_tags: + queryset = queryset.filter(tagged_items__tag__name=tag).distinct() + return queryset + + +TAG_FILTER = common_filters.MultipleQueryFilter(method=filter_tags) + + class ArtistFilter(moderation_filters.HiddenContentFilterSet): q = fields.SearchFilter(search_fields=["name"]) playable = filters.BooleanFilter(field_name="_", method="filter_playable") + tag = TAG_FILTER class Meta: model = models.Artist @@ -29,6 +40,7 @@ class ArtistFilter(moderation_filters.HiddenContentFilterSet): class TrackFilter(moderation_filters.HiddenContentFilterSet): q = fields.SearchFilter(search_fields=["title", "album__title", "artist__name"]) playable = filters.BooleanFilter(field_name="_", method="filter_playable") + tag = TAG_FILTER id = common_filters.MultipleQueryFilter(coerce=int) class Meta: @@ -94,6 +106,7 @@ class UploadFilter(filters.FilterSet): class AlbumFilter(moderation_filters.HiddenContentFilterSet): playable = filters.BooleanFilter(field_name="_", method="filter_playable") q = fields.SearchFilter(search_fields=["title", "artist__name"]) + tag = TAG_FILTER class Meta: model = models.Album diff --git a/api/funkwhale_api/music/metadata.py b/api/funkwhale_api/music/metadata.py index f0ea67b1aa66003be34cd0572f6e79c10c8064f4..801ea6a9badc141c5e06e2eb3f69caa5045076d1 100644 --- a/api/funkwhale_api/music/metadata.py +++ b/api/funkwhale_api/music/metadata.py @@ -1,4 +1,5 @@ import base64 +from collections.abc import Mapping import datetime import logging import pendulum @@ -9,12 +10,13 @@ import mutagen.oggvorbis import mutagen.flac from rest_framework import serializers -from rest_framework.compat import Mapping + +from funkwhale_api.tags import models as tags_models logger = logging.getLogger(__name__) NODEFAULT = object() # default title used when imported tracks miss the `Album` tag, see #122 -UNKWOWN_ALBUM = "[Unknown Album]" +UNKNOWN_ALBUM = "[Unknown Album]" class TagNotFound(KeyError): @@ -68,6 +70,45 @@ def clean_id3_pictures(apic): return pictures +def get_mp4_tag(f, k): + if k == "pictures": + return f.get("covr") + raw_value = f.get(k, None) + + if not raw_value: + raise TagNotFound(k) + + value = raw_value[0] + try: + return value.decode() + except AttributeError: + return value + + +def get_mp4_position(raw_value): + return raw_value[0] + + +def clean_mp4_pictures(raw_pictures): + pictures = [] + for p in list(raw_pictures): + if p.imageformat == p.FORMAT_JPEG: + mimetype = "image/jpeg" + elif p.imageformat == p.FORMAT_PNG: + mimetype = "image/png" + else: + continue + pictures.append( + { + "mimetype": mimetype, + "content": bytes(p), + "description": "", + "type": mutagen.id3.PictureType.COVER_FRONT, + } + ) + return pictures + + def get_flac_tag(f, k): if k == "pictures": return f.pictures @@ -144,6 +185,11 @@ CONF = { "mbid": {"field": "musicbrainz_trackid"}, "license": {}, "copyright": {}, + "genre": {}, + "pictures": { + "field": "metadata_block_picture", + "to_application": clean_ogg_pictures, + }, }, }, "OggVorbis": { @@ -162,6 +208,7 @@ CONF = { "mbid": {"field": "musicbrainz_trackid"}, "license": {}, "copyright": {}, + "genre": {}, "pictures": { "field": "metadata_block_picture", "to_application": clean_ogg_pictures, @@ -184,6 +231,7 @@ CONF = { "mbid": {"field": "MusicBrainz Track Id"}, "license": {}, "copyright": {}, + "genre": {}, }, }, "MP3": { @@ -199,6 +247,7 @@ CONF = { "date": {"field": "TDRC"}, "musicbrainz_albumid": {"field": "MusicBrainz Album Id"}, "musicbrainz_artistid": {"field": "MusicBrainz Artist Id"}, + "genre": {"field": "TCON"}, "musicbrainz_albumartistid": {"field": "MusicBrainz Album Artist Id"}, "mbid": {"field": "UFID", "getter": get_mp3_recording_id}, "pictures": {}, @@ -206,6 +255,33 @@ CONF = { "copyright": {"field": "TCOP"}, }, }, + "MP4": { + "getter": get_mp4_tag, + "clean_pictures": clean_mp4_pictures, + "fields": { + "position": {"field": "trkn", "to_application": get_mp4_position}, + "disc_number": {"field": "disk", "to_application": get_mp4_position}, + "title": {"field": "©nam"}, + "artist": {"field": "©ART"}, + "album_artist": {"field": "aART"}, + "album": {"field": "©alb"}, + "date": {"field": "©day"}, + "musicbrainz_albumid": { + "field": "----:com.apple.iTunes:MusicBrainz Album Id" + }, + "musicbrainz_artistid": { + "field": "----:com.apple.iTunes:MusicBrainz Artist Id" + }, + "genre": {"field": "©gen"}, + "musicbrainz_albumartistid": { + "field": "----:com.apple.iTunes:MusicBrainz Album Artist Id" + }, + "mbid": {"field": "----:com.apple.iTunes:MusicBrainz Track Id"}, + "pictures": {}, + "license": {"field": "----:com.apple.iTunes:LICENSE"}, + "copyright": {"field": "cprt"}, + }, + }, "FLAC": { "getter": get_flac_tag, "clean_pictures": clean_flac_pictures, @@ -220,6 +296,7 @@ CONF = { "musicbrainz_albumid": {}, "musicbrainz_artistid": {}, "musicbrainz_albumartistid": {}, + "genre": {}, "mbid": {"field": "musicbrainz_trackid"}, "test": {}, "pictures": {}, @@ -431,7 +508,7 @@ class AlbumField(serializers.Field): except TagNotFound: title = "" - title = title.strip() or UNKWOWN_ALBUM + title = title.strip() or UNKNOWN_ALBUM final = { "title": title, "release_date": data.get("date", None), @@ -485,6 +562,58 @@ class PermissiveDateField(serializers.CharField): return None +def extract_tags_from_genre(string): + tags = [] + delimiter = "@@@@@" + for d in [" - ", ",", ";", "/"]: + # Replace common tags separators by a custom delimiter + string = string.replace(d, delimiter) + + # loop on the parts (splitting on our custom delimiter) + for tag in string.split(delimiter): + tag = tag.strip() + for d in ["-"]: + # preparation for replacement so that Pop-Rock becomes Pop Rock, then PopRock + # (step 1, step 2 happens below) + tag = tag.replace(d, " ") + if not tag: + continue + final_tag = "" + if not tags_models.TAG_REGEX.match(tag.replace(" ", "")): + # the string contains some non words chars ($, €, etc.), right now + # we simply skip such tags + continue + # concatenate the parts and uppercase them so that 'pop rock' becomes 'PopRock' + if len(tag.split(" ")) == 1: + # we append the tag "as is", because it doesn't contain any space + tags.append(tag) + continue + for part in tag.split(" "): + # the tag contains space, there's work to do to have consistent case + # 'pop rock' -> 'PopRock' + # (step 2) + if not part: + continue + final_tag += part[0].upper() + part[1:] + if final_tag: + tags.append(final_tag) + return tags + + +class TagsField(serializers.CharField): + def get_value(self, data): + return data + + def to_internal_value(self, data): + try: + value = data.get("genre") or "" + except TagNotFound: + return [] + value = super().to_internal_value(str(value)) + + return extract_tags_from_genre(value) + + class MBIDField(serializers.UUIDField): def __init__(self, *args, **kwargs): kwargs.setdefault("allow_null", True) @@ -533,6 +662,7 @@ class TrackMetadataSerializer(serializers.Serializer): copyright = serializers.CharField(allow_blank=True, allow_null=True, required=False) license = serializers.CharField(allow_blank=True, allow_null=True, required=False) mbid = MBIDField() + tags = TagsField(allow_blank=True, allow_null=True, required=False) album = AlbumField() artists = ArtistField() @@ -544,6 +674,7 @@ class TrackMetadataSerializer(serializers.Serializer): "position", "disc_number", "mbid", + "tags", ] def validate(self, validated_data): @@ -553,7 +684,7 @@ class TrackMetadataSerializer(serializers.Serializer): v = validated_data[field] except KeyError: continue - if v in ["", None]: + if v in ["", None, []]: validated_data.pop(field) return validated_data diff --git a/api/funkwhale_api/music/migrations/0004_track_tags.py b/api/funkwhale_api/music/migrations/0004_track_tags.py index b999a70313ce7951fdfed67c534592c55cb834e1..6fc627b4afe2f857df5aed12b07da4eaab852df9 100644 --- a/api/funkwhale_api/music/migrations/0004_track_tags.py +++ b/api/funkwhale_api/music/migrations/0004_track_tags.py @@ -2,25 +2,10 @@ from __future__ import unicode_literals from django.db import migrations -import taggit.managers class Migration(migrations.Migration): - dependencies = [ - ("taggit", "0002_auto_20150616_2121"), - ("music", "0003_auto_20151222_2233"), - ] + dependencies = [("music", "0003_auto_20151222_2233")] - operations = [ - migrations.AddField( - model_name="track", - name="tags", - field=taggit.managers.TaggableManager( - verbose_name="Tags", - help_text="A comma-separated list of tags.", - through="taggit.TaggedItem", - to="taggit.Tag", - ), - ) - ] + operations = [] diff --git a/api/funkwhale_api/music/migrations/0027_auto_20180515_1808.py b/api/funkwhale_api/music/migrations/0027_auto_20180515_1808.py index 1e3949da4823b5a3859277facfaa3f577f8360d6..0f01509ad198c936058c71b3d065554ddab5ec30 100644 --- a/api/funkwhale_api/music/migrations/0027_auto_20180515_1808.py +++ b/api/funkwhale_api/music/migrations/0027_auto_20180515_1808.py @@ -1,7 +1,6 @@ # Generated by Django 2.0.3 on 2018-05-15 18:08 from django.db import migrations, models -import taggit.managers class Migration(migrations.Migration): @@ -19,15 +18,4 @@ class Migration(migrations.Migration): name="size", field=models.IntegerField(blank=True, null=True), ), - migrations.AlterField( - model_name="track", - name="tags", - field=taggit.managers.TaggableManager( - blank=True, - help_text="A comma-separated list of tags.", - through="taggit.TaggedItem", - to="taggit.Tag", - verbose_name="Tags", - ), - ), ] diff --git a/api/funkwhale_api/music/models.py b/api/funkwhale_api/music/models.py index cf6a0b7ba310cbbe7354a20072de3a6f352333e4..49d22fa8541f50b896fc9b9881f4176bece8e36d 100644 --- a/api/funkwhale_api/music/models.py +++ b/api/funkwhale_api/music/models.py @@ -9,6 +9,7 @@ import uuid import pendulum import pydub from django.conf import settings +from django.contrib.contenttypes.fields import GenericRelation from django.contrib.postgres.fields import JSONField from django.core.files.base import ContentFile from django.core.serializers.json import DjangoJSONEncoder @@ -17,7 +18,6 @@ from django.db.models.signals import post_save from django.dispatch import receiver from django.urls import reverse from django.utils import timezone -from taggit.managers import TaggableManager from versatileimagefield.fields import VersatileImageField from versatileimagefield.image_warmer import VersatileImageFieldWarmer @@ -29,10 +29,18 @@ from funkwhale_api.common import session from funkwhale_api.common import utils as common_utils from funkwhale_api.federation import models as federation_models from funkwhale_api.federation import utils as federation_utils +from funkwhale_api.tags import models as tags_models from . import importers, metadata, utils logger = logging.getLogger(__name__) +MAX_LENGTHS = { + "ARTIST_NAME": 255, + "ALBUM_TITLE": 255, + "TRACK_TITLE": 255, + "COPYRIGHT": 500, +} + def empty_dict(): return {} @@ -126,6 +134,9 @@ class APIModelMixin(models.Model): parsed = urllib.parse.urlparse(self.fid) return parsed.hostname + def get_tags(self): + return list(sorted(self.tagged_items.values_list("tag__name", flat=True))) + class License(models.Model): code = models.CharField(primary_key=True, max_length=100) @@ -183,7 +194,7 @@ class ArtistQuerySet(common_models.LocalFromFidQuerySet, models.QuerySet): class Artist(APIModelMixin): - name = models.CharField(max_length=255) + name = models.CharField(max_length=MAX_LENGTHS["ARTIST_NAME"]) federation_namespace = "artists" musicbrainz_model = "artist" musicbrainz_mapping = { @@ -200,19 +211,24 @@ class Artist(APIModelMixin): on_delete=models.SET_NULL, related_name="attributed_artists", ) + tagged_items = GenericRelation(tags_models.TaggedItem) + fetches = GenericRelation( + "federation.Fetch", + content_type_field="object_content_type", + object_id_field="object_id", + ) + api = musicbrainz.api.artists objects = ArtistQuerySet.as_manager() def __str__(self): return self.name - @property - def tags(self): - t = [] - for album in self.albums.all(): - for tag in album.tags: - t.append(tag) - return set(t) + def get_absolute_url(self): + return "/library/artists/{}".format(self.pk) + + def get_moderation_url(self): + return "/manage/library/artists/{}".format(self.pk) @classmethod def get_or_create_from_name(cls, name, **kwargs): @@ -266,7 +282,7 @@ class AlbumQuerySet(common_models.LocalFromFidQuerySet, models.QuerySet): class Album(APIModelMixin): - title = models.CharField(max_length=255) + title = models.CharField(max_length=MAX_LENGTHS["ALBUM_TITLE"]) artist = models.ForeignKey(Artist, related_name="albums", on_delete=models.CASCADE) release_date = models.DateField(null=True, blank=True) release_group_id = models.UUIDField(null=True, blank=True) @@ -286,6 +302,13 @@ class Album(APIModelMixin): on_delete=models.SET_NULL, related_name="attributed_albums", ) + tagged_items = GenericRelation(tags_models.TaggedItem) + fetches = GenericRelation( + "federation.Fetch", + content_type_field="object_content_type", + object_id_field="object_id", + ) + api_includes = ["artist-credits", "recordings", "media", "release-groups"] api = musicbrainz.api.releases federation_namespace = "albums" @@ -314,6 +337,7 @@ class Album(APIModelMixin): if data: extensions = {"image/jpeg": "jpg", "image/png": "png", "image/gif": "gif"} extension = extensions.get(data["mimetype"], "jpg") + f = None if data.get("content"): # we have to cover itself f = ContentFile(data["content"]) @@ -333,19 +357,27 @@ class Album(APIModelMixin): return else: f = ContentFile(response.content) - self.cover.save("{}.{}".format(self.uuid, extension), f, save=False) - self.save(update_fields=["cover"]) - return self.cover.file + if f: + self.cover.save("{}.{}".format(self.uuid, extension), f, save=False) + self.save(update_fields=["cover"]) + return self.cover.file if self.mbid: image_data = musicbrainz.api.images.get_front(str(self.mbid)) f = ContentFile(image_data) self.cover.save("{0}.jpg".format(self.mbid), f, save=False) self.save(update_fields=["cover"]) - return self.cover.file + if self.cover: + return self.cover.file def __str__(self): return self.title + def get_absolute_url(self): + return "/library/albums/{}".format(self.pk) + + def get_moderation_url(self): + return "/manage/library/albums/{}".format(self.pk) + @property def cover_path(self): if not self.cover: @@ -356,14 +388,6 @@ class Album(APIModelMixin): # external storage return self.cover.name - @property - def tags(self): - t = [] - for track in self.tracks.all(): - for tag in track.tags.all(): - t.append(tag) - return set(t) - @classmethod def get_or_create_from_title(cls, title, **kwargs): kwargs.update({"title": title}) @@ -380,7 +404,8 @@ def import_tags(instance, cleaned_data, raw_data): except ValueError: continue tags_to_add.append(tag_data["name"]) - instance.tags.add(*tags_to_add) + + tags_models.add_tags(instance, *tags_to_add) def import_album(v): @@ -430,7 +455,7 @@ def get_artist(release_list): class Track(APIModelMixin): - title = models.CharField(max_length=255) + title = models.CharField(max_length=MAX_LENGTHS["TRACK_TITLE"]) artist = models.ForeignKey(Artist, related_name="tracks", on_delete=models.CASCADE) disc_number = models.PositiveIntegerField(null=True, blank=True) position = models.PositiveIntegerField(null=True, blank=True) @@ -454,7 +479,9 @@ class Track(APIModelMixin): on_delete=models.SET_NULL, related_name="attributed_tracks", ) - copyright = models.CharField(max_length=500, null=True, blank=True) + copyright = models.CharField( + max_length=MAX_LENGTHS["COPYRIGHT"], null=True, blank=True + ) federation_namespace = "tracks" musicbrainz_model = "recording" api = musicbrainz.api.recordings @@ -472,7 +499,12 @@ class Track(APIModelMixin): } import_hooks = [import_tags] objects = TrackQuerySet.as_manager() - tags = TaggableManager(blank=True) + tagged_items = GenericRelation(tags_models.TaggedItem) + fetches = GenericRelation( + "federation.Fetch", + content_type_field="object_content_type", + object_id_field="object_id", + ) class Meta: ordering = ["album", "disc_number", "position"] @@ -480,6 +512,12 @@ class Track(APIModelMixin): def __str__(self): return self.title + def get_absolute_url(self): + return "/library/tracks/{}".format(self.pk) + + def get_moderation_url(self): + return "/manage/library/tracks/{}".format(self.pk) + def save(self, **kwargs): try: self.artist @@ -1043,6 +1081,12 @@ class Library(federation_models.FederationMixin): uploads_count = models.PositiveIntegerField(default=0) objects = LibraryQuerySet.as_manager() + def __str__(self): + return self.name + + def get_moderation_url(self): + return "/manage/library/libraries/{}".format(self.uuid) + def get_federation_id(self): return federation_utils.full_url( reverse("federation:music:libraries-detail", kwargs={"uuid": self.uuid}) diff --git a/api/funkwhale_api/music/mutations.py b/api/funkwhale_api/music/mutations.py index 9fd91fb506d245e0ea50f5ef9cab28c7e7ee0dc1..b149f19635b5e92c2d310cf53d71a1471d35c4a4 100644 --- a/api/funkwhale_api/music/mutations.py +++ b/api/funkwhale_api/music/mutations.py @@ -1,5 +1,7 @@ from funkwhale_api.common import mutations from funkwhale_api.federation import routes +from funkwhale_api.tags import models as tags_models +from funkwhale_api.tags import serializers as tags_serializers from . import models @@ -9,7 +11,27 @@ def can_suggest(obj, actor): def can_approve(obj, actor): - return obj.is_local and actor.user and actor.user.get_permissions()["library"] + if not obj.is_local or not actor.user: + return False + + return ( + actor.id is not None and actor.id == obj.attributed_to_id + ) or actor.user.get_permissions()["library"] + + +class TagMutation(mutations.UpdateMutationSerializer): + tags = tags_serializers.TagsListField() + previous_state_handlers = { + "tags": lambda obj: list( + sorted(obj.tagged_items.values_list("tag__name", flat=True)) + ) + } + + def update(self, instance, validated_data): + tags = validated_data.pop("tags", []) + r = super().update(instance, validated_data) + tags_models.set_tags(instance, *tags) + return r @mutations.registry.connect( @@ -17,12 +39,12 @@ def can_approve(obj, actor): models.Track, perm_checkers={"suggest": can_suggest, "approve": can_approve}, ) -class TrackMutationSerializer(mutations.UpdateMutationSerializer): +class TrackMutationSerializer(TagMutation): serialized_relations = {"license": "code"} class Meta: model = models.Track - fields = ["license", "title", "position", "copyright"] + fields = ["license", "title", "position", "copyright", "tags"] def post_apply(self, obj, validated_data): routes.outbox.dispatch( @@ -35,10 +57,10 @@ class TrackMutationSerializer(mutations.UpdateMutationSerializer): models.Artist, perm_checkers={"suggest": can_suggest, "approve": can_approve}, ) -class ArtistMutationSerializer(mutations.UpdateMutationSerializer): +class ArtistMutationSerializer(TagMutation): class Meta: model = models.Artist - fields = ["name"] + fields = ["name", "tags"] def post_apply(self, obj, validated_data): routes.outbox.dispatch( @@ -51,10 +73,10 @@ class ArtistMutationSerializer(mutations.UpdateMutationSerializer): models.Album, perm_checkers={"suggest": can_suggest, "approve": can_approve}, ) -class AlbumMutationSerializer(mutations.UpdateMutationSerializer): +class AlbumMutationSerializer(TagMutation): class Meta: model = models.Album - fields = ["title", "release_date"] + fields = ["title", "release_date", "tags"] def post_apply(self, obj, validated_data): routes.outbox.dispatch( diff --git a/api/funkwhale_api/music/serializers.py b/api/funkwhale_api/music/serializers.py index 867d15d8ddb864292263be107b159fb095f7de1e..77854d437647a3e661ea462c33217db0b3425447 100644 --- a/api/funkwhale_api/music/serializers.py +++ b/api/funkwhale_api/music/serializers.py @@ -4,7 +4,6 @@ from django.db import transaction from django import urls from django.conf import settings from rest_framework import serializers -from taggit.models import Tag from versatileimagefield.serializers import VersatileImageFieldSerializer from funkwhale_api.activity import serializers as activity_serializers @@ -12,6 +11,8 @@ from funkwhale_api.common import serializers as common_serializers from funkwhale_api.common import utils as common_utils from funkwhale_api.federation import routes from funkwhale_api.federation import utils as federation_utils +from funkwhale_api.playlists import models as playlists_models +from funkwhale_api.tags.models import Tag from . import filters, models, tasks @@ -19,6 +20,16 @@ from . import filters, models, tasks cover_field = VersatileImageFieldSerializer(allow_null=True, sizes="square") +def serialize_attributed_to(self, obj): + # Import at runtime to avoid a circular import issue + from funkwhale_api.federation import serializers as federation_serializers + + if not obj.attributed_to_id: + return + + return federation_serializers.APIActorSerializer(obj.attributed_to).data + + class LicenseSerializer(serializers.Serializer): id = serializers.SerializerMethodField() url = serializers.URLField() @@ -67,63 +78,80 @@ class ArtistAlbumSerializer(serializers.ModelSerializer): class ArtistWithAlbumsSerializer(serializers.ModelSerializer): albums = ArtistAlbumSerializer(many=True, read_only=True) + tags = serializers.SerializerMethodField() + attributed_to = serializers.SerializerMethodField() + tracks_count = serializers.SerializerMethodField() class Meta: model = models.Artist - fields = ("id", "fid", "mbid", "name", "creation_date", "albums", "is_local") - - -class ArtistSimpleSerializer(serializers.ModelSerializer): - class Meta: - model = models.Artist - fields = ("id", "fid", "mbid", "name", "creation_date", "is_local") - - -class AlbumTrackSerializer(serializers.ModelSerializer): - artist = ArtistSimpleSerializer(read_only=True) - uploads = serializers.SerializerMethodField() - listen_url = serializers.SerializerMethodField() - duration = serializers.SerializerMethodField() - - class Meta: - model = models.Track fields = ( "id", "fid", "mbid", - "title", - "album", - "artist", + "name", "creation_date", - "position", - "disc_number", - "uploads", - "listen_url", - "duration", - "copyright", - "license", + "albums", "is_local", + "tags", + "attributed_to", + "tracks_count", ) - def get_uploads(self, obj): - uploads = getattr(obj, "playable_uploads", []) - return TrackUploadSerializer(uploads, many=True).data + def get_tags(self, obj): + tagged_items = getattr(obj, "_prefetched_tagged_items", []) + return [ti.tag.name for ti in tagged_items] - def get_listen_url(self, obj): - return obj.listen_url + get_attributed_to = serialize_attributed_to - def get_duration(self, obj): - try: - return obj.duration - except AttributeError: - return None + def get_tracks_count(self, o): + tracks = getattr(o, "_prefetched_tracks", None) + return len(tracks) if tracks else None + + +def serialize_artist_simple(artist): + return { + "id": artist.id, + "fid": artist.fid, + "mbid": str(artist.mbid), + "name": artist.name, + "creation_date": serializers.DateTimeField().to_representation( + artist.creation_date + ), + "is_local": artist.is_local, + } + + +def serialize_album_track(track): + return { + "id": track.id, + "fid": track.fid, + "mbid": str(track.mbid), + "title": track.title, + "artist": serialize_artist_simple(track.artist), + "album": track.album_id, + "creation_date": serializers.DateTimeField().to_representation( + track.creation_date + ), + "position": track.position, + "disc_number": track.disc_number, + "uploads": [ + serialize_upload(u) for u in getattr(track, "playable_uploads", []) + ], + "listen_url": track.listen_url, + "duration": getattr(track, "duration", None), + "copyright": track.copyright, + "license": track.license_id, + "is_local": track.is_local, + } class AlbumSerializer(serializers.ModelSerializer): tracks = serializers.SerializerMethodField() - artist = ArtistSimpleSerializer(read_only=True) + artist = serializers.SerializerMethodField() cover = cover_field is_playable = serializers.SerializerMethodField() + tags = serializers.SerializerMethodField() + attributed_to = serializers.SerializerMethodField() class Meta: model = models.Album @@ -139,11 +167,18 @@ class AlbumSerializer(serializers.ModelSerializer): "creation_date", "is_playable", "is_local", + "tags", + "attributed_to", ) + get_attributed_to = serialize_attributed_to + + def get_artist(self, o): + return serialize_artist_simple(o.artist) + def get_tracks(self, o): ordered_tracks = o.tracks.all() - return AlbumTrackSerializer(ordered_tracks, many=True).data + return [serialize_album_track(track) for track in ordered_tracks] def get_is_playable(self, obj): try: @@ -153,9 +188,13 @@ class AlbumSerializer(serializers.ModelSerializer): except AttributeError: return None + def get_tags(self, obj): + tagged_items = getattr(obj, "_prefetched_tagged_items", []) + return [ti.tag.name for ti in tagged_items] + class TrackAlbumSerializer(serializers.ModelSerializer): - artist = ArtistSimpleSerializer(read_only=True) + artist = serializers.SerializerMethodField() cover = cover_field class Meta: @@ -172,26 +211,29 @@ class TrackAlbumSerializer(serializers.ModelSerializer): "is_local", ) + def get_artist(self, o): + return serialize_artist_simple(o.artist) -class TrackUploadSerializer(serializers.ModelSerializer): - class Meta: - model = models.Upload - fields = ( - "uuid", - "listen_url", - "size", - "duration", - "bitrate", - "mimetype", - "extension", - ) + +def serialize_upload(upload): + return { + "uuid": str(upload.uuid), + "listen_url": upload.listen_url, + "size": upload.size, + "duration": upload.duration, + "bitrate": upload.bitrate, + "mimetype": upload.mimetype, + "extension": upload.extension, + } class TrackSerializer(serializers.ModelSerializer): - artist = ArtistSimpleSerializer(read_only=True) + artist = serializers.SerializerMethodField() album = TrackAlbumSerializer(read_only=True) uploads = serializers.SerializerMethodField() listen_url = serializers.SerializerMethodField() + tags = serializers.SerializerMethodField() + attributed_to = serializers.SerializerMethodField() class Meta: model = models.Track @@ -210,14 +252,24 @@ class TrackSerializer(serializers.ModelSerializer): "copyright", "license", "is_local", + "tags", + "attributed_to", ) + get_attributed_to = serialize_attributed_to + + def get_artist(self, o): + return serialize_artist_simple(o.artist) + def get_listen_url(self, obj): return obj.listen_url def get_uploads(self, obj): - uploads = getattr(obj, "playable_uploads", []) - return TrackUploadSerializer(uploads, many=True).data + return [serialize_upload(u) for u in getattr(obj, "playable_uploads", [])] + + def get_tags(self, obj): + tagged_items = getattr(obj, "_prefetched_tagged_items", []) + return [ti.tag.name for ti in tagged_items] @common_serializers.track_fields_for_update("name", "description", "privacy_level") @@ -361,7 +413,7 @@ class UploadActionSerializer(common_serializers.ActionSerializer): class TagSerializer(serializers.ModelSerializer): class Meta: model = Tag - fields = ("id", "name", "slug") + fields = ("id", "name", "creation_date") class SimpleAlbumSerializer(serializers.ModelSerializer): @@ -499,6 +551,38 @@ class OembedSerializer(serializers.Serializer): data["author_url"] = federation_utils.full_url( common_utils.spa_reverse("library_artist", kwargs={"pk": artist.pk}) ) + elif match.url_name == "library_playlist": + qs = playlists_models.Playlist.objects.filter( + pk=int(match.kwargs["pk"]), privacy_level="everyone" + ) + try: + obj = qs.get() + except playlists_models.Playlist.DoesNotExist: + raise serializers.ValidationError( + "No artist matching id {}".format(match.kwargs["pk"]) + ) + embed_type = "playlist" + embed_id = obj.pk + playlist_tracks = obj.playlist_tracks.exclude(track__album__cover="") + playlist_tracks = playlist_tracks.exclude(track__album__cover=None) + playlist_tracks = playlist_tracks.select_related("track__album").order_by( + "index" + ) + first_playlist_track = playlist_tracks.first() + + if first_playlist_track: + data["thumbnail_url"] = federation_utils.full_url( + first_playlist_track.track.album.cover.crop["400x400"].url + ) + data["thumbnail_width"] = 400 + data["thumbnail_height"] = 400 + data["title"] = obj.name + data["description"] = obj.name + data["author_name"] = obj.name + data["height"] = 400 + data["author_url"] = federation_utils.full_url( + common_utils.spa_reverse("library_playlist", kwargs={"pk": obj.pk}) + ) else: raise serializers.ValidationError( "Unsupported url: {}".format(validated_data["url"]) diff --git a/api/funkwhale_api/music/spa_views.py b/api/funkwhale_api/music/spa_views.py index 7fafedf618ed013d08824d4e22cf73d705e3fdd3..5215dcdd8600a1c129865349561e0a6e727e4aec 100644 --- a/api/funkwhale_api/music/spa_views.py +++ b/api/funkwhale_api/music/spa_views.py @@ -5,6 +5,7 @@ from django.urls import reverse from django.db.models import Q from funkwhale_api.common import utils +from funkwhale_api.playlists import models as playlists_models from . import models from . import serializers @@ -203,3 +204,59 @@ def library_artist(request, pk): # twitter player is also supported in various software metas += get_twitter_card_metas(type="artist", id=obj.pk) return metas + + +def library_playlist(request, pk): + queryset = playlists_models.Playlist.objects.filter(pk=pk, privacy_level="everyone") + try: + obj = queryset.get() + except playlists_models.Playlist.DoesNotExist: + return [] + obj_url = utils.join_url( + settings.FUNKWHALE_URL, + utils.spa_reverse("library_playlist", kwargs={"pk": obj.pk}), + ) + # we use the first playlist track's album's cover as image + playlist_tracks = obj.playlist_tracks.exclude(track__album__cover="") + playlist_tracks = playlist_tracks.exclude(track__album__cover=None) + playlist_tracks = playlist_tracks.select_related("track__album").order_by("index") + first_playlist_track = playlist_tracks.first() + metas = [ + {"tag": "meta", "property": "og:url", "content": obj_url}, + {"tag": "meta", "property": "og:title", "content": obj.name}, + {"tag": "meta", "property": "og:type", "content": "music.playlist"}, + ] + + if first_playlist_track: + metas.append( + { + "tag": "meta", + "property": "og:image", + "content": utils.join_url( + settings.FUNKWHALE_URL, + first_playlist_track.track.album.cover.crop["400x400"].url, + ), + } + ) + + if ( + models.Upload.objects.filter( + track__pk__in=[obj.playlist_tracks.values("track")] + ) + .playable_by(None) + .exists() + ): + metas.append( + { + "tag": "link", + "rel": "alternate", + "type": "application/json+oembed", + "href": ( + utils.join_url(settings.FUNKWHALE_URL, reverse("api:v1:oembed")) + + "?format=json&url={}".format(urllib.parse.quote_plus(obj_url)) + ), + } + ) + # twitter player is also supported in various software + metas += get_twitter_card_metas(type="playlist", id=obj.pk) + return metas diff --git a/api/funkwhale_api/music/tasks.py b/api/funkwhale_api/music/tasks.py index ff3cde440a40eeb021e43127e5944d043dd151d7..ca32c808eaaa1b4eb35c8f20ecc933c77a7ee17f 100644 --- a/api/funkwhale_api/music/tasks.py +++ b/api/funkwhale_api/music/tasks.py @@ -14,6 +14,7 @@ from requests.exceptions import RequestException from funkwhale_api.common import channels, preferences from funkwhale_api.federation import routes from funkwhale_api.federation import library as lb +from funkwhale_api.tags import models as tags_models from funkwhale_api.taskapp import celery from . import licenses @@ -54,19 +55,21 @@ def update_album_cover( ) -IMAGE_TYPES = [("jpg", "image/jpeg"), ("png", "image/png")] +IMAGE_TYPES = [("jpg", "image/jpeg"), ("jpeg", "image/jpeg"), ("png", "image/png")] +FOLDER_IMAGE_NAMES = ["cover", "folder"] def get_cover_from_fs(dir_path): if os.path.exists(dir_path): - for e, m in IMAGE_TYPES: - cover_path = os.path.join(dir_path, "cover.{}".format(e)) - if not os.path.exists(cover_path): - logger.debug("Cover %s does not exists", cover_path) - continue - with open(cover_path, "rb") as c: - logger.info("Found cover at %s", cover_path) - return {"mimetype": m, "content": c.read()} + for name in FOLDER_IMAGE_NAMES: + for e, m in IMAGE_TYPES: + cover_path = os.path.join(dir_path, "{}.{}".format(name, e)) + if not os.path.exists(cover_path): + logger.debug("Cover %s does not exists", cover_path) + continue + with open(cover_path, "rb") as c: + logger.info("Found cover at %s", cover_path) + return {"mimetype": m, "content": c.read()} @celery.app.task(name="music.start_library_scan") @@ -297,6 +300,7 @@ def federation_audio_track_to_metadata(payload, references): if payload["album"].get("musicbrainzId") else None, "release_date": payload["album"].get("released"), + "tags": [t["name"] for t in payload["album"].get("tags", []) or []], "artists": [ { "fid": a["id"], @@ -304,6 +308,7 @@ def federation_audio_track_to_metadata(payload, references): "fdate": a["published"], "attributed_to": references.get(a.get("attributedTo")), "mbid": str(a["musicbrainzId"]) if a.get("musicbrainzId") else None, + "tags": [t["name"] for t in a.get("tags", []) or []], } for a in payload["album"]["artists"] ], @@ -315,12 +320,14 @@ def federation_audio_track_to_metadata(payload, references): "fdate": a["published"], "attributed_to": references.get(a.get("attributedTo")), "mbid": str(a["musicbrainzId"]) if a.get("musicbrainzId") else None, + "tags": [t["name"] for t in a.get("tags", []) or []], } for a in payload["artists"] ], # federation "fid": payload["id"], "fdate": payload["published"], + "tags": [t["name"] for t in payload.get("tags", []) or []], } cover = payload["album"].get("cover") if cover: @@ -399,6 +406,12 @@ def get_track_from_import_metadata(data, update_cover=False, attributed_to=None) return track +def truncate(v, length): + if v is None: + return v + return v[:length] + + def _get_track(data, attributed_to=None): track_uuid = getter(data, "funkwhale", "track", "uuid") @@ -437,10 +450,10 @@ def _get_track(data, attributed_to=None): # get / create artist and album artist artists = getter(data, "artists", default=[]) - artist = artists[0] - artist_mbid = artist.get("mbid", None) - artist_fid = artist.get("fid", None) - artist_name = artist["name"] + artist_data = artists[0] + artist_mbid = artist_data.get("mbid", None) + artist_fid = artist_data.get("fid", None) + artist_name = truncate(artist_data["name"], models.MAX_LENGTHS["ARTIST_NAME"]) if artist_mbid: query = Q(mbid=artist_mbid) @@ -453,24 +466,28 @@ def _get_track(data, attributed_to=None): "mbid": artist_mbid, "fid": artist_fid, "from_activity_id": from_activity_id, - "attributed_to": artist.get("attributed_to", attributed_to), + "attributed_to": artist_data.get("attributed_to", attributed_to), } - if artist.get("fdate"): - defaults["creation_date"] = artist.get("fdate") + if artist_data.get("fdate"): + defaults["creation_date"] = artist_data.get("fdate") - artist = get_best_candidate_or_create( + artist, created = get_best_candidate_or_create( models.Artist, query, defaults=defaults, sort_fields=["mbid", "fid"] - )[0] + ) + if created: + tags_models.add_tags(artist, *artist_data.get("tags", [])) album_artists = getter(data, "album", "artists", default=artists) or artists - album_artist = album_artists[0] - album_artist_name = album_artist.get("name") + album_artist_data = album_artists[0] + album_artist_name = truncate( + album_artist_data.get("name"), models.MAX_LENGTHS["ARTIST_NAME"] + ) if album_artist_name == artist_name: album_artist = artist else: query = Q(name__iexact=album_artist_name) - album_artist_mbid = album_artist.get("mbid", None) - album_artist_fid = album_artist.get("fid", None) + album_artist_mbid = album_artist_data.get("mbid", None) + album_artist_fid = album_artist_data.get("fid", None) if album_artist_mbid: query |= Q(mbid=album_artist_mbid) if album_artist_fid: @@ -480,19 +497,21 @@ def _get_track(data, attributed_to=None): "mbid": album_artist_mbid, "fid": album_artist_fid, "from_activity_id": from_activity_id, - "attributed_to": album_artist.get("attributed_to", attributed_to), + "attributed_to": album_artist_data.get("attributed_to", attributed_to), } - if album_artist.get("fdate"): - defaults["creation_date"] = album_artist.get("fdate") + if album_artist_data.get("fdate"): + defaults["creation_date"] = album_artist_data.get("fdate") - album_artist = get_best_candidate_or_create( + album_artist, created = get_best_candidate_or_create( models.Artist, query, defaults=defaults, sort_fields=["mbid", "fid"] - )[0] + ) + if created: + tags_models.add_tags(album_artist, *album_artist_data.get("tags", [])) # get / create album - album = data["album"] - album_title = album["title"] - album_fid = album.get("fid", None) + album_data = data["album"] + album_title = truncate(album_data["title"], models.MAX_LENGTHS["ALBUM_TITLE"]) + album_fid = album_data.get("fid", None) if album_mbid: query = Q(mbid=album_mbid) @@ -505,20 +524,22 @@ def _get_track(data, attributed_to=None): "title": album_title, "artist": album_artist, "mbid": album_mbid, - "release_date": album.get("release_date"), + "release_date": album_data.get("release_date"), "fid": album_fid, "from_activity_id": from_activity_id, - "attributed_to": album.get("attributed_to", attributed_to), + "attributed_to": album_data.get("attributed_to", attributed_to), } - if album.get("fdate"): - defaults["creation_date"] = album.get("fdate") + if album_data.get("fdate"): + defaults["creation_date"] = album_data.get("fdate") - album = get_best_candidate_or_create( + album, created = get_best_candidate_or_create( models.Album, query, defaults=defaults, sort_fields=["mbid", "fid"] - )[0] + ) + if created: + tags_models.add_tags(album, *album_data.get("tags", [])) # get / create track - track_title = data["title"] + track_title = truncate(data["title"], models.MAX_LENGTHS["TRACK_TITLE"]) position = data.get("position", 1) query = Q(title__iexact=track_title, artist=artist, album=album, position=position) if track_mbid: @@ -536,15 +557,17 @@ def _get_track(data, attributed_to=None): "from_activity_id": from_activity_id, "attributed_to": data.get("attributed_to", attributed_to), "license": licenses.match(data.get("license"), data.get("copyright")), - "copyright": data.get("copyright"), + "copyright": truncate(data.get("copyright"), models.MAX_LENGTHS["COPYRIGHT"]), } if data.get("fdate"): defaults["creation_date"] = data.get("fdate") - track = get_best_candidate_or_create( + track, created = get_best_candidate_or_create( models.Track, query, defaults=defaults, sort_fields=["mbid", "fid"] - )[0] + ) + if created: + tags_models.add_tags(track, *data.get("tags", [])) return track diff --git a/api/funkwhale_api/music/utils.py b/api/funkwhale_api/music/utils.py index bf3a0daf63b5e79499942deeed597238e1d6426f..09c8cbd122a6099cee8a0e9874fc1fe0ce1eea37 100644 --- a/api/funkwhale_api/music/utils.py +++ b/api/funkwhale_api/music/utils.py @@ -34,6 +34,8 @@ AUDIO_EXTENSIONS_AND_MIMETYPE = [ ("ogg", "audio/ogg"), ("opus", "audio/opus"), ("mp3", "audio/mpeg"), + ("aac", "audio/x-m4a"), + ("m4a", "audio/x-m4a"), ("flac", "audio/x-flac"), ("flac", "audio/flac"), ] diff --git a/api/funkwhale_api/music/views.py b/api/funkwhale_api/music/views.py index 4f8f35ced2b2e7a0f6319b568fad511fb48dd711..c0effbac22d509abd868bc21741462750031bd78 100644 --- a/api/funkwhale_api/music/views.py +++ b/api/funkwhale_api/music/views.py @@ -1,10 +1,10 @@ +import datetime import logging -import urllib +import urllib.parse from django.conf import settings from django.db import transaction from django.db.models import Count, Prefetch, Sum, F, Q -from django.db.models.functions import Length from django.utils import timezone from rest_framework import mixins @@ -12,7 +12,6 @@ from rest_framework import settings as rest_settings from rest_framework import views, viewsets from rest_framework.decorators import action from rest_framework.response import Response -from taggit.models import Tag from funkwhale_api.common import decorators as common_decorators from funkwhale_api.common import permissions as common_permissions @@ -23,13 +22,23 @@ from funkwhale_api.federation.authentication import SignatureAuthentication from funkwhale_api.federation import actors from funkwhale_api.federation import api_serializers as federation_api_serializers from funkwhale_api.federation import decorators as federation_decorators +from funkwhale_api.federation import models as federation_models from funkwhale_api.federation import routes +from funkwhale_api.federation import tasks as federation_tasks +from funkwhale_api.tags.models import Tag, TaggedItem +from funkwhale_api.tags.serializers import TagSerializer from funkwhale_api.users.oauth import permissions as oauth_permissions from . import filters, licenses, models, serializers, tasks, utils logger = logging.getLogger(__name__) +TAG_PREFETCH = Prefetch( + "tagged_items", + queryset=TaggedItem.objects.all().select_related().order_by("tag__name"), + to_attr="_prefetched_tagged_items", +) + def get_libraries(filter_uploads): def libraries(self, request, *args, **kwargs): @@ -53,17 +62,49 @@ def get_libraries(filter_uploads): return libraries -class TagViewSetMixin(object): - def get_queryset(self): - queryset = super().get_queryset() - tag = self.request.query_params.get("tag") - if tag: - queryset = queryset.filter(tags__pk=tag) - return queryset +def refetch_obj(obj, queryset): + """ + Given an Artist/Album/Track instance, if the instance is from a remote pod, + will attempt to update local data with the latest ActivityPub representation. + """ + if obj.is_local: + return obj + + now = timezone.now() + limit = now - datetime.timedelta(minutes=settings.FEDERATION_OBJECT_FETCH_DELAY) + last_fetch = obj.fetches.order_by("-creation_date").first() + if last_fetch is not None and last_fetch.creation_date > limit: + # we fetched recently, no need to do it again + return obj + + logger.info("Refetching %s:%s at %s…", obj._meta.label, obj.pk, obj.fid) + actor = actors.get_service_actor() + fetch = federation_models.Fetch.objects.create(actor=actor, url=obj.fid, object=obj) + try: + federation_tasks.fetch(fetch_id=fetch.pk) + except Exception: + logger.exception( + "Error while refetching %s:%s at %s…", obj._meta.label, obj.pk, obj.fid + ) + else: + fetch.refresh_from_db() + if fetch.status == "finished": + obj = queryset.get(pk=obj.pk) + return obj class ArtistViewSet(common_views.SkipFilterForGetObject, viewsets.ReadOnlyModelViewSet): - queryset = models.Artist.objects.all() + queryset = ( + models.Artist.objects.all() + .prefetch_related("attributed_to") + .prefetch_related( + Prefetch( + "tracks", + queryset=models.Track.objects.all(), + to_attr="_prefetched_tracks", + ) + ) + ) serializer_class = serializers.ArtistWithAlbumsSerializer permission_classes = [oauth_permissions.ScopePermission] required_scope = "libraries" @@ -74,13 +115,25 @@ class ArtistViewSet(common_views.SkipFilterForGetObject, viewsets.ReadOnlyModelV fetches = federation_decorators.fetches_route() mutations = common_decorators.mutations_route(types=["update"]) + def get_object(self): + obj = super().get_object() + + if ( + self.action == "retrieve" + and self.request.GET.get("refresh", "").lower() == "true" + ): + obj = refetch_obj(obj, self.get_queryset()) + return obj + def get_queryset(self): queryset = super().get_queryset() albums = models.Album.objects.with_tracks_count() albums = albums.annotate_playable_by_actor( utils.get_actor_from_request(self.request) ) - return queryset.prefetch_related(Prefetch("albums", queryset=albums)) + return queryset.prefetch_related( + Prefetch("albums", queryset=albums), TAG_PREFETCH + ) libraries = action(methods=["get"], detail=True)( get_libraries( @@ -93,7 +146,9 @@ class ArtistViewSet(common_views.SkipFilterForGetObject, viewsets.ReadOnlyModelV class AlbumViewSet(common_views.SkipFilterForGetObject, viewsets.ReadOnlyModelViewSet): queryset = ( - models.Album.objects.all().order_by("artist", "release_date").select_related() + models.Album.objects.all() + .order_by("artist", "release_date") + .select_related("artist", "attributed_to") ) serializer_class = serializers.AlbumSerializer permission_classes = [oauth_permissions.ScopePermission] @@ -105,6 +160,16 @@ class AlbumViewSet(common_views.SkipFilterForGetObject, viewsets.ReadOnlyModelVi fetches = federation_decorators.fetches_route() mutations = common_decorators.mutations_route(types=["update"]) + def get_object(self): + obj = super().get_object() + + if ( + self.action == "retrieve" + and self.request.GET.get("refresh", "").lower() == "true" + ): + obj = refetch_obj(obj, self.get_queryset()) + return obj + def get_queryset(self): queryset = super().get_queryset() tracks = ( @@ -112,7 +177,9 @@ class AlbumViewSet(common_views.SkipFilterForGetObject, viewsets.ReadOnlyModelVi .with_playable_uploads(utils.get_actor_from_request(self.request)) .order_for_album() ) - qs = queryset.prefetch_related(Prefetch("tracks", queryset=tracks)) + qs = queryset.prefetch_related( + Prefetch("tracks", queryset=tracks), TAG_PREFETCH + ) return qs libraries = action(methods=["get"], detail=True)( @@ -182,14 +249,16 @@ class LibraryViewSet( return Response(serializer.data) -class TrackViewSet( - common_views.SkipFilterForGetObject, TagViewSetMixin, viewsets.ReadOnlyModelViewSet -): +class TrackViewSet(common_views.SkipFilterForGetObject, viewsets.ReadOnlyModelViewSet): """ A simple ViewSet for viewing and editing accounts. """ - queryset = models.Track.objects.all().for_nested_serialization() + queryset = ( + models.Track.objects.all() + .for_nested_serialization() + .select_related("attributed_to") + ) serializer_class = serializers.TrackSerializer permission_classes = [oauth_permissions.ScopePermission] required_scope = "libraries" @@ -207,6 +276,16 @@ class TrackViewSet( fetches = federation_decorators.fetches_route() mutations = common_decorators.mutations_route(types=["update"]) + def get_object(self): + obj = super().get_object() + + if ( + self.action == "retrieve" + and self.request.GET.get("refresh", "").lower() == "true" + ): + obj = refetch_obj(obj, self.get_queryset()) + return obj + def get_queryset(self): queryset = super().get_queryset() filter_favorites = self.request.GET.get("favorites", None) @@ -217,7 +296,7 @@ class TrackViewSet( queryset = queryset.with_playable_uploads( utils.get_actor_from_request(self.request) ) - return queryset + return queryset.prefetch_related(TAG_PREFETCH) libraries = action(methods=["get"], detail=True)( get_libraries(filter_uploads=lambda o, uploads: uploads.filter(track=o)) @@ -242,6 +321,8 @@ def get_file_path(audio_file): path = "/music" + audio_file.replace(prefix, "", 1) if path.startswith("http://") or path.startswith("https://"): return (settings.PROTECT_FILES_PATH + "/media/" + path).encode("utf-8") + # needed to serve files with % or ? chars + path = urllib.parse.quote(path) return (settings.PROTECT_FILES_PATH + path).encode("utf-8") if t == "apache2": try: @@ -334,7 +415,7 @@ def handle_serve(upload, user, format=None, max_bitrate=None, proxy_media=True): f = transcoded_version file_path = get_file_path(f.audio_file) mt = f.mimetype - if not proxy_media: + if not proxy_media and f.audio_file: # we simply issue a 302 redirect to the real URL response = Response(status=302) response["Location"] = f.audio_file.url @@ -458,14 +539,6 @@ class UploadViewSet( instance.delete() -class TagViewSet(viewsets.ReadOnlyModelViewSet): - queryset = Tag.objects.all().order_by("name") - serializer_class = serializers.TagSerializer - permission_classes = [oauth_permissions.ScopePermission] - required_scope = "libraries" - anonymous_policy = "setting" - - class Search(views.APIView): max_results = 3 permission_classes = [oauth_permissions.ScopePermission] @@ -485,6 +558,7 @@ class Search(views.APIView): "albums": serializers.AlbumSerializer( self.get_albums(query), many=True ).data, + "tags": TagSerializer(self.get_tags(query), many=True).data, } return Response(results, status=200) @@ -521,17 +595,10 @@ class Search(views.APIView): return common_utils.order_for_search(qs, "name")[: self.max_results] def get_tags(self, query): - search_fields = ["slug", "name__unaccent"] + search_fields = ["name__unaccent"] query_obj = utils.get_query(query, search_fields) - - # We want the shortest tag first - qs = ( - Tag.objects.all() - .annotate(slug_length=Length("slug")) - .order_by("slug_length") - ) - - return qs.filter(query_obj)[: self.max_results] + qs = Tag.objects.all().filter(query_obj) + return common_utils.order_for_search(qs, "name")[: self.max_results] class LicenseViewSet(viewsets.ReadOnlyModelViewSet): diff --git a/api/funkwhale_api/musicbrainz/urls.py b/api/funkwhale_api/musicbrainz/urls.py index d14447f14a62a73a494e9c6752d67274824f18ed..f4ced5b005dffdf03184a4269be0469d0d0cdc48 100644 --- a/api/funkwhale_api/musicbrainz/urls.py +++ b/api/funkwhale_api/musicbrainz/urls.py @@ -1,9 +1,9 @@ from django.conf.urls import url -from rest_framework import routers +from funkwhale_api.common import routers from . import views -router = routers.SimpleRouter() +router = routers.OptionalSlashRouter() router.register(r"search", views.SearchViewSet, "search") urlpatterns = [ url( diff --git a/api/funkwhale_api/playlists/models.py b/api/funkwhale_api/playlists/models.py index 15332c75a2d8ec01d0d8bac3bafa41361bd83c24..37d498c4f0a452ec7aa0b092ddf95c010935a0be 100644 --- a/api/funkwhale_api/playlists/models.py +++ b/api/funkwhale_api/playlists/models.py @@ -69,6 +69,9 @@ class Playlist(models.Model): def __str__(self): return self.name + def get_absolute_url(self): + return "/library/playlists/{}".format(self.pk) + @transaction.atomic def insert(self, plt, index=None, allow_duplicates=True): """ diff --git a/api/funkwhale_api/playlists/serializers.py b/api/funkwhale_api/playlists/serializers.py index ccdf82f4b94fcb11ce5b3d16f1aa96db47a4e7db..dc61950dde7cd2f6d5268e8400284740a2d18449 100644 --- a/api/funkwhale_api/playlists/serializers.py +++ b/api/funkwhale_api/playlists/serializers.py @@ -2,6 +2,7 @@ from django.db import transaction from rest_framework import serializers from funkwhale_api.common import preferences +from funkwhale_api.federation import serializers as federation_serializers from funkwhale_api.music.models import Track from funkwhale_api.music.serializers import TrackSerializer from funkwhale_api.users.serializers import UserBasicSerializer @@ -79,6 +80,7 @@ class PlaylistSerializer(serializers.ModelSerializer): album_covers = serializers.SerializerMethodField(read_only=True) user = UserBasicSerializer(read_only=True) is_playable = serializers.SerializerMethodField() + actor = serializers.SerializerMethodField() class Meta: model = models.Playlist @@ -93,9 +95,15 @@ class PlaylistSerializer(serializers.ModelSerializer): "album_covers", "duration", "is_playable", + "actor", ) read_only_fields = ["id", "modification_date", "creation_date"] + def get_actor(self, obj): + actor = obj.user.actor + if actor: + return federation_serializers.APIActorSerializer(actor).data + def get_is_playable(self, obj): try: return bool(obj.playable_plts) diff --git a/api/funkwhale_api/playlists/views.py b/api/funkwhale_api/playlists/views.py index 861dc81755f6007ade9f47df442c92d110646363..6f9ea23cecac6a997decfdf701b2cfada3fec731 100644 --- a/api/funkwhale_api/playlists/views.py +++ b/api/funkwhale_api/playlists/views.py @@ -23,7 +23,7 @@ class PlaylistViewSet( serializer_class = serializers.PlaylistSerializer queryset = ( models.Playlist.objects.all() - .select_related("user") + .select_related("user__actor") .annotate(tracks_count=Count("playlist_tracks")) .with_covers() .with_duration() diff --git a/api/funkwhale_api/radios/filters.py b/api/funkwhale_api/radios/filters.py index 810673bd664f6b7ddf56aee7403a2dfac5445b83..a92dbae889dc7b08d679147b75f92f5074189b74 100644 --- a/api/funkwhale_api/radios/filters.py +++ b/api/funkwhale_api/radios/filters.py @@ -178,9 +178,9 @@ class TagFilter(RadioFilter): "autocomplete_fields": { "remoteValues": "results", "name": "name", - "value": "slug", + "value": "name", }, - "autocomplete_qs": "query={query}", + "autocomplete_qs": "q={query}&ordering=length", "label": "Tags", "placeholder": "Select tags", } @@ -189,4 +189,8 @@ class TagFilter(RadioFilter): label = "Tag" def get_query(self, candidates, names, **kwargs): - return Q(tags__slug__in=names) + return ( + Q(tagged_items__tag__name__in=names) + | Q(artist__tagged_items__tag__name__in=names) + | Q(album__tagged_items__tag__name__in=names) + ) diff --git a/api/funkwhale_api/radios/radios.py b/api/funkwhale_api/radios/radios.py index a0dc36b62adf8d76eb4c65f472ec04f440f56fc2..01a242216085e799cfef1ae8a29765f448d2aee1 100644 --- a/api/funkwhale_api/radios/radios.py +++ b/api/funkwhale_api/radios/radios.py @@ -2,18 +2,20 @@ import random from django.core.exceptions import ValidationError from django.db import connection +from django.db.models import Q from rest_framework import serializers -from taggit.models import Tag from funkwhale_api.moderation import filters as moderation_filters from funkwhale_api.music.models import Artist, Track -from funkwhale_api.users.models import User +from funkwhale_api.tags.models import Tag from . import filters, models from .registries import registry class SimpleRadio(object): + related_object_field = None + def clean(self, instance): return @@ -146,6 +148,8 @@ class CustomRadio(SessionRadio): 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: @@ -162,10 +166,22 @@ class RelatedObjectRadio(SessionRadio): @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) - return qs.filter(tags__in=[self.session.related_object]) + 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): @@ -246,9 +262,7 @@ class ArtistRadio(RelatedObjectRadio): @registry.register(name="less-listened") -class LessListenedRadio(RelatedObjectRadio): - model = User - +class LessListenedRadio(SessionRadio): def clean(self, instance): instance.related_object = instance.user super().clean(instance) diff --git a/api/funkwhale_api/radios/serializers.py b/api/funkwhale_api/radios/serializers.py index 397452ecc0e5c6646a82ea663fdc6bb099e2f803..65e48449a8e704a42e118646187da1ae24b117a1 100644 --- a/api/funkwhale_api/radios/serializers.py +++ b/api/funkwhale_api/radios/serializers.py @@ -54,6 +54,9 @@ class RadioSessionTrackSerializer(serializers.ModelSerializer): class RadioSessionSerializer(serializers.ModelSerializer): + + related_object_id = serializers.CharField(required=False, allow_null=True) + class Meta: model = models.RadioSession fields = ( @@ -66,7 +69,17 @@ class RadioSessionSerializer(serializers.ModelSerializer): ) def validate(self, data): - registry[data["radio_type"]]().validate_session(data, **self.context) + radio_conf = registry[data["radio_type"]]() + if radio_conf.related_object_field: + try: + data[ + "related_object_id" + ] = radio_conf.related_object_field.to_internal_value( + data["related_object_id"] + ) + except KeyError: + raise serializers.ValidationError("Radio requires a related object") + radio_conf.validate_session(data, **self.context) return data def create(self, validated_data): @@ -77,3 +90,11 @@ class RadioSessionSerializer(serializers.ModelSerializer): validated_data["related_object_id"] ) return super().create(validated_data) + + def to_representation(self, instance): + repr = super().to_representation(instance) + radio_conf = registry[repr["radio_type"]]() + handler = getattr(radio_conf, "get_related_object_id_repr", None) + if handler and instance.related_object: + repr["related_object_id"] = handler(instance.related_object) + return repr diff --git a/api/funkwhale_api/radios/urls.py b/api/funkwhale_api/radios/urls.py index 8b9fd52c8a440d7ec41a8afa1e703f8b2a823143..4890b953f1bdce37c26a67e83bf535703edce1ce 100644 --- a/api/funkwhale_api/radios/urls.py +++ b/api/funkwhale_api/radios/urls.py @@ -1,8 +1,8 @@ -from rest_framework import routers +from funkwhale_api.common import routers from . import views -router = routers.SimpleRouter() +router = routers.OptionalSlashRouter() router.register(r"sessions", views.RadioSessionViewSet, "sessions") router.register(r"radios", views.RadioViewSet, "radios") router.register(r"tracks", views.RadioSessionTrackViewSet, "tracks") diff --git a/api/funkwhale_api/subsonic/renderers.py b/api/funkwhale_api/subsonic/renderers.py index e4b6470511378bbff21d824896a4210dd84c6c43..527b3fa1e2e9274c8041cbbd6c74e8741a55d261 100644 --- a/api/funkwhale_api/subsonic/renderers.py +++ b/api/funkwhale_api/subsonic/renderers.py @@ -53,5 +53,8 @@ def dict_to_xml_tree(root_tag, d, parent=None): for obj in value: root.append(dict_to_xml_tree(key, obj, parent=root)) else: - root.set(key, str(value)) + if key == "value": + root.text = str(value) + else: + root.set(key, str(value)) return root diff --git a/api/funkwhale_api/subsonic/serializers.py b/api/funkwhale_api/subsonic/serializers.py index a53ad464038316f5efbd5810bd8a995e33a744ec..329c644ee266adc4360059d45064c09cf274f292 100644 --- a/api/funkwhale_api/subsonic/serializers.py +++ b/api/funkwhale_api/subsonic/serializers.py @@ -5,6 +5,7 @@ from rest_framework import serializers from funkwhale_api.history import models as history_models from funkwhale_api.music import models as music_models +from funkwhale_api.music import utils as music_utils def get_artist_data(artist_values): @@ -71,7 +72,14 @@ def get_track_data(album, track, upload): "artist": album.artist.name, "track": track.position or 1, "discNumber": track.disc_number or 1, - "contentType": upload.mimetype, + # Ugly fallback to mp3 but some subsonic clients fail if the value is empty or null, and we don't always + # have the info on legacy uploads + "contentType": upload.mimetype + or ( + music_utils.get_type_from_ext(upload.extension) + if upload.extension + else "audio/mpeg" + ), "suffix": upload.extension or "", "duration": upload.duration or 0, "created": track.creation_date, @@ -228,7 +236,11 @@ def get_music_directory_data(artist): def get_folders(user): - return [] + return [ + # Dummy folder ID to match what is returned in the getMusicFolders endpoint + # cf https://dev.funkwhale.audio/funkwhale/funkwhale/issues/624 + {"id": 1, "name": "Music"} + ] def get_user_detail_data(user): @@ -263,3 +275,11 @@ class ScrobbleSerializer(serializers.Serializer): return history_models.Listening.objects.create( user=self.context["user"], track=data["id"] ) + + +def get_genre_data(tag): + return { + "songCount": getattr(tag, "_tracks_count", 0), + "albumCount": getattr(tag, "_albums_count", 0), + "value": tag.name, + } diff --git a/api/funkwhale_api/subsonic/views.py b/api/funkwhale_api/subsonic/views.py index 909f7a6e4853c07e318ec7c9ddd15e821147a52a..6633224dfbd68fc876895039d200b23652b0dcf8 100644 --- a/api/funkwhale_api/subsonic/views.py +++ b/api/funkwhale_api/subsonic/views.py @@ -2,6 +2,8 @@ import datetime import functools from django.conf import settings +from django.contrib.contenttypes.models import ContentType +from django.db.models import Count, Q from django.utils import timezone from rest_framework import exceptions from rest_framework import permissions as rest_permissions @@ -18,6 +20,7 @@ from funkwhale_api.music import models as music_models from funkwhale_api.music import utils from funkwhale_api.music import views as music_views from funkwhale_api.playlists import models as playlists_models +from funkwhale_api.tags import models as tags_models from funkwhale_api.users import models as users_models from . import authentication, filters, negotiation, serializers @@ -330,6 +333,48 @@ class SubsonicViewSet(viewsets.GenericViewSet): } return response.Response(data) + @action( + detail=False, + methods=["get", "post"], + url_name="get_songs_by_genre", + url_path="getSongsByGenre", + ) + def get_songs_by_genre(self, request, *args, **kwargs): + data = request.GET or request.POST + actor = utils.get_actor_from_request(request) + queryset = music_models.Track.objects.all().exclude( + moderation_filters.get_filtered_content_query( + moderation_filters.USER_FILTER_CONFIG["TRACK"], request.user + ) + ) + queryset = queryset.playable_by(actor) + try: + size = int( + data["count"] + ) # yep. Some endpoints have size, other have count… + except (TypeError, KeyError, ValueError): + size = 50 + + genre = data.get("genre") + queryset = ( + queryset.playable_by(actor) + .filter( + Q(tagged_items__tag__name=genre) + | Q(artist__tagged_items__tag__name=genre) + | Q(album__artist__tagged_items__tag__name=genre) + | Q(album__tagged_items__tag__name=genre) + ) + .prefetch_related("uploads") + .distinct() + .order_by("-creation_date")[:size] + ) + data = { + "songsByGenre": { + "song": serializers.GetSongSerializer(queryset, many=True).data + } + } + return response.Response(data) + @action( detail=False, methods=["get", "post"], @@ -362,6 +407,26 @@ class SubsonicViewSet(viewsets.GenericViewSet): queryset = filterset.qs actor = utils.get_actor_from_request(request) queryset = queryset.playable_by(actor) + type = data.get("type", "alphabeticalByArtist") + + if type == "alphabeticalByArtist": + queryset = queryset.order_by("artist__name") + elif type == "random": + queryset = queryset.order_by("?") + elif type == "alphabeticalByName" or not type: + queryset = queryset.order_by("artist__title") + elif type == "recent" or not type: + queryset = queryset.exclude(release_date__in=["", None]).order_by( + "-release_date" + ) + elif type == "newest" or not type: + queryset = queryset.order_by("-creation_date") + elif type == "byGenre" and data.get("genre"): + genre = data.get("genre") + queryset = queryset.filter( + Q(tagged_items__tag__name=genre) + | Q(artist__tagged_items__tag__name=genre) + ) try: offset = int(data["offset"]) @@ -669,3 +734,29 @@ class SubsonicViewSet(viewsets.GenericViewSet): listening = serializer.save() record.send(listening) return response.Response({}) + + @action( + detail=False, + methods=["get", "post"], + url_name="get_genres", + url_path="getGenres", + ) + def get_genres(self, request, *args, **kwargs): + album_ct = ContentType.objects.get_for_model(music_models.Album) + track_ct = ContentType.objects.get_for_model(music_models.Track) + queryset = ( + tags_models.Tag.objects.annotate( + _albums_count=Count( + "tagged_items", filter=Q(tagged_items__content_type=album_ct) + ), + _tracks_count=Count( + "tagged_items", filter=Q(tagged_items__content_type=track_ct) + ), + ) + .exclude(_tracks_count=0, _albums_count=0) + .order_by("name") + ) + data = { + "genres": {"genre": [serializers.get_genre_data(tag) for tag in queryset]} + } + return response.Response(data) diff --git a/api/funkwhale_api/tags/__init__.py b/api/funkwhale_api/tags/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/api/funkwhale_api/tags/admin.py b/api/funkwhale_api/tags/admin.py new file mode 100644 index 0000000000000000000000000000000000000000..bead393314c70ff715a8c8d199027c95b2911fcf --- /dev/null +++ b/api/funkwhale_api/tags/admin.py @@ -0,0 +1,18 @@ +from funkwhale_api.common import admin + +from . import models + + +@admin.register(models.Tag) +class TagAdmin(admin.ModelAdmin): + list_display = ["name", "creation_date"] + search_fields = ["name"] + list_select_related = True + + +@admin.register(models.TaggedItem) +class TaggedItemAdmin(admin.ModelAdmin): + list_display = ["object_id", "content_type", "tag", "creation_date"] + search_fields = ["tag__name"] + list_filter = ["content_type"] + list_select_related = True diff --git a/api/funkwhale_api/tags/factories.py b/api/funkwhale_api/tags/factories.py new file mode 100644 index 0000000000000000000000000000000000000000..c0ba5cac6f19c75f16846612326a5b4ec658a2fb --- /dev/null +++ b/api/funkwhale_api/tags/factories.py @@ -0,0 +1,33 @@ +import factory + +from funkwhale_api.factories import registry, NoUpdateOnCreate + +from . import models + + +@registry.register +class TagFactory(NoUpdateOnCreate, factory.django.DjangoModelFactory): + name = factory.Faker("music_hashtag") + + class Meta: + model = "tags.Tag" + + +@registry.register +class TaggedItemFactory(NoUpdateOnCreate, factory.django.DjangoModelFactory): + tag = factory.SubFactory(TagFactory) + content_object = None + + class Meta: + model = "tags.TaggedItem" + + +class TaggableFactory(factory.django.DjangoModelFactory): + @factory.post_generation + def set_tags(self, create, extracted, **kwargs): + if not create: + # Simple build, do nothing. + return + + if extracted: + models.set_tags(self, *extracted) diff --git a/api/funkwhale_api/tags/filters.py b/api/funkwhale_api/tags/filters.py new file mode 100644 index 0000000000000000000000000000000000000000..e0ac9675ab7511f043195aaea83b31a1e9fe462b --- /dev/null +++ b/api/funkwhale_api/tags/filters.py @@ -0,0 +1,21 @@ +import django_filters +from django_filters import rest_framework as filters + +from funkwhale_api.common import fields + +from . import models + + +class TagFilter(filters.FilterSet): + q = fields.SearchFilter(search_fields=["name"]) + ordering = django_filters.OrderingFilter( + fields=( + ("name", "name"), + ("creation_date", "creation_date"), + ("__size", "length"), + ) + ) + + class Meta: + model = models.Tag + fields = {"q": ["exact"], "name": ["exact", "startswith"]} diff --git a/api/funkwhale_api/tags/migrations/0001_initial.py b/api/funkwhale_api/tags/migrations/0001_initial.py new file mode 100644 index 0000000000000000000000000000000000000000..93b8bfbd9ae9d114476830a5d7537396b7c9a53b --- /dev/null +++ b/api/funkwhale_api/tags/migrations/0001_initial.py @@ -0,0 +1,85 @@ +# Generated by Django 2.2.3 on 2019-07-05 08:22 + +import django.contrib.postgres.fields.citext +from django.db import migrations, models +import django.db.models.deletion +import django.utils.timezone + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ("contenttypes", "0002_remove_content_type_name"), + ("common", "0003_cit_extension"), + ] + + operations = [ + migrations.CreateModel( + name="Tag", + fields=[ + ( + "id", + models.AutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ( + "name", + django.contrib.postgres.fields.citext.CICharField( + max_length=100, unique=True + ), + ), + ( + "creation_date", + models.DateTimeField(default=django.utils.timezone.now), + ), + ], + ), + migrations.CreateModel( + name="TaggedItem", + fields=[ + ( + "id", + models.AutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ( + "creation_date", + models.DateTimeField(default=django.utils.timezone.now), + ), + ( + "object_id", + models.IntegerField(db_index=True, verbose_name="Object id"), + ), + ( + "content_type", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="tags_taggeditem_tagged_items", + to="contenttypes.ContentType", + verbose_name="Content type", + ), + ), + ( + "tag", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="tags_taggeditem_items", + to="tags.Tag", + ), + ), + ], + ), + migrations.AlterUniqueTogether( + name="taggeditem", unique_together={("tag", "content_type", "object_id")} + ), + ] diff --git a/api/funkwhale_api/tags/migrations/__init__.py b/api/funkwhale_api/tags/migrations/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/api/funkwhale_api/tags/models.py b/api/funkwhale_api/tags/models.py new file mode 100644 index 0000000000000000000000000000000000000000..1416a62bc02d256a56fd9b16291b470e89242850 --- /dev/null +++ b/api/funkwhale_api/tags/models.py @@ -0,0 +1,86 @@ +import re + +from django.conf import settings +from django.contrib.contenttypes.fields import GenericForeignKey +from django.contrib.contenttypes.models import ContentType +from django.contrib.postgres.fields import CICharField +from django.db import models +from django.db import transaction + +from django.utils import timezone +from django.utils.translation import gettext_lazy as _ + + +TAG_REGEX = re.compile(r"^((\w+)([\d_]*))$") + + +class Tag(models.Model): + name = CICharField(max_length=100, unique=True) + creation_date = models.DateTimeField(default=timezone.now) + + def __str__(self): + return self.name + + +class TaggedItemQuerySet(models.QuerySet): + def for_content_object(self, obj): + return self.filter( + object_id=obj.id, + content_type__app_label=obj._meta.app_label, + content_type__model=obj._meta.model_name, + ) + + +class TaggedItem(models.Model): + creation_date = models.DateTimeField(default=timezone.now) + tag = models.ForeignKey(Tag, related_name="tagged_items", on_delete=models.CASCADE) + content_type = models.ForeignKey( + ContentType, + on_delete=models.CASCADE, + verbose_name=_("Content type"), + related_name="tagged_items", + ) + object_id = models.IntegerField(verbose_name=_("Object id"), db_index=True) + content_object = GenericForeignKey() + + objects = TaggedItemQuerySet.as_manager() + + class Meta: + unique_together = ("tag", "content_type", "object_id") + + +@transaction.atomic +def add_tags(obj, *tags): + if not tags: + return + tag_objs = [Tag(name=t) for t in tags] + Tag.objects.bulk_create(tag_objs, ignore_conflicts=True) + tag_ids = Tag.objects.filter(name__in=tags).values_list("id", flat=True) + + tagged_items = [TaggedItem(tag_id=tag_id, content_object=obj) for tag_id in tag_ids] + + TaggedItem.objects.bulk_create(tagged_items, ignore_conflicts=True) + + +@transaction.atomic +def set_tags(obj, *tags): + # we ignore any extra tags if the length of the list is higher + # than our accepted size + tags = tags[: settings.TAGS_MAX_BY_OBJ] + tags = set(tags) + existing = set( + TaggedItem.objects.for_content_object(obj).values_list("tag__name", flat=True) + ) + found = tags & existing + to_add = tags - found + to_remove = existing - (found | to_add) + + add_tags(obj, *to_add) + remove_tags(obj, *to_remove) + + +@transaction.atomic +def remove_tags(obj, *tags): + if not tags: + return + TaggedItem.objects.for_content_object(obj).filter(tag__name__in=tags).delete() diff --git a/api/funkwhale_api/tags/serializers.py b/api/funkwhale_api/tags/serializers.py new file mode 100644 index 0000000000000000000000000000000000000000..9b7b31f503cd3b13fef4cc243944f92fe118a85f --- /dev/null +++ b/api/funkwhale_api/tags/serializers.py @@ -0,0 +1,34 @@ +from rest_framework import serializers + +from django.conf import settings + +from . import models + + +class TagSerializer(serializers.ModelSerializer): + class Meta: + model = models.Tag + fields = ["name", "creation_date"] + + +class TagNameField(serializers.CharField): + def to_internal_value(self, value): + value = super().to_internal_value(value) + if not models.TAG_REGEX.match(value): + raise serializers.ValidationError('Invalid tag "{}"'.format(value)) + return value + + +class TagsListField(serializers.ListField): + def __init__(self, *args, **kwargs): + kwargs.setdefault("min_length", 0) + kwargs.setdefault("child", TagNameField()) + super().__init__(*args, **kwargs) + + def to_internal_value(self, value): + value = super().to_internal_value(value) + if not value: + return value + # we ignore any extra tags if the length of the list is higher + # than our accepted size + return value[: settings.TAGS_MAX_BY_OBJ] diff --git a/api/funkwhale_api/tags/views.py b/api/funkwhale_api/tags/views.py new file mode 100644 index 0000000000000000000000000000000000000000..1d052ca7b2d71f7c9a9d351e244bdc2152842853 --- /dev/null +++ b/api/funkwhale_api/tags/views.py @@ -0,0 +1,25 @@ +from django.db.models import functions +from rest_framework import viewsets + +import django_filters.rest_framework + +from funkwhale_api.users.oauth import permissions as oauth_permissions + +from . import filters +from . import models +from . import serializers + + +class TagViewSet(viewsets.ReadOnlyModelViewSet): + lookup_field = "name" + queryset = ( + models.Tag.objects.all() + .annotate(__size=functions.Length("name")) + .order_by("name") + ) + serializer_class = serializers.TagSerializer + permission_classes = [oauth_permissions.ScopePermission] + required_scope = "libraries" + anonymous_policy = "setting" + filterset_class = filters.TagFilter + filter_backends = [django_filters.rest_framework.DjangoFilterBackend] diff --git a/api/funkwhale_api/users/admin.py b/api/funkwhale_api/users/admin.py index c11c33bb66ce606de08777e7ac209fca923658d6..24f08d0264cb7043d8e5991a6d065f52e806d532 100644 --- a/api/funkwhale_api/users/admin.py +++ b/api/funkwhale_api/users/admin.py @@ -85,10 +85,20 @@ class UserAdmin(AuthUserAdmin): "permission_library", "permission_settings", "permission_moderation", + "upload_quota", ) }, ), (_("Important dates"), {"fields": ("last_login", "date_joined")}), + ( + _("Other"), + { + "fields": ( + "instance_support_message_display_date", + "funkwhale_support_message_display_date", + ) + }, + ), (_("Useless fields"), {"fields": ("user_permissions", "groups")}), ) diff --git a/api/funkwhale_api/users/api_urls.py b/api/funkwhale_api/users/api_urls.py index 267ee2d69ad6dc1dd9d1b874072e415a9bdda41d..89930f57be2bad970f17e0a46ef3c3bcbe3e1468 100644 --- a/api/funkwhale_api/users/api_urls.py +++ b/api/funkwhale_api/users/api_urls.py @@ -1,8 +1,8 @@ -from rest_framework import routers +from funkwhale_api.common import routers from . import views -router = routers.SimpleRouter() +router = routers.OptionalSlashRouter() router.register(r"users", views.UserViewSet, "users") urlpatterns = router.urls diff --git a/api/funkwhale_api/users/dynamic_preferences_registry.py b/api/funkwhale_api/users/dynamic_preferences_registry.py index 4e910577fbf97b062d341b88541473d786da8405..03090f944297cbb24f286b3160d0d8840c0c850b 100644 --- a/api/funkwhale_api/users/dynamic_preferences_registry.py +++ b/api/funkwhale_api/users/dynamic_preferences_registry.py @@ -37,4 +37,4 @@ class UploadQuota(types.IntPreference): name = "upload_quota" default = 1000 verbose_name = "Upload quota" - help_text = "Default upload quota applied to each users, in MB. This can be overrided on a per-user basis." + help_text = "Default upload quota applied to each users, in MB. This can be overridden on a per-user basis." diff --git a/api/funkwhale_api/users/factories.py b/api/funkwhale_api/users/factories.py index e7f046ef3fa21f786038d302355b59bbab494ef9..0588fa07c94c4216b7db30e7c5f9e68ad20dc977 100644 --- a/api/funkwhale_api/users/factories.py +++ b/api/funkwhale_api/users/factories.py @@ -42,11 +42,20 @@ class InvitationFactory(NoUpdateOnCreate, factory.django.DjangoModelFactory): expired = factory.Trait(expiration_date=factory.LazyFunction(timezone.now)) +class PasswordSetter(factory.PostGenerationMethodCall): + def call(self, instance, step, context): + if context.value_provided and context.value is None: + # disable setting the password, it's set by hand outside of the factory + return + + return super().call(instance, step, context) + + @registry.register class UserFactory(factory.django.DjangoModelFactory): - username = factory.Sequence(lambda n: "user-{0}".format(n)) - email = factory.Sequence(lambda n: "user-{0}@example.com".format(n)) - password = factory.PostGenerationMethodCall("set_password", "test") + username = factory.Faker("user_name") + email = factory.Faker("email") + password = password = PasswordSetter("set_password", "test") subsonic_api_token = None groups = ManyToManyFromList("groups") avatar = factory.django.ImageField() diff --git a/api/funkwhale_api/users/jwt_views.py b/api/funkwhale_api/users/jwt_views.py new file mode 100644 index 0000000000000000000000000000000000000000..532653abd1ac140c1d77a789a5bf70e2c101b6e3 --- /dev/null +++ b/api/funkwhale_api/users/jwt_views.py @@ -0,0 +1,15 @@ +from rest_framework_jwt import views as jwt_views + + +class ObtainJSONWebToken(jwt_views.ObtainJSONWebToken): + throttling_scopes = {"*": {"anonymous": "jwt-login", "authenticated": "jwt-login"}} + + +class RefreshJSONWebToken(jwt_views.RefreshJSONWebToken): + throttling_scopes = { + "*": {"anonymous": "jwt-refresh", "authenticated": "jwt-refresh"} + } + + +obtain_jwt_token = ObtainJSONWebToken.as_view() +refresh_jwt_token = RefreshJSONWebToken.as_view() diff --git a/api/funkwhale_api/users/migrations/0016_auto_20190920_0857.py b/api/funkwhale_api/users/migrations/0016_auto_20190920_0857.py new file mode 100644 index 0000000000000000000000000000000000000000..a3fc6cf26e48ea4b9af63058628318696520f77b --- /dev/null +++ b/api/funkwhale_api/users/migrations/0016_auto_20190920_0857.py @@ -0,0 +1,47 @@ +# Generated by Django 2.2.4 on 2019-09-20 08:57 + +import datetime +from django.conf import settings + +from django.db import migrations, models +import django.utils.timezone +import funkwhale_api.users.models + + +def set_display_date(apps, schema_editor): + """ + Set display date for instance/funkwhale support message on existing users + """ + User = apps.get_model("users", "User") + now = django.utils.timezone.now() + instance_support_message_display_date = now + datetime.timedelta(days=settings.INSTANCE_SUPPORT_MESSAGE_DELAY) + funkwhale_support_message_display_date = now + datetime.timedelta(days=settings.FUNKWHALE_SUPPORT_MESSAGE_DELAY) + + User.objects.update(instance_support_message_display_date=instance_support_message_display_date) + User.objects.update(funkwhale_support_message_display_date=funkwhale_support_message_display_date) + + +def rewind(*args, **kwargs): + pass + + + +class Migration(migrations.Migration): + + dependencies = [ + ('users', '0015_application_scope'), + ] + + operations = [ + migrations.AddField( + model_name='user', + name='funkwhale_support_message_display_date', + field=models.DateTimeField(blank=True, null=True, default=funkwhale_api.users.models.get_default_funkwhale_support_message_display_date), + ), + migrations.AddField( + model_name='user', + name='instance_support_message_display_date', + field=models.DateTimeField(blank=True, null=True, default=funkwhale_api.users.models.get_default_instance_support_message_display_date), + ), + migrations.RunPython(set_display_date, rewind), + ] diff --git a/api/funkwhale_api/users/models.py b/api/funkwhale_api/users/models.py index 3748dd634b9abf68ac3ac76810d2be6ea65bf777..2a2f875a60350a66b3a5d1cfe9d8472349cd3f4b 100644 --- a/api/funkwhale_api/users/models.py +++ b/api/funkwhale_api/users/models.py @@ -46,6 +46,10 @@ PERMISSIONS_CONFIGURATION = { "write:instance:accounts", "read:instance:domains", "write:instance:domains", + "read:instance:reports", + "write:instance:reports", + "read:instance:notes", + "write:instance:notes", }, }, "library": { @@ -78,6 +82,18 @@ PERMISSIONS = sorted(PERMISSIONS_CONFIGURATION.keys()) get_file_path = common_utils.ChunkedPath("users/avatars", preserve_file_name=False) +def get_default_instance_support_message_display_date(): + return timezone.now() + datetime.timedelta( + days=settings.INSTANCE_SUPPORT_MESSAGE_DELAY + ) + + +def get_default_funkwhale_support_message_display_date(): + return timezone.now() + datetime.timedelta( + days=settings.FUNKWHALE_SUPPORT_MESSAGE_DELAY + ) + + @python_2_unicode_compatible class User(AbstractUser): @@ -145,6 +161,15 @@ class User(AbstractUser): upload_quota = models.PositiveIntegerField(null=True, blank=True) + instance_support_message_display_date = models.DateTimeField( + default=get_default_instance_support_message_display_date, null=True, blank=True + ) + funkwhale_support_message_display_date = models.DateTimeField( + default=get_default_funkwhale_support_message_display_date, + null=True, + blank=True, + ) + def __str__(self): return self.username @@ -228,8 +253,13 @@ class User(AbstractUser): def get_channels_groups(self): groups = ["imports", "inbox"] + groups = ["user.{}.{}".format(self.pk, g) for g in groups] - return ["user.{}.{}".format(self.pk, g) for g in groups] + for permission, value in self.all_permissions.items(): + if value: + groups.append("admin.{}".format(permission)) + + return groups def full_username(self): return "{}@{}".format(self.username, settings.FEDERATION_HOSTNAME) @@ -321,13 +351,16 @@ class RefreshToken(oauth2_models.AbstractRefreshToken): pass -def get_actor_data(username): +def get_actor_data(username, **kwargs): slugified_username = federation_utils.slugify_username(username) + domain = kwargs.get("domain") + if not domain: + domain = federation_models.Domain.objects.get_or_create( + name=settings.FEDERATION_HOSTNAME + )[0] return { "preferred_username": slugified_username, - "domain": federation_models.Domain.objects.get_or_create( - name=settings.FEDERATION_HOSTNAME - )[0], + "domain": domain, "type": "Person", "name": username, "manually_approves_followers": False, @@ -388,10 +421,3 @@ def warm_user_avatar(sender, instance, **kwargs): instance_or_queryset=instance, rendition_key_set="square", image_attr="avatar" ) num_created, failed_to_create = user_avatar_warmer.warm() - - -@receiver(models.signals.pre_delete, sender=User) -def delete_actor(sender, instance, **kwargs): - if not instance.actor: - return - instance.actor.delete() diff --git a/api/funkwhale_api/users/mutations.py b/api/funkwhale_api/users/mutations.py new file mode 100644 index 0000000000000000000000000000000000000000..2c30ffe178f5ac418903f8deb0e045b0ec09b03d --- /dev/null +++ b/api/funkwhale_api/users/mutations.py @@ -0,0 +1,40 @@ +import uuid + +from django.db import transaction + +from funkwhale_api.common import mutations +from funkwhale_api.common import utils +from funkwhale_api.federation import models + +from . import tasks + + +@mutations.registry.connect("delete_account", models.Actor) +class DeleteAccountMutationSerializer(mutations.MutationSerializer): + @transaction.atomic + def apply(self, obj, validated_data): + if not obj.is_local or not obj.user: + raise mutations.serializers.ValidationError("Cannot delete this account") + + # delete oauth apps / reset all passwords immediatly + obj.user.set_unusable_password() + obj.user.subsonic_api_token = None + # force logout + obj.user.secret_key = uuid.uuid4() + obj.user.users_grant.all().delete() + obj.user.users_accesstoken.all().delete() + obj.user.users_refreshtoken.all().delete() + obj.user.save() + + # since the deletion of related object/message sending can take a long time + # we do that in a separate tasks + utils.on_commit(tasks.delete_account.delay, user_id=obj.user.id) + + def get_previous_state(self, obj, validated_data): + """ + We store usernames and ids for auditability purposes + """ + return { + "user": {"username": obj.user.username, "id": obj.user.pk}, + "actor": {"preferred_username": obj.preferred_username}, + } diff --git a/api/funkwhale_api/users/oauth/permissions.py b/api/funkwhale_api/users/oauth/permissions.py index ebd44a937a6dee21e462d3321dfdf1dfcc7149b8..54b3c2627bb28a1263b537e5ebda51ca5c7933b3 100644 --- a/api/funkwhale_api/users/oauth/permissions.py +++ b/api/funkwhale_api/users/oauth/permissions.py @@ -96,8 +96,9 @@ class ScopePermission(permissions.BasePermission): ): return False - # we use default anonymous scopes - user_scopes = scopes.ANONYMOUS_SCOPES + user_scopes = ( + getattr(view, "anonymous_scopes", set()) | scopes.ANONYMOUS_SCOPES + ) return should_allow( required_scope=required_scope, request_scopes=user_scopes ) diff --git a/api/funkwhale_api/users/oauth/scopes.py b/api/funkwhale_api/users/oauth/scopes.py index 61b07098383e832dcacd87f5da11fa843f821b29..88b928c50813fc516b63b8d4d4baa6868679d51c 100644 --- a/api/funkwhale_api/users/oauth/scopes.py +++ b/api/funkwhale_api/users/oauth/scopes.py @@ -22,6 +22,7 @@ BASE_SCOPES = [ Scope("playlists", "Access playlists"), Scope("notifications", "Access personal notifications"), Scope("security", "Access security settings"), + Scope("reports", "Access reports"), # Privileged scopes that require specific user permissions Scope("instance:settings", "Access instance settings"), Scope("instance:users", "Access local user accounts"), @@ -33,6 +34,8 @@ BASE_SCOPES = [ Scope("instance:accounts", "Access instance federated accounts"), Scope("instance:domains", "Access instance domains"), Scope("instance:policies", "Access instance moderation policies"), + Scope("instance:reports", "Access instance moderation reports"), + Scope("instance:notes", "Access instance moderation notes"), ] SCOPES = [ Scope("read", children=[s.copy("read") for s in BASE_SCOPES]), @@ -72,6 +75,8 @@ COMMON_SCOPES = ANONYMOUS_SCOPES | { "write:edits", "read:filters", "write:filters", + "read:reports", + "write:reports", "write:listenings", } diff --git a/api/funkwhale_api/users/oauth/urls.py b/api/funkwhale_api/users/oauth/urls.py index 832f9ca1ba6cfd64a673213961ed35942aef3c98..4230668e4a1463237ce0f72f90ac23d6d18f3e18 100644 --- a/api/funkwhale_api/users/oauth/urls.py +++ b/api/funkwhale_api/users/oauth/urls.py @@ -1,11 +1,11 @@ from django.conf.urls import url from django.views.decorators.csrf import csrf_exempt -from rest_framework import routers +from funkwhale_api.common import routers from . import views -router = routers.SimpleRouter() +router = routers.OptionalSlashRouter() router.register(r"apps", views.ApplicationViewSet, "apps") router.register(r"grants", views.GrantViewSet, "grants") diff --git a/api/funkwhale_api/users/oauth/views.py b/api/funkwhale_api/users/oauth/views.py index a8bbb239ca50a22be070904fc73b2a5536e51fa4..90706e70899e7a8a6bbebbea065db1d6113900a4 100644 --- a/api/funkwhale_api/users/oauth/views.py +++ b/api/funkwhale_api/users/oauth/views.py @@ -10,6 +10,8 @@ from oauth2_provider import exceptions as oauth2_exceptions from oauth2_provider import views as oauth_views from oauth2_provider.settings import oauth2_settings +from funkwhale_api.common import throttling + from .. import models from .permissions import ScopePermission from . import serializers @@ -35,6 +37,12 @@ class ApplicationViewSet( lookup_field = "client_id" queryset = models.Application.objects.all().order_by("-created") serializer_class = serializers.ApplicationSerializer + throttling_scopes = { + "create": { + "anonymous": "anonymous-oauth-app", + "authenticated": "authenticated-oauth-app", + } + } def get_serializer_class(self): if self.request.method.lower() == "post": @@ -141,6 +149,10 @@ class AuthorizeView(views.APIView, oauth_views.AuthorizationView): return self.json_payload(errors, status_code=400) + def post(self, request, *args, **kwargs): + throttling.check_request(request, "oauth-authorize") + return super().post(request, *args, **kwargs) + def form_valid(self, form): try: response = super().form_valid(form) @@ -175,8 +187,12 @@ class AuthorizeView(views.APIView, oauth_views.AuthorizationView): class TokenView(oauth_views.TokenView): - pass + def post(self, request, *args, **kwargs): + throttling.check_request(request, "oauth-token") + return super().post(request, *args, **kwargs) class RevokeTokenView(oauth_views.RevokeTokenView): - pass + def post(self, request, *args, **kwargs): + throttling.check_request(request, "oauth-revoke-token") + return super().post(request, *args, **kwargs) diff --git a/api/funkwhale_api/users/rest_auth_urls.py b/api/funkwhale_api/users/rest_auth_urls.py index 732a3bbbcead15c5603f16872a97c6703dcbecca..75ba608bb92fc1dd2b91d21661b2b6fd370c26f0 100644 --- a/api/funkwhale_api/users/rest_auth_urls.py +++ b/api/funkwhale_api/users/rest_auth_urls.py @@ -1,20 +1,40 @@ from django.conf.urls import url from django.views.generic import TemplateView from rest_auth import views as rest_auth_views -from rest_auth.registration import views as registration_views from . import views urlpatterns = [ - url(r"^$", views.RegisterView.as_view(), name="rest_register"), + # URLs that do not require a session or valid token url( - r"^verify-email/$", - registration_views.VerifyEmailView.as_view(), + r"^password/reset/$", + views.PasswordResetView.as_view(), + name="rest_password_reset", + ), + url( + r"^password/reset/confirm/$", + views.PasswordResetConfirmView.as_view(), + name="rest_password_reset_confirm", + ), + # URLs that require a user to be logged in with a valid session / token. + url( + r"^user/$", rest_auth_views.UserDetailsView.as_view(), name="rest_user_details" + ), + url( + r"^password/change/$", + views.PasswordChangeView.as_view(), + name="rest_password_change", + ), + # Registration URLs + url(r"^registration/$", views.RegisterView.as_view(), name="rest_register"), + url( + r"^registration/verify-email/?$", + views.VerifyEmailView.as_view(), name="rest_verify_email", ), url( - r"^change-password/$", - rest_auth_views.PasswordChangeView.as_view(), + r"^registration/change-password/?$", + views.PasswordChangeView.as_view(), name="change_password", ), # This url is used by django-allauth and empty TemplateView is @@ -28,7 +48,7 @@ urlpatterns = [ # view from: # djang-allauth https://github.com/pennersr/django-allauth/blob/master/allauth/account/views.py#L190 url( - r"^account-confirm-email/(?P<key>\w+)/$", + r"^registration/account-confirm-email/(?P<key>\w+)/?$", TemplateView.as_view(), name="account_confirm_email", ), diff --git a/api/funkwhale_api/users/serializers.py b/api/funkwhale_api/users/serializers.py index a45d414b4d9b6eaad6308aff70710df1f3e825c2..cddc2e82aea82859b0728d30777142f6349fec9b 100644 --- a/api/funkwhale_api/users/serializers.py +++ b/api/funkwhale_api/users/serializers.py @@ -5,12 +5,13 @@ from django.utils.deconstruct import deconstructible from django.utils.translation import gettext_lazy as _ from rest_auth.serializers import PasswordResetSerializer as PRS -from rest_auth.registration.serializers import RegisterSerializer as RS +from rest_auth.registration.serializers import RegisterSerializer as RS, get_adapter from rest_framework import serializers from versatileimagefield.serializers import VersatileImageFieldSerializer from funkwhale_api.activity import serializers as activity_serializers from funkwhale_api.common import serializers as common_serializers +from funkwhale_api.federation import models as federation_models from . import adapters from . import models @@ -42,6 +43,26 @@ class RegisterSerializer(RS): except models.Invitation.DoesNotExist: raise serializers.ValidationError("Invalid invitation code") + def validate(self, validated_data): + data = super().validate(validated_data) + # we create a fake user obj with validated data so we can validate + # password properly (we have a password validator that requires + # a user object) + user = models.User(username=data["username"], email=data["email"]) + get_adapter().clean_password(data["password1"], user) + return data + + def validate_username(self, value): + username = super().validate_username(value) + duplicates = federation_models.Actor.objects.local().filter( + preferred_username__iexact=username + ) + if duplicates.exists(): + raise serializers.ValidationError( + "A user with that username already exists." + ) + return username + def save(self, request): user = super().save(request) if self.validated_data.get("invitation"): @@ -88,7 +109,13 @@ class UserWriteSerializer(serializers.ModelSerializer): class Meta: model = models.User - fields = ["name", "privacy_level", "avatar"] + fields = [ + "name", + "privacy_level", + "avatar", + "instance_support_message_display_date", + "funkwhale_support_message_display_date", + ] class UserReadSerializer(serializers.ModelSerializer): @@ -125,7 +152,11 @@ class MeSerializer(UserReadSerializer): quota_status = serializers.SerializerMethodField() class Meta(UserReadSerializer.Meta): - fields = UserReadSerializer.Meta.fields + ["quota_status"] + fields = UserReadSerializer.Meta.fields + [ + "quota_status", + "instance_support_message_display_date", + "funkwhale_support_message_display_date", + ] def get_quota_status(self, o): return o.get_quota_status() if o.actor else 0 @@ -134,3 +165,17 @@ class MeSerializer(UserReadSerializer): class PasswordResetSerializer(PRS): def get_email_options(self): return {"extra_email_context": adapters.get_email_context()} + + +class UserDeleteSerializer(serializers.Serializer): + password = serializers.CharField() + confirm = serializers.BooleanField() + + def validate_password(self, value): + if not self.instance.check_password(value): + raise serializers.ValidationError("Invalid password") + + def validate_confirm(self, value): + if not value: + raise serializers.ValidationError("Please confirm deletion") + return value diff --git a/api/funkwhale_api/users/tasks.py b/api/funkwhale_api/users/tasks.py new file mode 100644 index 0000000000000000000000000000000000000000..40438ccff84d9e505a4f18d12979e811c4160170 --- /dev/null +++ b/api/funkwhale_api/users/tasks.py @@ -0,0 +1,58 @@ +import logging + +from django.db.models.deletion import Collector + +from funkwhale_api.federation import routes +from funkwhale_api.taskapp import celery + +from . import models + +logger = logging.getLogger(__name__) + + +@celery.app.task(name="users.delete_account") +@celery.require_instance(models.User.objects.select_related("actor"), "user") +def delete_account(user): + logger.info("Starting deletion of account %s…", user.username) + actor = user.actor + # we start by deleting the user obj, which will cascade deletion + # to any other object + user.delete() + logger.info("Deleted user object") + + # Then we broadcast the info over federation. We do this *before* deleting objects + # associated with the actor, otherwise follows are removed and we don't know where + # to broadcast + logger.info("Broadcasting deletion to federation…") + routes.outbox.dispatch( + {"type": "Delete", "object": {"type": actor.type}}, context={"actor": actor} + ) + + # then we delete any object associated with the actor object, but *not* the actor + # itself. We keep it for auditability and sending the Delete ActivityPub message + collector = Collector(using="default") + logger.info( + "Prepare deletion of objects associated with account %s…", user.username + ) + collector.collect([actor]) + + for model, instances in collector.data.items(): + if issubclass(model, actor.__class__): + # we skip deletion of the actor itself + continue + + logger.info( + "Deleting %s objects associated with account %s…", + len(instances), + user.username, + ) + to_delete = model.objects.filter(pk__in=[instance.pk for instance in instances]) + to_delete.delete() + + # Finally, we update the actor itself and mark it as removed + logger.info("Marking actor as Tombsone…") + actor.type = "Tombstone" + actor.name = None + actor.summary = None + actor.save(update_fields=["type", "name", "summary"]) + logger.info("Deletion of account done %s!", user.username) diff --git a/api/funkwhale_api/users/views.py b/api/funkwhale_api/users/views.py index 8cbb23bd11fbc445feda2782ac77da8242d4e8c8..28189c4bc547e883ee4f5ee1227923fa7e07ca67 100644 --- a/api/funkwhale_api/users/views.py +++ b/api/funkwhale_api/users/views.py @@ -1,17 +1,20 @@ from allauth.account.adapter import get_adapter -from rest_auth.registration.views import RegisterView as BaseRegisterView +from rest_auth import views as rest_auth_views +from rest_auth.registration import views as registration_views from rest_framework import mixins, viewsets from rest_framework.decorators import action from rest_framework.response import Response from funkwhale_api.common import preferences -from . import models, serializers +from . import models, serializers, tasks -class RegisterView(BaseRegisterView): +class RegisterView(registration_views.RegisterView): serializer_class = serializers.RegisterSerializer permission_classes = [] + action = "signup" + throttling_scopes = {"signup": {"authenticated": "signup", "anonymous": "signup"}} def create(self, request, *args, **kwargs): invitation_code = request.data.get("invitation") @@ -24,6 +27,22 @@ class RegisterView(BaseRegisterView): return get_adapter().is_open_for_signup(request) +class VerifyEmailView(registration_views.VerifyEmailView): + action = "verify-email" + + +class PasswordChangeView(rest_auth_views.PasswordChangeView): + action = "password-change" + + +class PasswordResetView(rest_auth_views.PasswordResetView): + action = "password-reset" + + +class PasswordResetConfirmView(rest_auth_views.PasswordResetConfirmView): + action = "password-reset-confirm" + + class UserViewSet(mixins.UpdateModelMixin, viewsets.GenericViewSet): queryset = models.User.objects.all() serializer_class = serializers.UserWriteSerializer @@ -31,9 +50,17 @@ class UserViewSet(mixins.UpdateModelMixin, viewsets.GenericViewSet): lookup_value_regex = r"[a-zA-Z0-9-_.]+" required_scope = "profile" - @action(methods=["get"], detail=False) + @action(methods=["get", "delete"], detail=False) def me(self, request, *args, **kwargs): - """Return information about the current user""" + """Return information about the current user or delete it""" + if request.method.lower() == "delete": + serializer = serializers.UserDeleteSerializer( + request.user, data=request.data + ) + serializer.is_valid(raise_exception=True) + tasks.delete_account.delay(user_id=request.user.pk) + # at this point, password is valid, we launch deletion + return Response(status=204) serializer = serializers.MeSerializer(request.user) return Response(serializer.data) diff --git a/api/requirements.apt b/api/requirements.apt index 6e4db7a3ba1076592115651e2229f11226cc3741..075b9ffddff95095b39223edf9b4510d54b828ca 100644 --- a/api/requirements.apt +++ b/api/requirements.apt @@ -8,3 +8,4 @@ postgresql-client python3-dev libldap2-dev libsasl2-dev +make diff --git a/api/requirements/base.txt b/api/requirements/base.txt index 8372adc4729bfdfe35086ad3fe11c43a73a496f1..63b1063f69d92faf4ad64d250d90c68b22a3db13 100644 --- a/api/requirements/base.txt +++ b/api/requirements/base.txt @@ -1,5 +1,5 @@ # Bleeding edge Django -django>=2.2.1,<2.3 +django>=2.2.4,<2.3 # Configuration django-environ>=0.4,<0.5 @@ -29,7 +29,7 @@ celery>=4.3,<4.4 # Your custom requirements go here django-cors-headers>=2.5.3,<2.6 musicbrainzngs==0.6 -djangorestframework>=3.9,<3.10 +djangorestframework>=3.10,<3.11 djangorestframework-jwt>=1.11,<1.12 pendulum>=2,<3 persisting-theory>=0.2,<0.3 @@ -39,23 +39,25 @@ django-rest-auth>=0.9,<0.10 ipython>=7,<8 mutagen>=1.42,<1.43 - -django-taggit>=0.24,<0.25 pymemoize==1.0.3 -django-dynamic-preferences>=1.7,<1.8 +django-dynamic-preferences>=1.7.1,<1.8 raven>=6.10,<7 python-magic==0.4.15 # XXX: until https://github.com/django/channels/issues/1240 is fixed channels==2.1.6 channels_redis>=2.3,<2.4 daphne>=2.2,<2.3 +uvicorn +gunicorn cryptography>=2,<3 # requests-http-signature==0.0.3 # clone until the branch is merged and released upstream git+https://github.com/EliotBerriot/requests-http-signature.git@signature-header-support django-cleanup==3.2.0 +requests>=2.22<2.23 +pyOpenSSL>=19<20 # for LDAP authentication python-ldap==3.2.0 diff --git a/api/tests/common/test_commands.py b/api/tests/common/test_commands.py new file mode 100644 index 0000000000000000000000000000000000000000..a6fabfc06f1e39166dffc3903a4e79043d46664a --- /dev/null +++ b/api/tests/common/test_commands.py @@ -0,0 +1,100 @@ +import pytest + +from django.core.management import call_command + +from funkwhale_api.federation import models as federation_models +from funkwhale_api.music import models as music_models +from funkwhale_api.tags import models as tags_models +from funkwhale_api.users import models as users_models + + +def test_load_test_data_dry_run(factories, mocker): + call_command("load_test_data", artists=10) + + assert music_models.Artist.objects.count() == 0 + + +@pytest.mark.parametrize( + "kwargs, expected_counts", + [ + ( + {"create_dependencies": True, "artists": 10}, + [(music_models.Artist.objects.all(), 10)], + ), + ( + {"create_dependencies": True, "albums": 10, "artists": 1}, + [ + (music_models.Album.objects.all(), 10), + (music_models.Artist.objects.all(), 1), + ], + ), + ( + {"create_dependencies": True, "tracks": 20, "albums": 10, "artists": 1}, + [ + (music_models.Track.objects.all(), 20), + (music_models.Album.objects.all(), 10), + (music_models.Artist.objects.all(), 1), + ], + ), + ( + {"create_dependencies": True, "albums": 10, "albums_artist_factor": 0.5}, + [ + (music_models.Album.objects.all(), 10), + (music_models.Artist.objects.all(), 5), + ], + ), + ( + {"create_dependencies": True, "albums": 3}, + [ + (music_models.Album.objects.all(), 3), + (music_models.Artist.objects.all(), 1), + ], + ), + ( + {"create_dependencies": True, "local_accounts": 3}, + [ + (users_models.User.objects.all(), 3), + (federation_models.Actor.objects.all(), 3), + ], + ), + ( + {"create_dependencies": True, "local_libraries": 3}, + [ + (users_models.User.objects.all(), 3), + (federation_models.Actor.objects.all(), 3), + (music_models.Library.objects.all(), 3), + ], + ), + ( + {"create_dependencies": True, "local_uploads": 3}, + [ + (users_models.User.objects.all(), 1), + (federation_models.Actor.objects.all(), 1), + (music_models.Library.objects.all(), 1), + (music_models.Upload.objects.filter(import_status="finished"), 3), + (music_models.Track.objects.all(), 3), + ], + ), + ( + {"create_dependencies": True, "tags": 3}, + [(tags_models.Tag.objects.all(), 3)], + ), + ( + {"create_dependencies": True, "track_tags": 3}, + [(tags_models.Tag.objects.all(), 1), (music_models.Track.objects.all(), 3)], + ), + ], +) +def test_load_test_data_args(factories, kwargs, expected_counts, mocker): + call_command("load_test_data", dry_run=False, **kwargs) + + for qs, expected_count in expected_counts: + assert qs.count() == expected_count + + +def test_load_test_data_skip_dependencies(factories): + factories["music.Artist"].create_batch(size=5) + call_command("load_test_data", dry_run=False, albums=10, create_dependencies=False) + + assert music_models.Artist.objects.count() == 5 + assert music_models.Album.objects.count() == 10 diff --git a/api/tests/common/test_fields.py b/api/tests/common/test_fields.py index 72aa8b4c35601e87555843a843566369c61e2375..2cc07f1b29a5c79b62dfa38af63792d9d8526907 100644 --- a/api/tests/common/test_fields.py +++ b/api/tests/common/test_fields.py @@ -20,3 +20,86 @@ from funkwhale_api.users.factories import UserFactory def test_privacy_level_query(user, expected): query = fields.privacy_level_query(user) assert query == expected + + +def test_generic_relation_field(factories): + obj = factories["users.User"]() + f = fields.GenericRelation( + { + "user": { + "queryset": obj.__class__.objects.all(), + "id_attr": "username", + "id_field": fields.serializers.CharField(), + } + } + ) + + data = {"type": "user", "username": obj.username} + + assert f.to_internal_value(data) == obj + + +@pytest.mark.parametrize( + "payload, expected_error", + [ + ({}, r".*Invalid data.*"), + (1, r".*Invalid data.*"), + (False, r".*Invalid data.*"), + ("test", r".*Invalid data.*"), + ({"missing": "type"}, r".*Invalid type.*"), + ({"type": "noop"}, r".*Invalid type.*"), + ({"type": "user"}, r".*Invalid username.*"), + ({"type": "user", "username": {}}, r".*Invalid username.*"), + ({"type": "user", "username": "not_found"}, r".*Object not found.*"), + ], +) +def test_generic_relation_field_validation_error(payload, expected_error, factories): + obj = factories["users.User"]() + f = fields.GenericRelation( + { + "user": { + "queryset": obj.__class__.objects.all(), + "id_attr": "username", + "id_field": fields.serializers.CharField(), + } + } + ) + + with pytest.raises(fields.serializers.ValidationError, match=expected_error): + f.to_internal_value(payload) + + +def test_generic_relation_filter_target_type(factories): + user = factories["users.User"]() + note = factories["moderation.Note"](target=user) + factories["moderation.Note"](target=factories["music.Artist"]()) + f = fields.GenericRelationFilter( + "target", + { + "user": { + "queryset": user.__class__.objects.all(), + "id_attr": "username", + "id_field": fields.serializers.CharField(), + } + }, + ) + qs = f.filter(note.__class__.objects.all(), "user") + assert list(qs) == [note] + + +def test_generic_relation_filter_target_type_and_id(factories): + user = factories["users.User"]() + note = factories["moderation.Note"](target=user) + factories["moderation.Note"](target=factories["users.User"]()) + f = fields.GenericRelationFilter( + "target", + { + "user": { + "queryset": user.__class__.objects.all(), + "id_attr": "username", + "id_field": fields.serializers.CharField(), + } + }, + ) + qs = f.filter(note.__class__.objects.all(), "user:{}".format(user.username)) + assert list(qs) == [note] diff --git a/api/tests/common/test_middleware.py b/api/tests/common/test_middleware.py index 9361748f33cc89195374f6d2de98307b0d4d581d..c62add98889b7aeb686586fb25c6e20aefe0fc64 100644 --- a/api/tests/common/test_middleware.py +++ b/api/tests/common/test_middleware.py @@ -1,6 +1,10 @@ +import time import pytest +from django.http import HttpResponse + from funkwhale_api.common import middleware +from funkwhale_api.common import throttling def test_spa_fallback_middleware_no_404(mocker): @@ -185,3 +189,39 @@ def test_get_custom_css(preferences, custom_css, expected): preferences["ui__custom_css"] = custom_css assert middleware.get_custom_css() == expected + + +def test_throttle_status_middleware_includes_info_in_response_headers(mocker): + get_response = mocker.Mock() + response = HttpResponse() + get_response.return_value = response + request = mocker.Mock( + path="/", + _api_request=mocker.Mock( + _throttle_status={ + "num_requests": 42, + "duration": 3600, + "scope": "hello", + "history": [time.time() - 1600, time.time() - 1800], + } + ), + ) + m = middleware.ThrottleStatusMiddleware(get_response) + + assert m(request) == response + assert response["X-RateLimit-Limit"] == "42" + assert response["X-RateLimit-Remaining"] == "40" + assert response["X-RateLimit-Duration"] == "3600" + assert response["X-RateLimit-Scope"] == "hello" + assert response["X-RateLimit-Reset"] == str(int(time.time()) + 2000) + assert response["X-RateLimit-ResetSeconds"] == str(2000) + assert response["Retry-After"] == str(1800) + + +def test_throttle_status_middleware_returns_proper_response(mocker): + get_response = mocker.Mock(side_effect=throttling.TooManyRequests()) + request = mocker.Mock(path="/", _api_request=None, _throttle_status=None) + m = middleware.ThrottleStatusMiddleware(get_response) + + response = m(request) + assert response.status_code == 429 diff --git a/api/tests/common/test_models.py b/api/tests/common/test_models.py index 25c9befda809de508864b39f7bdc551f6600b14b..a2ea89ef2abe416c563493bdb8d142f20e20cc8e 100644 --- a/api/tests/common/test_models.py +++ b/api/tests/common/test_models.py @@ -15,3 +15,34 @@ def test_mutation_fid_is_populated(factories, model, factory_args, namespace): assert instance.fid == federation_utils.full_url( reverse(namespace, kwargs={"uuid": instance.uuid}) ) + + +@pytest.mark.parametrize( + "factory_name, expected", + [ + ("music.Artist", "/library/artists/{obj.pk}"), + ("music.Album", "/library/albums/{obj.pk}"), + ("music.Track", "/library/tracks/{obj.pk}"), + ("playlists.Playlist", "/library/playlists/{obj.pk}"), + ], +) +def test_get_absolute_url(factory_name, factories, expected): + obj = factories[factory_name]() + + assert obj.get_absolute_url() == expected.format(obj=obj) + + +@pytest.mark.parametrize( + "factory_name, expected", + [ + ("music.Artist", "/manage/library/artists/{obj.pk}"), + ("music.Album", "/manage/library/albums/{obj.pk}"), + ("music.Track", "/manage/library/tracks/{obj.pk}"), + ("music.Library", "/manage/library/libraries/{obj.uuid}"), + ("federation.Actor", "/manage/moderation/accounts/{obj.full_username}"), + ], +) +def test_get_moderation_url(factory_name, factories, expected): + obj = factories[factory_name]() + + assert obj.get_moderation_url() == expected.format(obj=obj) diff --git a/api/tests/common/test_mutations.py b/api/tests/common/test_mutations.py index 3c0d869a116fd832b9927e1b4c7c1da51b4a88e2..877128fac62da638744e0855b925fc816d8b0f95 100644 --- a/api/tests/common/test_mutations.py +++ b/api/tests/common/test_mutations.py @@ -51,7 +51,7 @@ def test_apply_update_mutation(factories, mutations_registry, mocker): ) assert previous_state == get_update_previous_state.return_value get_update_previous_state.assert_called_once_with( - user, "username", serialized_relations={} + user, "username", serialized_relations={}, handlers={} ) user.refresh_from_db() diff --git a/api/tests/common/test_routers.py b/api/tests/common/test_routers.py new file mode 100644 index 0000000000000000000000000000000000000000..3bd5c4e47f5f823ef75e5d07fd9ce9514d67ab4f --- /dev/null +++ b/api/tests/common/test_routers.py @@ -0,0 +1,34 @@ +import pytest +from django import urls + + +@pytest.mark.parametrize( + "url", + [ + "/api/v1/artists", + "/api/v1/albums", + "/api/v1/tracks", + "/api/v1/libraries", + "/api/v1/uploads", + "/api/v1/playlists", + "/api/v1/favorites/tracks", + "/api/v1/auth/registration/verify-email", + "/api/v1/auth/registration/change-password", + "/api/v1/auth/registration/account-confirm-email/key", + "/api/v1/history/listenings", + "/api/v1/radios/sessions", + "/api/v1/users/users/me", + "/api/v1/federation/follows/library", + "/api/v1/manage/accounts", + "/api/v1/oauth/apps", + "/api/v1/moderation/content-filters", + "/api/v1/token", + "/api/v1/token/refresh", + "/api/v1/instance/settings", + "/api/v1/instance/nodeinfo/2.0", + ], +) +@pytest.mark.parametrize("suffix", ["", "/"]) +def test_optional_trailing_slash(url, suffix): + match = urls.resolve(url + suffix) + assert match is not None diff --git a/api/tests/common/test_throttling.py b/api/tests/common/test_throttling.py new file mode 100644 index 0000000000000000000000000000000000000000..6b000fcaf6ad3bc286eab799d0f442602792bbd9 --- /dev/null +++ b/api/tests/common/test_throttling.py @@ -0,0 +1,337 @@ +import time +import pytest + +from funkwhale_api.common import throttling + + +def test_get_ident_anonymous(api_request): + ip = "92.92.92.92" + request = api_request.get("/", HTTP_X_FORWARDED_FOR=ip) + + expected = {"id": ip, "type": "anonymous"} + + assert throttling.get_ident(request) == expected + + +def test_get_ident_authenticated(api_request, factories): + user = factories["users.User"]() + request = api_request.get("/") + setattr(request, "user", user) + expected = {"id": user.pk, "type": "authenticated"} + assert throttling.get_ident(request) == expected + + +@pytest.mark.parametrize( + "scope, ident, expected", + [ + ( + "create", + {"id": 42, "type": "authenticated"}, + "throttling:create:authenticated:42", + ), + ( + "list", + {"id": "92.92.92.92", "type": "anonymous"}, + "throttling:list:anonymous:92.92.92.92", + ), + ], +) +def test_get_cache_key(scope, ident, expected): + assert throttling.get_cache_key(scope, ident) == expected + + +@pytest.mark.parametrize( + "action, type, view_conf, throttling_actions, expected", + [ + # exact match, we return the rate + ("retrieve", "anonymous", {}, {"retrieve": {"anonymous": "test"}}, "test"), + # exact match on the view, we return the rate + ("retrieve", "anonymous", {"retrieve": {"anonymous": "test"}}, {}, "test"), + # no match, we return nothing + ("retrieve", "authenticated", {}, {}, None), + ("retrieve", "authenticated", {}, {"retrieve": {"anonymous": "test"}}, None), + ( + "retrieve", + "authenticated", + {"destroy": {"authenticated": "test"}}, + {"retrieve": {"anonymous": "test"}}, + None, + ), + # exact match on the view, and in the settings, the view is more important + ( + "retrieve", + "anonymous", + {"retrieve": {"anonymous": "test"}}, + {"retrieve": {"anonymous": "test-2"}}, + "test", + ), + # wildcard match, we return the wildcard value + ("retrieve", "authenticated", {}, {"*": {"authenticated": "test"}}, "test"), + # wildcard match, but more specific match also, we use this one instead + ( + "retrieve", + "authenticated", + {}, + {"retrieve": {"authenticated": "test-2"}, "*": {"authenticated": "test"}}, + "test-2", + ), + ], +) +def test_get_rate_for_scope_and_ident_type( + action, type, view_conf, throttling_actions, expected, settings +): + settings.THROTTLING_SCOPES = throttling_actions + assert ( + throttling.get_scope_for_action_and_ident_type( + action=action, ident_type=type, view_conf=view_conf + ) + is expected + ) + + +@pytest.mark.parametrize( + "view_args, throttling_rates, previous_requests, expected", + [ + # room for one more requests + ( + { + "action": "retrieve", + "throttling_scopes": {"retrieve": {"anonymous": "test"}}, + }, + {"test": {"rate": "3/s"}}, + 2, + True, + ), + # number of requests exceeded + ( + { + "action": "retrieve", + "throttling_scopes": {"retrieve": {"anonymous": "test"}}, + }, + {"test": {"rate": "3/s"}}, + 3, + False, + ), + # no throttling setup + ( + { + "action": "delete", + "throttling_scopes": {"retrieve": {"anonymous": "test"}}, + }, + {}, + 1000, + True, + ), + ], +) +def test_throttle_anonymous( + view_args, + throttling_rates, + previous_requests, + expected, + api_request, + mocker, + settings, +): + settings.THROTTLING_RATES = throttling_rates + settings.THROTTLING_SCOPES = {} + ip = "92.92.92.92" + ident = {"type": "anonymous", "id": ip} + request = api_request.get("/", HTTP_X_FORWARDED_FOR=ip) + + view = mocker.Mock(**view_args) + + cache_key = throttling.get_cache_key("test", ident) + throttle = throttling.FunkwhaleThrottle() + + history = [time.time() for _ in range(previous_requests)] + throttle.cache.set(cache_key, history) + + assert throttle.allow_request(request, view) is expected + + +@pytest.mark.parametrize( + "view_args, throttling_rates, previous_requests, expected", + [ + # room for one more requests + ( + { + "action": "retrieve", + "throttling_scopes": {"retrieve": {"authenticated": "test"}}, + }, + {"test": {"rate": "3/s"}}, + 2, + True, + ), + # number of requests exceeded + ( + { + "action": "retrieve", + "throttling_scopes": {"retrieve": {"authenticated": "test"}}, + }, + {"test": {"rate": "3/s"}}, + 3, + False, + ), + # no throttling setup + ( + { + "action": "delete", + "throttling_scopes": {"retrieve": {"authenticated": "test"}}, + }, + {}, + 1000, + True, + ), + ], +) +def test_throttle_authenticated( + view_args, + throttling_rates, + previous_requests, + expected, + api_request, + mocker, + settings, + factories, +): + settings.THROTTLING_RATES = throttling_rates + settings.THROTTLING_SCOPES = {} + user = factories["users.User"]() + ident = {"type": "authenticated", "id": user.pk} + request = api_request.get("/") + setattr(request, "user", user) + + view = mocker.Mock(**view_args) + + cache_key = throttling.get_cache_key("test", ident) + throttle = throttling.FunkwhaleThrottle() + + history = [time.time() for _ in range(previous_requests)] + throttle.cache.set(cache_key, history) + + assert throttle.allow_request(request, view) is expected + + +def throttle_successive(settings, mocker, api_request): + settings.THROTTLING_RATES = {"test": {"rate": "3/s"}} + settings.THROTTLING_SCOPES = {} + ip = "92.92.92.92" + request = api_request.get("/", HTTP_X_FORWARDED_FOR=ip) + + view = mocker.Mock( + action="retrieve", throttling_scopes={"retrieve": {"anonymous": "test"}} + ) + + throttle = throttling.FunkwhaleThrottle() + + assert throttle.allow_request(request, view) is True + assert throttle.allow_request(request, view) is True + assert throttle.allow_request(request, view) is True + assert throttle.allow_request(request, view) is False + + +def test_throttle_attach_info(mocker): + throttle = throttling.FunkwhaleThrottle() + request = mocker.Mock() + setattr(throttle, "num_requests", 300) + setattr(throttle, "duration", 3600) + setattr(throttle, "scope", "hello") + setattr(throttle, "history", []) + setattr(throttle, "request", request) + + expected = { + "num_requests": throttle.num_requests, + "duration": throttle.duration, + "history": throttle.history, + "wait": throttle.wait(), + "scope": throttle.scope, + } + throttle.attach_info() + + assert request._throttle_status == expected + + +@pytest.mark.parametrize("method", ["throttle_success", "throttle_failure"]) +def test_throttle_calls_attach_info(method, mocker): + throttle = throttling.FunkwhaleThrottle() + setattr(throttle, "key", "noop") + setattr(throttle, "now", "noop") + setattr(throttle, "duration", "noop") + setattr(throttle, "history", ["noop"]) + mocker.patch.object(throttle, "cache") + attach_info = mocker.patch.object(throttle, "attach_info") + func = getattr(throttle, method) + + func() + + attach_info.assert_called_once_with() + + +def test_allow_request(api_request, settings, mocker): + settings.THROTTLING_RATES = {"test": {"rate": "2/s"}} + ip = "92.92.92.92" + request = api_request.get("/", HTTP_X_FORWARDED_FOR=ip) + allow_request = mocker.spy(throttling.FunkwhaleThrottle, "allow_request") + action = "test" + throttling_scopes = {"test": {"anonymous": "test", "authenticated": "test"}} + throttling.check_request(request, action) + throttling.check_request(request, action) + with pytest.raises(throttling.TooManyRequests): + throttling.check_request(request, action) + + assert allow_request.call_count == 3 + assert allow_request.call_args[0][1] == request + assert allow_request.call_args[0][2] == throttling.DummyView( + action=action, throttling_scopes=throttling_scopes + ) + + +def test_allow_request_throttling_disabled(api_request, settings): + settings.THROTTLING_RATES = {"test": {"rate": "1/s"}} + settings.THROTTLING_ENABLED = False + ip = "92.92.92.92" + request = api_request.get("/", HTTP_X_FORWARDED_FOR=ip) + action = "test" + throttling.check_request(request, action) + # even exceeding request doesn't raise any exception + throttling.check_request(request, action) + + +def test_get_throttling_status_for_ident(settings, cache): + settings.THROTTLING_RATES = { + "test-1": {"rate": "30/d", "description": "description 1"}, + "test-2": {"rate": "20/h", "description": "description 2"}, + } + ident = {"type": "anonymous", "id": "92.92.92.92"} + test1_cache_key = throttling.get_cache_key("test-1", ident) + now = int(time.time()) + cache.set(test1_cache_key, [now - 1, now - 2, now - 99999999]) + + expected = [ + { + "id": "test-1", + "limit": 30, + "rate": "30/d", + "description": "description 1", + "duration": 24 * 3600, + "remaining": 28, + "reset": now + (24 * 3600) - 1, + "reset_seconds": (24 * 3600) - 1, + "available": None, + "available_seconds": None, + }, + { + "id": "test-2", + "limit": 20, + "rate": "20/h", + "description": "description 2", + "duration": 3600, + "remaining": 20, + "reset": None, + "reset_seconds": None, + "available": None, + "available_seconds": None, + }, + ] + assert throttling.get_status(ident, now) == expected diff --git a/api/tests/common/test_views.py b/api/tests/common/test_views.py index d2b53b41f620ac80caa5d5835ef3afdb02c1bd60..c1cbfd761e1a76e79f22a64661337ba4ee8fbaa6 100644 --- a/api/tests/common/test_views.py +++ b/api/tests/common/test_views.py @@ -4,6 +4,7 @@ from django.urls import reverse from funkwhale_api.common import serializers from funkwhale_api.common import signals from funkwhale_api.common import tasks +from funkwhale_api.common import throttling def test_can_detail_mutation(logged_in_api_client, factories): @@ -163,3 +164,20 @@ def test_cannot_approve_reject_without_perm( assert mutation.is_approved is None assert mutation.approved_by is None + + +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": expected_ident, + "scopes": throttling.get_status(expected_ident, now_time), + "enabled": settings.THROTTLING_ENABLED, + } + get_status = mocker.spy(throttling, "get_status") + url = reverse("api:v1:rate-limit") + response = logged_in_api_client.get(url) + + assert response.status_code == 200 + assert response.data == expected + get_status.assert_called_once_with(expected_ident, now_time) diff --git a/api/tests/conftest.py b/api/tests/conftest.py index d87e3937483eae28822281386c27c9ac38bc735c..a7fa02cc06ca5bb6f0ec6346a1f2822096994784 100644 --- a/api/tests/conftest.py +++ b/api/tests/conftest.py @@ -1,14 +1,12 @@ import contextlib -import datetime import io import os import PIL import random import shutil import tempfile -import uuid +import time -from faker.providers import internet as internet_provider import factory import pytest @@ -24,36 +22,18 @@ from django.db.models import QuerySet from aioresponses import aioresponses from dynamic_preferences.registries import global_preferences_registry -from rest_framework import fields as rest_fields from rest_framework.test import APIClient, APIRequestFactory from funkwhale_api.activity import record from funkwhale_api.federation import actors +from funkwhale_api.moderation import mrf from funkwhale_api.music import licenses +from . import utils as test_utils pytest_plugins = "aiohttp.pytest_plugin" -class FunkwhaleProvider(internet_provider.Provider): - """ - Our own faker data generator, since built-in ones are sometimes - not random enough - """ - - def federation_url(self, prefix=""): - def path_generator(): - return "{}/{}".format(prefix, uuid.uuid4()) - - domain = self.domain_name() - protocol = "https" - path = path_generator() - return "{}://{}/{}".format(protocol, domain, path) - - -factory.Faker.add_provider(FunkwhaleProvider) - - @pytest.fixture def queryset_equal_queries(): """ @@ -317,18 +297,9 @@ def authenticated_actor(factories, mocker): yield actor -@pytest.fixture +@pytest.fixture(scope="session") def to_api_date(): - def inner(value): - if isinstance(value, datetime.datetime): - f = rest_fields.DateTimeField() - return f.to_representation(value) - if isinstance(value, datetime.date): - f = rest_fields.DateField() - return f.to_representation(value) - raise ValueError("Invalid value: {}".format(value)) - - return inner + return test_utils.to_api_date @pytest.fixture() @@ -338,6 +309,13 @@ def now(mocker): return now +@pytest.fixture() +def now_time(mocker): + now = time.time() + mocker.patch("time.time", return_value=now) + return now + + @pytest.fixture() def avatar(): i = PIL.Image.new("RGBA", (400, 400), random.choice(["red", "blue", "yellow"])) @@ -425,6 +403,20 @@ def service_actor(db): return actors.get_service_actor() +@pytest.fixture +def mrf_inbox_registry(mocker): + registry = mrf.Registry() + mocker.patch("funkwhale_api.moderation.mrf.inbox", registry) + return registry + + +@pytest.fixture +def mrf_outbox_registry(mocker): + registry = mrf.Registry() + mocker.patch("funkwhale_api.moderation.mrf.outbox", registry) + return registry + + @pytest.fixture(autouse=True) def clear_license_cache(db): licenses._cache = None diff --git a/api/tests/favorites/test_favorites.py b/api/tests/favorites/test_favorites.py index 190c7918439f4acd73dce5b4e9d599ad3d979673..b81006386ac86b79a3ac34f37e19ffb89c153c40 100644 --- a/api/tests/favorites/test_favorites.py +++ b/api/tests/favorites/test_favorites.py @@ -4,8 +4,7 @@ import pytest from django.urls import reverse from funkwhale_api.favorites.models import TrackFavorite -from funkwhale_api.music import serializers as music_serializers -from funkwhale_api.users import serializers as users_serializers +from funkwhale_api.favorites import serializers def test_user_can_add_favorite(factories): @@ -20,22 +19,15 @@ def test_user_can_add_favorite(factories): def test_user_can_get_his_favorites( api_request, factories, logged_in_api_client, client ): - r = api_request.get("/") + request = api_request.get("/") favorite = factories["favorites.TrackFavorite"](user=logged_in_api_client.user) factories["favorites.TrackFavorite"]() url = reverse("api:v1:favorites:tracks-list") response = logged_in_api_client.get(url, {"user": logged_in_api_client.user.pk}) expected = [ - { - "user": users_serializers.UserBasicSerializer( - favorite.user, context={"request": r} - ).data, - "track": music_serializers.TrackSerializer( - favorite.track, context={"request": r} - ).data, - "id": favorite.id, - "creation_date": favorite.creation_date.isoformat().replace("+00:00", "Z"), - } + serializers.UserTrackFavoriteSerializer( + favorite, context={"request": request} + ).data ] assert response.status_code == 200 assert response.data["results"] == expected diff --git a/api/tests/favorites/test_serializers.py b/api/tests/favorites/test_serializers.py new file mode 100644 index 0000000000000000000000000000000000000000..16823caa34441d30f05f329f271199b689e21104 --- /dev/null +++ b/api/tests/favorites/test_serializers.py @@ -0,0 +1,20 @@ +from funkwhale_api.federation import serializers as federation_serializers +from funkwhale_api.favorites import serializers +from funkwhale_api.music import serializers as music_serializers +from funkwhale_api.users import serializers as users_serializers + + +def test_track_favorite_serializer(factories, to_api_date): + favorite = factories["favorites.TrackFavorite"]() + actor = favorite.user.create_actor() + + expected = { + "id": favorite.pk, + "creation_date": to_api_date(favorite.creation_date), + "track": music_serializers.TrackSerializer(favorite.track).data, + "actor": federation_serializers.APIActorSerializer(actor).data, + "user": users_serializers.UserBasicSerializer(favorite.user).data, + } + serializer = serializers.UserTrackFavoriteSerializer(favorite) + + assert serializer.data == expected diff --git a/api/tests/federation/test_activity.py b/api/tests/federation/test_activity.py index aaeebbb87c594084bc404df077fb83b2e4a5bc2f..ccc27c7dfd693efcaaa5781bee9e03f5b0dc8346 100644 --- a/api/tests/federation/test_activity.py +++ b/api/tests/federation/test_activity.py @@ -13,10 +13,13 @@ from funkwhale_api.federation import ( ) -def test_receive_validates_basic_attributes_and_stores_activity(factories, now, mocker): +def test_receive_validates_basic_attributes_and_stores_activity( + mrf_inbox_registry, factories, now, mocker +): mocker.patch.object( activity.InboxRouter, "get_matching_handlers", return_value=True ) + mrf_inbox_registry_apply = mocker.spy(mrf_inbox_registry, "apply") mocked_dispatch = mocker.patch("funkwhale_api.common.utils.on_commit") local_to_actor = factories["users.User"]().create_actor() local_cc_actor = factories["users.User"]().create_actor() @@ -31,6 +34,7 @@ def test_receive_validates_basic_attributes_and_stores_activity(factories, now, } copy = activity.receive(activity=a, on_behalf_of=remote_actor) + mrf_inbox_registry_apply.assert_called_once_with(a, sender_id=a["actor"]) assert copy.payload == a assert copy.creation_date >= now @@ -49,6 +53,63 @@ def test_receive_validates_basic_attributes_and_stores_activity(factories, now, assert ii.is_read is False +def test_receive_uses_mrf_returned_payload(mrf_inbox_registry, factories, now, mocker): + mocker.patch.object( + activity.InboxRouter, "get_matching_handlers", return_value=True + ) + + def patched_apply(payload, **kwargs): + payload["type"] = "SomethingElse" + return payload, True + + mrf_inbox_registry_apply = mocker.patch.object( + mrf_inbox_registry, "apply", side_effect=patched_apply + ) + mocked_dispatch = mocker.patch("funkwhale_api.common.utils.on_commit") + local_to_actor = factories["users.User"]().create_actor() + remote_actor = factories["federation.Actor"]() + a = { + "@context": [], + "actor": remote_actor.fid, + "type": "Noop", + "id": "https://test.activity", + "to": [local_to_actor.fid], + } + + copy = activity.receive(activity=a, on_behalf_of=remote_actor) + mrf_inbox_registry_apply.assert_called_once_with(a, sender_id=a["actor"]) + + expected = a.copy() + expected["type"] = "SomethingElse" + assert copy.payload == expected + assert copy.creation_date >= now + assert copy.actor == remote_actor + assert copy.fid == a["id"] + assert copy.type == "SomethingElse" + mocked_dispatch.assert_called_once_with( + tasks.dispatch_inbox.delay, activity_id=copy.pk + ) + + +def test_receive_mrf_skip(mrf_inbox_registry, factories, now, mocker): + mocker.patch.object( + activity.InboxRouter, "get_matching_handlers", return_value=True + ) + mocker.patch.object(mrf_inbox_registry, "apply", return_value=(None, False)) + local_to_actor = factories["users.User"]().create_actor() + remote_actor = factories["federation.Actor"]() + a = { + "@context": [], + "actor": remote_actor.fid, + "type": "Noop", + "id": "https://test.activity", + "to": [local_to_actor.fid], + } + + copy = activity.receive(activity=a, on_behalf_of=remote_actor) + assert copy is None + + def test_receive_calls_should_reject(factories, now, mocker): should_reject = mocker.patch.object(activity, "should_reject", return_value=True) mocker.patch.object( @@ -287,7 +348,7 @@ def test_route_matching(route, payload, expected): assert activity.match_route(route, payload) is expected -def test_outbox_router_dispatch(mocker, factories, now): +def test_outbox_router_dispatch(mocker, factories, preferences, now): router = activity.OutboxRouter() actor = factories["federation.Actor"]() r1 = factories["federation.Actor"]() @@ -331,7 +392,39 @@ def test_outbox_router_dispatch(mocker, factories, now): assert delivery.is_delivered is False -def test_prepare_deliveries_and_inbox_items(factories): +def test_outbox_router_dispatch_allow_list(mocker, factories, preferences, now): + preferences["moderation__allow_list_enabled"] = True + router = activity.OutboxRouter() + actor = factories["federation.Actor"]() + r1 = factories["federation.Actor"](domain__allowed=True) + r2 = factories["federation.Actor"]() + prepare_deliveries_and_inbox_items = mocker.spy( + activity, "prepare_deliveries_and_inbox_items" + ) + + def handler(context): + yield { + "payload": { + "type": "Noop", + "actor": actor.fid, + "summary": context["summary"], + "to": [r1], + "cc": [r2], + }, + "actor": actor, + } + + router.connect({"type": "Noop"}, handler) + router.dispatch({"type": "Noop"}, {"summary": "hello"}) + prepare_deliveries_and_inbox_items.assert_any_call( + [r1], "to", allowed_domains=set([r1.domain_id]) + ) + prepare_deliveries_and_inbox_items.assert_any_call( + [r2], "cc", allowed_domains=set([r1.domain_id]) + ) + + +def test_prepare_deliveries_and_inbox_items(factories, preferences): local_actor1 = factories["federation.Actor"]( local=True, shared_inbox_url="https://testlocal.inbox" ) @@ -385,7 +478,7 @@ def test_prepare_deliveries_and_inbox_items(factories): ] inbox_items, deliveries, urls = activity.prepare_deliveries_and_inbox_items( - recipients, "to" + recipients, "to", allowed_domains=None ) expected_inbox_items = sorted( [ @@ -436,6 +529,32 @@ def test_prepare_deliveries_and_inbox_items(factories): assert inbox_item.type == "to" +def test_prepare_deliveries_and_inbox_items_allow_list(factories, preferences): + preferences["moderation__allow_list_enabled"] = True + remote_actor1 = factories["federation.Actor"](domain__allowed=True) + remote_actor2 = factories["federation.Actor"](domain__allowed=False) + + recipients = [remote_actor1, remote_actor2] + + inbox_items, deliveries, urls = activity.prepare_deliveries_and_inbox_items( + recipients, "to", allowed_domains=set([remote_actor1.domain_id]) + ) + expected_inbox_items = [] + + expected_deliveries = [models.Delivery(inbox_url=remote_actor1.inbox_url)] + + expected_urls = [remote_actor1.fid] + + assert urls == expected_urls + assert len(expected_inbox_items) == len(inbox_items) + assert len(expected_deliveries) == len(deliveries) + + for delivery, expected_delivery in zip( + sorted(deliveries, key=lambda v: v.inbox_url), expected_deliveries + ): + assert delivery.inbox_url == expected_delivery.inbox_url + + def test_prepare_deliveries_and_inbox_items_instances_with_followers(factories): domain1 = factories["federation.Domain"](with_service_actor=True) @@ -460,7 +579,7 @@ def test_prepare_deliveries_and_inbox_items_instances_with_followers(factories): recipients = [activity.PUBLIC_ADDRESS, {"type": "instances_with_followers"}] inbox_items, deliveries, urls = activity.prepare_deliveries_and_inbox_items( - recipients, "to" + recipients, "to", allowed_domains=None ) expected_deliveries = sorted( @@ -483,6 +602,20 @@ def test_prepare_deliveries_and_inbox_items_instances_with_followers(factories): assert delivery.inbox_url == expected_delivery.inbox_url +@pytest.mark.parametrize( + "url, allowed_domains, expected", + [ + ("https://domain.example/test", None, True), + ("https://domain.example/test", [], False), + ("https://allowed.example/test", ["allowed.example"], True), + ("https://domain.example/test", ["allowed.example"], False), + ("https://social.allowed.example/test", ["allowed.example"], False), + ], +) +def test_is_allowed_url(url, allowed_domains, expected): + assert activity.is_allowed_url(url, allowed_domains) is expected + + def test_should_rotate_actor_key(settings, cache, now): actor_id = 42 settings.ACTOR_KEY_ROTATION_DELAY = 10 @@ -507,7 +640,9 @@ def test_schedule_key_rotation(cache, mocker): assert cache.get(activity.ACTOR_KEY_ROTATION_LOCK_CACHE_KEY.format(actor_id), True) -def test_outbox_dispatch_rotate_key_on_delete(mocker, factories, cache, settings): +def test_outbox_dispatch_rotate_key_on_delete( + mocker, factories, cache, settings, preferences +): router = activity.OutboxRouter() actor = factories["federation.Actor"]() r1 = factories["federation.Actor"]() diff --git a/api/tests/federation/test_api_serializers.py b/api/tests/federation/test_api_serializers.py index df55df7ae30b52e905551f1b54eb63869972f4b1..d7c5836cab2ced75c340d98bcb7dc4e1cc41eb5c 100644 --- a/api/tests/federation/test_api_serializers.py +++ b/api/tests/federation/test_api_serializers.py @@ -4,7 +4,7 @@ from funkwhale_api.federation import api_serializers from funkwhale_api.federation import serializers -def test_library_serializer(factories): +def test_library_serializer(factories, to_api_date): library = factories["music.Library"](uploads_count=5678) expected = { "fid": library.fid, @@ -12,7 +12,7 @@ def test_library_serializer(factories): "actor": serializers.APIActorSerializer(library.actor).data, "name": library.name, "description": library.description, - "creation_date": library.creation_date.isoformat().split("+")[0] + "Z", + "creation_date": to_api_date(library.creation_date), "uploads_count": library.uploads_count, "privacy_level": library.privacy_level, "follow": None, @@ -34,7 +34,7 @@ def test_library_serializer_latest_scan(factories): assert serializer.data["latest_scan"] == expected -def test_library_serializer_with_follow(factories): +def test_library_serializer_with_follow(factories, to_api_date): library = factories["music.Library"](uploads_count=5678) follow = factories["federation.LibraryFollow"](target=library) @@ -45,7 +45,7 @@ def test_library_serializer_with_follow(factories): "actor": serializers.APIActorSerializer(library.actor).data, "name": library.name, "description": library.description, - "creation_date": library.creation_date.isoformat().split("+")[0] + "Z", + "creation_date": to_api_date(library.creation_date), "uploads_count": library.uploads_count, "privacy_level": library.privacy_level, "follow": api_serializers.NestedLibraryFollowSerializer(follow).data, diff --git a/api/tests/federation/test_authentication.py b/api/tests/federation/test_authentication.py index 4e837e64177be9919881d0b5fe6adef94bbdaf6f..643bccccb6ca12e80a180d2b1fc5a1e7d6297f63 100644 --- a/api/tests/federation/test_authentication.py +++ b/api/tests/federation/test_authentication.py @@ -178,3 +178,28 @@ def test_autenthicate_supports_blind_key_rotation(factories, mocker, api_request assert user.is_anonymous is True assert actor.public_key == new_public.decode("utf-8") assert actor.fid == actor_url + + +def test_authenticate_checks_signature_with_allow_list( + preferences, factories, api_request +): + preferences["moderation__allow_list_enabled"] = True + domain = factories["federation.Domain"](allowed=False) + private, public = keys.get_key_pair() + actor_url = "https://{}/actor".format(domain.name) + + signed_request = factories["federation.SignedRequest"]( + auth__key=private, auth__key_id=actor_url + "#main-key", auth__headers=["date"] + ) + prepared = signed_request.prepare() + django_request = api_request.get( + "/", + **{ + "HTTP_DATE": prepared.headers["date"], + "HTTP_SIGNATURE": prepared.headers["signature"], + } + ) + authenticator = authentication.SignatureAuthentication() + + with pytest.raises(exceptions.BlockedActorOrDomain): + authenticator.authenticate(django_request) diff --git a/api/tests/federation/test_migrations.py b/api/tests/federation/test_migrations.py index db3f8aaa54ff668fddf0d71ab00b26c39989861b..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 --- a/api/tests/federation/test_migrations.py +++ b/api/tests/federation/test_migrations.py @@ -1,40 +0,0 @@ -def test_domain_14_migration(migrator): - a, f, t = ("federation", "0014_auto_20181205_0958", "0015_populate_domains") - - migrator.migrate([(a, f)]) - old_apps = migrator.loader.project_state([(a, f)]).apps - Actor = old_apps.get_model(a, "Actor") - a1 = Actor.objects.create( - fid="http://testmigration1.com", - preferred_username="test1", - old_domain="dOmaiN1.com", - ) - a2 = Actor.objects.create( - fid="http://testmigration2.com", - preferred_username="test2", - old_domain="domain1.com", - ) - a3 = Actor.objects.create( - fid="http://testmigration3.com", - preferred_username="test2", - old_domain="domain2.com", - ) - - migrator.loader.build_graph() - migrator.migrate([(a, t)]) - new_apps = migrator.loader.project_state([(a, t)]).apps - - Actor = new_apps.get_model(a, "Actor") - Domain = new_apps.get_model(a, "Domain") - - a1 = Actor.objects.get(pk=a1.pk) - a2 = Actor.objects.get(pk=a2.pk) - a3 = Actor.objects.get(pk=a3.pk) - - assert Domain.objects.count() == 2 - assert a1.domain == Domain.objects.get(pk="domain1.com") - assert a2.domain == Domain.objects.get(pk="domain1.com") - assert a3.domain == Domain.objects.get(pk="domain2.com") - - assert Domain.objects.get(pk="domain1.com").creation_date == a1.creation_date - assert Domain.objects.get(pk="domain2.com").creation_date == a3.creation_date diff --git a/api/tests/federation/test_models.py b/api/tests/federation/test_models.py index d6f862bb356300e9d93fb02c0300f266eef0a6bf..a7460b01cba857f40f17d4e80c0d31075c76912b 100644 --- a/api/tests/federation/test_models.py +++ b/api/tests/federation/test_models.py @@ -124,6 +124,7 @@ def test_actor_stats(factories): "albums": 0, "uploads": 0, "artists": 0, + "reports": 0, "outbox_activities": 0, "received_library_follows": 0, "emitted_library_follows": 0, diff --git a/api/tests/federation/test_routes.py b/api/tests/federation/test_routes.py index 56834d55f472a5ce9e3d49ee6e96486bf59bd673..3bbdd486821275d299568f9e4a8ea5697e764806 100644 --- a/api/tests/federation/test_routes.py +++ b/api/tests/federation/test_routes.py @@ -1,6 +1,13 @@ import pytest -from funkwhale_api.federation import actors, contexts, jsonld, routes, serializers +from funkwhale_api.federation import ( + activity, + actors, + contexts, + jsonld, + routes, + serializers, +) @pytest.mark.parametrize( @@ -8,23 +15,29 @@ from funkwhale_api.federation import actors, contexts, jsonld, routes, serialize [ ({"type": "Follow"}, routes.inbox_follow), ({"type": "Accept"}, routes.inbox_accept), - ({"type": "Create", "object.type": "Audio"}, routes.inbox_create_audio), - ({"type": "Update", "object.type": "Library"}, routes.inbox_update_library), - ({"type": "Delete", "object.type": "Library"}, routes.inbox_delete_library), - ({"type": "Delete", "object.type": "Audio"}, routes.inbox_delete_audio), - ({"type": "Undo", "object.type": "Follow"}, routes.inbox_undo_follow), - ({"type": "Update", "object.type": "Artist"}, routes.inbox_update_artist), - ({"type": "Update", "object.type": "Album"}, routes.inbox_update_album), - ({"type": "Update", "object.type": "Track"}, routes.inbox_update_track), + ({"type": "Create", "object": {"type": "Audio"}}, routes.inbox_create_audio), + ( + {"type": "Update", "object": {"type": "Library"}}, + routes.inbox_update_library, + ), + ( + {"type": "Delete", "object": {"type": "Library"}}, + routes.inbox_delete_library, + ), + ({"type": "Delete", "object": {"type": "Audio"}}, routes.inbox_delete_audio), + ({"type": "Undo", "object": {"type": "Follow"}}, routes.inbox_undo_follow), + ({"type": "Update", "object": {"type": "Artist"}}, routes.inbox_update_artist), + ({"type": "Update", "object": {"type": "Album"}}, routes.inbox_update_album), + ({"type": "Update", "object": {"type": "Track"}}, routes.inbox_update_track), + ({"type": "Delete", "object": {"type": "Person"}}, routes.inbox_delete_actor), ], ) def test_inbox_routes(route, handler): - for r, h in routes.inbox.routes: - if r == route: - assert h == handler - return - - assert False, "Inbox route {} not found".format(route) + matching = [ + handler for r, handler in routes.inbox.routes if activity.match_route(r, route) + ] + assert len(matching) == 1, "Inbox route {} not found".format(route) + assert matching[0] == handler @pytest.mark.parametrize( @@ -32,21 +45,41 @@ def test_inbox_routes(route, handler): [ ({"type": "Accept"}, routes.outbox_accept), ({"type": "Follow"}, routes.outbox_follow), - ({"type": "Create", "object.type": "Audio"}, routes.outbox_create_audio), - ({"type": "Update", "object.type": "Library"}, routes.outbox_update_library), - ({"type": "Delete", "object.type": "Library"}, routes.outbox_delete_library), - ({"type": "Delete", "object.type": "Audio"}, routes.outbox_delete_audio), - ({"type": "Undo", "object.type": "Follow"}, routes.outbox_undo_follow), - ({"type": "Update", "object.type": "Track"}, routes.outbox_update_track), + ({"type": "Create", "object": {"type": "Audio"}}, routes.outbox_create_audio), + ( + {"type": "Update", "object": {"type": "Library"}}, + routes.outbox_update_library, + ), + ( + {"type": "Delete", "object": {"type": "Library"}}, + routes.outbox_delete_library, + ), + ({"type": "Delete", "object": {"type": "Audio"}}, routes.outbox_delete_audio), + ({"type": "Undo", "object": {"type": "Follow"}}, routes.outbox_undo_follow), + ({"type": "Update", "object": {"type": "Track"}}, routes.outbox_update_track), + ( + {"type": "Delete", "object": {"type": "Tombstone"}}, + routes.outbox_delete_actor, + ), + ({"type": "Delete", "object": {"type": "Person"}}, routes.outbox_delete_actor), + ({"type": "Delete", "object": {"type": "Service"}}, routes.outbox_delete_actor), + ( + {"type": "Delete", "object": {"type": "Application"}}, + routes.outbox_delete_actor, + ), + ({"type": "Delete", "object": {"type": "Group"}}, routes.outbox_delete_actor), + ( + {"type": "Delete", "object": {"type": "Organization"}}, + routes.outbox_delete_actor, + ), ], ) def test_outbox_routes(route, handler): - for r, h in routes.outbox.routes: - if r == route: - assert h == handler - return - - assert False, "Outbox route {} not found".format(route) + matching = [ + handler for r, handler in routes.outbox.routes if activity.match_route(r, route) + ] + assert len(matching) == 1, "Outbox route {} not found".format(route) + assert matching[0] == handler def test_inbox_follow_library_autoapprove(factories, mocker): @@ -559,3 +592,60 @@ def test_outbox_update_track(factories): assert dict(activity["payload"]) == dict(expected) assert activity["actor"] == actors.get_service_actor() + + +def test_outbox_delete_actor(factories): + user = factories["users.User"]() + actor = user.create_actor() + + activity = list(routes.outbox_delete_actor({"actor": actor}))[0] + expected = serializers.ActivitySerializer( + {"type": "Delete", "object": {"id": actor.fid, "type": actor.type}} + ).data + + expected["to"] = [contexts.AS.Public, {"type": "instances_with_followers"}] + + assert dict(activity["payload"]) == dict(expected) + assert activity["actor"] == actor + + +def test_inbox_delete_actor(factories): + remote_actor = factories["federation.Actor"]() + serializer = serializers.ActivitySerializer( + { + "type": "Delete", + "object": {"type": remote_actor.type, "id": remote_actor.fid}, + } + ) + routes.inbox_delete_actor( + serializer.data, context={"actor": remote_actor, "raise_exception": True} + ) + with pytest.raises(remote_actor.__class__.DoesNotExist): + remote_actor.refresh_from_db() + + +def test_inbox_delete_actor_only_works_on_self(factories): + remote_actor1 = factories["federation.Actor"]() + remote_actor2 = factories["federation.Actor"]() + serializer = serializers.ActivitySerializer( + { + "type": "Delete", + "object": {"type": remote_actor2.type, "id": remote_actor2.fid}, + } + ) + routes.inbox_delete_actor( + serializer.data, context={"actor": remote_actor1, "raise_exception": True} + ) + remote_actor2.refresh_from_db() + + +def test_inbox_delete_actor_doesnt_delete_local_actor(factories): + local_actor = factories["users.User"]().create_actor() + serializer = serializers.ActivitySerializer( + {"type": "Delete", "object": {"type": local_actor.type, "id": local_actor.fid}} + ) + routes.inbox_delete_actor( + serializer.data, context={"actor": local_actor, "raise_exception": True} + ) + # actor should still be here! + local_actor.refresh_from_db() diff --git a/api/tests/federation/test_serializers.py b/api/tests/federation/test_serializers.py index 43b465d5480fa0096ea8fcc99e889fdde3826a0e..a0b773fb4e0fca9de1df66dacfa97509001052ef 100644 --- a/api/tests/federation/test_serializers.py +++ b/api/tests/federation/test_serializers.py @@ -559,7 +559,7 @@ def test_music_library_serializer_from_private(factories, mocker): def test_activity_pub_artist_serializer_to_ap(factories): - artist = factories["music.Artist"](attributed=True) + artist = factories["music.Artist"](attributed=True, set_tags=["Punk", "Rock"]) expected = { "@context": jsonld.get_default_context(), "type": "Artist", @@ -568,6 +568,10 @@ def test_activity_pub_artist_serializer_to_ap(factories): "musicbrainzId": artist.mbid, "published": artist.creation_date.isoformat(), "attributedTo": artist.attributed_to.fid, + "tag": [ + {"type": "Hashtag", "name": "#Punk"}, + {"type": "Hashtag", "name": "#Rock"}, + ], } serializer = serializers.ArtistSerializer(artist) @@ -575,7 +579,7 @@ def test_activity_pub_artist_serializer_to_ap(factories): def test_activity_pub_album_serializer_to_ap(factories): - album = factories["music.Album"](attributed=True) + album = factories["music.Album"](attributed=True, set_tags=["Punk", "Rock"]) expected = { "@context": jsonld.get_default_context(), @@ -596,6 +600,10 @@ def test_activity_pub_album_serializer_to_ap(factories): ).data ], "attributedTo": album.attributed_to.fid, + "tag": [ + {"type": "Hashtag", "name": "#Punk"}, + {"type": "Hashtag", "name": "#Rock"}, + ], } serializer = serializers.AlbumSerializer(album) @@ -604,7 +612,11 @@ def test_activity_pub_album_serializer_to_ap(factories): def test_activity_pub_track_serializer_to_ap(factories): track = factories["music.Track"]( - license="cc-by-4.0", copyright="test", disc_number=3, attributed=True + license="cc-by-4.0", + copyright="test", + disc_number=3, + attributed=True, + set_tags=["Punk", "Rock"], ) expected = { "@context": jsonld.get_default_context(), @@ -626,6 +638,10 @@ def test_activity_pub_track_serializer_to_ap(factories): track.album, context={"include_ap_context": False} ).data, "attributedTo": track.attributed_to.fid, + "tag": [ + {"type": "Hashtag", "name": "#Punk"}, + {"type": "Hashtag", "name": "#Rock"}, + ], } serializer = serializers.TrackSerializer(track) @@ -633,6 +649,7 @@ def test_activity_pub_track_serializer_to_ap(factories): def test_activity_pub_track_serializer_from_ap(factories, r_mock, mocker): + add_tags = mocker.patch("funkwhale_api.tags.models.add_tags") track_attributed_to = factories["federation.Actor"]() album_attributed_to = factories["federation.Actor"]() album_artist_attributed_to = factories["federation.Actor"]() @@ -664,6 +681,7 @@ def test_activity_pub_track_serializer_from_ap(factories, r_mock, mocker): "href": "https://cover.image/test.png", "mediaType": "image/png", }, + "tag": [{"type": "Hashtag", "name": "AlbumTag"}], "artists": [ { "type": "Artist", @@ -672,6 +690,7 @@ def test_activity_pub_track_serializer_from_ap(factories, r_mock, mocker): "musicbrainzId": str(uuid.uuid4()), "published": published.isoformat(), "attributedTo": album_artist_attributed_to.fid, + "tag": [{"type": "Hashtag", "name": "AlbumArtistTag"}], } ], }, @@ -683,8 +702,13 @@ def test_activity_pub_track_serializer_from_ap(factories, r_mock, mocker): "musicbrainzId": str(uuid.uuid4()), "attributedTo": artist_attributed_to.fid, "published": published.isoformat(), + "tag": [{"type": "Hashtag", "name": "ArtistTag"}], } ], + "tag": [ + {"type": "Hashtag", "name": "#Hello"}, + {"type": "Hashtag", "name": "World"}, + ], } r_mock.get(data["album"]["cover"]["href"], body=io.BytesIO(b"coucou")) serializer = serializers.TrackSerializer(data=data, context={"activity": activity}) @@ -728,6 +752,51 @@ def test_activity_pub_track_serializer_from_ap(factories, r_mock, mocker): assert album_artist.creation_date == published assert album_artist.attributed_to == album_artist_attributed_to + add_tags.assert_any_call(track, *["Hello", "World"]) + add_tags.assert_any_call(album, *["AlbumTag"]) + add_tags.assert_any_call(album_artist, *["AlbumArtistTag"]) + add_tags.assert_any_call(artist, *["ArtistTag"]) + + +def test_activity_pub_track_serializer_from_ap_update(factories, r_mock, mocker): + set_tags = mocker.patch("funkwhale_api.tags.models.set_tags") + track_attributed_to = factories["federation.Actor"]() + track = factories["music.Track"]() + + published = timezone.now() + data = { + "@context": jsonld.get_default_context(), + "type": "Track", + "id": track.fid, + "published": published.isoformat(), + "musicbrainzId": str(uuid.uuid4()), + "name": "Black in back", + "position": 5, + "disc": 2, + "attributedTo": track_attributed_to.fid, + "album": serializers.AlbumSerializer(track.album).data, + "artists": [serializers.ArtistSerializer(track.artist).data], + "tag": [ + {"type": "Hashtag", "name": "#Hello"}, + # Ensure we can handle tags without a leading # + {"type": "Hashtag", "name": "World"}, + ], + } + serializer = serializers.TrackSerializer(track, data=data) + assert serializer.is_valid(raise_exception=True) + + serializer.save() + track.refresh_from_db() + + assert track.fid == data["id"] + assert track.title == data["name"] + assert track.position == data["position"] + assert track.disc_number == data["disc"] + assert track.attributed_to == track_attributed_to + assert str(track.mbid) == data["musicbrainzId"] + + set_tags.assert_called_once_with(track, *["Hello", "World"]) + def test_activity_pub_upload_serializer_from_ap(factories, mocker, r_mock): activity = factories["federation.Activity"]() diff --git a/api/tests/federation/test_utils.py b/api/tests/federation/test_utils.py index 9aa850728ef969ee8a7e764050e3846650d21358..83c5e4f7e03d8b761482f7aa4b7232deaecff36f 100644 --- a/api/tests/federation/test_utils.py +++ b/api/tests/federation/test_utils.py @@ -72,6 +72,32 @@ def test_retrieve_ap_object_honor_instance_policy_domain(factories): utils.retrieve_ap_object(fid, actor=None) +def test_retrieve_ap_object_honor_mrf_inbox_before_http( + mrf_inbox_registry, factories, mocker +): + apply = mocker.patch.object(mrf_inbox_registry, "apply", return_value=(None, False)) + fid = "http://domain/test" + with pytest.raises(exceptions.BlockedActorOrDomain): + utils.retrieve_ap_object(fid, actor=None) + + apply.assert_called_once_with({"id": fid}) + + +def test_retrieve_ap_object_honor_mrf_inbox_after_http( + r_mock, mrf_inbox_registry, factories, mocker +): + apply = mocker.patch.object( + mrf_inbox_registry, "apply", side_effect=[(True, False), (None, False)] + ) + payload = {"id": "http://domain/test", "actor": "hello"} + r_mock.get(payload["id"], json=payload) + with pytest.raises(exceptions.BlockedActorOrDomain): + utils.retrieve_ap_object(payload["id"], actor=None) + + apply.assert_any_call({"id": payload["id"]}) + apply.assert_any_call(payload) + + def test_retrieve_ap_object_honor_instance_policy_different_url_and_id( r_mock, factories ): diff --git a/api/tests/federation/test_views.py b/api/tests/federation/test_views.py index 93ce05b8ebde3b88cbd1c5528ce4db6579256d7f..51d8e79a93f76d3696b27a6d77bfd9d93476f851 100644 --- a/api/tests/federation/test_views.py +++ b/api/tests/federation/test_views.py @@ -5,6 +5,20 @@ from django.urls import reverse from funkwhale_api.federation import actors, serializers, webfinger +def test_authenticate_skips_anonymous_fetch_when_allow_list_enabled( + preferences, api_client +): + preferences["moderation__allow_list_enabled"] = True + actor = actors.get_service_actor() + url = reverse( + "federation:actors-detail", + kwargs={"preferred_username": actor.preferred_username}, + ) + response = api_client.get(url) + + assert response.status_code == 403 + + def test_wellknown_webfinger_validates_resource(db, api_client, settings, mocker): clean = mocker.spy(webfinger, "clean_resource") url = reverse("federation:well-known-webfinger") diff --git a/api/tests/history/test_serializers.py b/api/tests/history/test_serializers.py new file mode 100644 index 0000000000000000000000000000000000000000..170b44d6b11fa62b650f6f4a932db26b68873b6a --- /dev/null +++ b/api/tests/history/test_serializers.py @@ -0,0 +1,20 @@ +from funkwhale_api.federation import serializers as federation_serializers +from funkwhale_api.history import serializers +from funkwhale_api.music import serializers as music_serializers +from funkwhale_api.users import serializers as users_serializers + + +def test_listening_serializer(factories, to_api_date): + listening = factories["history.Listening"]() + actor = listening.user.create_actor() + + expected = { + "id": listening.pk, + "creation_date": to_api_date(listening.creation_date), + "track": music_serializers.TrackSerializer(listening.track).data, + "actor": federation_serializers.APIActorSerializer(actor).data, + "user": users_serializers.UserBasicSerializer(listening.user).data, + } + serializer = serializers.ListeningSerializer(listening) + + assert serializer.data == expected diff --git a/api/tests/instance/test_nodeinfo.py b/api/tests/instance/test_nodeinfo.py index 233b388d43895ed3138c22126d48210ef520a47a..2e9075d2667d3e4f3d8d55ae54c350fadb99e9fb 100644 --- a/api/tests/instance/test_nodeinfo.py +++ b/api/tests/instance/test_nodeinfo.py @@ -1,11 +1,21 @@ +import pytest + import funkwhale_api from funkwhale_api.instance import nodeinfo from funkwhale_api.federation import actors +from funkwhale_api.federation import utils as federation_utils from funkwhale_api.music import utils as music_utils -def test_nodeinfo_dump(preferences, mocker): +def test_nodeinfo_dump(preferences, mocker, avatar): + preferences["instance__banner"] = avatar preferences["instance__nodeinfo_stats_enabled"] = True + preferences["moderation__unauthenticated_report_types"] = [ + "takedown_request", + "other", + "other_category_that_doesnt_exist", + ] + stats = { "users": {"total": 1, "active_halfyear": 12, "active_month": 13}, "tracks": 2, @@ -30,6 +40,11 @@ def test_nodeinfo_dump(preferences, mocker): "shortDescription": preferences["instance__short_description"], "longDescription": preferences["instance__long_description"], "nodeName": preferences["instance__name"], + "rules": preferences["instance__rules"], + "contactEmail": preferences["instance__contact_email"], + "defaultUploadQuota": preferences["users__upload_quota"], + "terms": preferences["instance__terms"], + "banner": federation_utils.full_url(preferences["instance__banner"].url), "library": { "federationEnabled": preferences["federation__enabled"], "federationNeedsApproval": preferences[ @@ -48,6 +63,34 @@ def test_nodeinfo_dump(preferences, mocker): "listenings": {"total": stats["listenings"]}, }, "supportedUploadExtensions": music_utils.SUPPORTED_EXTENSIONS, + "allowList": {"enabled": False, "domains": None}, + "reportTypes": [ + { + "type": "takedown_request", + "label": "Takedown request", + "anonymous": True, + }, + { + "type": "invalid_metadata", + "label": "Invalid metadata", + "anonymous": False, + }, + { + "type": "illegal_content", + "label": "Illegal content", + "anonymous": False, + }, + { + "type": "offensive_content", + "label": "Offensive content", + "anonymous": False, + }, + {"type": "other", "label": "Other", "anonymous": True}, + ], + "funkwhaleSupportMessageEnabled": preferences[ + "instance__funkwhale_support_message_enabled" + ], + "instanceSupportMessage": preferences["instance__support_message"], }, } assert nodeinfo.get() == expected @@ -55,6 +98,10 @@ def test_nodeinfo_dump(preferences, mocker): def test_nodeinfo_dump_stats_disabled(preferences, mocker): preferences["instance__nodeinfo_stats_enabled"] = False + preferences["moderation__unauthenticated_report_types"] = [ + "takedown_request", + "other", + ] expected = { "version": "2.0", @@ -69,6 +116,11 @@ def test_nodeinfo_dump_stats_disabled(preferences, mocker): "shortDescription": preferences["instance__short_description"], "longDescription": preferences["instance__long_description"], "nodeName": preferences["instance__name"], + "rules": preferences["instance__rules"], + "contactEmail": preferences["instance__contact_email"], + "defaultUploadQuota": preferences["users__upload_quota"], + "terms": preferences["instance__terms"], + "banner": None, "library": { "federationEnabled": preferences["federation__enabled"], "federationNeedsApproval": preferences[ @@ -79,6 +131,52 @@ def test_nodeinfo_dump_stats_disabled(preferences, mocker): ], }, "supportedUploadExtensions": music_utils.SUPPORTED_EXTENSIONS, + "allowList": {"enabled": False, "domains": None}, + "reportTypes": [ + { + "type": "takedown_request", + "label": "Takedown request", + "anonymous": True, + }, + { + "type": "invalid_metadata", + "label": "Invalid metadata", + "anonymous": False, + }, + { + "type": "illegal_content", + "label": "Illegal content", + "anonymous": False, + }, + { + "type": "offensive_content", + "label": "Offensive content", + "anonymous": False, + }, + {"type": "other", "label": "Other", "anonymous": True}, + ], + "funkwhaleSupportMessageEnabled": preferences[ + "instance__funkwhale_support_message_enabled" + ], + "instanceSupportMessage": preferences["instance__support_message"], }, } assert nodeinfo.get() == expected + + +@pytest.mark.parametrize( + "enabled, public, expected", + [ + (True, True, {"enabled": True, "domains": ["allowed.example"]}), + (True, False, {"enabled": True, "domains": None}), + (False, False, {"enabled": False, "domains": None}), + ], +) +def test_nodeinfo_allow_list_enabled(preferences, factories, enabled, public, expected): + preferences["moderation__allow_list_enabled"] = enabled + preferences["moderation__allow_list_public"] = public + factories["federation.Domain"](name="allowed.example", allowed=True) + factories["federation.Domain"](allowed=False) + factories["federation.Domain"](allowed=None) + + assert nodeinfo.get()["metadata"]["allowList"] == expected diff --git a/api/tests/instance/test_preferences.py b/api/tests/instance/test_preferences.py index b465be9d38571bef6513204922001b6c3dd869b1..06d1024fbd6f465ef98c79b9cecc8dbdc61260c1 100644 --- a/api/tests/instance/test_preferences.py +++ b/api/tests/instance/test_preferences.py @@ -34,3 +34,13 @@ def test_instance_settings(pref, value, preferences): preferences[pref] = value assert preferences[pref] == value + + +def test_instance_banner_assign_file_properly(preferences, avatar): + preferences["instance__banner"] = avatar + + avatar.seek(0) + banner = preferences["instance__banner"].read() + + assert len(banner) > 0 + assert banner == avatar.read() diff --git a/api/tests/manage/test_serializers.py b/api/tests/manage/test_serializers.py index 65c75c2c331cc013761d3ee00c22a985e21c2b21..d8a2ee8f9e6263837b123f1c72474b7d9254e0d6 100644 --- a/api/tests/manage/test_serializers.py +++ b/api/tests/manage/test_serializers.py @@ -39,18 +39,19 @@ def test_user_update_permission(factories): assert user.permission_settings is False -def test_manage_domain_serializer(factories, now): +def test_manage_domain_serializer(factories, now, to_api_date): domain = factories["federation.Domain"](nodeinfo_fetch_date=None) setattr(domain, "actors_count", 42) setattr(domain, "outbox_activities_count", 23) expected = { "name": domain.name, - "creation_date": domain.creation_date.isoformat().split("+")[0] + "Z", + "creation_date": to_api_date(domain.creation_date), "actors_count": 42, "outbox_activities_count": 23, "nodeinfo": {}, "nodeinfo_fetch_date": None, "instance_policy": None, + "allowed": None, } s = serializers.ManageDomainSerializer(domain) @@ -64,14 +65,14 @@ def test_manage_domain_serializer_validates_hostname(db): s.is_valid(raise_exception=True) -def test_manage_actor_serializer(factories, now): +def test_manage_actor_serializer(factories, now, to_api_date): actor = factories["federation.Actor"]() setattr(actor, "uploads_count", 66) expected = { "id": actor.id, "name": actor.name, - "creation_date": actor.creation_date.isoformat().split("+")[0] + "Z", - "last_fetch_date": actor.last_fetch_date.isoformat().split("+")[0] + "Z", + "creation_date": to_api_date(actor.creation_date), + "last_fetch_date": to_api_date(actor.last_fetch_date), "uploads_count": 66, "fid": actor.fid, "url": actor.url, @@ -86,6 +87,7 @@ def test_manage_actor_serializer(factories, now): "full_username": actor.full_username, "user": None, "instance_policy": None, + "is_local": False, } s = serializers.ManageActorSerializer(actor) @@ -109,13 +111,15 @@ def test_manage_actor_serializer(factories, now): ), ], ) -def test_instance_policy_serializer_repr(factories, factory_kwargs, expected): +def test_instance_policy_serializer_repr( + factories, factory_kwargs, expected, to_api_date +): policy = factories["moderation.InstancePolicy"](block_all=True, **factory_kwargs) e = { "id": policy.id, "uuid": str(policy.uuid), - "creation_date": policy.creation_date.isoformat().split("+")[0] + "Z", + "creation_date": to_api_date(policy.creation_date), "actor": policy.actor.full_username, "block_all": True, "silence_activity": False, @@ -175,6 +179,26 @@ def test_manage_domain_action_purge(factories, mocker): ) +def test_manage_domain_action_allow_list_add(factories, mocker): + domains = factories["federation.Domain"].create_batch(size=3, allowed=False) + s = serializers.ManageDomainActionSerializer(queryset=None) + s.handle_allow_list_add(domains[0].__class__.objects.all()) + + for domain in domains: + domain.refresh_from_db() + assert domain.allowed is True + + +def test_manage_domain_action_allow_list_remove(factories, mocker): + domains = factories["federation.Domain"].create_batch(size=3, allowed=True) + s = serializers.ManageDomainActionSerializer(queryset=None) + s.handle_allow_list_remove(domains[0].__class__.objects.all()) + + for domain in domains: + domain.refresh_from_db() + assert domain.allowed is False + + @pytest.mark.parametrize( "param,expected_only", [("block_all", []), ("reject_media", ["media"])] ) @@ -259,7 +283,7 @@ def test_instance_policy_serializer_purges_target_actor( assert on_commit.call_count == 0 -def test_manage_artist_serializer(factories, now): +def test_manage_artist_serializer(factories, now, to_api_date): artist = factories["music.Artist"](attributed=True) track = factories["music.Track"](artist=artist) album = factories["music.Album"](artist=artist) @@ -270,19 +294,20 @@ def test_manage_artist_serializer(factories, now): "fid": artist.fid, "name": artist.name, "mbid": artist.mbid, - "creation_date": artist.creation_date.isoformat().split("+")[0] + "Z", + "creation_date": to_api_date(artist.creation_date), "albums": [serializers.ManageNestedAlbumSerializer(album).data], "tracks": [serializers.ManageNestedTrackSerializer(track).data], "attributed_to": serializers.ManageBaseActorSerializer( artist.attributed_to ).data, + "tags": [], } s = serializers.ManageArtistSerializer(artist) assert s.data == expected -def test_manage_nested_track_serializer(factories, now): +def test_manage_nested_track_serializer(factories, now, to_api_date): track = factories["music.Track"]() expected = { "id": track.id, @@ -291,7 +316,7 @@ def test_manage_nested_track_serializer(factories, now): "fid": track.fid, "title": track.title, "mbid": track.mbid, - "creation_date": track.creation_date.isoformat().split("+")[0] + "Z", + "creation_date": to_api_date(track.creation_date), "position": track.position, "disc_number": track.disc_number, "copyright": track.copyright, @@ -302,7 +327,7 @@ def test_manage_nested_track_serializer(factories, now): assert s.data == expected -def test_manage_nested_album_serializer(factories, now): +def test_manage_nested_album_serializer(factories, now, to_api_date): album = factories["music.Album"]() setattr(album, "tracks_count", 44) expected = { @@ -312,7 +337,7 @@ def test_manage_nested_album_serializer(factories, now): "fid": album.fid, "title": album.title, "mbid": album.mbid, - "creation_date": album.creation_date.isoformat().split("+")[0] + "Z", + "creation_date": to_api_date(album.creation_date), "release_date": album.release_date.isoformat(), "cover": { "original": album.cover.url, @@ -327,7 +352,7 @@ def test_manage_nested_album_serializer(factories, now): assert s.data == expected -def test_manage_nested_artist_serializer(factories, now): +def test_manage_nested_artist_serializer(factories, now, to_api_date): artist = factories["music.Artist"]() expected = { "id": artist.id, @@ -336,14 +361,14 @@ def test_manage_nested_artist_serializer(factories, now): "fid": artist.fid, "name": artist.name, "mbid": artist.mbid, - "creation_date": artist.creation_date.isoformat().split("+")[0] + "Z", + "creation_date": to_api_date(artist.creation_date), } s = serializers.ManageNestedArtistSerializer(artist) assert s.data == expected -def test_manage_album_serializer(factories, now): +def test_manage_album_serializer(factories, now, to_api_date): album = factories["music.Album"](attributed=True) track = factories["music.Track"](album=album) expected = { @@ -353,7 +378,7 @@ def test_manage_album_serializer(factories, now): "fid": album.fid, "title": album.title, "mbid": album.mbid, - "creation_date": album.creation_date.isoformat().split("+")[0] + "Z", + "creation_date": to_api_date(album.creation_date), "release_date": album.release_date.isoformat(), "cover": { "original": album.cover.url, @@ -366,13 +391,14 @@ def test_manage_album_serializer(factories, now): "attributed_to": serializers.ManageBaseActorSerializer( album.attributed_to ).data, + "tags": [], } s = serializers.ManageAlbumSerializer(album) assert s.data == expected -def test_manage_track_serializer(factories, now): +def test_manage_track_serializer(factories, now, to_api_date): track = factories["music.Track"](attributed=True) setattr(track, "uploads_count", 44) expected = { @@ -386,20 +412,21 @@ def test_manage_track_serializer(factories, now): "position": track.position, "copyright": track.copyright, "license": track.license, - "creation_date": track.creation_date.isoformat().split("+")[0] + "Z", + "creation_date": to_api_date(track.creation_date), "artist": serializers.ManageNestedArtistSerializer(track.artist).data, "album": serializers.ManageTrackAlbumSerializer(track.album).data, "attributed_to": serializers.ManageBaseActorSerializer( track.attributed_to ).data, "uploads_count": 44, + "tags": [], } s = serializers.ManageTrackSerializer(track) assert s.data == expected -def test_manage_library_serializer(factories, now): +def test_manage_library_serializer(factories, now, to_api_date): library = factories["music.Library"]() setattr(library, "followers_count", 42) setattr(library, "_uploads_count", 44) @@ -414,7 +441,7 @@ def test_manage_library_serializer(factories, now): "name": library.name, "description": library.description, "privacy_level": library.privacy_level, - "creation_date": library.creation_date.isoformat().split("+")[0] + "Z", + "creation_date": to_api_date(library.creation_date), "actor": serializers.ManageBaseActorSerializer(library.actor).data, "uploads_count": 44, "followers_count": 42, @@ -424,7 +451,7 @@ def test_manage_library_serializer(factories, now): assert s.data == expected -def test_manage_upload_serializer(factories, now): +def test_manage_upload_serializer(factories, now, to_api_date): upload = factories["music.Upload"]() expected = { @@ -442,8 +469,8 @@ def test_manage_upload_serializer(factories, now): "source": upload.source, "filename": upload.filename, "metadata": upload.metadata, - "creation_date": upload.creation_date.isoformat().split("+")[0] + "Z", - "modification_date": upload.modification_date.isoformat().split("+")[0] + "Z", + "creation_date": to_api_date(upload.creation_date), + "modification_date": to_api_date(upload.modification_date), "accessed_date": None, "import_date": None, "import_metadata": upload.import_metadata, @@ -466,6 +493,7 @@ def test_manage_upload_serializer(factories, now): ("music.Artist", serializers.ManageArtistActionSerializer), ("music.Library", serializers.ManageLibraryActionSerializer), ("music.Upload", serializers.ManageUploadActionSerializer), + ("tags.Tag", serializers.ManageTagActionSerializer), ], ) def test_action_serializer_delete(factory, serializer_class, factories): @@ -475,3 +503,68 @@ def test_action_serializer_delete(factory, serializer_class, factories): s.handle_delete(objects[0].__class__.objects.all()) assert objects[0].__class__.objects.count() == 0 + + +def test_manage_tag_serializer(factories, to_api_date): + tag = factories["tags.Tag"]() + + setattr(tag, "_tracks_count", 42) + setattr(tag, "_albums_count", 54) + setattr(tag, "_artists_count", 66) + expected = { + "id": tag.id, + "name": tag.name, + "creation_date": to_api_date(tag.creation_date), + "tracks_count": 42, + "albums_count": 54, + "artists_count": 66, + } + s = serializers.ManageTagSerializer(tag) + + assert s.data == expected + + +def test_manage_report_serializer(factories, to_api_date): + artist = factories["music.Artist"](attributed=True) + report = factories["moderation.Report"]( + target=artist, target_state={"hello": "world"}, assigned=True + ) + expected = { + "id": report.id, + "uuid": str(report.uuid), + "fid": report.fid, + "creation_date": to_api_date(report.creation_date), + "handled_date": None, + "summary": report.summary, + "is_handled": report.is_handled, + "type": report.type, + "submitter_email": None, + "submitter": serializers.ManageBaseActorSerializer(report.submitter).data, + "assigned_to": serializers.ManageBaseActorSerializer(report.assigned_to).data, + "target": {"type": "artist", "id": artist.pk}, + "target_owner": serializers.ManageBaseActorSerializer( + artist.attributed_to + ).data, + "target_state": report.target_state, + "notes": [], + } + s = serializers.ManageReportSerializer(report) + + assert s.data == expected + + +def test_manage_note_serializer(factories, to_api_date): + actor = factories["federation.Actor"]() + note = factories["moderation.Note"](target=actor) + + expected = { + "id": note.id, + "uuid": str(note.uuid), + "summary": note.summary, + "creation_date": to_api_date(note.creation_date), + "author": serializers.ManageBaseActorSerializer(note.author).data, + "target": {"type": "account", "full_username": actor.full_username}, + } + s = serializers.ManageNoteSerializer(note) + + assert s.data == expected diff --git a/api/tests/manage/test_views.py b/api/tests/manage/test_views.py index e3d136a0e841ab5e49c9dd782083d5f3b9c5cf2a..e1c698894049e84fbcf822f566b540dedae96141 100644 --- a/api/tests/manage/test_views.py +++ b/api/tests/manage/test_views.py @@ -73,6 +73,31 @@ def test_domain_create(superuser_api_client, mocker): update_domain_nodeinfo.assert_called_once_with(domain_name="test.federation") +def test_domain_update_allowed(superuser_api_client, factories): + domain = factories["federation.Domain"]() + url = reverse("api:v1:manage:federation:domains-detail", kwargs={"pk": domain.name}) + response = superuser_api_client.put(url, {"allowed": True}) + + assert response.status_code == 200 + domain.refresh_from_db() + assert domain.allowed is True + + +def test_domain_update_cannot_change_name(superuser_api_client, factories): + domain = factories["federation.Domain"]() + old_name = domain.name + url = reverse("api:v1:manage:federation:domains-detail", kwargs={"pk": old_name}) + response = superuser_api_client.put(url, {"name": "something.else"}) + + domain.refresh_from_db() + + assert response.status_code == 200 + assert domain.name == old_name + # changing the pk of a model and saving results in a new DB entry in django, + # so we check that no other entry was created + assert domain.__class__.objects.count() == 1 + + def test_domain_nodeinfo(factories, superuser_api_client, mocker): domain = factories["federation.Domain"]() url = reverse( @@ -164,6 +189,7 @@ def test_artist_detail_stats(factories, superuser_api_client): "listenings": 0, "playlists": 0, "mutations": 0, + "reports": 0, "track_favorites": 0, "media_total_size": 0, "media_downloaded_size": 0, @@ -213,6 +239,7 @@ def test_album_detail_stats(factories, superuser_api_client): "listenings": 0, "playlists": 0, "mutations": 0, + "reports": 0, "track_favorites": 0, "media_total_size": 0, "media_downloaded_size": 0, @@ -259,6 +286,7 @@ def test_track_detail_stats(factories, superuser_api_client): "listenings": 0, "playlists": 0, "mutations": 0, + "reports": 0, "track_favorites": 0, "media_total_size": 0, "media_downloaded_size": 0, @@ -297,6 +325,18 @@ def test_library_detail(factories, superuser_api_client): assert response.data["id"] == library.id +def test_library_update(factories, superuser_api_client): + library = factories["music.Library"](privacy_level="public") + url = reverse( + "api:v1:manage:library:libraries-detail", kwargs={"uuid": library.uuid} + ) + response = superuser_api_client.patch(url, {"privacy_level": "me"}) + + assert response.status_code == 200 + library.refresh_from_db() + assert library.privacy_level == "me" + + def test_library_detail_stats(factories, superuser_api_client): library = factories["music.Library"]() url = reverse( @@ -309,6 +349,7 @@ def test_library_detail_stats(factories, superuser_api_client): "tracks": 0, "albums": 0, "artists": 0, + "reports": 0, "media_total_size": 0, "media_downloaded_size": 0, } @@ -352,3 +393,123 @@ def test_upload_delete(factories, superuser_api_client): response = superuser_api_client.delete(url) assert response.status_code == 204 + + +def test_note_create(factories, superuser_api_client): + actor = superuser_api_client.user.create_actor() + target = factories["federation.Actor"]() + data = { + "summary": "Hello", + "target": {"type": "account", "full_username": target.full_username}, + } + url = reverse("api:v1:manage:moderation:notes-list") + response = superuser_api_client.post(url, data, format="json") + assert response.status_code == 201 + + note = actor.moderation_notes.latest("id") + assert note.target == target + assert response.data == serializers.ManageNoteSerializer(note).data + + +def test_note_list(factories, superuser_api_client, settings): + note = factories["moderation.Note"]() + url = reverse("api:v1:manage:moderation:notes-list") + response = superuser_api_client.get(url) + + assert response.status_code == 200 + + assert response.data["count"] == 1 + assert response.data["results"][0] == serializers.ManageNoteSerializer(note).data + + +def test_note_delete(factories, superuser_api_client): + note = factories["moderation.Note"]() + url = reverse("api:v1:manage:moderation:notes-detail", kwargs={"uuid": note.uuid}) + response = superuser_api_client.delete(url) + + assert response.status_code == 204 + + +def test_note_detail(factories, superuser_api_client): + note = factories["moderation.Note"]() + url = reverse("api:v1:manage:moderation:notes-detail", kwargs={"uuid": note.uuid}) + response = superuser_api_client.get(url) + + assert response.status_code == 200 + assert response.data == serializers.ManageNoteSerializer(note).data + + +def test_tag_detail(factories, superuser_api_client): + tag = factories["tags.Tag"]() + url = reverse("api:v1:manage:tags-detail", kwargs={"name": tag.name}) + response = superuser_api_client.get(url) + + assert response.status_code == 200 + assert response.data["name"] == tag.name + + +def test_tag_list(factories, superuser_api_client, settings): + tag = factories["tags.Tag"]() + url = reverse("api:v1:manage:tags-list") + response = superuser_api_client.get(url) + + assert response.status_code == 200 + + assert response.data["count"] == 1 + assert response.data["results"][0]["name"] == tag.name + + +def test_tag_delete(factories, superuser_api_client): + tag = factories["tags.Tag"]() + url = reverse("api:v1:manage:tags-detail", kwargs={"name": tag.name}) + response = superuser_api_client.delete(url) + + assert response.status_code == 204 + + +def test_report_detail(factories, superuser_api_client): + report = factories["moderation.Report"]() + url = reverse( + "api:v1:manage:moderation:reports-detail", kwargs={"uuid": report.uuid} + ) + response = superuser_api_client.get(url) + + assert response.status_code == 200 + assert response.data["summary"] == report.summary + + +def test_report_list(factories, superuser_api_client, settings): + report = factories["moderation.Report"]() + url = reverse("api:v1:manage:moderation:reports-list") + response = superuser_api_client.get(url) + + assert response.status_code == 200 + + assert response.data["count"] == 1 + assert response.data["results"][0]["summary"] == report.summary + + +def test_report_update(factories, superuser_api_client): + report = factories["moderation.Report"]() + url = reverse( + "api:v1:manage:moderation:reports-detail", kwargs={"uuid": report.uuid} + ) + response = superuser_api_client.patch(url, {"is_handled": True}) + + assert response.status_code == 200 + report.refresh_from_db() + assert report.is_handled is True + + +def test_report_update_is_handled_true_assigns(factories, superuser_api_client): + actor = superuser_api_client.user.create_actor() + report = factories["moderation.Report"]() + url = reverse( + "api:v1:manage:moderation:reports-detail", kwargs={"uuid": report.uuid} + ) + response = superuser_api_client.patch(url, {"is_handled": True}) + + assert response.status_code == 200 + report.refresh_from_db() + assert report.is_handled is True + assert report.assigned_to == actor diff --git a/api/tests/moderation/test_commands.py b/api/tests/moderation/test_commands.py new file mode 100644 index 0000000000000000000000000000000000000000..9984983ba08bed9bde9fb9a1e1b6c9485984776f --- /dev/null +++ b/api/tests/moderation/test_commands.py @@ -0,0 +1,77 @@ +import json + +from django.core.management import call_command + + +def test_mrf_check_inbox_all(mocker, mrf_inbox_registry, tmpfile): + payload = {"hello": "world"} + tmpfile.write(json.dumps(payload).encode()) + tmpfile.flush() + apply = mocker.spy(mrf_inbox_registry, "apply") + policy1 = mocker.Mock() + policy2 = mocker.Mock(return_value={"hello": "noop"}) + mrf_inbox_registry.register(name="policy1")(policy1) + mrf_inbox_registry.register(name="policy2")(policy2) + + call_command("mrf_check", "inbox", tmpfile.name) + + apply.assert_called_once_with(payload, policies=[]) + policy1.assert_called_once_with(payload) + policy2.assert_called_once_with(policy1.return_value) + + +def test_mrf_check_inbox_list(mocker, mrf_inbox_registry): + apply = mocker.spy(mrf_inbox_registry, "apply") + policy1 = mocker.Mock() + policy2 = mocker.Mock(return_value={"hello": "noop"}) + mrf_inbox_registry.register(name="policy1")(policy1) + mrf_inbox_registry.register(name="policy2")(policy2) + + call_command("mrf_check", "inbox") + + apply.assert_not_called() + + +def test_mrf_check_inbox_restrict_policies(mocker, mrf_inbox_registry, tmpfile): + payload = {"hello": "world"} + tmpfile.write(json.dumps(payload).encode()) + tmpfile.flush() + apply = mocker.spy(mrf_inbox_registry, "apply") + policy1 = mocker.Mock() + policy2 = mocker.Mock() + policy3 = mocker.Mock(return_value={"hello": "noop"}) + mrf_inbox_registry.register(name="policy1")(policy1) + mrf_inbox_registry.register(name="policy2")(policy2) + mrf_inbox_registry.register(name="policy3")(policy3) + + call_command("mrf_check", "inbox", tmpfile.name, policies=["policy1", "policy3"]) + + apply.assert_called_once_with(payload, policies=["policy1", "policy3"]) + policy1.assert_called_once_with(payload) + policy2.assert_not_called() + policy3.assert_called_once_with(policy1.return_value) + + +def test_mrf_check_inbox_db_activity(factories, mocker, mrf_inbox_registry): + payload = {"hello": "world"} + activity = factories["federation.Activity"](payload=payload) + + policy1 = mocker.Mock(return_value={"hello": "noop"}) + mrf_inbox_registry.register(name="policy1")(policy1) + + call_command("mrf_check", "inbox", activity.uuid) + + policy1.assert_called_once_with(payload) + + +def test_mrf_check_inbox_url(r_mock, mocker, mrf_inbox_registry): + payload = {"hello": "world"} + url = "http://test.hello/path" + r_mock.get(url, json=payload) + + policy1 = mocker.Mock(return_value={"hello": "noop"}) + mrf_inbox_registry.register(name="policy1")(policy1) + + call_command("mrf_check", "inbox", url) + + policy1.assert_called_once_with(payload) diff --git a/api/tests/moderation/test_models.py b/api/tests/moderation/test_models.py new file mode 100644 index 0000000000000000000000000000000000000000..8c1de981fcddb72b711ea96920220b876c851a2e --- /dev/null +++ b/api/tests/moderation/test_models.py @@ -0,0 +1,22 @@ +def test_setting_report_handled_to_true_sets_handled_date(factories, now): + target = factories["music.Artist"]() + report = factories["moderation.Report"](target=target) + + assert report.is_handled is False + assert report.handled_date is None + + report.is_handled = True + report.save() + + assert report.handled_date == now + + +def test_setting_report_handled_to_false_sets_handled_date_to_null(factories, now): + target = factories["music.Artist"]() + report = factories["moderation.Report"]( + target=target, is_handled=True, handled_date=now + ) + report.is_handled = False + report.save() + + assert report.handled_date is None diff --git a/api/tests/moderation/test_mrf.py b/api/tests/moderation/test_mrf.py new file mode 100644 index 0000000000000000000000000000000000000000..15a4385a2491f1efeeddc6a9ea242013374346a4 --- /dev/null +++ b/api/tests/moderation/test_mrf.py @@ -0,0 +1,67 @@ +from funkwhale_api.moderation import mrf + + +def test_mrf_inbox_registry_apply_empty(mrf_inbox_registry, mocker): + payload = {"hello": "world"} + new_payload, updated = mrf_inbox_registry.apply(payload) + + assert new_payload == payload + assert updated is False + + +def test_mrf_inbox_registry_apply_simple(mrf_inbox_registry, mocker): + rule = mocker.Mock(return_value="test") + payload = {"hello": "world"} + mrf_inbox_registry.register(rule, name="rule") + + new_payload, updated = mrf_inbox_registry.apply(payload) + + assert new_payload == "test" + assert updated is True + + +def test_mrf_inbox_registry_apply_skipped(mrf_inbox_registry, mocker): + rule = mocker.Mock(side_effect=mrf.Skip()) + payload = {"hello": "world"} + mrf_inbox_registry.register(rule, name="rule") + + new_payload, updated = mrf_inbox_registry.apply(payload) + + assert new_payload == payload + assert updated is False + + +def test_mrf_inbox_registry_apply_discard(mrf_inbox_registry, mocker): + rule1 = mocker.Mock(return_value=None) + rule2 = mocker.Mock(side_effect=mrf.Discard()) + + mrf_inbox_registry.register(rule1, name="rule1") + mrf_inbox_registry.register(rule2, name="rule2") + + payload = {"hello": "world"} + assert mrf_inbox_registry.apply(payload, arg1="value1") == (None, False) + + rule1.assert_called_once_with(payload, arg1="value1") + rule2.assert_called_once_with(payload, arg1="value1") + + +def test_mrf_inbox_registry_use_returned_payload(mrf_inbox_registry, mocker): + rule1 = mocker.Mock(return_value="payload1") + rule2 = mocker.Mock(return_value="payload2") + + mrf_inbox_registry.register(rule1, name="rule1") + mrf_inbox_registry.register(rule2, name="rule2") + + payload = {"hello": "world"} + + assert mrf_inbox_registry.apply(payload) == ("payload2", True) + rule1.assert_called_once_with(payload) + rule2.assert_called_once_with("payload1") + + +def test_mrf_inbox_registry_skip_errors(mrf_inbox_registry, mocker): + rule1 = mocker.Mock(side_effect=Exception()) + + mrf_inbox_registry.register(rule1, name="rule1") + + assert mrf_inbox_registry.apply("payload") == ("payload", False) diff --git a/api/tests/moderation/test_mrf_policies.py b/api/tests/moderation/test_mrf_policies.py new file mode 100644 index 0000000000000000000000000000000000000000..877123e6ba0127206fa276fa45f8a5a2f365b484 --- /dev/null +++ b/api/tests/moderation/test_mrf_policies.py @@ -0,0 +1,63 @@ +import pytest + +from funkwhale_api.moderation import mrf +from funkwhale_api.moderation import mrf_policies + + +@pytest.mark.parametrize( + "enabled, payload, kwargs, allowed_domains, expected", + [ + # allow listing enabled, domain on allowed list -> nothing happens + ( + True, + {"id": "http://allowed.example"}, + {"sender_id": "http://allowed.example/actor"}, + ["allowed.example"], + None, + ), + # allow listing enabled, domain NOT on allowed list -> message discarded + ( + True, + {"id": "http://notallowed.example"}, + {"sender_id": "http://notallowed.example/actor"}, + ["allowed.example"], + mrf.Discard, + ), + # allow listing disabled -> policy skipped + ( + False, + {"id": "http://allowed.example"}, + {"sender_id": "http://allowed.example/actor"}, + [], + mrf.Skip, + ), + # multiple domains to check, one is not allowed -> message discarded + ( + True, + {"id": "http://allowed.example"}, + {"sender_id": "http://notallowed.example/actor"}, + ["allowed.example"], + mrf.Discard, + ), + # multiple domains to check, all allowed -> nothing happens + ( + True, + {"id": "http://allowed.example"}, + {"sender_id": "http://anotherallowed.example/actor"}, + ["allowed.example", "anotherallowed.example"], + None, + ), + ], +) +def test_allow_list_policy( + enabled, payload, kwargs, expected, allowed_domains, preferences, factories +): + preferences["moderation__allow_list_enabled"] = enabled + for d in allowed_domains: + factories["federation.Domain"](name=d, allowed=True) + + if expected: + with pytest.raises(expected): + mrf_policies.check_allow_list(payload, **kwargs) + else: + assert mrf_policies.check_allow_list(payload, **kwargs) == expected diff --git a/api/tests/moderation/test_serializers.py b/api/tests/moderation/test_serializers.py index a38214143db36f97aa349f712681a3dab2fcbf1b..01cb323eee220050e5afdcd3868972d94d14dea2 100644 --- a/api/tests/moderation/test_serializers.py +++ b/api/tests/moderation/test_serializers.py @@ -1,4 +1,13 @@ +import json +import pytest +import urllib.parse + +from django.core.serializers.json import DjangoJSONEncoder + +from funkwhale_api.common import utils as common_utils +from funkwhale_api.federation import models as federation_models from funkwhale_api.moderation import serializers +from funkwhale_api.moderation import signals def test_user_filter_serializer_repr(factories): @@ -28,3 +37,221 @@ def test_user_filter_serializer_save(factories): content_filter = serializer.save(user=user) assert content_filter.target_artist == artist + + +@pytest.mark.parametrize( + "factory_name, target_type, id_field, state_serializer", + [ + ("music.Artist", "artist", "id", serializers.ArtistStateSerializer), + ("music.Album", "album", "id", serializers.AlbumStateSerializer), + ("music.Track", "track", "id", serializers.TrackStateSerializer), + ("music.Library", "library", "uuid", serializers.LibraryStateSerializer), + ( + "federation.Actor", + "account", + "full_username", + serializers.ActorStateSerializer, + ), + ], +) +def test_report_federated_entity_serializer_save( + factory_name, target_type, id_field, state_serializer, factories, mocker, settings +): + target = factories[factory_name]() + target_owner = factories["federation.Actor"]() + submitter = factories["federation.Actor"]() + target_data = {"type": target_type, id_field: getattr(target, id_field)} + payload = { + "summary": "Report content", + "type": "illegal_content", + "target": target_data, + } + serializer = serializers.ReportSerializer( + data=payload, context={"submitter": submitter} + ) + get_target_owner = mocker.patch.object( + serializers, "get_target_owner", return_value=target_owner + ) + assert serializer.is_valid(raise_exception=True) is True + + report = serializer.save() + + expected_state = state_serializer(target).data + expected_state["_target"] = json.loads( + json.dumps(target_data, cls=DjangoJSONEncoder) + ) + expected_state["domain"] = urllib.parse.urlparse(target.fid).hostname + expected_state["is_local"] = ( + expected_state["domain"] == settings.FEDERATION_HOSTNAME + ) + + assert report.target == target + assert report.type == payload["type"] + assert report.summary == payload["summary"] + assert report.target_state == expected_state + assert report.target_owner == target_owner + get_target_owner.assert_called_once_with(target) + + +@pytest.mark.parametrize( + "factory_name, target_type, id_field, state_serializer", + [("playlists.Playlist", "playlist", "id", serializers.PlaylistStateSerializer)], +) +def test_report_local_entity_serializer_save( + factory_name, target_type, id_field, state_serializer, factories, mocker, settings +): + target = factories[factory_name]() + target_owner = factories["federation.Actor"]() + submitter = factories["federation.Actor"]() + target_data = {"type": target_type, id_field: getattr(target, id_field)} + payload = { + "summary": "Report content", + "type": "illegal_content", + "target": target_data, + } + serializer = serializers.ReportSerializer( + data=payload, context={"submitter": submitter} + ) + get_target_owner = mocker.patch.object( + serializers, "get_target_owner", return_value=target_owner + ) + assert serializer.is_valid(raise_exception=True) is True + + report = serializer.save() + + expected_state = state_serializer(target).data + expected_state["_target"] = json.loads( + json.dumps(target_data, cls=DjangoJSONEncoder) + ) + expected_state["is_local"] = True + assert report.target == target + assert report.type == payload["type"] + assert report.summary == payload["summary"] + assert report.target_state == expected_state + assert report.target_owner == target_owner + get_target_owner.assert_called_once_with(target) + + +def test_report_serializer_save_anonymous(factories, mocker): + target = factories["music.Artist"]() + payload = { + "summary": "Report content", + "type": "illegal_content", + "target": {"type": "artist", "id": target.pk}, + "submitter_email": "test@submitter.example", + } + serializer = serializers.ReportSerializer(data=payload) + + assert serializer.is_valid(raise_exception=True) is True + + report = serializer.save() + + assert report.target == target + assert report.type == payload["type"] + assert report.summary == payload["summary"] + assert report.submitter_email == payload["submitter_email"] + + +@pytest.mark.parametrize( + "factory_name, factory_kwargs, owner_field", + [ + ("music.Artist", {"attributed": True}, "attributed_to"), + ("music.Album", {"attributed": True}, "attributed_to"), + ("music.Track", {"attributed": True}, "attributed_to"), + ("music.Library", {}, "actor"), + ("playlists.Playlist", {"user__with_actor": True}, "user.actor"), + ("federation.Actor", {}, "self"), + ], +) +def test_get_target_owner(factory_name, factory_kwargs, owner_field, factories): + target = factories[factory_name](**factory_kwargs) + if owner_field == "self": + expected_owner = target + else: + expected_owner = common_utils.recursive_getattr(target, owner_field) + + assert isinstance(expected_owner, federation_models.Actor) + assert serializers.get_target_owner(target) == expected_owner + + +def test_report_serializer_repr(factories, to_api_date): + target = factories["music.Artist"]() + report = factories["moderation.Report"](target=target) + expected = { + "uuid": str(report.uuid), + "summary": report.summary, + "type": report.type, + "target": {"type": "artist", "id": target.pk}, + "creation_date": to_api_date(report.creation_date), + "handled_date": None, + "is_handled": False, + "submitter_email": None, + } + serializer = serializers.ReportSerializer(report) + assert serializer.data == expected + + +@pytest.mark.parametrize( + "preference, context, payload, is_valid", + [ + # anonymous reports not enabled for the category + ( + ["illegal_content"], + {}, + {"type": "other", "submitter_email": "hello@example.test"}, + False, + ), + # anonymous reports enabled for the category, but invalid email + (["other"], {}, {"type": "other", "submitter_email": "hello@"}, False), + # anonymous reports enabled for the category, no email + (["other"], {}, {"type": "other"}, False), + # anonymous reports enabled for the category, actor object is empty + (["other"], {"submitter": None}, {"type": "other"}, False), + # valid examples + ( + ["other"], + {}, + {"type": "other", "submitter_email": "hello@example.test"}, + True, + ), + ], +) +def test_report_serializer_save_unauthenticated_validation( + preference, context, payload, is_valid, factories, preferences +): + preferences["moderation__unauthenticated_report_types"] = preference + target = factories["music.Artist"]() + target_data = {"type": "artist", "id": target.id} + payload["summary"] = "Test" + payload["target"] = target_data + serializer = serializers.ReportSerializer(data=payload, context=context) + assert serializer.is_valid() is is_valid + + +def test_report_create_send_websocket_event(factories, mocker): + target = factories["music.Artist"]() + group_send = mocker.patch("funkwhale_api.common.channels.group_send") + report_created = mocker.spy(signals.report_created, "send") + payload = { + "summary": "Report content", + "type": "illegal_content", + "target": {"type": "artist", "id": target.pk}, + "submitter_email": "test@submitter.example", + } + serializer = serializers.ReportSerializer(data=payload) + + assert serializer.is_valid(raise_exception=True) is True + report = serializer.save() + report_created.assert_called_once_with(sender=None, report=report) + group_send.assert_called_with( + "admin.moderation", + { + "type": "event.send", + "text": "", + "data": { + "type": "report.created", + "report": serializer.data, + "unresolved_count": 1, + }, + }, + ) diff --git a/api/tests/moderation/test_tasks.py b/api/tests/moderation/test_tasks.py new file mode 100644 index 0000000000000000000000000000000000000000..a4f2877998d42636456741a5b88f8f38151d1cc6 --- /dev/null +++ b/api/tests/moderation/test_tasks.py @@ -0,0 +1,48 @@ +from funkwhale_api.federation import utils as federation_utils + +from funkwhale_api.moderation import tasks + + +def test_report_created_signal_calls_send_new_report_mail(factories, mocker): + report = factories["moderation.Report"]() + on_commit = mocker.patch("funkwhale_api.common.utils.on_commit") + tasks.signals.report_created.send(sender=None, report=report) + on_commit.assert_called_once_with( + tasks.send_new_report_email_to_moderators.delay, report_id=report.pk + ) + + +def test_report_created_signal_sends_email_to_mods(factories, mailoutbox, settings): + mod1 = factories["users.User"](permission_moderation=True) + mod2 = factories["users.User"](permission_moderation=True) + # inactive, so no email + factories["users.User"](permission_moderation=True, is_active=False) + # no moderation permission, so no email + factories["users.User"]() + + report = factories["moderation.Report"]() + + tasks.send_new_report_email_to_moderators(report_id=report.pk) + + detail_url = federation_utils.full_url( + "/manage/moderation/reports/{}".format(report.uuid) + ) + unresolved_reports_url = federation_utils.full_url( + "/manage/moderation/reports?q=resolved:no" + ) + assert len(mailoutbox) == 2 + for i, mod in enumerate([mod1, mod2]): + m = mailoutbox[i] + assert m.subject == "[{} moderation - {}] New report from {}".format( + settings.FUNKWHALE_HOSTNAME, + report.get_type_display(), + report.submitter.full_username, + ) + assert report.summary in m.body + assert report.target._meta.verbose_name.title() in m.body + assert str(report.target) in m.body + assert report.target.get_absolute_url() in m.body + assert report.target.get_moderation_url() in m.body + assert detail_url in m.body + assert unresolved_reports_url in m.body + assert list(m.to) == [mod.email] diff --git a/api/tests/moderation/test_views.py b/api/tests/moderation/test_views.py index 3d53f4565a315b84c40fccd7d8b6c226a6883a24..dba2281720d3a0e3c82214ee001ecdfec5bf9683 100644 --- a/api/tests/moderation/test_views.py +++ b/api/tests/moderation/test_views.py @@ -1,5 +1,7 @@ from django.urls import reverse +from funkwhale_api.moderation import models + def test_restrict_to_own_filters(factories, logged_in_api_client): cf = factories["moderation.UserFilter"]( @@ -22,3 +24,35 @@ def test_create_filter(factories, logged_in_api_client): cf = logged_in_api_client.user.content_filters.latest("id") assert cf.target_artist == artist assert response.status_code == 201 + + +def test_create_report_logged_in(factories, logged_in_api_client): + actor = logged_in_api_client.user.create_actor() + target = factories["music.Artist"]() + url = reverse("api:v1:moderation:reports-list") + data = { + "target": {"type": "artist", "id": target.pk}, + "summary": "Test report", + "type": "other", + } + response = logged_in_api_client.post(url, data, format="json") + + assert response.status_code == 201 + report = actor.reports.latest("id") + assert report.target == target + + +def test_create_report_anonymous(factories, api_client, no_api_auth): + target = factories["music.Artist"]() + url = reverse("api:v1:moderation:reports-list") + data = { + "target": {"type": "artist", "id": target.pk}, + "summary": "Test report", + "type": "illegal_content", + "submitter_email": "test@example.test", + } + response = api_client.post(url, data, format="json") + + assert response.status_code == 201 + report = models.Report.objects.latest("id") + assert report.submitter_email == data["submitter_email"] diff --git a/api/tests/music/sample.flac b/api/tests/music/sample.flac index fe3ec6e4a270da0ff0a3f1ca677da4990ddb0ea5..a8aafa39239a199663c6673c678064826ecf965b 100644 Binary files a/api/tests/music/sample.flac and b/api/tests/music/sample.flac differ diff --git a/api/tests/music/test.m4a b/api/tests/music/test.m4a new file mode 100644 index 0000000000000000000000000000000000000000..57b65b7b53489c85cb7a9e5ca5fa92fa976c35ea Binary files /dev/null and b/api/tests/music/test.m4a differ diff --git a/api/tests/music/test.mp3 b/api/tests/music/test.mp3 index 8e7c0adbbc1a36f51bd32cf4be12c8e3326f1007..5f8dc2c727d63873ed7cada78379030b9cadb0d7 100644 Binary files a/api/tests/music/test.mp3 and b/api/tests/music/test.mp3 differ diff --git a/api/tests/music/test.ogg b/api/tests/music/test.ogg index 5ca0a7f55bec448220af35a368ec557b2f42fae6..9975cd9fe447824358da6dc9a89780c61ade8aee 100644 Binary files a/api/tests/music/test.ogg and b/api/tests/music/test.ogg differ diff --git a/api/tests/music/test.opus b/api/tests/music/test.opus index ac39fd3270e27f5cadaf0927472ad17926dfcff6..92634ce507bbe0bc0f0d36b7ea6abe34965cafe9 100644 Binary files a/api/tests/music/test.opus and b/api/tests/music/test.opus differ diff --git a/api/tests/music/test_filters.py b/api/tests/music/test_filters.py index f9abc4b2156b6a537471bb83ec583ecfb477faee..f3ff13e777f044f90f3a4e9e851b8f9dd36333cf 100644 --- a/api/tests/music/test_filters.py +++ b/api/tests/music/test_filters.py @@ -1,3 +1,5 @@ +import pytest + from funkwhale_api.music import filters from funkwhale_api.music import models @@ -52,3 +54,59 @@ def test_artist_filter_track_album_artist(factories, mocker, queryset_equal_list ) assert filterset.qs == [hidden_track] + + +@pytest.mark.parametrize( + "factory_name, filterset_class", + [ + ("music.Track", filters.TrackFilter), + ("music.Artist", filters.TrackFilter), + ("music.Album", filters.TrackFilter), + ], +) +def test_track_filter_tag_single( + factory_name, + filterset_class, + factories, + mocker, + queryset_equal_list, + anonymous_user, +): + factories[factory_name]() + # tag name partially match the query, so this shouldn't match + factories[factory_name](set_tags=["TestTag1"]) + tagged = factories[factory_name](set_tags=["TestTag"]) + qs = tagged.__class__.objects.all() + filterset = filterset_class( + {"tag": "testTaG"}, request=mocker.Mock(user=anonymous_user), queryset=qs + ) + + assert filterset.qs == [tagged] + + +@pytest.mark.parametrize( + "factory_name, filterset_class", + [ + ("music.Track", filters.TrackFilter), + ("music.Artist", filters.ArtistFilter), + ("music.Album", filters.AlbumFilter), + ], +) +def test_track_filter_tag_multiple( + factory_name, + filterset_class, + factories, + mocker, + queryset_equal_list, + anonymous_user, +): + factories[factory_name](set_tags=["TestTag1"]) + tagged = factories[factory_name](set_tags=["TestTag1", "TestTag2"]) + qs = tagged.__class__.objects.all() + filterset = filterset_class( + {"tag": ["testTaG1", "TestTag2"]}, + request=mocker.Mock(user=anonymous_user), + queryset=qs, + ) + + assert filterset.qs == [tagged] diff --git a/api/tests/music/test_metadata.py b/api/tests/music/test_metadata.py index 539fa49a2f2b26a3a6818d2d4d23ace81f910122..9a3826ce3832050c8ba15188129b4dc5548a480f 100644 --- a/api/tests/music/test_metadata.py +++ b/api/tests/music/test_metadata.py @@ -57,6 +57,7 @@ def test_can_get_metadata_all(): "musicbrainz_albumartistid": "013c8e5b-d72a-4cd3-8dee-6c64d6125823;5b4d7d2d-36df-4b38-95e3-a964234f520f", "license": "Dummy license: http://creativecommons.org/licenses/by-sa/4.0/", "copyright": "Someone", + "genre": "Classical", } assert data.all() == expected @@ -141,7 +142,15 @@ def test_can_get_metadata_from_id3_mp3_file(field, value): @pytest.mark.parametrize( - "name", ["test.mp3", "with_other_picture.mp3", "sample.flac", "with_cover.ogg"] + "name", + [ + "test.mp3", + "with_other_picture.mp3", + "sample.flac", + "with_cover.ogg", + "with_cover.opus", + "test.m4a", + ], ) def test_can_get_pictures(name): path = os.path.join(DATA_DIR, name) @@ -181,6 +190,35 @@ def test_can_get_metadata_from_flac_file(field, value): assert data.get(field) == value +@pytest.mark.parametrize( + "field,value", + [ + ("title", "Peer Gynt Suite no. 1, op. 46: I. Morning"), + ("artist", "Edvard Grieg"), + ("album_artist", "Edvard Grieg; Musopen Symphony Orchestra"), + ("album", "Peer Gynt Suite no. 1, op. 46"), + ("date", "2012-08-15"), + ("position", 1), + ("disc_number", 2), + ("musicbrainz_albumid", "a766da8b-8336-47aa-a3ee-371cc41ccc75"), + ("mbid", "bd21ac48-46d8-4e78-925f-d9cc2a294656"), + ("musicbrainz_artistid", "013c8e5b-d72a-4cd3-8dee-6c64d6125823"), + ( + "musicbrainz_albumartistid", + "013c8e5b-d72a-4cd3-8dee-6c64d6125823;5b4d7d2d-36df-4b38-95e3-a964234f520f", + ), + ("license", "Dummy license: http://creativecommons.org/licenses/by-sa/4.0/"), + ("copyright", "Someone"), + ("genre", "Dubstep"), + ], +) +def test_can_get_metadata_from_m4a_file(field, value): + path = os.path.join(DATA_DIR, "test.m4a") + data = metadata.Metadata(path) + + assert data.get(field) == value + + def test_can_get_metadata_from_flac_file_not_crash_if_empty(): path = os.path.join(DATA_DIR, "sample.flac") data = metadata.Metadata(path) @@ -249,6 +287,7 @@ def test_metadata_fallback_ogg_theora(mocker): "mbid": uuid.UUID("f269d497-1cc0-4ae4-a0c4-157ec7d73fcb"), "license": "https://creativecommons.org/licenses/by-nc-nd/2.5/", "copyright": "Someone", + "tags": ["Funk"], }, ), ( @@ -281,6 +320,7 @@ def test_metadata_fallback_ogg_theora(mocker): "mbid": uuid.UUID("bd21ac48-46d8-4e78-925f-d9cc2a294656"), "license": "Dummy license: http://creativecommons.org/licenses/by-sa/4.0/", "copyright": "Someone", + "tags": ["Classical"], }, ), ( @@ -313,6 +353,7 @@ def test_metadata_fallback_ogg_theora(mocker): "mbid": uuid.UUID("bd21ac48-46d8-4e78-925f-d9cc2a294656"), "license": "Dummy license: http://creativecommons.org/licenses/by-sa/4.0/", "copyright": "Someone", + "tags": ["Classical"], }, ), ( @@ -336,6 +377,7 @@ def test_metadata_fallback_ogg_theora(mocker): } ], }, + "tags": ["Rock"], "position": 1, "disc_number": 1, "mbid": uuid.UUID("124d0150-8627-46bc-bc14-789a3bc960c8"), @@ -371,6 +413,7 @@ def test_metadata_fallback_ogg_theora(mocker): "mbid": uuid.UUID("30f3f33e-8d0c-4e69-8539-cbd701d18f28"), "license": "http://creativecommons.org/licenses/by-nc-sa/3.0/us/", "copyright": "2008 nin", + "tags": ["Industrial"], }, ), ], @@ -555,7 +598,7 @@ def test_serializer_album_default_title_when_missing_or_empty(data): "title": "Track", "artists": [{"name": "Artist", "mbid": None}], "album": { - "title": metadata.UNKWOWN_ALBUM, + "title": metadata.UNKNOWN_ALBUM, "mbid": None, "release_date": None, "artists": [], @@ -607,3 +650,43 @@ def test_artist_field_featuring(): value = field.get_value(data) assert field.to_internal_value(value) == expected + + +@pytest.mark.parametrize( + "genre, expected_tags", + [ + ("Pop", ["Pop"]), + ("pop", ["pop"]), + ("Pop-Rock", ["PopRock"]), + ("Pop - Rock", ["Pop", "Rock"]), + ("Soundtrack - Cute Anime", ["Soundtrack", "CuteAnime"]), + ("Pop, Rock", ["Pop", "Rock"]), + ("Chanson française", ["ChansonFrançaise"]), + ("Unhandledâ¤ï¸", []), + ("tag with non-breaking spaces", []), + ], +) +def test_acquire_tags_from_genre(genre, expected_tags): + data = { + "title": "Track Title", + "artist": "Track Artist", + "album": "Track Album", + "genre": genre, + } + expected = { + "title": "Track Title", + "artists": [{"name": "Track Artist", "mbid": None}], + "album": { + "title": "Track Album", + "mbid": None, + "release_date": None, + "artists": [], + }, + "cover_data": None, + } + if expected_tags: + expected["tags"] = expected_tags + + serializer = metadata.TrackMetadataSerializer(data=metadata.FakeMetadata(data)) + assert serializer.is_valid(raise_exception=True) is True + assert serializer.validated_data == expected diff --git a/api/tests/music/test_models.py b/api/tests/music/test_models.py index 5aa29b3cc4519d0c5158301d521a3550e2d56e62..344273673dead203b5631f1f04764a87b0677f29 100644 --- a/api/tests/music/test_models.py +++ b/api/tests/music/test_models.py @@ -448,7 +448,7 @@ def test_get_audio_data(factories): result = upload.get_audio_data() - assert result == {"duration": 1, "bitrate": 112000, "size": 14858} + assert result == {"duration": 1, "bitrate": 112000, "size": 15918} def test_library_queryset_with_follows(factories): diff --git a/api/tests/music/test_music.py b/api/tests/music/test_music.py index 10d281071a8c885cb52031f68b96b6b6120ce5c4..727214af569eaa3bf2c35540353da8931d2fd2d6 100644 --- a/api/tests/music/test_music.py +++ b/api/tests/music/test_music.py @@ -91,7 +91,7 @@ def test_can_create_track_from_api_with_corresponding_tags( ) track = models.Track.create_from_api(id="9968a9d6-8d92-4051-8f76-674e157b6eed") expected_tags = ["techno", "good-music"] - track_tags = [tag.slug for tag in track.tags.all()] + track_tags = track.tagged_items.values_list("tag__name", flat=True) for tag in expected_tags: assert tag in track_tags @@ -123,31 +123,6 @@ def test_can_get_or_create_track_from_api(artists, albums, tracks, mocker, db): assert track == track2 -def test_album_tags_deduced_from_tracks_tags(factories, django_assert_num_queries): - tag = factories["taggit.Tag"]() - album = factories["music.Album"]() - factories["music.Track"].create_batch(5, album=album, tags=[tag]) - - album = models.Album.objects.prefetch_related("tracks__tags").get(pk=album.pk) - - with django_assert_num_queries(0): - assert tag in album.tags - - -def test_artist_tags_deduced_from_album_tags(factories, django_assert_num_queries): - tag = factories["taggit.Tag"]() - album = factories["music.Album"]() - artist = album.artist - factories["music.Track"].create_batch(5, album=album, tags=[tag]) - - artist = models.Artist.objects.prefetch_related("albums__tracks__tags").get( - pk=artist.pk - ) - - with django_assert_num_queries(0): - assert tag in artist.tags - - def test_can_download_image_file_for_album(binary_cover, mocker, factories): mocker.patch( "funkwhale_api.musicbrainz.api.images.get_front", return_value=binary_cover @@ -158,3 +133,11 @@ def test_can_download_image_file_for_album(binary_cover, mocker, factories): album.save() assert album.cover.file.read() == binary_cover + + +def test_album_get_image_doesnt_crash_with_empty_data(mocker, factories): + album = factories["music.Album"](mbid=None, cover=None) + assert ( + album.get_image(data={"content": "", "url": "", "mimetype": "image/png"}) + is None + ) diff --git a/api/tests/music/test_mutations.py b/api/tests/music/test_mutations.py index be3fb0d76cf831d026e414131b82258e9b1a11db..3a86f3bf8628f00f0aceb7fd0d594c76e276fb60 100644 --- a/api/tests/music/test_mutations.py +++ b/api/tests/music/test_mutations.py @@ -2,6 +2,9 @@ import datetime import pytest from funkwhale_api.music import licenses +from funkwhale_api.music import mutations + +from funkwhale_api.tags import models as tags_models @pytest.mark.parametrize( @@ -117,3 +120,59 @@ def test_track_mutation_apply_outbox(factories, mocker): dispatch.assert_called_once_with( {"type": "Update", "object": {"type": "Track"}}, context={"track": track} ) + + +@pytest.mark.parametrize("factory_name", ["music.Artist", "music.Album", "music.Track"]) +def test_mutation_set_tags(factory_name, factories, now, mocker): + tags = ["tag1", "tag2"] + dispatch = mocker.patch("funkwhale_api.federation.routes.outbox.dispatch") + set_tags = mocker.spy(tags_models, "set_tags") + obj = factories[factory_name]() + assert obj.tagged_items.all().count() == 0 + mutation = factories["common.Mutation"]( + type="update", target=obj, payload={"tags": tags} + ) + mutation.apply() + obj.refresh_from_db() + + assert sorted(obj.tagged_items.all().values_list("tag__name", flat=True)) == tags + set_tags.assert_called_once_with(obj, *tags) + obj_type = factory_name.lstrip("music.") + dispatch.assert_called_once_with( + {"type": "Update", "object": {"type": obj_type}}, + context={obj_type.lower(): obj}, + ) + + +@pytest.mark.parametrize("is_local, expected", [(True, True), (False, False)]) +def test_perm_checkers_can_suggest(factories, is_local, expected): + obj = factories["music.Track"](local=is_local) + assert mutations.can_suggest(obj, actor=None) is expected + + +@pytest.mark.parametrize( + "is_local, permission_library, actor_is_attributed, expected", + [ + # Not local object, so local users can't edit + (False, False, False, False), + (False, True, False, False), + # Local but no specific conditions met for permission + (True, False, False, False), + # Local and attributed_to -> ok + (True, False, True, True), + # Local and library permission -> ok + (True, True, False, True), + ], +) +def test_perm_checkers_can_approve( + factories, is_local, permission_library, actor_is_attributed, expected +): + actor = factories["users.User"]( + permission_library=permission_library + ).create_actor() + obj_kwargs = {"local": is_local} + if actor_is_attributed: + obj_kwargs["attributed_to"] = actor + obj = factories["music.Track"](**obj_kwargs) + + assert mutations.can_approve(obj, actor=actor) is expected diff --git a/api/tests/music/test_serializers.py b/api/tests/music/test_serializers.py index 5f9b7d9d151035a78396ac3e4e3d91d30884c298..4eaf54ad54aa0559a3c05662c8f78b2960276b1b 100644 --- a/api/tests/music/test_serializers.py +++ b/api/tests/music/test_serializers.py @@ -1,5 +1,6 @@ import pytest +from funkwhale_api.federation import serializers as federation_serializers from funkwhale_api.music import licenses from funkwhale_api.music import models from funkwhale_api.music import serializers @@ -56,11 +57,12 @@ def test_artist_album_serializer(factories, to_api_date): def test_artist_with_albums_serializer(factories, to_api_date): - track = factories["music.Track"]() + actor = factories["federation.Actor"]() + track = factories["music.Track"](album__artist__attributed_to=actor) artist = track.artist artist = artist.__class__.objects.with_albums().get(pk=artist.pk) album = list(artist.albums.all())[0] - + setattr(artist, "_prefetched_tracks", range(42)) expected = { "id": artist.id, "fid": artist.fid, @@ -69,6 +71,9 @@ def test_artist_with_albums_serializer(factories, to_api_date): "is_local": artist.is_local, "creation_date": to_api_date(artist.creation_date), "albums": [serializers.ArtistAlbumSerializer(album).data], + "tags": [], + "attributed_to": federation_serializers.APIActorSerializer(actor).data, + "tracks_count": 42, } serializer = serializers.ArtistWithAlbumsSerializer(artist) assert serializer.data == expected @@ -84,13 +89,13 @@ def test_album_track_serializer(factories, to_api_date): expected = { "id": track.id, "fid": track.fid, - "artist": serializers.ArtistSimpleSerializer(track.artist).data, + "artist": serializers.serialize_artist_simple(track.artist), "album": track.album.id, "mbid": str(track.mbid), "title": track.title, "position": track.position, "disc_number": track.disc_number, - "uploads": [serializers.TrackUploadSerializer(upload).data], + "uploads": [serializers.serialize_upload(upload)], "creation_date": to_api_date(track.creation_date), "listen_url": track.listen_url, "duration": None, @@ -98,8 +103,8 @@ def test_album_track_serializer(factories, to_api_date): "copyright": track.copyright, "is_local": track.is_local, } - serializer = serializers.AlbumTrackSerializer(track) - assert serializer.data == expected + data = serializers.serialize_album_track(track) + assert data == expected def test_upload_serializer(factories, to_api_date): @@ -114,7 +119,7 @@ def test_upload_serializer(factories, to_api_date): "bitrate": upload.bitrate, "size": upload.size, "library": serializers.LibraryForOwnerSerializer(upload.library).data, - "creation_date": upload.creation_date.isoformat().split("+")[0] + "Z", + "creation_date": to_api_date(upload.creation_date), "import_date": None, "import_status": "pending", } @@ -141,7 +146,7 @@ def test_upload_owner_serializer(factories, to_api_date): "bitrate": upload.bitrate, "size": upload.size, "library": serializers.LibraryForOwnerSerializer(upload.library).data, - "creation_date": upload.creation_date.isoformat().split("+")[0] + "Z", + "creation_date": to_api_date(upload.creation_date), "metadata": {"test": "metadata"}, "import_metadata": {"import": "metadata"}, "import_date": None, @@ -155,7 +160,8 @@ def test_upload_owner_serializer(factories, to_api_date): def test_album_serializer(factories, to_api_date): - track1 = factories["music.Track"](position=2) + actor = factories["federation.Actor"]() + track1 = factories["music.Track"](position=2, album__attributed_to=actor) track2 = factories["music.Track"](position=1, album=track1.album) album = track1.album expected = { @@ -163,7 +169,7 @@ def test_album_serializer(factories, to_api_date): "fid": album.fid, "mbid": str(album.mbid), "title": album.title, - "artist": serializers.ArtistSimpleSerializer(album.artist).data, + "artist": serializers.serialize_artist_simple(album.artist), "creation_date": to_api_date(album.creation_date), "is_playable": False, "cover": { @@ -173,8 +179,10 @@ def test_album_serializer(factories, to_api_date): "small_square_crop": album.cover.crop["50x50"].url, }, "release_date": to_api_date(album.release_date), - "tracks": serializers.AlbumTrackSerializer([track2, track1], many=True).data, + "tracks": [serializers.serialize_album_track(t) for t in [track2, track1]], "is_local": album.is_local, + "tags": [], + "attributed_to": federation_serializers.APIActorSerializer(actor).data, } serializer = serializers.AlbumSerializer(album) @@ -182,26 +190,32 @@ def test_album_serializer(factories, to_api_date): def test_track_serializer(factories, to_api_date): + actor = factories["federation.Actor"]() upload = factories["music.Upload"]( - track__license="cc-by-4.0", track__copyright="test", track__disc_number=2 + track__license="cc-by-4.0", + track__copyright="test", + track__disc_number=2, + track__attributed_to=actor, ) track = upload.track setattr(track, "playable_uploads", [upload]) expected = { "id": track.id, "fid": track.fid, - "artist": serializers.ArtistSimpleSerializer(track.artist).data, + "artist": serializers.serialize_artist_simple(track.artist), "album": serializers.TrackAlbumSerializer(track.album).data, "mbid": str(track.mbid), "title": track.title, "position": track.position, "disc_number": track.disc_number, - "uploads": [serializers.TrackUploadSerializer(upload).data], + "uploads": [serializers.serialize_upload(upload)], "creation_date": to_api_date(track.creation_date), "listen_url": track.listen_url, "license": upload.track.license.code, "copyright": upload.track.copyright, "is_local": upload.track.is_local, + "tags": [], + "attributed_to": federation_serializers.APIActorSerializer(actor).data, } serializer = serializers.TrackSerializer(track) assert serializer.data == expected @@ -303,7 +317,7 @@ def test_manage_upload_action_relaunch_import(factories, mocker): assert m.call_count == 3 -def test_track_upload_serializer(factories): +def test_serialize_upload(factories): upload = factories["music.Upload"]() expected = { @@ -316,8 +330,8 @@ def test_track_upload_serializer(factories): "duration": upload.duration, } - serializer = serializers.TrackUploadSerializer(upload) - assert serializer.data == expected + data = serializers.serialize_upload(upload) + assert data == expected @pytest.mark.parametrize( diff --git a/api/tests/music/test_spa_views.py b/api/tests/music/test_spa_views.py index b9397009c669575c749f2605f3f3096ee0342ee8..bf85ab88825b966aac0088fc970d75f3048bc651 100644 --- a/api/tests/music/test_spa_views.py +++ b/api/tests/music/test_spa_views.py @@ -195,3 +195,77 @@ def test_library_artist(spa_html, no_api_auth, client, factories, settings): # we only test our custom metas, not the default ones assert metas[: len(expected_metas)] == expected_metas + + +def test_library_playlist(spa_html, no_api_auth, client, factories, settings): + playlist = factories["playlists.Playlist"](privacy_level="everyone") + track = factories["music.Upload"](playable=True).track + playlist.insert_many([track]) + + url = "/library/playlists/{}".format(playlist.pk) + + response = client.get(url) + + expected_metas = [ + { + "tag": "meta", + "property": "og:url", + "content": utils.join_url(settings.FUNKWHALE_URL, url), + }, + {"tag": "meta", "property": "og:title", "content": playlist.name}, + {"tag": "meta", "property": "og:type", "content": "music.playlist"}, + { + "tag": "meta", + "property": "og:image", + "content": utils.join_url( + settings.FUNKWHALE_URL, track.album.cover.crop["400x400"].url + ), + }, + { + "tag": "link", + "rel": "alternate", + "type": "application/json+oembed", + "href": ( + utils.join_url(settings.FUNKWHALE_URL, reverse("api:v1:oembed")) + + "?format=json&url={}".format( + urllib.parse.quote_plus(utils.join_url(settings.FUNKWHALE_URL, url)) + ) + ), + }, + {"tag": "meta", "property": "twitter:card", "content": "player"}, + { + "tag": "meta", + "property": "twitter:player", + "content": serializers.get_embed_url("playlist", id=playlist.id), + }, + {"tag": "meta", "property": "twitter:player:width", "content": "600"}, + {"tag": "meta", "property": "twitter:player:height", "content": "400"}, + ] + + metas = utils.parse_meta(response.content.decode()) + + # we only test our custom metas, not the default ones + assert metas[: len(expected_metas)] == expected_metas + + +def test_library_playlist_empty(spa_html, no_api_auth, client, factories, settings): + playlist = factories["playlists.Playlist"](privacy_level="everyone") + + url = "/library/playlists/{}".format(playlist.pk) + + response = client.get(url) + + expected_metas = [ + { + "tag": "meta", + "property": "og:url", + "content": utils.join_url(settings.FUNKWHALE_URL, url), + }, + {"tag": "meta", "property": "og:title", "content": playlist.name}, + {"tag": "meta", "property": "og:type", "content": "music.playlist"}, + ] + + metas = utils.parse_meta(response.content.decode()) + + # we only test our custom metas, not the default ones + assert metas[: len(expected_metas)] == expected_metas diff --git a/api/tests/music/test_tasks.py b/api/tests/music/test_tasks.py index 78f4622babb9b31cfde6f02f04b67eb2c90319ee..8eae4a3bee611dada6b50942fce79162328433ce 100644 --- a/api/tests/music/test_tasks.py +++ b/api/tests/music/test_tasks.py @@ -9,7 +9,7 @@ from django.utils import timezone from funkwhale_api.federation import serializers as federation_serializers from funkwhale_api.federation import jsonld -from funkwhale_api.music import licenses, metadata, signals, tasks +from funkwhale_api.music import licenses, metadata, models, signals, tasks DATA_DIR = os.path.dirname(os.path.abspath(__file__)) @@ -18,6 +18,7 @@ DATA_DIR = os.path.dirname(os.path.abspath(__file__)) def test_can_create_track_from_file_metadata_no_mbid(db, mocker): + add_tags = mocker.patch("funkwhale_api.tags.models.add_tags") metadata = { "title": "Test track", "artists": [{"name": "Test artist"}], @@ -26,6 +27,7 @@ def test_can_create_track_from_file_metadata_no_mbid(db, mocker): "disc_number": 2, "license": "Hello world: http://creativecommons.org/licenses/by-sa/4.0/", "copyright": "2018 Someone", + "tags": ["Punk", "Rock"], } match_license = mocker.spy(licenses, "match") @@ -44,6 +46,9 @@ def test_can_create_track_from_file_metadata_no_mbid(db, mocker): assert track.artist.mbid is None assert track.artist.attributed_to is None match_license.assert_called_once_with(metadata["license"], metadata["copyright"]) + add_tags.assert_any_call(track, *metadata["tags"]) + add_tags.assert_any_call(track.artist, *[]) + add_tags.assert_any_call(track.album, *[]) def test_can_create_track_from_file_metadata_attributed_to(factories, mocker): @@ -74,6 +79,32 @@ def test_can_create_track_from_file_metadata_attributed_to(factories, mocker): assert track.artist.attributed_to == actor +def test_can_create_track_from_file_metadata_truncates_too_long_values( + factories, mocker +): + metadata = { + "title": "a" * 5000, + "artists": [{"name": "b" * 5000}], + "album": {"title": "c" * 5000, "release_date": datetime.date(2012, 8, 15)}, + "position": 4, + "disc_number": 2, + "copyright": "d" * 5000, + } + + track = tasks.get_track_from_import_metadata(metadata) + + assert track.title == metadata["title"][: models.MAX_LENGTHS["TRACK_TITLE"]] + assert track.copyright == metadata["copyright"][: models.MAX_LENGTHS["COPYRIGHT"]] + assert ( + track.album.title + == metadata["album"]["title"][: models.MAX_LENGTHS["ALBUM_TITLE"]] + ) + assert ( + track.artist.name + == metadata["artists"][0]["name"][: models.MAX_LENGTHS["ARTIST_NAME"]] + ) + + def test_can_create_track_from_file_metadata_featuring(factories): metadata = { "title": "Whole Lotta Love", @@ -555,6 +586,7 @@ def test_federation_audio_track_to_metadata(now, mocker): "license": "http://creativecommons.org/licenses/by-sa/4.0/", "copyright": "2018 Someone", "attributedTo": "http://track.attributed", + "tag": [{"type": "Hashtag", "name": "TrackTag"}], "album": { "published": published.isoformat(), "type": "Album", @@ -562,6 +594,7 @@ def test_federation_audio_track_to_metadata(now, mocker): "name": "Purple album", "musicbrainzId": str(uuid.uuid4()), "released": released.isoformat(), + "tag": [{"type": "Hashtag", "name": "AlbumTag"}], "attributedTo": "http://album.attributed", "artists": [ { @@ -571,6 +604,7 @@ def test_federation_audio_track_to_metadata(now, mocker): "name": "John Smith", "musicbrainzId": str(uuid.uuid4()), "attributedTo": "http://album-artist.attributed", + "tag": [{"type": "Hashtag", "name": "AlbumArtistTag"}], } ], "cover": { @@ -587,6 +621,7 @@ def test_federation_audio_track_to_metadata(now, mocker): "name": "Bob Smith", "musicbrainzId": str(uuid.uuid4()), "attributedTo": "http://artist.attributed", + "tag": [{"type": "Hashtag", "name": "ArtistTag"}], } ], } @@ -602,6 +637,7 @@ def test_federation_audio_track_to_metadata(now, mocker): "fdate": serializer.validated_data["published"], "fid": payload["id"], "attributed_to": references["http://track.attributed"], + "tags": ["TrackTag"], "album": { "title": payload["album"]["name"], "attributed_to": references["http://album.attributed"], @@ -609,6 +645,7 @@ def test_federation_audio_track_to_metadata(now, mocker): "mbid": payload["album"]["musicbrainzId"], "fid": payload["album"]["id"], "fdate": serializer.validated_data["album"]["published"], + "tags": ["AlbumTag"], "artists": [ { "name": a["name"], @@ -618,6 +655,7 @@ def test_federation_audio_track_to_metadata(now, mocker): "fdate": serializer.validated_data["album"]["artists"][i][ "published" ], + "tags": ["AlbumArtistTag"], } for i, a in enumerate(payload["album"]["artists"]) ], @@ -631,6 +669,7 @@ def test_federation_audio_track_to_metadata(now, mocker): "fid": a["id"], "fdate": serializer.validated_data["artists"][i]["published"], "attributed_to": references["http://artist.attributed"], + "tags": ["ArtistTag"], } for i, a in enumerate(payload["artists"]) ], @@ -830,3 +869,34 @@ def test_update_library_entity(factories, mocker): artist.refresh_from_db() assert artist.name == "Hello" + + +@pytest.mark.parametrize( + "name, ext, mimetype", + [ + ("cover", "png", "image/png"), + ("cover", "jpg", "image/jpeg"), + ("cover", "jpeg", "image/jpeg"), + ("folder", "png", "image/png"), + ("folder", "jpg", "image/jpeg"), + ("folder", "jpeg", "image/jpeg"), + ], +) +def test_get_cover_from_fs(name, ext, mimetype, tmpdir): + cover_path = os.path.join(tmpdir, "{}.{}".format(name, ext)) + content = "Hello" + with open(cover_path, "w") as f: + f.write(content) + + expected = {"mimetype": mimetype, "content": content.encode()} + assert tasks.get_cover_from_fs(tmpdir) == expected + + +@pytest.mark.parametrize("name", ["cover.gif", "folder.gif"]) +def test_get_cover_from_fs_ignored(name, tmpdir): + cover_path = os.path.join(tmpdir, name) + content = "Hello" + with open(cover_path, "w") as f: + f.write(content) + + assert tasks.get_cover_from_fs(tmpdir) is None diff --git a/api/tests/music/test_views.py b/api/tests/music/test_views.py index 25845e738b228b1b1e969c04070f2de134d454eb..0339437d4002bd8f34be3a8731ec9b48d9f92c81 100644 --- a/api/tests/music/test_views.py +++ b/api/tests/music/test_views.py @@ -1,34 +1,45 @@ +import datetime import io import magic import os import urllib.parse +import uuid import pytest +from django.db.models import Prefetch from django.urls import reverse from django.utils import timezone from funkwhale_api.common import utils from funkwhale_api.federation import api_serializers as federation_api_serializers from funkwhale_api.federation import utils as federation_utils +from funkwhale_api.federation import tasks as federation_tasks from funkwhale_api.music import licenses, models, serializers, tasks, views DATA_DIR = os.path.dirname(os.path.abspath(__file__)) def test_artist_list_serializer(api_request, factories, logged_in_api_client): + tags = ["tag1", "tag2"] track = factories["music.Upload"]( - library__privacy_level="everyone", import_status="finished" + library__privacy_level="everyone", + import_status="finished", + track__album__artist__set_tags=tags, ).track artist = track.artist request = api_request.get("/") - qs = artist.__class__.objects.with_albums() + qs = artist.__class__.objects.with_albums().prefetch_related( + Prefetch("tracks", to_attr="_prefetched_tracks") + ) serializer = serializers.ArtistWithAlbumsSerializer( qs, many=True, context={"request": request} ) expected = {"count": 1, "next": None, "previous": None, "results": serializer.data} for artist in serializer.data: + artist["tags"] = tags for album in artist["albums"]: album["is_playable"] = True + url = reverse("api:v1:artists-list") response = logged_in_api_client.get(url) @@ -37,8 +48,11 @@ def test_artist_list_serializer(api_request, factories, logged_in_api_client): def test_album_list_serializer(api_request, factories, logged_in_api_client): + tags = ["tag1", "tag2"] track = factories["music.Upload"]( - library__privacy_level="everyone", import_status="finished" + library__privacy_level="everyone", + import_status="finished", + track__album__set_tags=tags, ).track album = track.album request = api_request.get("/") @@ -47,6 +61,8 @@ def test_album_list_serializer(api_request, factories, logged_in_api_client): qs, many=True, context={"request": request} ) expected = {"count": 1, "next": None, "previous": None, "results": serializer.data} + for album in serializer.data: + album["tags"] = tags url = reverse("api:v1:albums-list") response = logged_in_api_client.get(url) @@ -55,8 +71,11 @@ def test_album_list_serializer(api_request, factories, logged_in_api_client): def test_track_list_serializer(api_request, factories, logged_in_api_client): + tags = ["tag1", "tag2"] track = factories["music.Upload"]( - library__privacy_level="everyone", import_status="finished" + library__privacy_level="everyone", + import_status="finished", + track__set_tags=tags, ).track request = api_request.get("/") qs = track.__class__.objects.with_playable_uploads(None) @@ -64,6 +83,8 @@ def test_track_list_serializer(api_request, factories, logged_in_api_client): qs, many=True, context={"request": request} ) expected = {"count": 1, "next": None, "previous": None, "results": serializer.data} + for track in serializer.data: + track["tags"] = tags url = reverse("api:v1:tracks-list") response = logged_in_api_client.get(url) @@ -205,13 +226,34 @@ def test_serve_file_in_place( assert response[headers[proxy]] == expected +def test_serve_file_in_place_nginx_encode_url( + factories, api_client, preferences, settings +): + preferences["common__api_authentication_required"] = False + settings.PROTECT_FILE_PATH = "/_protected/music" + settings.REVERSE_PROXY_TYPE = "nginx" + settings.MUSIC_DIRECTORY_PATH = "/app/music" + settings.MUSIC_DIRECTORY_SERVE_PATH = "/app/music" + upload = factories["music.Upload"]( + in_place=True, + import_status="finished", + source="file:///app/music/hello/world%?.mp3", + library__privacy_level="everyone", + ) + response = api_client.get(upload.track.listen_url) + expected = "/_protected/music/hello/world%25%3F.mp3" + + assert response.status_code == 200 + assert response["X-Accel-Redirect"] == expected + + @pytest.mark.parametrize( "proxy,serve_path,expected", [ ("apache2", "/host/music", "/host/music/hello/worldéà .mp3"), ("apache2", "/app/music", "/app/music/hello/worldéà .mp3"), - ("nginx", "/host/music", "/_protected/music/hello/worldéà .mp3"), - ("nginx", "/app/music", "/_protected/music/hello/worldéà .mp3"), + ("nginx", "/host/music", "/_protected/music/hello/world%C3%A9%C3%A0.mp3"), + ("nginx", "/app/music", "/_protected/music/hello/world%C3%A9%C3%A0.mp3"), ], ) def test_serve_file_in_place_utf8( @@ -811,3 +853,131 @@ def test_oembed_artist(factories, no_api_auth, api_client, settings): response = api_client.get(url, {"url": artist_url, "format": "json"}) assert response.data == expected + + +def test_oembed_playlist(factories, no_api_auth, api_client, settings): + settings.FUNKWHALE_URL = "http://test" + settings.FUNKWHALE_EMBED_URL = "http://embed" + playlist = factories["playlists.Playlist"](privacy_level="everyone") + track = factories["music.Upload"](playable=True).track + playlist.insert_many([track]) + url = reverse("api:v1:oembed") + playlist_url = "https://test.com/library/playlists/{}".format(playlist.pk) + iframe_src = "http://embed?type=playlist&id={}".format(playlist.pk) + expected = { + "version": "1.0", + "type": "rich", + "provider_name": settings.APP_NAME, + "provider_url": settings.FUNKWHALE_URL, + "height": 400, + "width": 600, + "title": playlist.name, + "description": playlist.name, + "thumbnail_url": federation_utils.full_url( + track.album.cover.crop["400x400"].url + ), + "thumbnail_height": 400, + "thumbnail_width": 400, + "html": '<iframe width="600" height="400" scrolling="no" frameborder="no" src="{}"></iframe>'.format( + iframe_src + ), + "author_name": playlist.name, + "author_url": federation_utils.full_url( + utils.spa_reverse("library_playlist", kwargs={"pk": playlist.pk}) + ), + } + + response = api_client.get(url, {"url": playlist_url, "format": "json"}) + + assert response.data == expected + + +@pytest.mark.parametrize( + "factory_name, url_name", + [ + ("music.Artist", "api:v1:artists-detail"), + ("music.Album", "api:v1:albums-detail"), + ("music.Track", "api:v1:tracks-detail"), + ], +) +def test_refresh_remote_entity_when_param_is_true( + factories, + factory_name, + url_name, + mocker, + logged_in_api_client, + queryset_equal_queries, +): + obj = factories[factory_name](mbid=None) + + assert obj.is_local is False + + new_mbid = uuid.uuid4() + + def fake_refetch(obj, queryset): + obj.mbid = new_mbid + return obj + + refetch_obj = mocker.patch.object(views, "refetch_obj", side_effect=fake_refetch) + url = reverse(url_name, kwargs={"pk": obj.pk}) + response = logged_in_api_client.get(url, {"refresh": "true"}) + + assert response.status_code == 200 + assert response.data["mbid"] == str(new_mbid) + assert refetch_obj.call_count == 1 + assert refetch_obj.call_args[0][0] == obj + + +@pytest.mark.parametrize("param", ["false", "0", ""]) +def test_refresh_remote_entity_no_param( + factories, param, mocker, logged_in_api_client, service_actor +): + obj = factories["music.Artist"](mbid=None) + + assert obj.is_local is False + + fetch_task = mocker.patch.object(federation_tasks, "fetch") + url = reverse("api:v1:artists-detail", kwargs={"pk": obj.pk}) + response = logged_in_api_client.get(url, {"refresh": param}) + + assert response.status_code == 200 + fetch_task.assert_not_called() + assert service_actor.fetches.count() == 0 + + +def test_refetch_obj_not_local(mocker, factories, service_actor): + obj = factories["music.Artist"](local=True) + fetch_task = mocker.patch.object(federation_tasks, "fetch") + assert views.refetch_obj(obj, obj.__class__.objects.all()) == obj + fetch_task.assert_not_called() + assert service_actor.fetches.count() == 0 + + +def test_refetch_obj_last_fetch_date_too_close( + mocker, factories, settings, service_actor +): + settings.FEDERATION_OBJECT_FETCH_DELAY = 300 + obj = factories["music.Artist"]() + factories["federation.Fetch"]( + object=obj, + creation_date=timezone.now() + - datetime.timedelta(minutes=settings.FEDERATION_OBJECT_FETCH_DELAY - 1), + ) + fetch_task = mocker.patch.object(federation_tasks, "fetch") + assert views.refetch_obj(obj, obj.__class__.objects.all()) == obj + fetch_task.assert_not_called() + assert service_actor.fetches.count() == 0 + + +def test_refetch_obj(mocker, factories, settings, service_actor): + settings.FEDERATION_OBJECT_FETCH_DELAY = 300 + obj = factories["music.Artist"]() + factories["federation.Fetch"]( + object=obj, + creation_date=timezone.now() + - datetime.timedelta(minutes=settings.FEDERATION_OBJECT_FETCH_DELAY + 1), + ) + fetch_task = mocker.patch.object(federation_tasks, "fetch") + views.refetch_obj(obj, obj.__class__.objects.all()) + fetch = obj.fetches.filter(actor=service_actor).order_by("-creation_date").first() + fetch_task.assert_called_once_with(fetch_id=fetch.pk) diff --git a/api/tests/music/with_cover.opus b/api/tests/music/with_cover.opus new file mode 100644 index 0000000000000000000000000000000000000000..1b92b5cbb098e47c9722c01fa9caa0700c1284f9 Binary files /dev/null and b/api/tests/music/with_cover.opus differ diff --git a/api/tests/music/with_other_picture.mp3 b/api/tests/music/with_other_picture.mp3 index 3118f067e37064f91f48f4265fac9745236169e0..e83b610b09126c26384fa48428584c8fe255f5bf 100644 Binary files a/api/tests/music/with_other_picture.mp3 and b/api/tests/music/with_other_picture.mp3 differ diff --git a/api/tests/playlists/test_serializers.py b/api/tests/playlists/test_serializers.py index 2500947292142b653e99886144c8020788ad5762..f84df4bb23fbc7662eb7ea27b644ae3970ef1298 100644 --- a/api/tests/playlists/test_serializers.py +++ b/api/tests/playlists/test_serializers.py @@ -1,4 +1,6 @@ +from funkwhale_api.federation import serializers as federation_serializers from funkwhale_api.playlists import models, serializers +from funkwhale_api.users import serializers as users_serializers def test_cannot_max_500_tracks_per_playlist(factories, preferences): @@ -124,3 +126,25 @@ def test_playlist_serializer_include_duration(factories, api_request): serializer = serializers.PlaylistSerializer(qs.get()) assert serializer.data["duration"] == 45 + + +def test_playlist_serializer(factories, to_api_date): + playlist = factories["playlists.Playlist"]() + actor = playlist.user.create_actor() + + expected = { + "id": playlist.pk, + "name": playlist.name, + "privacy_level": playlist.privacy_level, + "is_playable": None, + "creation_date": to_api_date(playlist.creation_date), + "modification_date": to_api_date(playlist.modification_date), + "actor": federation_serializers.APIActorSerializer(actor).data, + "user": users_serializers.UserBasicSerializer(playlist.user).data, + "duration": 0, + "tracks_count": 0, + "album_covers": [], + } + serializer = serializers.PlaylistSerializer(playlist) + + assert serializer.data == expected diff --git a/api/tests/radios/test_api.py b/api/tests/radios/test_api.py index 0ddebe3878051113f4bbdfd2776839a58fbf3530..02d0dc954a72608f7e3da90a5de0af07120a1e2b 100644 --- a/api/tests/radios/test_api.py +++ b/api/tests/radios/test_api.py @@ -1,3 +1,5 @@ +import pytest + from django.urls import reverse from funkwhale_api.music.serializers import TrackSerializer @@ -129,3 +131,16 @@ def test_clean_config_is_called_on_serializer_save(mocker, factories): instance = serializer.save(user=user) spied.assert_called_once_with(data["config"][0]) assert instance.config[0]["names"] == [artist.name] + + +@pytest.mark.parametrize("radio_type", ["random", "less-listened", "favorites"]) +def test_create_radio_session(radio_type, logged_in_api_client): + + url = reverse("api:v1:radios:sessions-list") + response = logged_in_api_client.post(url, {"radio_type": radio_type}) + + assert response.status_code == 201 + assert response.data["radio_type"] == radio_type + assert ( + response.data["id"] == logged_in_api_client.user.radio_sessions.latest("id").pk + ) diff --git a/api/tests/radios/test_radios.py b/api/tests/radios/test_radios.py index 640e712117bfb2ffc641af43daaa0eb5268ad0fd..040217aac39308d5f6d77f4236e33fa05381b8a1 100644 --- a/api/tests/radios/test_radios.py +++ b/api/tests/radios/test_radios.py @@ -197,15 +197,19 @@ def test_can_start_artist_radio(factories): def test_can_start_tag_radio(factories): user = factories["users.User"]() - tag = factories["taggit.Tag"]() - factories["music.Upload"].create_batch(5) - good_files = factories["music.Upload"].create_batch(5, track__tags=[tag]) - good_tracks = [f.track for f in good_files] + tag = factories["tags.Tag"]() + good_tracks = [ + factories["music.Track"](set_tags=[tag.name]), + factories["music.Track"](album__set_tags=[tag.name]), + factories["music.Track"](album__artist__set_tags=[tag.name]), + ] + factories["music.Track"].create_batch(3, set_tags=["notrock"]) radio = radios.TagRadio() session = radio.start_session(user, related_object=tag) assert session.radio_type == "tag" - for i in range(5): + + for i in range(3): assert radio.pick(filter_playable=False) in good_tracks diff --git a/api/tests/radios/test_serializers.py b/api/tests/radios/test_serializers.py new file mode 100644 index 0000000000000000000000000000000000000000..748bd993a9add630699e274b8de2f4d2c45456e0 --- /dev/null +++ b/api/tests/radios/test_serializers.py @@ -0,0 +1,44 @@ +from funkwhale_api.radios import serializers + + +def test_create_tag_radio(factories): + tag = factories["tags.Tag"]() + + data = {"radio_type": "tag", "related_object_id": tag.name} + + serializer = serializers.RadioSessionSerializer(data=data) + assert serializer.is_valid(raise_exception=True) is True + + session = serializer.save() + + assert session.related_object_id == tag.pk + assert session.related_object == tag + + +def test_create_artist_radio(factories): + artist = factories["music.Artist"]() + + data = {"radio_type": "artist", "related_object_id": artist.pk} + + serializer = serializers.RadioSessionSerializer(data=data) + assert serializer.is_valid(raise_exception=True) is True + + session = serializer.save() + + assert session.related_object_id == artist.pk + assert session.related_object == artist + + +def test_tag_radio_repr(factories, to_api_date): + tag = factories["tags.Tag"]() + session = factories["radios.RadioSession"](related_object=tag, radio_type="tag") + + expected = { + "id": session.pk, + "radio_type": "tag", + "custom_radio": None, + "user": session.user.pk, + "related_object_id": tag.name, + "creation_date": to_api_date(session.creation_date), + } + assert serializers.RadioSessionSerializer(session).data == expected diff --git a/api/tests/subsonic/test_renderers.py b/api/tests/subsonic/test_renderers.py index acd5500e665b6d4f9d32c0ea6cd9689a9bb37421..501ae48ce559277baf5b378b41c042d7241ea9a3 100644 --- a/api/tests/subsonic/test_renderers.py +++ b/api/tests/subsonic/test_renderers.py @@ -67,9 +67,12 @@ def test_json_renderer(): def test_xml_renderer_dict_to_xml(): - payload = {"hello": "world", "item": [{"this": 1}, {"some": "node"}]} + payload = { + "hello": "world", + "item": [{"this": 1, "value": "text"}, {"some": "node"}], + } expected = """<?xml version="1.0" encoding="UTF-8"?> -<key hello="world"><item this="1" /><item some="node" /></key>""" +<key hello="world"><item this="1">text</item><item some="node" /></key>""" result = renderers.dict_to_xml_tree("key", payload) exp = ET.fromstring(expected) assert ET.tostring(result) == ET.tostring(exp) diff --git a/api/tests/subsonic/test_serializers.py b/api/tests/subsonic/test_serializers.py index 2c468a4f027e20b01d975552e8a841464e2e6d4a..d6025a90b9bfc158f269a9fe0bfbab6e330ad0b4 100644 --- a/api/tests/subsonic/test_serializers.py +++ b/api/tests/subsonic/test_serializers.py @@ -1,3 +1,5 @@ +import pytest + from funkwhale_api.music import models as music_models from funkwhale_api.subsonic import serializers @@ -61,6 +63,27 @@ def test_get_artist_serializer(factories): assert serializers.GetArtistSerializer(artist).data == expected +@pytest.mark.parametrize( + "mimetype, extension, expected", + [ + ("audio/ogg", "noop", "audio/ogg"), + ("", "ogg", "audio/ogg"), + ("", "mp3", "audio/mpeg"), + ("", "", "audio/mpeg"), + ], +) +def test_get_track_data_content_type(mimetype, extension, expected, factories): + upload = factories["music.Upload"]() + upload.mimetype = mimetype + upload.audio_file = "test.{}".format(extension) + + data = serializers.get_track_data( + album=upload.track.album, track=upload.track, upload=upload + ) + + assert data["contentType"] == expected + + def test_get_album_serializer(factories): artist = factories["music.Artist"]() album = factories["music.Album"](artist=artist) diff --git a/api/tests/subsonic/test_views.py b/api/tests/subsonic/test_views.py index e227f4d1d1abbb9db924cc20b6065ea37f58c9dd..298ad34f7281ffe5148af6427dd35eb02dcfbe2b 100644 --- a/api/tests/subsonic/test_views.py +++ b/api/tests/subsonic/test_views.py @@ -375,6 +375,28 @@ def test_get_random_songs(f, db, logged_in_api_client, factories, mocker): order_by.assert_called_once_with("?") +@pytest.mark.parametrize("f", ["json"]) +def test_get_genres(f, db, logged_in_api_client, factories, mocker): + url = reverse("api:subsonic-get_genres") + assert url.endswith("getGenres") is True + tag1 = factories["tags.Tag"](name="Pop") + tag2 = factories["tags.Tag"](name="Rock") + + factories["music.Album"](set_tags=[tag1.name, tag2.name]) + factories["music.Track"](set_tags=[tag1.name]) + response = logged_in_api_client.get(url) + + assert response.status_code == 200 + assert response.data == { + "genres": { + "genre": [ + {"songCount": 1, "albumCount": 1, "value": tag1.name}, + {"songCount": 0, "albumCount": 1, "value": tag2.name}, + ] + } + } + + @pytest.mark.parametrize("f", ["json"]) def test_get_starred(f, db, logged_in_api_client, factories): url = reverse("api:subsonic-get_starred") @@ -426,6 +448,49 @@ def test_get_album_list2_pagination(f, db, logged_in_api_client, factories): } +@pytest.mark.parametrize("f", ["json"]) +def test_get_album_list2_by_genre(f, db, logged_in_api_client, factories): + url = reverse("api:subsonic-get_album_list2") + assert url.endswith("getAlbumList2") is True + album1 = factories["music.Album"]( + artist__name="Artist1", playable=True, set_tags=["Rock"] + ) + album2 = factories["music.Album"]( + artist__name="Artist2", playable=True, artist__set_tags=["Rock"] + ) + factories["music.Album"](playable=True, set_tags=["Pop"]) + response = logged_in_api_client.get( + url, {"f": f, "type": "byGenre", "size": 5, "offset": 0, "genre": "rock"} + ) + + assert response.status_code == 200 + assert response.data == { + "albumList2": {"album": serializers.get_album_list2_data([album1, album2])} + } + + +@pytest.mark.parametrize("f", ["json"]) +@pytest.mark.parametrize( + "tags_field", + ["set_tags", "artist__set_tags", "album__set_tags", "album__artist__set_tags"], +) +def test_get_songs_by_genre(f, tags_field, db, logged_in_api_client, factories): + url = reverse("api:subsonic-get_songs_by_genre") + assert url.endswith("getSongsByGenre") is True + track1 = factories["music.Track"](playable=True, **{tags_field: ["Rock"]}) + track2 = factories["music.Track"](playable=True, **{tags_field: ["Rock"]}) + factories["music.Track"](playable=True, **{tags_field: ["Pop"]}) + expected = { + "songsByGenre": {"song": serializers.get_song_list_data([track2, track1])} + } + + response = logged_in_api_client.get( + url, {"f": f, "count": 5, "offset": 0, "genre": "rock"} + ) + assert response.status_code == 200 + assert response.data == expected + + @pytest.mark.parametrize("f", ["json"]) def test_search3(f, db, logged_in_api_client, factories): url = reverse("api:subsonic-search3") diff --git a/api/tests/tags/__init__.py b/api/tests/tags/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/api/tests/tags/test_filters.py b/api/tests/tags/test_filters.py new file mode 100644 index 0000000000000000000000000000000000000000..3b812f0feb45180e0fd7892686b28ac58a812d76 --- /dev/null +++ b/api/tests/tags/test_filters.py @@ -0,0 +1,16 @@ +from funkwhale_api.tags import filters +from funkwhale_api.tags import models + + +def test_filter_search_tag(factories, queryset_equal_list): + matches = [ + factories["tags.Tag"](name="Tag1"), + factories["tags.Tag"](name="TestTag1"), + factories["tags.Tag"](name="TestTag12"), + ] + factories["tags.Tag"](name="TestTag") + factories["tags.Tag"](name="TestTag2") + qs = models.Tag.objects.all().order_by("name") + filterset = filters.TagFilter({"q": "tag1"}, queryset=qs) + + assert filterset.qs == matches diff --git a/api/tests/tags/test_models.py b/api/tests/tags/test_models.py new file mode 100644 index 0000000000000000000000000000000000000000..b59b28738b4ac557d305779d0aad931e204056fc --- /dev/null +++ b/api/tests/tags/test_models.py @@ -0,0 +1,79 @@ +import pytest + +from funkwhale_api.tags import models + + +@pytest.mark.parametrize( + "existing, given, expected", + [ + ([], ["tag1"], ["tag1"]), + (["tag1"], ["tag1"], ["tag1"]), + (["tag1"], ["tag2"], ["tag1", "tag2"]), + (["tag1"], ["tag2", "tag3"], ["tag1", "tag2", "tag3"]), + ], +) +def test_add_tags(factories, existing, given, expected): + obj = factories["music.Artist"]() + for tag in existing: + factories["tags.TaggedItem"](content_object=obj, tag__name=tag) + + models.add_tags(obj, *given) + + tagged_items = models.TaggedItem.objects.all() + + assert tagged_items.count() == len(expected) + for tag in expected: + match = tagged_items.get(tag__name=tag) + assert match.content_object == obj + + +@pytest.mark.parametrize( + "existing, given, expected", + [ + ([], ["tag1"], ["tag1"]), + (["tag1"], ["tag1"], ["tag1"]), + (["tag1"], [], []), + (["tag1"], ["tag2"], ["tag2"]), + (["tag1", "tag2"], ["tag2"], ["tag2"]), + (["tag1", "tag2"], ["tag3", "tag4"], ["tag3", "tag4"]), + ], +) +def test_set_tags(factories, existing, given, expected): + obj = factories["music.Artist"]() + for tag in existing: + factories["tags.TaggedItem"](content_object=obj, tag__name=tag) + + models.set_tags(obj, *given) + + tagged_items = models.TaggedItem.objects.all() + + assert tagged_items.count() == len(expected) + for tag in expected: + match = tagged_items.get(tag__name=tag) + assert match.content_object == obj + + +@pytest.mark.parametrize( + "max, tags, expected", + [ + (5, ["hello", "world"], ["hello", "world"]), + # we truncate extra tags + (1, ["hello", "world"], ["hello"]), + (2, ["hello", "world", "foo"], ["hello", "world"]), + ], +) +def test_set_tags_honor_TAGS_MAX_BY_OBJ(factories, max, tags, expected, settings): + settings.TAGS_MAX_BY_OBJ = max + obj = factories["music.Artist"]() + + models.set_tags(obj, *tags) + + assert sorted(obj.tagged_items.values_list("tag__name", flat=True)) == expected + + +@pytest.mark.parametrize("factory_name", ["music.Track", "music.Album", "music.Artist"]) +def test_models_that_support_tags(factories, factory_name): + tags = ["tag1", "tag2"] + obj = factories[factory_name](set_tags=tags) + + assert sorted(obj.tagged_items.all().values_list("tag__name", flat=True)) == tags diff --git a/api/tests/tags/test_serializers.py b/api/tests/tags/test_serializers.py new file mode 100644 index 0000000000000000000000000000000000000000..dc3a64ae0751a3219653205c211ae41263af4d44 --- /dev/null +++ b/api/tests/tags/test_serializers.py @@ -0,0 +1,43 @@ +import pytest + +from funkwhale_api.tags import serializers + + +def test_tag_serializer(factories, to_api_date): + tag = factories["tags.Tag"]() + + serializer = serializers.TagSerializer(tag) + + expected = {"name": tag.name, "creation_date": to_api_date(tag.creation_date)} + + assert serializer.data == expected + + +@pytest.mark.parametrize( + "name", + [ + "", + "invalid because spaces", + "invalid-because-dashes", + "invalid because non breaking spaces", + ], +) +def test_tag_name_field_validation(name): + field = serializers.TagNameField() + with pytest.raises(serializers.serializers.ValidationError): + field.to_internal_value(name) + + +@pytest.mark.parametrize( + "max, tags, expected", + [ + (5, ["hello", "world"], ["hello", "world"]), + # we truncate extra tags + (1, ["hello", "world"], ["hello"]), + (2, ["hello", "world", "foo"], ["hello", "world"]), + ], +) +def test_tags_list_field_honor_TAGS_MAX_BY_OBJ(max, tags, expected, settings): + settings.TAGS_MAX_BY_OBJ = max + field = serializers.TagsListField() + assert field.to_internal_value(tags) == expected diff --git a/api/tests/tags/test_views.py b/api/tests/tags/test_views.py new file mode 100644 index 0000000000000000000000000000000000000000..b42e9ab3713e66dc1759c7bc7e5d76e697ee9616 --- /dev/null +++ b/api/tests/tags/test_views.py @@ -0,0 +1,53 @@ +from django.urls import reverse + +from funkwhale_api.tags import serializers + + +def test_tags_list(factories, logged_in_api_client): + url = reverse("api:v1:tags-list") + tag = factories["tags.Tag"]() + + expected = { + "count": 1, + "next": None, + "previous": None, + "results": [serializers.TagSerializer(tag).data], + } + + response = logged_in_api_client.get(url) + + assert response.data == expected + + +def test_tags_list_ordering_length(factories, logged_in_api_client): + url = reverse("api:v1:tags-list") + tags = [ + factories["tags.Tag"](name="iamareallylongtag"), + factories["tags.Tag"](name="short"), + factories["tags.Tag"](name="reallylongtag"), + factories["tags.Tag"](name="bar"), + ] + expected = { + "count": 4, + "next": None, + "previous": None, + "results": [ + serializers.TagSerializer(tag).data + for tag in [tags[3], tags[1], tags[2], tags[0]] + ], + } + + response = logged_in_api_client.get(url, {"ordering": "length"}) + + assert response.data == expected + + +def test_tags_detail(factories, logged_in_api_client): + tag = factories["tags.Tag"]() + url = reverse("api:v1:tags-detail", kwargs={"name": tag.name}) + + expected = serializers.TagSerializer(tag).data + + response = logged_in_api_client.get(url) + + assert response.data == expected diff --git a/api/tests/test_test_utils.py b/api/tests/test_test_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..a17b2185608d90905274fc2f202f68d02daf2dc9 --- /dev/null +++ b/api/tests/test_test_utils.py @@ -0,0 +1,6 @@ +from . import utils as test_utils + + +def test_to_api_date(now): + + assert test_utils.to_api_date(now) == now.isoformat().split("+")[0] + "Z" diff --git a/api/tests/users/oauth/test_api_permissions.py b/api/tests/users/oauth/test_api_permissions.py index e73d3a3f91c71b30c2444719ed035f5049d3d4a2..b030803ee264b3f27450b2f9421377ded8ee3562 100644 --- a/api/tests/users/oauth/test_api_permissions.py +++ b/api/tests/users/oauth/test_api_permissions.py @@ -35,6 +35,7 @@ from funkwhale_api.users.oauth import scopes "get", ), ("api:v1:federation:library-follows-list", {}, "read:follows", "get"), + ("api:v1:tags-list", {}, "read:libraries", "get"), # admin / privileged stuff ("api:v1:instance:admin-settings-list", {}, "read:instance:settings", "get"), ( diff --git a/api/tests/users/oauth/test_permissions.py b/api/tests/users/oauth/test_permissions.py index 65974fbf645f92af478457fadd7138f7067a3a01..a5cd12034fd2aa4e07b0e5bfa24405d68b2baf7e 100644 --- a/api/tests/users/oauth/test_permissions.py +++ b/api/tests/users/oauth/test_permissions.py @@ -59,7 +59,9 @@ def test_scope_permission_anonymous_policy( policy, preference, expected, preferences, mocker, anonymous_user ): preferences["common__api_authentication_required"] = preference - view = mocker.Mock(required_scope="libraries", anonymous_policy=policy) + view = mocker.Mock( + required_scope="libraries", anonymous_policy=policy, anonymous_scopes=set() + ) request = mocker.Mock(method="GET", user=anonymous_user, actor=None) p = permissions.ScopePermission() @@ -72,6 +74,7 @@ def test_scope_permission_dict_no_required(mocker, anonymous_user): required_scope={"read": None, "write": "write:profile"}, anonymous_policy=True, action="read", + anonymous_scopes=set(), ) request = mocker.Mock(method="GET", user=anonymous_user, actor=None) @@ -164,7 +167,9 @@ def test_scope_permission_token_anonymous_user_auth_not_required( preferences["common__api_authentication_required"] = False should_allow = mocker.patch.object(permissions, "should_allow") request = mocker.Mock(method="POST", user=anonymous_user, actor=None) - view = mocker.Mock(required_scope="profile", anonymous_policy="setting") + view = mocker.Mock( + required_scope="profile", anonymous_policy="setting", anonymous_scopes=set() + ) p = permissions.ScopePermission() diff --git a/api/tests/users/oauth/test_scopes.py b/api/tests/users/oauth/test_scopes.py index 3d12cb664e7dadcdc078706b0e79fae1764fe221..4943a8a1e1b8ab9e5bc0fd820f12487d14f28a2b 100644 --- a/api/tests/users/oauth/test_scopes.py +++ b/api/tests/users/oauth/test_scopes.py @@ -28,6 +28,8 @@ from funkwhale_api.users.oauth import scopes "write:edits", "read:filters", "write:filters", + "read:reports", + "write:reports", "read:listenings", "write:listenings", "read:security", @@ -48,6 +50,10 @@ from funkwhale_api.users.oauth import scopes "write:instance:edits", "read:instance:libraries", "write:instance:libraries", + "read:instance:notes", + "write:instance:notes", + "read:instance:reports", + "write:instance:reports", }, ), ( @@ -71,6 +77,8 @@ from funkwhale_api.users.oauth import scopes "write:edits", "read:filters", "write:filters", + "read:reports", + "write:reports", "read:listenings", "write:listenings", "read:security", @@ -87,6 +95,10 @@ from funkwhale_api.users.oauth import scopes "write:instance:users", "read:instance:invitations", "write:instance:invitations", + "read:instance:notes", + "write:instance:notes", + "read:instance:reports", + "write:instance:reports", }, ), ( @@ -110,6 +122,8 @@ from funkwhale_api.users.oauth import scopes "write:edits", "read:filters", "write:filters", + "read:reports", + "write:reports", "read:listenings", "write:listenings", "read:security", @@ -120,6 +134,10 @@ from funkwhale_api.users.oauth import scopes "write:instance:accounts", "read:instance:domains", "write:instance:domains", + "read:instance:notes", + "write:instance:notes", + "read:instance:reports", + "write:instance:reports", }, ), ( @@ -143,6 +161,8 @@ from funkwhale_api.users.oauth import scopes "write:edits", "read:filters", "write:filters", + "read:reports", + "write:reports", "read:listenings", "write:listenings", "read:security", diff --git a/api/tests/users/test_admin.py b/api/tests/users/test_admin.py index 03b316eb0d9418422dc68690821a535b5389daac..0af38c0ee5b964513241690ab213ffd146782c53 100644 --- a/api/tests/users/test_admin.py +++ b/api/tests/users/test_admin.py @@ -4,7 +4,11 @@ from funkwhale_api.users.admin import MyUserCreationForm def test_clean_username_success(db): # Instantiate the form with a new username form = MyUserCreationForm( - {"username": "alamode", "password1": "123456", "password2": "123456"} + { + "username": "alamode", + "password1": "thisismypassword", + "password2": "thisismypassword", + } ) # Run is_valid() to trigger the validation valid = form.is_valid() @@ -19,7 +23,11 @@ def test_clean_username_false(factories): user = factories["users.User"]() # Instantiate the form with the same username as self.user form = MyUserCreationForm( - {"username": user.username, "password1": "123456", "password2": "123456"} + { + "username": user.username, + "password1": "thisismypassword", + "password2": "thisismypassword", + } ) # Run is_valid() to trigger the validation, which is going to fail # because the username is already taken diff --git a/api/tests/users/test_jwt.py b/api/tests/users/test_jwt.py index 83de757c8b1d49570f680f2673aebefb3e0803e5..d0fe1a1fa70a0ddb5736eb95fdda7178ecb77c60 100644 --- a/api/tests/users/test_jwt.py +++ b/api/tests/users/test_jwt.py @@ -22,3 +22,22 @@ def test_can_invalidate_token_when_changing_user_secret_key(factories): # token should be invalid with pytest.raises(DecodeError): api_settings.JWT_DECODE_HANDLER(payload) + + +def test_can_invalidate_token_when_changing_settings_secret_key(factories, settings): + settings.SECRET_KEY = "test1" + user = factories["users.User"]() + jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER + jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER + payload = jwt_payload_handler(user) + payload = jwt_encode_handler(payload) + + # this should work + api_settings.JWT_DECODE_HANDLER(payload) + + # now we update the secret key + settings.SECRET_KEY = "test2" + + # token should be invalid + with pytest.raises(DecodeError): + api_settings.JWT_DECODE_HANDLER(payload) diff --git a/api/tests/users/test_models.py b/api/tests/users/test_models.py index 1b185e55f88844baa9400a82c49dff3d706a24f7..7552094ae31943124f71c0493424855d35301832 100644 --- a/api/tests/users/test_models.py +++ b/api/tests/users/test_models.py @@ -176,11 +176,12 @@ def test_creating_actor_from_user(factories, settings): def test_get_channels_groups(factories): - user = factories["users.User"]() + user = factories["users.User"](permission_library=True) assert user.get_channels_groups() == [ "user.{}.imports".format(user.pk), "user.{}.inbox".format(user.pk), + "admin.library", ] @@ -221,11 +222,18 @@ def test_user_get_quota_status(factories, preferences, mocker): } -def test_deleting_users_deletes_associated_actor(factories): - actor = factories["federation.Actor"]() - user = factories["users.User"](actor=actor) - - user.delete() +@pytest.mark.parametrize( + "setting_name, field", + [ + ("INSTANCE_SUPPORT_MESSAGE_DELAY", "instance_support_message_display_date"), + ("FUNKWHALE_SUPPORT_MESSAGE_DELAY", "funkwhale_support_message_display_date"), + ], +) +def test_creating_user_set_support_display_date( + setting_name, field, settings, factories, now +): + setattr(settings, setting_name, 66) # display message every 66 days + expected = now + datetime.timedelta(days=66) + user = factories["users.User"]() - with pytest.raises(actor.DoesNotExist): - actor.refresh_from_db() + assert getattr(user, field) == expected diff --git a/api/tests/users/test_mutations.py b/api/tests/users/test_mutations.py new file mode 100644 index 0000000000000000000000000000000000000000..33902153fbc292335e7005610d2399cbb8f77388 --- /dev/null +++ b/api/tests/users/test_mutations.py @@ -0,0 +1,33 @@ +from funkwhale_api.users import tasks + + +def test_delete_account_mutation(mocker, factories, now): + user = factories["users.User"](subsonic_api_token="test", password="test") + actor = user.create_actor() + on_commit = mocker.patch("funkwhale_api.common.utils.on_commit") + + secret_key = user.secret_key + set_unusable_password = mocker.spy(user, "set_unusable_password") + factories["users.Grant"](user=user) + factories["users.AccessToken"](user=user) + factories["users.RefreshToken"](user=user) + mutation = factories["common.Mutation"]( + type="delete_account", target=actor, payload={} + ) + + mutation.apply() + user.refresh_from_db() + + set_unusable_password.assert_called_once_with() + assert user.has_usable_password() is False + assert user.subsonic_api_token is None + assert user.secret_key is not None and user.secret_key != secret_key + assert user.users_grant.count() == 0 + assert user.users_refreshtoken.count() == 0 + assert user.users_accesstoken.count() == 0 + on_commit.assert_called_once_with(tasks.delete_account.delay, user_id=user.pk) + + assert mutation.previous_state == { + "actor": {"preferred_username": actor.preferred_username}, + "user": {"username": user.username, "id": user.pk}, + } diff --git a/api/tests/users/test_serializers.py b/api/tests/users/test_serializers.py new file mode 100644 index 0000000000000000000000000000000000000000..02d1ac052fe5b027e755eaaacd5bdc4b232e051a --- /dev/null +++ b/api/tests/users/test_serializers.py @@ -0,0 +1,44 @@ +import pytest + +from funkwhale_api.users import serializers + + +@pytest.mark.parametrize( + "data, expected_error", + [ + ( + { + "username": "myusername", + "email": "test@hello.com", + "password1": "myusername", + }, + r".*password is too similar.*", + ), + ( + {"username": "myusername", "email": "test@hello.com", "password1": "test"}, + r".*must contain at least 8 characters.*", + ), + ( + { + "username": "myusername", + "email": "test@hello.com", + "password1": "superman", + }, + r".*password is too common.*", + ), + ( + { + "username": "myusername", + "email": "test@hello.com", + "password1": "123457809878", + }, + r".*password is entirely numeric.*", + ), + ], +) +def test_registration_serializer_validates_password_properly(data, expected_error, db): + data["password2"] = data["password1"] + serializer = serializers.RegisterSerializer(data=data) + + with pytest.raises(serializers.serializers.ValidationError, match=expected_error): + serializer.is_valid(raise_exception=True) diff --git a/api/tests/users/test_tasks.py b/api/tests/users/test_tasks.py new file mode 100644 index 0000000000000000000000000000000000000000..2430718504454924b7271c2873a114eef4785f27 --- /dev/null +++ b/api/tests/users/test_tasks.py @@ -0,0 +1,32 @@ +import pytest + +from funkwhale_api.federation import routes +from funkwhale_api.users import tasks + + +def test_delete_account(factories, mocker): + user = factories["users.User"]() + actor = user.create_actor() + library = factories["music.Library"](actor=actor) + unrelated_library = factories["music.Library"]() + dispatch = mocker.patch.object(routes.outbox, "dispatch") + + tasks.delete_account(user_id=user.pk) + + dispatch.assert_called_once_with( + {"type": "Delete", "object": {"type": actor.type}}, context={"actor": actor} + ) + + with pytest.raises(user.DoesNotExist): + user.refresh_from_db() + + with pytest.raises(library.DoesNotExist): + library.refresh_from_db() + + # this one shouldn't be deleted + unrelated_library.refresh_from_db() + actor.refresh_from_db() + + assert actor.type == "Tombstone" + assert actor.name is None + assert actor.summary is None diff --git a/api/tests/users/test_views.py b/api/tests/users/test_views.py index 956a7178cf98641e295cc6369d198cf954fd47e6..8156c84b50f33c95a512d09daad8d531dcdb67de 100644 --- a/api/tests/users/test_views.py +++ b/api/tests/users/test_views.py @@ -9,8 +9,8 @@ def test_can_create_user_via_api(preferences, api_client, db): data = { "username": "test1", "email": "test1@test.com", - "password1": "testtest", - "password2": "testtest", + "password1": "thisismypassword", + "password2": "thisismypassword", } preferences["users__registration_enabled"] = True response = api_client.post(url, data) @@ -39,7 +39,7 @@ def test_username_only_accepts_letters_and_underscores( def test_can_restrict_usernames(settings, preferences, db, api_client): url = reverse("rest_register") preferences["users__registration_enabled"] = True - settings.USERNAME_BLACKLIST = ["funkwhale"] + settings.ACCOUNT_USERNAME_BLACKLIST = ["funkwhale"] data = { "username": "funkwhale", "email": "contact@funkwhale.io", @@ -72,8 +72,8 @@ def test_can_signup_with_invitation(preferences, factories, api_client): data = { "username": "test1", "email": "test1@test.com", - "password1": "testtest", - "password2": "testtest", + "password1": "thisismypassword", + "password2": "thisismypassword", "invitation": "hello", } preferences["users__registration_enabled"] = False @@ -157,11 +157,16 @@ def test_changing_password_updates_secret_key(logged_in_api_client): user = logged_in_api_client.user password = user.password secret_key = user.secret_key - payload = {"old_password": "test", "new_password1": "new", "new_password2": "new"} + payload = { + "old_password": "test", + "new_password1": "thisismypassword", + "new_password2": "thisismypassword", + } url = reverse("change_password") - logged_in_api_client.post(url, payload) + response = logged_in_api_client.post(url, payload) + assert response.status_code == 200 user.refresh_from_db() assert user.secret_key != secret_key @@ -295,8 +300,8 @@ def test_creating_user_creates_actor_as_well( data = { "username": "test1", "email": "test1@test.com", - "password1": "testtest", - "password2": "testtest", + "password1": "thisismypassword", + "password2": "thisismypassword", } preferences["users__registration_enabled"] = True mocker.patch("funkwhale_api.users.models.create_actor", return_value=actor) @@ -316,8 +321,8 @@ def test_creating_user_sends_confirmation_email( data = { "username": "test1", "email": "test1@test.com", - "password1": "testtest", - "password2": "testtest", + "password1": "thisismypassword", + "password2": "thisismypassword", } preferences["users__registration_enabled"] = True preferences["instance__name"] = "Hello world" @@ -328,3 +333,57 @@ def test_creating_user_sends_confirmation_email( confirmation_message = mailoutbox[-1] assert "Hello world" in confirmation_message.body assert settings.FUNKWHALE_HOSTNAME in confirmation_message.body + + +def test_user_account_deletion_requires_valid_password(logged_in_api_client): + user = logged_in_api_client.user + user.set_password("mypassword") + url = reverse("api:v1:users:users-me") + payload = {"password": "invalid", "confirm": True} + response = logged_in_api_client.delete(url, payload) + + assert response.status_code == 400 + + +def test_user_account_deletion_requires_confirmation(logged_in_api_client): + user = logged_in_api_client.user + user.set_password("mypassword") + url = reverse("api:v1:users:users-me") + payload = {"password": "mypassword", "confirm": False} + response = logged_in_api_client.delete(url, payload) + + assert response.status_code == 400 + + +def test_user_account_deletion_triggers_delete_account(logged_in_api_client, mocker): + user = logged_in_api_client.user + user.set_password("mypassword") + url = reverse("api:v1:users:users-me") + payload = {"password": "mypassword", "confirm": True} + delete_account = mocker.patch("funkwhale_api.users.tasks.delete_account.delay") + response = logged_in_api_client.delete(url, payload) + + assert response.status_code == 204 + delete_account.assert_called_once_with(user_id=user.pk) + + +def test_username_with_existing_local_account_are_invalid( + settings, preferences, factories, api_client +): + actor = factories["users.User"]().create_actor() + user = actor.user + user.delete() + url = reverse("rest_register") + preferences["users__registration_enabled"] = True + settings.ACCOUNT_USERNAME_BLACKLIST = [] + data = { + "username": user.username, + "email": "contact@funkwhale.io", + "password1": "testtest", + "password2": "testtest", + } + + response = api_client.post(url, data) + + assert response.status_code == 400 + assert "username" in response.data diff --git a/api/tests/utils.py b/api/tests/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..868972aa432e723d430268b0be397496049797f3 --- /dev/null +++ b/api/tests/utils.py @@ -0,0 +1,12 @@ +import datetime +from rest_framework import fields as rest_fields + + +def to_api_date(value): + if isinstance(value, datetime.datetime): + f = rest_fields.DateTimeField() + return f.to_representation(value) + if isinstance(value, datetime.date): + f = rest_fields.DateField() + return f.to_representation(value) + raise ValueError("Invalid value: {}".format(value)) diff --git a/changes/changelog.d/261.feature b/changes/changelog.d/261.feature new file mode 100644 index 0000000000000000000000000000000000000000..8d5e7139b87c57bae79ded5f6c71ead4fe455427 --- /dev/null +++ b/changes/changelog.d/261.feature @@ -0,0 +1 @@ +Enforce a configurable rate limit on the API to mitigate abuse (#261) diff --git a/changes/changelog.d/432.feature b/changes/changelog.d/432.feature new file mode 100644 index 0000000000000000000000000000000000000000..75017106a36eac861f706508e11777ac6ed9b821 --- /dev/null +++ b/changes/changelog.d/432.feature @@ -0,0 +1 @@ +Support for genres, via tags (#432) diff --git a/changes/changelog.d/548.enhancement b/changes/changelog.d/548.enhancement new file mode 100644 index 0000000000000000000000000000000000000000..99cd04941f768888dc13a7f7315fdf2223c220d7 --- /dev/null +++ b/changes/changelog.d/548.enhancement @@ -0,0 +1 @@ +Mods can now change a library visibility through the admin UI (#548) diff --git a/changes/changelog.d/661.enhancement b/changes/changelog.d/661.enhancement new file mode 100644 index 0000000000000000000000000000000000000000..38553fbfa260fdf86062b705ecf06b2f77c221e4 --- /dev/null +++ b/changes/changelog.d/661.enhancement @@ -0,0 +1 @@ +Support for M4A/AAC files (#661) diff --git a/changes/changelog.d/710.add-track-dropdown b/changes/changelog.d/710.add-track-dropdown new file mode 100644 index 0000000000000000000000000000000000000000..b82cf92ea86d9ae6aacea9d46d7917a6f1d9ff5c --- /dev/null +++ b/changes/changelog.d/710.add-track-dropdown @@ -0,0 +1 @@ +Add dropdown menu to track table (#531) diff --git a/changes/changelog.d/710.make-album-cards-independent b/changes/changelog.d/710.make-album-cards-independent new file mode 100644 index 0000000000000000000000000000000000000000..49cfd424843582a2940b53420f244297b0ee44dd --- /dev/null +++ b/changes/changelog.d/710.make-album-cards-independent @@ -0,0 +1 @@ +Make album cards height independent (#710) diff --git a/changes/changelog.d/756.feature b/changes/changelog.d/756.feature new file mode 100644 index 0000000000000000000000000000000000000000..402b0e589ffb2c255d6ab392f822afab77b84b21 --- /dev/null +++ b/changes/changelog.d/756.feature @@ -0,0 +1 @@ +Dark theme (#756) diff --git a/changes/changelog.d/761.enhancement b/changes/changelog.d/761.enhancement new file mode 100644 index 0000000000000000000000000000000000000000..005e9156dc13e8f4484695a710d1e1b89c34a86c --- /dev/null +++ b/changes/changelog.d/761.enhancement @@ -0,0 +1 @@ +Added the option to replace the queue's current contents with a selected album or track (#761) \ No newline at end of file diff --git a/changes/changelog.d/834.enhancement b/changes/changelog.d/834.enhancement new file mode 100644 index 0000000000000000000000000000000000000000..58ab1161e504919ba2dc0f0303cd37813d47f671 --- /dev/null +++ b/changes/changelog.d/834.enhancement @@ -0,0 +1 @@ +Simplified embedded docker reverse proxy IP configuration (#834) diff --git a/changes/changelog.d/839.feature b/changes/changelog.d/839.feature new file mode 100644 index 0000000000000000000000000000000000000000..7f72f000c1133094502050349b04dfa8b3902d79 --- /dev/null +++ b/changes/changelog.d/839.feature @@ -0,0 +1 @@ +Added periodical message to incite people to support their pod and Funkwhale (#839) diff --git a/changes/changelog.d/844.enhancement b/changes/changelog.d/844.enhancement new file mode 100644 index 0000000000000000000000000000000000000000..cf036b8736a0b54fadd1f607adec91c4d0b3d29d --- /dev/null +++ b/changes/changelog.d/844.enhancement @@ -0,0 +1 @@ +Added Czech translation (#844) diff --git a/changes/changelog.d/845.enhancement b/changes/changelog.d/845.enhancement new file mode 100644 index 0000000000000000000000000000000000000000..021e937feb46fac3c9f3079438c86059535f52fe --- /dev/null +++ b/changes/changelog.d/845.enhancement @@ -0,0 +1 @@ +Added Catalan translation files diff --git a/changes/changelog.d/846.bugfix b/changes/changelog.d/846.bugfix new file mode 100644 index 0000000000000000000000000000000000000000..a279c90e4cc80d299218069683f4c88698eff3e2 --- /dev/null +++ b/changes/changelog.d/846.bugfix @@ -0,0 +1 @@ +Added context strings to en_GB translations so that picking the language changes the interface as expected diff --git a/changes/changelog.d/852.feature b/changes/changelog.d/852.feature new file mode 100644 index 0000000000000000000000000000000000000000..3ce6f96bece559e194e20ee139f550e742c2c10d --- /dev/null +++ b/changes/changelog.d/852.feature @@ -0,0 +1 @@ +Users can now delete their account without admin intervention (#852) diff --git a/changes/changelog.d/853.feature b/changes/changelog.d/853.feature new file mode 100644 index 0000000000000000000000000000000000000000..60b8ec2bc2479685ef4f2513091e5a914c7eb2ee --- /dev/null +++ b/changes/changelog.d/853.feature @@ -0,0 +1 @@ +Allow-list to restrict federation to trusted domains (#853) diff --git a/changes/changelog.d/854.enhancement b/changes/changelog.d/854.enhancement new file mode 100644 index 0000000000000000000000000000000000000000..f5e7807169cc86f6458cd74eb466506c70890963 --- /dev/null +++ b/changes/changelog.d/854.enhancement @@ -0,0 +1 @@ +Hardcoded list of supported browsers to avoid unexpected regressions (#854) diff --git a/changes/changelog.d/862.enhancement b/changes/changelog.d/862.enhancement new file mode 100644 index 0000000000000000000000000000000000000000..1020083dbcc943b16a0c51806aeb20ec8d2e84f1 --- /dev/null +++ b/changes/changelog.d/862.enhancement @@ -0,0 +1 @@ +Replaced Daphne by Gunicorn/Uvicorn to improve stability, flexibility and performance (#862) diff --git a/changes/changelog.d/865.bugfix b/changes/changelog.d/865.bugfix new file mode 100644 index 0000000000000000000000000000000000000000..183530e0dcfa2bf26d844ac65a75f74bc25b3d4f --- /dev/null +++ b/changes/changelog.d/865.bugfix @@ -0,0 +1 @@ +Improved performance of /artists, /albums and /tracks API endpoints by a factor 2 (#865) diff --git a/changes/changelog.d/866.enhancement b/changes/changelog.d/866.enhancement new file mode 100644 index 0000000000000000000000000000000000000000..9ebbd52dddd69aab088759f27c8f6462a5bd3852 --- /dev/null +++ b/changes/changelog.d/866.enhancement @@ -0,0 +1 @@ +New keyboard shortcuts added for enhanced control over audio player (#866) \ No newline at end of file diff --git a/changes/changelog.d/872.feature b/changes/changelog.d/872.feature new file mode 100644 index 0000000000000000000000000000000000000000..083601ecfb05ad68debd48ba4ba6fe9d6dee8b7e --- /dev/null +++ b/changes/changelog.d/872.feature @@ -0,0 +1 @@ +Redesign of the landing and about pages (#872) diff --git a/changes/changelog.d/873.enhancement b/changes/changelog.d/873.enhancement new file mode 100644 index 0000000000000000000000000000000000000000..fd8e3c3a1004f8b9bd00f3b40b13f2c0bce2c2a8 --- /dev/null +++ b/changes/changelog.d/873.enhancement @@ -0,0 +1 @@ +Numbers on the stats page will now be formatted in a human readable way and will update with the locale (#873) diff --git a/changes/changelog.d/875.bugfix b/changes/changelog.d/875.bugfix new file mode 100644 index 0000000000000000000000000000000000000000..609d83f6c5d5a42660cb421bb76815334a6fb6c0 --- /dev/null +++ b/changes/changelog.d/875.bugfix @@ -0,0 +1 @@ +Fixed broken embedded player layout after dependency update (#875) diff --git a/changes/changelog.d/877.enhancement b/changes/changelog.d/877.enhancement new file mode 100644 index 0000000000000000000000000000000000000000..8f65920c88d5321705b41144dabc7ceb87df4258 --- /dev/null +++ b/changes/changelog.d/877.enhancement @@ -0,0 +1 @@ +Ensure API urls answer with and without a trailing slash (#877) diff --git a/changes/changelog.d/878.enhancement b/changes/changelog.d/878.enhancement new file mode 100644 index 0000000000000000000000000000000000000000..9cad7bd5db5a420fbb3cba13d1ec5c59c8b583d7 --- /dev/null +++ b/changes/changelog.d/878.enhancement @@ -0,0 +1 @@ +Added a info message on embed wizard when anonymous access to content is disabled (#878) diff --git a/changes/changelog.d/880.enhancement b/changes/changelog.d/880.enhancement new file mode 100644 index 0000000000000000000000000000000000000000..58d308afab5727d185f533fc65fffa8bfdf77d80 --- /dev/null +++ b/changes/changelog.d/880.enhancement @@ -0,0 +1 @@ +Hardened security thanks to CSP and additional HTTP headers (#880) diff --git a/changes/changelog.d/883.enhancement b/changes/changelog.d/883.enhancement new file mode 100644 index 0000000000000000000000000000000000000000..00284a309373d65d0ec57576e39bfaccd2e297f7 --- /dev/null +++ b/changes/changelog.d/883.enhancement @@ -0,0 +1 @@ +Prevent usage of too weak passwords (#883) diff --git a/changes/changelog.d/890.feature b/changes/changelog.d/890.feature new file mode 100644 index 0000000000000000000000000000000000000000..a72ae9363a385dd7debe3be9d035501390f03fb4 --- /dev/null +++ b/changes/changelog.d/890.feature @@ -0,0 +1 @@ +Content and account reports (#890) diff --git a/changes/changelog.d/892.add.placeholder.widget b/changes/changelog.d/892.add.placeholder.widget new file mode 100644 index 0000000000000000000000000000000000000000..31cf6e5b05e700dec29ca76718205ef3657cacf0 --- /dev/null +++ b/changes/changelog.d/892.add.placeholder.widget @@ -0,0 +1 @@ +Display placeholder on homepage when there are no playlists (#892) diff --git a/changes/changelog.d/893.bugfix b/changes/changelog.d/893.bugfix new file mode 100644 index 0000000000000000000000000000000000000000..f37ae2a9b541fc15e5f871c0bd117ab515db2178 --- /dev/null +++ b/changes/changelog.d/893.bugfix @@ -0,0 +1 @@ +Fixed empty contentType causing client crash in some Subsonic payloads (#893) diff --git a/changes/changelog.d/895.enhancement b/changes/changelog.d/895.enhancement new file mode 100644 index 0000000000000000000000000000000000000000..d79abc598d7fe7fa5f71bd1e01481cacda2b704c --- /dev/null +++ b/changes/changelog.d/895.enhancement @@ -0,0 +1 @@ +Artists with no albums will now show track count on artist card (#895) \ No newline at end of file diff --git a/changes/changelog.d/897.bugfix b/changes/changelog.d/897.bugfix new file mode 100644 index 0000000000000000000000000000000000000000..8101cda4cfab7e2b34fb139b98c13d668d903b8d --- /dev/null +++ b/changes/changelog.d/897.bugfix @@ -0,0 +1 @@ +Fix regression to quota bar color (#897) \ No newline at end of file diff --git a/changes/changelog.d/898.enhancement b/changes/changelog.d/898.enhancement new file mode 100644 index 0000000000000000000000000000000000000000..80476e4a3d20a520df534cfc6178799026c079e2 --- /dev/null +++ b/changes/changelog.d/898.enhancement @@ -0,0 +1 @@ +Pickup folder.png and folder.jpg files for cover art when importing from CLI (#898) diff --git a/changes/changelog.d/902.bugfix b/changes/changelog.d/902.bugfix new file mode 100644 index 0000000000000000000000000000000000000000..afe2ade816ef700e28f09b64bd3ffd7179a0532f --- /dev/null +++ b/changes/changelog.d/902.bugfix @@ -0,0 +1 @@ +Fixed search usability issue when browsing artists, albums, radios and playlists (#902) diff --git a/changes/changelog.d/903.enhancement b/changes/changelog.d/903.enhancement new file mode 100644 index 0000000000000000000000000000000000000000..de170b2720e5e00808c91cb3106d7a8f325a641a --- /dev/null +++ b/changes/changelog.d/903.enhancement @@ -0,0 +1 @@ +Added field to manage user upload quota in Django backend (#903) \ No newline at end of file diff --git a/changes/changelog.d/904.bugfix b/changes/changelog.d/904.bugfix new file mode 100644 index 0000000000000000000000000000000000000000..f4df441c7335cfdf9abd5d6023a7a31ed615ac80 --- /dev/null +++ b/changes/changelog.d/904.bugfix @@ -0,0 +1 @@ +Fixed a responsive display issues on 1024px wide screens (#904) diff --git a/changes/changelog.d/912.bugfix b/changes/changelog.d/912.bugfix new file mode 100644 index 0000000000000000000000000000000000000000..67e2d01ad8d01da33691a09d86a9337fe0788836 --- /dev/null +++ b/changes/changelog.d/912.bugfix @@ -0,0 +1 @@ +Fixed broken less listened radio (#912) diff --git a/changes/changelog.d/913.bugfix b/changes/changelog.d/913.bugfix new file mode 100644 index 0000000000000000000000000000000000000000..83b24b52b0a9230a8cbdca7e7a29ff91815cfa95 --- /dev/null +++ b/changes/changelog.d/913.bugfix @@ -0,0 +1 @@ +Fix missing license information on track details page (#913) \ No newline at end of file diff --git a/changes/changelog.d/924.bugfix b/changes/changelog.d/924.bugfix new file mode 100644 index 0000000000000000000000000000000000000000..c5986581a85b6edaa3298989f72323cef7657927 --- /dev/null +++ b/changes/changelog.d/924.bugfix @@ -0,0 +1 @@ +Fixed in-place imported files not playing under nginx when filename contains ? or % (#924) diff --git a/changes/changelog.d/932.bugfix b/changes/changelog.d/932.bugfix new file mode 100644 index 0000000000000000000000000000000000000000..76b7c40f4519603f56463df6abcaefb00ec6f4fd --- /dev/null +++ b/changes/changelog.d/932.bugfix @@ -0,0 +1 @@ +Updated docs to ensure streaming works when using Minio/S3 and DSub (#932) diff --git a/changes/changelog.d/fomentic.enhancement b/changes/changelog.d/fomentic.enhancement new file mode 100644 index 0000000000000000000000000000000000000000..0f6c4ad9556088a76350a7101191f028f4c1cb46 --- /dev/null +++ b/changes/changelog.d/fomentic.enhancement @@ -0,0 +1 @@ +Switched from Semantic-UI to Fomentic-UI diff --git a/changes/changelog.d/imports-small.bugfix b/changes/changelog.d/imports-small.bugfix new file mode 100644 index 0000000000000000000000000000000000000000..aed6bb902492edc51685346bc0c2dc62955e2ee7 --- /dev/null +++ b/changes/changelog.d/imports-small.bugfix @@ -0,0 +1 @@ +Fixed import crashing with empty cover file or too long values on some fields diff --git a/changes/changelog.d/jwt.enhancement b/changes/changelog.d/jwt.enhancement new file mode 100644 index 0000000000000000000000000000000000000000..0ce222251e8e0163c33ca7430a2508add9d3ffa3 --- /dev/null +++ b/changes/changelog.d/jwt.enhancement @@ -0,0 +1 @@ +Increase the security of JWT token generation by using DJANGO_SECRET_KEY as well as user-specific salt for the signature diff --git a/changes/changelog.d/locale.bugfix b/changes/changelog.d/locale.bugfix new file mode 100644 index 0000000000000000000000000000000000000000..5feeaa4c1aa0f6e12fecb8a2ed6df52795ce17f2 --- /dev/null +++ b/changes/changelog.d/locale.bugfix @@ -0,0 +1 @@ +Ensure selected locale is not reset to browser default when refreshing app diff --git a/changes/changelog.d/opus-cover.bugfix b/changes/changelog.d/opus-cover.bugfix new file mode 100644 index 0000000000000000000000000000000000000000..648e280935cb0e1d278693f69f95232fc476550f --- /dev/null +++ b/changes/changelog.d/opus-cover.bugfix @@ -0,0 +1 @@ +Fixed album art not being retrieved from Ogg/Opus files diff --git a/changes/changelog.d/playlist-embed.enhancement b/changes/changelog.d/playlist-embed.enhancement new file mode 100644 index 0000000000000000000000000000000000000000..06c747770809d4e24ed7320b4e4255f5cdd1de4a --- /dev/null +++ b/changes/changelog.d/playlist-embed.enhancement @@ -0,0 +1 @@ +Support embeds on public playlists diff --git a/changes/changelog.d/purgecss.enhancement b/changes/changelog.d/purgecss.enhancement new file mode 100644 index 0000000000000000000000000000000000000000..f1c43b8e4f8991f12a23cffeb10de9f67af4ac87 --- /dev/null +++ b/changes/changelog.d/purgecss.enhancement @@ -0,0 +1 @@ +Reduced CSS size by 30% using purgecss diff --git a/changes/changelog.d/refetch.enhancement b/changes/changelog.d/refetch.enhancement new file mode 100644 index 0000000000000000000000000000000000000000..f55facec8eb5938b42c628944c1c2de6b95cc6a6 --- /dev/null +++ b/changes/changelog.d/refetch.enhancement @@ -0,0 +1 @@ +Now refetch remote ActivityPub artists, albums and tracks to avoid local stale data diff --git a/changes/changelog.d/search-results.enhancement b/changes/changelog.d/search-results.enhancement new file mode 100644 index 0000000000000000000000000000000000000000..7effe4c893d78621a49a7f2ef1a73c44f9ec7e2e --- /dev/null +++ b/changes/changelog.d/search-results.enhancement @@ -0,0 +1 @@ +Improve display of search results by including artist and album data diff --git a/changes/changelog.d/ssl.bugfix b/changes/changelog.d/ssl.bugfix new file mode 100644 index 0000000000000000000000000000000000000000..ab5d5a7d32feabdcf3802d011431042cf958cb90 --- /dev/null +++ b/changes/changelog.d/ssl.bugfix @@ -0,0 +1 @@ +Fixed broken external HTTPS request under some scenarios, because of missing PyOpenSSL diff --git a/changes/notes.rst b/changes/notes.rst index 40f7e3c59dad0be11ab443d4b7b05349f83df0ea..8477649411d04244d3aba68ec9876a0bc699436d 100644 --- a/changes/notes.rst +++ b/changes/notes.rst @@ -6,106 +6,225 @@ Next release notes Those release notes refer to the current development branch and are reset after each release. -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 -admin access to Django's UI, which wasn't ideal to do this kind of changes). +Support for genres via tags +^^^^^^^^^^^^^^^^^^^^^^^^^^^ -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. +One of our most requested missing features is now available! -Approved edits are broadcasted via federation, to ensure other instances get the information -too. +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. -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. +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. -Admin UI for tracks, albums, artists, libraries and uploads -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Tags are used in various places to enhance user experience: -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: +- Tags are listed on tracks, albums and artist profiles +- Each tag has a dedicated page were you can browse corresponding content and quickly start a radio +- The custom radio builder now supports using tags +- Subsonic apps that support genres - such as DSub or Ultrasonic - should display this information as well -- tracks -- albums -- artists -- libraries -- uploads +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``. -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). +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. -Artist hiding in the interface -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +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. -It's now possible for users to hide artists they don't want to see. +Federation of the reports will be supported in a future release. -Content linked to hidden artists will not show up in the interface anymore. Especially: +For more information about this feature, please check out our documentation: -- Hidden artists tracks are removed from the current queue -- Starting a playlist will skip tracks from hidden artists -- Recently favorited, recently listened and recently added widgets on the homepage won't include content from hidden artists -- Radio suggestions will exclude tracks from hidden artists -- Hidden artists won't appear in Subsonic apps +- `User documentation <https://docs.funkwhale.audio/moderator/reports.html>`_ +- `Moderator documentation <https://docs.funkwhale.audio/users/reports.html>`_ -Results linked to hidden artists will continue to show up in search results and their profile page remains accessible. +Account deletion +^^^^^^^^^^^^^^^^ -OAuth2 authorization for better integration with third-party apps -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Users can now delete their account themselves, without involving an administrator. -Funkwhale now support the OAuth2 authorization and authentication protocol which will allow -third-party apps to interact with Funkwhale on behalf of users. +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. -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). +For more information about this feature, please check out our documentation: -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`_. +- `User documentation <https://docs.funkwhale.audio/users/account.html>`_ -Better error handling and display during import -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Landing and about page redesign [Manual action suggested] +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -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. +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: -This information is available in all pages that list uploads, when clicking on the button next to the upload status. +- your pod and an excerpt from your pod's description +- your pod banner image, if any +- your contact email, if any +- the login form +- the signup form (if registrations are open on your pod) +- some basic statistics about your pod +- a widget including recently uploaded albums, if anonymous access is enabled -Support for S3-compatible storages to store media files -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +The landing page will still include some information about Funkwhale, but in a less intrusive and proeminent way than before. -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. +Additionally, the about page now includes: -Check-out `https://docs.funkwhale.audio/admin/external-storages.html`_ if you want to use -this feature. +- your pod name, description, rules and terms +- your pod banner image, if any +- your contact email, if any +- comprehensive statistics about your pod +- some info about your pod configuration, such as registration and federation status or the default upload quota for new users -Prune library command -^^^^^^^^^^^^^^^^^^^^^ +With this redesign, we've added a handful of additional pod settings: -Users are often surprised by Funkwhale's tendency to keep track, album and artist -metadata even if no associated files exist. +- Pod banner image +- Contact email +- Rules +- Terms of service -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>`_. +We recommend taking a few moments to fill these accordingly to your needs, by visiting ``/manage/settings``. -Check in-place files command -^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Allow-list to restrict federation to trusted domains +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -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. +The Allow-Listing feature grants pod moderators +and administrators greater control over federation +by allowing you to create a pod-wide allow-list. -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>`_. +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. + +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 +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Users will now be reminded on a regular basis that they can help Funkwhale by donating or contributing. + +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. + +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] +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +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: + +- zero-downtime upgrades +- configurable number of web worker processes + +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 +(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 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] +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +To improve the security and reduce the attack surface in case of a successfull exploit, we suggest +you add the following Content-Security-Policy to your nginx configuration. + +..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 + + .. code-block:: + + add_header Content-Security-Policy "...img-src 'self' https://<your-s3-URL> data:;...media-src https://<your-s3-URL> 'self' data:"; + +**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"; + 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; + } + } + +Then reload nginx with ``systemctl reload nginx``. + +**On docker setups**, in ``/srv/funkwhalenginx/funkwhale.template``:: + + 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"; + 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 /frontent/embed.html; + } + } + +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. + +For anonymous requests, the limit is applied to the IP adress 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 +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] +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +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:: + + # Needed to ensure DSub auth isn't forwarded to S3/Minio, see #932 + proxy_set_header Authorization ""; + +And reload your nginx process. diff --git a/deploy/FreeBSD/funkwhale_server b/deploy/FreeBSD/funkwhale_server index 1d7f29ce55f0ab8b434816fe4e72f92a6b127380..4c7394ab05b0e9e1862b27a2e2a7e87d39eedb1b 100755 --- a/deploy/FreeBSD/funkwhale_server +++ b/deploy/FreeBSD/funkwhale_server @@ -25,8 +25,8 @@ funkwhale_server_user=funkwhale funkwhale_server_env=$(cat /usr/local/www/funkwhale/config/.env | grep -v ^# | xargs) command_interpreter="/usr/local/www/funkwhale/virtualenv/bin/python3" -command="/usr/local/www/funkwhale/virtualenv/bin/daphne" -command_args="-b 127.0.0.1 -p 5000 config.asgi:application --proxy-headers \ +command="/usr/local/www/funkwhale/virtualenv/bin/gunicorn" +command_args="config.asgi:application -w 4 -k uvicorn.workers.UvicornWorker -b 127.0.0.1:5000 \ >> /var/log/funkwhale/${name##funkwhale_}.log 2>&1 &" run_rc_command "$1" diff --git a/deploy/Gentoo/funkwhale_server b/deploy/Gentoo/funkwhale_server index 926bd01d16610d984c6132ea04c72adf1dbc6131..c6771f6d7feb3a4238f7f285c5e4acedcb5f0aab 100644 --- a/deploy/Gentoo/funkwhale_server +++ b/deploy/Gentoo/funkwhale_server @@ -3,9 +3,9 @@ NAME=funkwhaleserver PIDFILE=/var/run/$NAME.pid USER=funkwhale -DAEMON_ARGS="-b 127.0.0.1 -p 5000 config.asgi:application --proxy-headers " -Daphne=/srv/funkwhale/virtualenv/bin/daphne -WORKDIR=/srv/funkwhale/api +DAEMON_ARGS="config.asgi:application -w 4 -k uvicorn.workers.UvicornWorker -b 127.0.0.1:5000 " +Gunicorn=/srv/funkwhale/virtualenv/bin/gunicorn +WORKDIR=/srv/funkwhale/api depend() { need net redis postgresql nginx funkwhale_beat funkwhale_worker @@ -16,7 +16,7 @@ start() { cd /srv/funkwhale/api set -a && source /srv/funkwhale/config/.env && set +a echo 'Starting Funkwhale Server' - start-stop-daemon --start --user $USER --make-pidfile --pidfile $PIDFILE -d $WORKDIR --exec $Daphne -- $DAEMON_ARGS >> /var/log/funk/daphne.log 2>&1& + start-stop-daemon --start --user $USER --make-pidfile --pidfile $PIDFILE -d $WORKDIR --exec $Gunicorn -- $DAEMON_ARGS >> /var/log/funk/server.log 2>&1& echo 'Funkwhale Server started' echo eend $? diff --git a/deploy/apache.conf b/deploy/apache.conf index 3b34dcdbad435db90c6e3617bf3b2da3a00cd363..996e5488c35efe5770d5ba8022ea98a06f34282b 100644 --- a/deploy/apache.conf +++ b/deploy/apache.conf @@ -5,7 +5,9 @@ Define funkwhale-sn funkwhale.yourdomain.com # use different configuration than what is described in our installation guide. Define funkwhale-api http://localhost:5000 Define funkwhale-api-ws ws://localhost:5000 -Define MUSIC_DIRECTORY_PATH /srv/funkwhale/data/music +Define FUNKWHALE_ROOT_PATH /srv/funkwhale +Define MUSIC_DIRECTORY_PATH ${FUNKWHALE_ROOT_PATH}/data/music +Define MEDIA_DIRECTORY_PATH ${FUNKWHALE_ROOT_PATH}/data/media # HTTP requests redirected to HTTPS <VirtualHost *:80> @@ -90,17 +92,17 @@ Define MUSIC_DIRECTORY_PATH /srv/funkwhale/data/music <Location "/front"> ProxyPass "!" </Location> - Alias /front /srv/funkwhale/front/dist + Alias /front ${FUNKWHALE_ROOT_PATH}/front/dist <Location "/media"> ProxyPass "!" </Location> - Alias /media /srv/funkwhale/data/media + Alias /media ${MEDIA_DIRECTORY_PATH} <Location "/staticfiles"> ProxyPass "!" </Location> - Alias /staticfiles /srv/funkwhale/data/static + Alias /staticfiles ${FUNKWHALE_ROOT_PATH}/data/static # Activating WebSockets <Location "/api/v1/activity"> @@ -108,19 +110,19 @@ Define MUSIC_DIRECTORY_PATH /srv/funkwhale/data/music </Location> # Setting appropriate access levels to serve frontend - <Directory "/srv/funkwhale/data/static"> + <Directory "${FUNKWHALE_ROOT_PATH}/data/static"> Options FollowSymLinks AllowOverride None Require all granted </Directory> - <Directory /srv/funkwhale/front/dist> + <Directory "${FUNKWHALE_ROOT_PATH}/front/dist"> Options FollowSymLinks AllowOverride None Require all granted </Directory> - <Directory /srv/funkwhale/data/media> + <Directory "${MEDIA_DIRECTORY_PATH}"> Options FollowSymLinks AllowOverride None Require all granted @@ -133,7 +135,7 @@ Define MUSIC_DIRECTORY_PATH /srv/funkwhale/data/music #LoadModule xsendfile_module modules/mod_xsendfile.so <IfModule mod_xsendfile.c> XSendFile On - XSendFilePath /srv/funkwhale/data/media + XSendFilePath ${MEDIA_DIRECTORY_PATH} XSendFilePath ${MUSIC_DIRECTORY_PATH} SetEnv MOD_X_SENDFILE_ENABLED 1 </IfModule> diff --git a/deploy/docker.funkwhale_proxy.conf b/deploy/docker.funkwhale_proxy.conf index a1b0a31e5c0bd475e67730bb390ee9c20ae97bc1..dccc782f2924410ccda8be3981cb0a76ef9d5636 100644 --- a/deploy/docker.funkwhale_proxy.conf +++ b/deploy/docker.funkwhale_proxy.conf @@ -4,10 +4,9 @@ # at https://dev.funkwhale.audio/funkwhale/funkwhale/blob/develop/deploy/funkwhale_proxy.conf # your proxy will also need to support websockets -real_ip_header X-Forwarded-For; -set_real_ip_from 172.17.0.0/16; +proxy_set_header Host $host; +proxy_set_header X-Real-IP $remote_addr; -proxy_set_header Host $http_x_forwarded_host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto; proxy_set_header X-Forwarded-Host $http_x_forwarded_host; diff --git a/deploy/docker.nginx.template b/deploy/docker.nginx.template index 431975629741f4546e18f061987d6fc7ec31b699..ced42201a076645831a70d1037c23ba53a2c9641 100644 --- a/deploy/docker.nginx.template +++ b/deploy/docker.nginx.template @@ -23,6 +23,13 @@ server { root /frontend; + # 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://<your-S3-URL> 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:"; + add_header Referrer-Policy "strict-origin-when-cross-origin"; + + location / { include /etc/nginx/funkwhale_proxy.conf; # this is needed if you have file import via upload enabled @@ -31,12 +38,27 @@ server { } 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 "ALLOW"; alias /frontend/; expires 30d; add_header Pragma public; add_header Cache-Control "public, must-revalidate, proxy-revalidate"; } + location /front/embed.html { + 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 "ALLOW"; + alias /frontend/embed.html; + expires 30d; + add_header Pragma public; + add_header Cache-Control "public, must-revalidate, proxy-revalidate"; + } + location /federation/ { include /etc/nginx/funkwhale_proxy.conf; proxy_pass http://funkwhale-api/federation/; @@ -69,6 +91,8 @@ server { # media files in a S3 bucket # location ~ /_protected/media/(.+) { # internal; + # # Needed to ensure DSub auth isn't forwarded to S3/Minio, see #932 + # proxy_set_header Authorization ""; # proxy_pass $1; # } diff --git a/deploy/docker.proxy.template b/deploy/docker.proxy.template index 0fbed2f73d6015a817b878673cbdd15de0718154..ee7444724ca549cef945a83530b9cdd0ee45e704 100644 --- a/deploy/docker.proxy.template +++ b/deploy/docker.proxy.template @@ -14,8 +14,8 @@ server { location / { return 301 https://$host$request_uri; } } server { - listen 443 ssl; - listen [::]:443 ssl; + listen 443 ssl http2; + listen [::]:443 ssl http2; server_name ${FUNKWHALE_HOSTNAME}; # TLS @@ -29,6 +29,13 @@ 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://<your-S3-URL> 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:"; + # compression settings gzip on; gzip_comp_level 5; diff --git a/deploy/env.prod.sample b/deploy/env.prod.sample index b7b0301dadff33f34d288ac78a9684be73663998..672306a1ac9e975a49abb84331d98b9a1037a85b 100644 --- a/deploy/env.prod.sample +++ b/deploy/env.prod.sample @@ -34,7 +34,9 @@ FUNKWHALE_VERSION=latest # example: FUNKWHALE_API_PORT=5678 FUNKWHALE_API_IP=127.0.0.1 FUNKWHALE_API_PORT=5000 - +# The number of web workers to start in parallel. Higher means you can handle +# more concurrent requests, but also leads to higher CPU/Memory usage +FUNKWHALE_WEB_WORKERS=1 # Replace this by the definitive, public domain you will use for # your instance FUNKWHALE_HOSTNAME=yourdomain.funkwhale @@ -168,4 +170,9 @@ AWS_STORAGE_BUCKET_NAME= # If you are using Amazon S3 to serve media directly, you will need to specify your region # name in order to access files. Example: # AWS_S3_REGION_NAME=eu-west-2 -# AWS_S3_REGION_NAME= +# AWS_S3_REGION_NAME= + +# If you are using Amazon S3, use this setting to configure how long generated URLs should stay +# valid. The default value is 3600 (60 minutes). The maximum accepted value is 604800 (7 days) + +# AWS_QUERYSTRING_EXPIRE= \ No newline at end of file diff --git a/deploy/funkwhale-server.service b/deploy/funkwhale-server.service index 88d70d338e3f5b6d7b276eebbcc96155e6df3c74..b531e596e150568790e7ed1efd6fbb1cdcc87883 100644 --- a/deploy/funkwhale-server.service +++ b/deploy/funkwhale-server.service @@ -8,7 +8,6 @@ User=funkwhale # adapt this depending on the path of your funkwhale installation WorkingDirectory=/srv/funkwhale/api EnvironmentFile=/srv/funkwhale/config/.env -ExecStart=/srv/funkwhale/virtualenv/bin/daphne -b ${FUNKWHALE_API_IP} -p ${FUNKWHALE_API_PORT} config.asgi:application --proxy-headers - +ExecStart=/srv/funkwhale/virtualenv/bin/gunicorn config.asgi:application -w ${FUNKWHALE_WEB_WORKERS} -k uvicorn.workers.UvicornWorker -b ${FUNKWHALE_API_IP}:${FUNKWHALE_API_PORT} [Install] WantedBy=multi-user.target diff --git a/deploy/nginx.template b/deploy/nginx.template index 78b8ff3d6cf99e1b732e726ef448de9b65f9d517..3dc6ccf8aa49fdd123cf0df109f7fc833aa1b38c 100644 --- a/deploy/nginx.template +++ b/deploy/nginx.template @@ -22,8 +22,8 @@ map $http_upgrade $connection_upgrade { } server { - listen 443 ssl; - listen [::]:443 ssl; + listen 443 ssl http2; + listen [::]:443 ssl http2; server_name ${FUNKWHALE_HOSTNAME}; # TLS @@ -41,6 +41,12 @@ server { # HSTS add_header Strict-Transport-Security "max-age=31536000"; + # 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://<your-S3-URL> 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:"; + add_header Referrer-Policy "strict-origin-when-cross-origin"; + root ${FUNKWHALE_FRONTEND_PATH}; # compression settings @@ -78,11 +84,25 @@ server { } 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"; alias ${FUNKWHALE_FRONTEND_PATH}/; expires 30d; add_header Pragma public; add_header Cache-Control "public, must-revalidate, proxy-revalidate"; } + location /front/embed.html { + 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 "ALLOW"; + alias ${FUNKWHALE_FRONTEND_PATH}/embed.html; + expires 30d; + add_header Pragma public; + add_header Cache-Control "public, must-revalidate, proxy-revalidate"; + } location /federation/ { include /etc/nginx/funkwhale_proxy.conf; @@ -111,11 +131,13 @@ server { internal; alias ${MEDIA_ROOT}; } - + # Comment the previous location and uncomment this one if you're storing # media files in a S3 bucket # location ~ /_protected/media/(.+) { # internal; + # # Needed to ensure DSub auth isn't forwarded to S3/Minio, see #932 + # proxy_set_header Authorization ""; # proxy_pass $1; # } diff --git a/dev.yml b/dev.yml index 7c58b910590fc52a79c57402d814c3cd04db2cde..eaa7ca8d31239b89f0f023049016cc80e6ffab42 100644 --- a/dev.yml +++ b/dev.yml @@ -49,10 +49,15 @@ services: args: install_dev_deps: 1 entrypoint: compose/django/dev-entrypoint.sh - command: python /app/manage.py runserver 0.0.0.0:${FUNKWHALE_API_PORT-5000} + command: > + bash -c "python manage.py collectstatic --no-input + && uvicorn --reload config.asgi:application --host 0.0.0.0 --port 5000 --reload-dir config/ --reload-dir=funkwhale_api/" volumes: - ./api:/app - "${MUSIC_DIRECTORY_SERVE_PATH-./data/music}:/music:ro" + - "./data/plugins:/srv/funkwhale/plugins" + - "./data/staticfiles:/staticfiles" + - "./data/media:/data/media" environment: - "FUNKWHALE_HOSTNAME=${FUNKWHALE_HOSTNAME-localhost}" - "FUNKWHALE_HOSTNAME_SUFFIX=funkwhale.test" @@ -60,6 +65,8 @@ services: - "FUNKWHALE_PROTOCOL=${FUNKWHALE_PROTOCOL-http}" - "DATABASE_URL=postgresql://postgres@postgres/postgres" - "CACHE_URL=redis://redis:6379/0" + - "STATIC_ROOT=/staticfiles" + - "MEDIA_ROOT=/data/media" depends_on: - postgres @@ -87,9 +94,12 @@ 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" + - "./data/plugins:/srv/funkwhale/plugins" + - "./data/media:/data/media" networks: - internal nginx: @@ -116,7 +126,9 @@ services: - ./docker/nginx/entrypoint.sh:/entrypoint.sh:ro - "${MUSIC_DIRECTORY_SERVE_PATH-./data/music}:/music:ro" - ./deploy/funkwhale_proxy.conf:/etc/nginx/funkwhale_proxy.conf:ro - - "${MEDIA_ROOT-./api/funkwhale_api/media}:/protected/media:ro" + - "./front:/frontend:ro" + - "./data/staticfiles:/staticfiles:ro" + - "./data/media:/protected/media:ro" networks: - federation - internal diff --git a/docker/nginx/conf.dev b/docker/nginx/conf.dev index 419bb0dd8975b09df4545d9ec6be4d69c24a2c32..1807dc08827d043335bbe881c354cbeb655e4727 100644 --- a/docker/nginx/conf.dev +++ b/docker/nginx/conf.dev @@ -69,12 +69,30 @@ http { text/x-component text/x-cross-domain-policy; + 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"; + # uncomment the following line and comment the proxy-pass one + # to use the frontend build with "yarn build" + #alias /frontend/dist/; proxy_pass http://funkwhale-front/front/; } + location /front/embed.html { + 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 "ALLOW"; + proxy_pass http://funkwhale-front/front/embed.html; + } location /front-server/ { proxy_pass http://funkwhale-front/; } + location /sockjs-node/ { + proxy_pass http://funkwhale-front/sockjs-node/; + } location / { include /etc/nginx/funkwhale_proxy.conf; @@ -106,8 +124,10 @@ http { # location ~ /_protected/media/(.+) { # internal; # resolver 127.0.0.11; + # # Needed to ensure DSub auth isn't forwarded to S3/Minio, see #932 + # proxy_set_header Authorization ""; + # proxy_set_header X-Remote-URL "$1"; # proxy_pass $1; - # add_header X-Remote-URL "$1"; # } location /_protected/music { @@ -118,5 +138,8 @@ http { internal; alias /music; } + location /staticfiles/ { + alias /staticfiles/; + } } } diff --git a/docs/Dockerfile b/docs/Dockerfile index 76147bb6d0f75d08ed9d26106425ab0175187c76..1de9a3ede37b494c63d634db1dbf2e39000b1a15 100644 --- a/docs/Dockerfile +++ b/docs/Dockerfile @@ -1,5 +1,5 @@ FROM python:3.6 RUN apt-get update && apt-get install -y graphviz -RUN pip install sphinx livereload +RUN pip install sphinx livereload sphinx_rtd_theme WORKDIR /app/docs diff --git a/docs/admin/external-storages.rst b/docs/admin/external-storages.rst index bd136df621a0d2b24aa33e08e5a868374d91a727..68e002a8f924478960c7f706e1087dda114813dd 100644 --- a/docs/admin/external-storages.rst +++ b/docs/admin/external-storages.rst @@ -42,9 +42,17 @@ Replace the ``location /_protected/media`` block with the following:: location ~ /_protected/media/(.+) { internal; + # Needed to ensure DSub auth isn't forwarded to S3/Minio, see #932 + proxy_set_header Authorization ""; proxy_pass $1; } +Add your S3 store URL to the ``img-src`` and ``media-src`` headers + +.. code-block:: shell + + add_header Content-Security-Policy "...img-src 'self' https://<your-s3-URL> data:;...media-src https://<your-s3-URL> 'self' data:"; + Then restart Funkwhale and nginx. From now on, media files will be stored on the S3 bucket you configured. If you already @@ -71,9 +79,9 @@ This URL is actually be visible by the client, but contains a signature valid on no one can reuse this URL or share it publicly to distribute unauthorized content. .. note:: - + If you are using Amazon S3, you will need to set your ``AWS_S3_REGION_NAME`` in the ``.env`` file to - use this feature. + use this feature. .. note:: @@ -136,8 +144,41 @@ in your ``funkwhale.template`` under the ``location ~/_protected/media/(.+)`` se .. code-block:: shell location ~ /_protected/media/(.+) { - resolver 1.1.1.1; - internal; - proxy_pass $1; + resolver 1.1.1.1; + internal; + proxy_set_header Authorization ""; + proxy_pass $1; } +No Images or Media Loading +^^^^^^^^^^^^^^^^^^^^^^^^^^ + +If you are serving media from an S3-compatible store, you may experience an issue where +nothing loads in the front end. The error logs in your browser may show something like +the following: + +.. code-block:: text + + Content Security Policy: The page's settings blocked the loading of a resource at https://<your-s3-url> ("img-src") + Content Security Policy: The page's settings blocked the loading of a resource at https://<your-s3-url> ("media-src") + +This happens when your S3 store isn't defined in the ``Content-Security-Policy`` headers +in your Nginx files. To resolve the issue, add the base URL of your S3 store to the ``img-src`` +and ``media-src`` headers and reload nginx. + +.. code-block:: shell + + add_header Content-Security-Policy "...img-src 'self' https://<your-s3-URL> data:;...media-src https://<your-s3-URL> 'self' data:"; + +Broken Images in Audio Player On Page Reload +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +If you are serving media directly from an S3-compatible store, you may find that images +in the queue and the player won't load after the page is refreshed. This happens if the +generated URL has expired and the authorization is no longer valid. You can extend the expiry time +using the following setting in your ``.env`` file: + +.. code-block:: shell + + # The default value is 3600 (60 mins). The maximum is 604800 (7 days) + AWS_QUERYSTRING_EXPIRE=604800 diff --git a/docs/admin/importing-music.rst b/docs/admin/importing-music.rst index 7c04544e9d5b3b7f0e3f37dfef289b6335b5da6f..aea601681ab66031e6c0bddce6fc123ba6a96a1a 100644 --- a/docs/admin/importing-music.rst +++ b/docs/admin/importing-music.rst @@ -25,6 +25,13 @@ to the ``/music`` directory on the container: export LIBRARY_ID="<your_libary_id>" docker-compose run --rm api python manage.py import_files $LIBRARY_ID "/music/**/*.ogg" --recursive --noinput +When you installed Funkwhale via ansible, you need to call a script instead of Python, and the folder path must be adapted accordingly: + +.. code-block:: bash + + export LIBRARY_ID="<your_libary_id>" + /srv/funkwhale/manage import_files $LIBRARY_ID "/srv/funkwhale/data/music/**/**/*.ogg" --recursive --noinput + .. note:: You'll have to create a library in the Web UI before to get your library ID. Simply visit https://yourdomain/content/libraries/ to create one. diff --git a/docs/admin/index.rst b/docs/admin/index.rst index 8d80e3e0ad47487fd5091f7cc71e2068d0f445fe..fa66eeca628b824714f84da061152458be8fcc84 100644 --- a/docs/admin/index.rst +++ b/docs/admin/index.rst @@ -26,6 +26,7 @@ Administration commands url upgrading + mrf Troubleshooting Issues ---------------------- diff --git a/docs/admin/mrf.rst b/docs/admin/mrf.rst new file mode 100644 index 0000000000000000000000000000000000000000..1d905e72b10f03f925c72dbb38b62fd790134412 --- /dev/null +++ b/docs/admin/mrf.rst @@ -0,0 +1,117 @@ +Message Rewrite Facility (MRF) +============================== + +Funkwhale includes a feature that mimics `Pleroma's Message Rewrite Facility <https://docs-develop.pleroma.social/mrf.html>`_. +Using the MRF, instance admins can write and configure custom and automated moderation rules +that couldn't be implemented otherwise using :doc:`our other built-in moderation tools <../moderator/index>`. + +Architecture +------------ + +The MRF is a pluggable system that will process messages and forward those to the list +of registered policies, in turn. Each policy can mutate the message, leave it as is, or discard it entirely. + +Some of our built-in moderation tools are actually implemented as a MRF policy, e.g: + +- Allow-list, when checking incoming messages (`code <https://dev.funkwhale.audio/funkwhale/funkwhale/blob/develop/api/funkwhale_api/moderation/mrf_policies.py>`_) +- Domain and user blocking, when checking incoming messages (`code <https://dev.funkwhale.audio/funkwhale/funkwhale/blob/develop/api/funkwhale_api/federation/mrf_policies.py>`_) + +.. note:: + + While Pleroma MRF policies can also affect outgoing messages, this is not supported yet in Funkwhale. + + +Disclaimer +---------- + +Writing custom MRF can impact negatively the performance and stability of your pod, as well as message +delivery. Your policy will be called everytime a message is delivered, so ensure you don't execute +any slow operation here. + +Please note that the Funkwhale developers consider custom MRF policy modules to fall under the purview of the AGPL. As such, you are obligated to release the sources to your custom MRF policy modules upon request. + +Writing your first MRF policy +----------------------------- + +MRF Policies are written as Python 3 functions that take at least one ``payload`` parameter. +This payload is the raw ActivityPub message, received via HTTP, after the HTTP signature check. + +In the example below we write a policy that discards all Follow requests from listed domains: + +.. code-block:: python + + import urllib.parse + from funkwhale_api.moderation import mrf + + BLOCKED_FOLLOW_DOMAINS = ['domain1.com', 'botdomain.org'] + + # registering the policy is required to have it applied + # the name can be anything you want, it will appear in the mrf logs + @mrf.inbox.register(name='blocked_follow_domains') + def blocked_follow_domains_policy(payload, **kwargs): + actor_id = payload.get('actor') + domain = urllib.parse.urlparse(actor_id).hostname + if domain not in BLOCKED_FOLLOW_DOMAINS: + # raising mrf.Skip isn't strictly necessary but it provides + # for info in the debug logs. Otherwise, you can simply return + raise mrf.Skip("This domain isn't blocked") + + activity_type = payload.get('type') + object_type = payload.get('object', {}).get('type') + + if object_type == 'Follow' and activity_type == 'Create': + raise mrf.Discard('Follow from blocked domain') + + +This code must be stored in a Funkwhale plugin. To create one, just execute the following: + +.. code-block:: shell + + # plugin name must contain only ASCII letters, numbers and undercores + export PLUGIN_NAME="myplugin" + # this is the default path where Funkwhale will look for plugins + # if you want to use another path, update this path and ensure + # your PLUGINS_PATH is also included in your .env + export PLUGINS_PATH="/srv/funkwhale/plugins/" + mkdir -p $PLUGINS_PATH/$PLUGIN_NAME + cd $PLUGINS_PATH/$PLUGIN_NAME + + touch __init__.py # required to make the plugin a valid Python package + # create the required apps.py file to register our plugin in Funkwhale + cat > apps.py <<EOF + from django.apps import AppConfig + + class Plugin(AppConfig): + name = "$PLUGIN_NAME" + + EOF + +Once you have a Funkwhale plugin, simply put your MRF policy code inside a ``mrf_policies.py`` +file whithin the plugin directory. Then enable the plugin in your ``.env`` by +adding its name to the coma-separated list of ``FUNKWHALE_PLUGINS`` (add the variable if it's not there). + + +Testing a MRF policy +-------------------- + +To make the job of writing and debugging MRF policies easier, we provide a management +command: + +.. code-block:: shell + + python manage.py mrf_check --help + # list registered MRF policies + python manage.py mrf_check --list + + # check how our MRF would handle a legit follow + export MRF_MESSAGE='{"actor": "https://normal.domain/@alice", "type": "Create", "object": {"type": "Follow"}}' + echo $MRF_MESSAGE | python manage.py mrf_check inbox - -p blocked_follow_domains + + # check how our MRF would handle a problematic follow + export MRF_MESSAGE='{"actor": "https://botdomain.org/@bob", "type": "Create", "object": {"type": "Follow"}}' + echo $MRF_MESSAGE | python manage.py mrf_check inbox - -p blocked_follow_domains + + # check against an activity already present in the database + # you can get the UUID of activities by visiting /api/admin/federation/activity + export ACTIVITY_UUID="06208aea-c687-4e8b-aefd-22f1c3f76039" + echo $MRF_MESSAGE | python manage.py mrf_check inbox $ACTIVITY_UUID -p blocked_follow_domains diff --git a/docs/admin/upgrading.rst b/docs/admin/upgrading.rst index 4c0cf77314974c06d2e4e86f597e2821faeeb6ec..d18dd74475300a66201050c8f9afd59d17147c04 100644 --- a/docs/admin/upgrading.rst +++ b/docs/admin/upgrading.rst @@ -136,6 +136,10 @@ keeping a backup of the old version in ``./postgres-old``: Non-docker setup ---------------- +If you installed Funkwhale using the install script, upgrading is done using ``sh -c "$(curl -sSL https://get.funkwhale.audio/upgrade.sh)"``. Make sure to run this command with root permissions. + +If you manually installed Funkwhale, please use the following instructions. + Upgrade the static files ^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/docs/conf.py b/docs/conf.py index bf1afa0a604b6c922d344f3e2bb9823c13975d7e..6b7466d647f52b8fad93d5f1f551f993f580081c 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -89,13 +89,24 @@ todo_include_todos = False # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. # -html_theme = "alabaster" +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_theme_options = { + 'gitlab_url': 'https://dev.funkwhale.audio/funkwhale/funkwhale' +} +html_context = { + 'display_gitlab': True, + 'gitlab_host': 'dev.funkwhale.audio', + 'gitlab_repo': 'funkwhale', + 'gitlab_user': 'funkwhale', + 'gitlab_version': 'master', + 'conf_py_path': '/docs/', +} +html_logo = 'logo.svg' # 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, @@ -166,7 +177,7 @@ redirect_files = [ ('importing-music.html', 'admin/importing-music.html'), ('architecture.html', 'developers/architecture.html'), ('troubleshooting.html', 'admin/troubleshooting.html'), - ('configuration.html', 'admin/configuration.html'), + ('configuration.html', 'admin/configuration.html'), ('upgrading/index.html', '../admin/upgrading.html'), ('upgrading/0.17.html', '../admin/0.17.html'), ('users/django.html', '../admin/django.html'), diff --git a/docs/get-releases-json.py b/docs/get-releases-json.py old mode 100644 new mode 100755 index a7afaed800da81ad8a2192b2a21f48303086b765..4fbfb1de81733d58d9393386f957b02d9b9786cf --- a/docs/get-releases-json.py +++ b/docs/get-releases-json.py @@ -1,3 +1,5 @@ +#!/usr/bin/env python3 + import argparse import json import subprocess diff --git a/docs/installation/debian.rst b/docs/installation/debian.rst index 40597cbe3fa1c7d19aa581d6c3a30df7f86a4ad3..e8ab0175f2e18d570c3873db219b70f2a6b8e1cb 100644 --- a/docs/installation/debian.rst +++ b/docs/installation/debian.rst @@ -24,7 +24,7 @@ On Debian-like systems, you can install them using: # Install dependencies sudo apt-get install curl python3-pip python3-venv git unzip libldap2-dev libsasl2-dev # Funkwhale dependencies - sudo apt install build-essential ffmpeg libjpeg-dev libmagic-dev libpq-dev postgresql-client python3-dev + sudo apt install build-essential ffmpeg libjpeg-dev libmagic-dev libpq-dev postgresql-client python3-dev make On Arch Linux and its derivatives: diff --git a/docs/installation/docker.rst b/docs/installation/docker.rst index f227ace61d17fc7d177dbc2e61f2972d7582252e..7bb912b818c6842e4882c7a46d9ddab309cabbf2 100644 --- a/docs/installation/docker.rst +++ b/docs/installation/docker.rst @@ -29,8 +29,7 @@ Create the user and the directory: .. code-block:: shell - sudo useradd -r -s /usr/bin/nologin -d /srv/funkwhale -m funkwhale - sudo adduser funkwhale docker + sudo useradd -r -s /usr/bin/nologin -m -d /srv/funkwhale -U -G docker funkwhale cd /srv/funkwhale Log in as the newly created user from now on: @@ -39,7 +38,7 @@ Log in as the newly created user from now on: sudo -u funkwhale -H bash -Export the version you want to deploy: +Export the `version you want <https://hub.docker.com/r/funkwhale/all-in-one/tags>`_ to deploy (e.g., ``0.19.1``): .. parsed-literal:: @@ -50,16 +49,24 @@ Create an env file to store a few important configuration options: .. code-block:: shell touch .env - echo "FUNKWHALE_HOSTNAME=yourdomain.funkwhale" >> .env - echo "FUNKWHALE_PROTOCOL=https" >> .env # or http - echo "NGINX_MAX_BODY_SIZE=100M" >> .env - echo "FUNKWHALE_API_IP=127.0.0.1" >> .env - echo "FUNKWHALE_API_PORT=5000" >> .env # or the container port you want to expose on the host - echo "DJANGO_SECRET_KEY=$(openssl rand -hex 45)" >> .env # generate and store a secure secret key for your instance + chmod 600 .env # reduce permissions on the .env file since it contains sensitive data + cat > .env <<EOD + # Replace 'your.funkwhale.example' with your actual domain + FUNKWHALE_HOSTNAME=your.funkwhale.example + # Protocol may also be: http + FUNKWHALE_PROTOCOL=https + # This limits the upload size + NGINX_MAX_BODY_SIZE=100M + # Bind to localhost + FUNKWHALE_API_IP=127.0.0.1 + # Container port you want to expose on the host + FUNKWHALE_API_PORT=5000 + # Generate and store a secure secret key for your instance + DJANGO_SECRET_KEY=$(openssl rand -hex 45) # Remove this if you expose the container directly on ports 80/443 - echo "NESTED_PROXY=1" >> .env + NESTED_PROXY=1 + EOD - chmod 600 .env # reduce permissions on the .env file since it contains sensitive data Then start the container: @@ -143,6 +150,11 @@ Useful commands: ports: - "5000:80" + Then start the container: + + .. code-block:: shell + + docker-compose up -d .. _docker-multi-container: @@ -151,7 +163,7 @@ Multi-container installation First, ensure you have `Docker <https://docs.docker.com/engine/installation/>`_ and `docker-compose <https://docs.docker.com/compose/install/>`_ installed. -Export the version you want to deploy: +Export the `version you want <https://hub.docker.com/r/funkwhale/all-in-one/tags>`_ to deploy (e.g., ``0.19.1``): .. parsed-literal:: @@ -164,9 +176,9 @@ Download the sample docker-compose file: mkdir /srv/funkwhale 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/docker.funkwhale_proxy.conf" - curl -L -o docker-compose.yml "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/|version|/deploy/docker-compose.yml" + curl -L -o nginx/funkwhale.template "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/${FUNKWHALE_VERSION}/deploy/docker.nginx.template" + curl -L -o nginx/funkwhale_proxy.conf "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/${FUNKWHALE_VERSION}/deploy/docker.funkwhale_proxy.conf" + curl -L -o docker-compose.yml "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/${FUNKWHALE_VERSION}/deploy/docker-compose.yml" At this point, the architecture of ``/srv/funkwhale`` should look like that: @@ -182,7 +194,7 @@ Create your env file: .. parsed-literal:: - curl -L -o .env "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/|version|/deploy/env.prod.sample" + curl -L -o .env "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/${FUNKWHALE_VERSION}/deploy/env.prod.sample" sed -i "s/FUNKWHALE_VERSION=latest/FUNKWHALE_VERSION=$FUNKWHALE_VERSION/" .env chmod 600 .env # reduce permissions on the .env file since it contains sensitive data sudo nano .env diff --git a/docs/installation/index.rst b/docs/installation/index.rst index a180b59a55845780dc697fe7b5be9e25ea037b3c..1b097cd485b95807fd87e3261eac0aa21302e59e 100644 --- a/docs/installation/index.rst +++ b/docs/installation/index.rst @@ -305,6 +305,22 @@ installation guide. Check the configuration is valid with ``apache2ctl configtest``, and once you're done, load the new configuration with ``service apache2 restart``. +Caddy +^^^^^ + +If you're using Caddy as a reverse proxy in front of your docker containers (either mono or multi-container setup), +you can use the following configuration:: + + yourdomain.funkwhale { + proxy / 127.0.0.1:5000 { + transparent + websocket + header_upstream X-Forwarded-Host {host}:{server_port} + } + } + + + About internal locations ^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/docs/logo.svg b/docs/logo.svg new file mode 100644 index 0000000000000000000000000000000000000000..1487fcf74a5121d147bb212f8eed434a4d236343 --- /dev/null +++ b/docs/logo.svg @@ -0,0 +1,30 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 22.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 256 256" style="enable-background:new 0 0 256 256;" xml:space="preserve"> +<style type="text/css"> + .st0{fill:#FFFFFF;} + .st1{fill:#009FE3;} + .st2{fill:#3C3C3B;} +</style> +<circle class="st0" cx="128" cy="128" r="128"/> +<g> + <g> + <g> + <path class="st1" d="M128,157.1c17.7,0,32.1-14.4,32.1-32.1c0-0.9-0.8-1.7-1.7-1.7h-12.1c-0.9,0-1.7,0.8-1.7,1.7 + c0,9.1-7.4,16.6-16.6,16.6c-9.1,0-16.6-7.4-16.6-16.6c0-0.9-0.8-1.7-1.7-1.7H97.6c-0.9,0-1.7,0.8-1.7,1.7 + C95.9,142.8,110.3,157.1,128,157.1z"/> + <path class="st1" d="M128,187.4c34.3,0,62.3-28,62.3-62.3c0-0.9-0.8-1.7-1.7-1.7h-12.1c-0.9,0-1.7,0.8-1.7,1.7 + c0,25.9-21,46.9-46.9,46.9s-46.9-21-46.9-46.9c0-0.9-0.8-1.7-1.7-1.7H67.4c-0.9,0-1.7,0.8-1.7,1.7 + C65.5,159.4,93.5,187.4,128,187.4z"/> + <path class="st1" d="M219,123.4h-12.1c-0.9,0-1.7,0.8-1.7,1.7c0,42.6-34.8,77.3-77.3,77.3c-42.6,0-77.3-34.6-77.3-77.3 + c0-0.9-0.8-1.7-1.7-1.7H37c-0.9,0-1.7,0.8-1.7,1.7c0,51.1,41.6,92.7,92.7,92.7s92.7-41.6,92.7-92.7 + C220.7,124.2,219.9,123.4,219,123.4z"/> + </g> + <path class="st2" d="M86.3,83.3c6.2,3.2,12.9,3.8,18.9,7.3c3.9,2.3,6.4,4.8,8.8,8.6c3.8,5.7,3.6,12.9,3.6,12.9l0.5,7.9 + c0,0,3,7.9,9.7,7.9c7.1,0,9.7-7.9,9.7-7.9l0.5-7.9c0,0-0.2-7.1,3.6-12.9c2.4-3.8,4.8-6.5,8.8-8.6c6-3.5,12.7-4.1,18.9-7.3 + c6.2-3.2,12.2-7.3,16.3-13s6-13.3,3.8-20c-11.8-0.6-25.4,0.8-35.8,6.4c-14.5,7.7-23.3,5-25.9,16.5h-0.2 + c-2.6-11.6-11.3-8.8-25.9-16.5c-10.4-5.6-24-7-35.8-6.4c-2.3,6.7-0.3,14.2,3.8,20C74,76.1,80.1,80.2,86.3,83.3z"/> + </g> +</g> +</svg> diff --git a/docs/moderator/index.rst b/docs/moderator/index.rst index e63dde4a9b5df4dbf931eecf6708378a6bb1b820..38ed690f861998b3951365d9e0c812a348bb1417 100644 --- a/docs/moderator/index.rst +++ b/docs/moderator/index.rst @@ -2,7 +2,7 @@ Moderator Documentation ========================= This documentation is targeted at instance moderators. Moderators have enhanced permissions -which allow them to moderate federated accounts and domains. +which allow them to handle reports and moderate federated accounts and domains. Moderation Guides ----------------- @@ -10,5 +10,7 @@ Moderation Guides .. toctree:: :maxdepth: 2 + reports domains - users \ No newline at end of file + users + listing diff --git a/docs/moderator/listing.rst b/docs/moderator/listing.rst new file mode 100644 index 0000000000000000000000000000000000000000..727bddf5097cf4dbf89e511e89b3a1849bff7983 --- /dev/null +++ b/docs/moderator/listing.rst @@ -0,0 +1,94 @@ +Allow-Listing +============= + +The Allow-Listing feature grants pod moderators +and administrators greater control over federation +by allowing you to create a pod-wide allow-list. + +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. + +Enabling Allow-Listing +---------------------- + +.. warning:: + + If your pod is already federating proceed with caution. + Enabling the Allow-Listing feature will initially block + all activity from external domains as the list will be + empty + +To enable allow-listing: + +- Navigate to the "Settings" menu +- Go to the "Moderation" section +- Toggle the "Enable allow-listing" radio button +- Click "Save" to commit the change + +Once enabled, you can start adding domains to your +allow-list. + +Adding/Removing Domains +----------------------- + +Add a New Domain +^^^^^^^^^^^^^^^^ + +- Navigate to the "Moderation" menu. Any domains currently + in the allow-list will be visible here with a green check + mark next to their name. Other pods with which you have previously + interacted will also be visible here +- Type the domain name of the pod you wish to allow into + the "Add a Domain" input box in the top-right of the screen +- Tick the "Add to allow-list" tickbox +- Click "Add" to add the domain + +Add a Known Domain +^^^^^^^^^^^^^^^^^^ + +- Navigate to the "Moderation" menu. Any domains currently + in the allow-list will be visible here with a green check + mark next to their name. Other pods with which you have previously + interacted will also be visible here +- Click on the tickbox next to the domain(s) you wish to add to + the allow-list +- Select "Add to allow-list" from the drop-down menu titled "Actions" + and click "Go" to add the domain(s) + +Remove a Domain +^^^^^^^^^^^^^^^ + +To remove a domain from the allow-list: + +- Navigate to the "Moderation" menu. Any domains currently + in the allow-list will be visible here with a green check + mark next to their name. Other pods with which you have previously + interacted will also be visible here +- Click on the tickbox next to the domain(s) you wish to remove + from the allow-list +- Select "Remove from allow-list" from the drop-down menu titled + "Actions" and click "Go" to remove the domain(s) + +Purging Existing Content +------------------------ + +Moderators can add and remove domains at any time, and removing +a domain from the allow-list will effectively block all future +content from being received on your pod. Previously received +messages and content from pods not on the allow-list will remain +until you purge it from your pod. To do this: + +- Navigate to the "Moderation" menu. Any domains currently + in the allow-list will be visible here with a green check + mark next to their name. Other pods with which you have + previously interacted will also be visible here +- Click on the tickbox next to the domain(s) you wish to purge + received messages from +- Select "Purge" from the drop-down menu titled "Actions" + and click "Go" to purge the messages diff --git a/docs/moderator/reports.rst b/docs/moderator/reports.rst new file mode 100644 index 0000000000000000000000000000000000000000..746f42c1611be8eb561d8ebd42a1e063bb9ae3b0 --- /dev/null +++ b/docs/moderator/reports.rst @@ -0,0 +1,44 @@ +Handling user reports +===================== + +:doc:`Users can submit reports </users/reports>` in various places. When they do so, +their report ends up in a moderation queue until it is reviewed and resolved by a moderator. + +View unresolved reports +----------------------- + +Assuming you have the moderation permission, you'll find a "Moderation" link in the sidebar. + +Clicking on this link will bring you to the list of unresolved reports. For convenience, +the number of unresolved reports (if any) is also displayed directly next to this link, and updated in real time +when new reports are submitted. + +Email notifications +------------------- + +In addition to the web UI, all moderators will receive a notification email whenever a report is +submitted or resolved providing your pod has a valid email sending configuration. +This notification will include a link to review and handle the report, as well as additional +information about the report itself. + +Handling reports +---------------- + +When viewing the moderation queue, you will be presented with the list of unresolved reports. + +Each report in the queue should include all the information you need to handle it, in particular: + +- Who submitted the report (or the email adress of the submitter if it's an accountless report) +- The report content +- A link to the reported object, and a copy of this object data at the time the report was submitted + +When you mark a report as resolved, the report will simply be removed from the queue, and you can proceed to the next one. + +Doing so will also assign the report to you, so other moderators can see who handled a given report. + +Internal Notes +-------------- + +Whenever you need to perform an action because of a report, you can use the included form to leave a note to other moderators, or even yourself, for reference. + +These notes are viewable by instance admins and moderators only. diff --git a/docs/swagger.yml b/docs/swagger.yml index 2e3bf9245fc02f88280498179c23e2ad766b25e4..a6952098b1243f8b2dc76e5db7285331c4712803 100644 --- a/docs/swagger.yml +++ b/docs/swagger.yml @@ -33,6 +33,79 @@ info: If you keep the default server (https://demo.funkwhale.audio), the default username and password couple is "demo" and "demo". + Rate limiting + ------------- + + Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming + requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting + receive a 429 HTTP response. + + The limits themselves vary depending on: + + - The client: anonymous requests are subject to lower limits than authenticated requests + - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits + + Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. + For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of + 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day. + + A full list of scopes with their corresponding description, and the current usage data for the client performing the request + is available via the `/api/v1/rate-limit` endpoint. + + Additionally, we include HTTP headers on all API response to ensure API clients can understand: + + - what scope was bound to a given request + - what is the corresponding limit + - how much similar requests can be sent before being limited + - and how much time they should wait if they have been limited + + <table> + <caption>Rate limiting headers</caption> + <thead> + <th>Header</th> + <th>Example value</th> + <th>Description value</th> + </thead> + <tbody> + <tr> + <td><code>X-RateLimit-Limit</code></td> + <td>50</td> + <td>The number of allowed requests whithin a given period</td> + </tr> + <tr> + <td><code>X-RateLimit-Duration</code></td> + <td>3600</td> + <td>The time window, in seconds, during which those requests are accounted for.</td> + </tr> + <tr> + <td><code>X-RateLimit-Scope</code></td> + <td>login</td> + <td>The name of the scope as computed for the request</td> + </tr> + <tr> + <td><code>X-RateLimit-Remaining</code></td> + <td>42</td> + <td>How many requests can be sent with the same scope before the limit applies</td> + </tr> + <tr> + <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> + <td>3543</td> + <td>How many seconds to wait before a retry</td> + </tr> + <tr> + <td><code>X-RateLimit-Reset</code></td> + <td>1568126089</td> + <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> + </tr> + <tr> + <td><code>X-RateLimit-ResetSeconds</code></td> + <td>3599</td> + <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> + </tr> + </tbody> + </table> + + Resources --------- @@ -103,7 +176,7 @@ security: tags: - name: Auth and security - description: Login, logout and authorization endpoints + description: Login, logout, rate-limit and authorization endpoints - name: Library and metadata description: Information and metadata about musical and audio entities (albums, tracks, artists, etc.) - name: Uploads and audio content @@ -117,7 +190,7 @@ paths: /api/v1/oauth/apps/: post: tags: - - "auth" + - "Auth and security" description: Register an OAuth application security: [] @@ -247,6 +320,19 @@ paths: schema: $ref: "#/definitions/Me" + /api/v1/rate-limit/: + get: + summary: Retrive rate-limit information and current usage status + tags: + - "Auth and security" + + responses: + 200: + content: + application/json: + schema: + $ref: "#/definitions/RateLimitStatus" + /api/v1/artists/: get: summary: List artists @@ -296,6 +382,7 @@ paths: summary: Retrieve a single artist parameters: - $ref: "#/parameters/ObjectId" + - $ref: "#/parameters/Refresh" security: - oauth2: - "read:libraries" @@ -395,6 +482,7 @@ paths: summary: Retrieve a single album parameters: - $ref: "#/parameters/ObjectId" + - $ref: "#/parameters/Refresh" security: - oauth2: @@ -518,6 +606,7 @@ paths: get: parameters: - $ref: "#/parameters/ObjectId" + - $ref: "#/parameters/Refresh" summary: Retrieve a single track security: @@ -974,6 +1063,14 @@ parameters: schema: required: false type: "boolean" + Refresh: + name: "refresh" + in: "query" + default: false + description: "Trigger an ActivityPub fetch to refresh local data" + schema: + required: false + type: "boolean" responses: 200: @@ -1179,6 +1276,10 @@ definitions: - $ref: "#/definitions/BaseArtist" - type: "object" properties: + tracks_count: + type: "integer" + format: "int64" + example: 42 albums: type: "array" items: @@ -1631,6 +1732,75 @@ definitions: type: "boolean" example: false description: A boolean indicating if the user can manage instance settings and users + RateLimitStatus: + type: "object" + properties: + enabled: + type: "boolean" + example: true + description: A boolean indicating if rate-limiting is enabled on the server + ident: + type: "object" + description: Client-related data + properties: + type: + type: string + example: "anonymous" + enum: + - "authenticated" + - "anonymous" + id: + type: string + example: "92.143.42" + description: An address IP or user ID identifying the client + scopes: + type: "array" + items: + type: "object" + description: Rate-limit scope configuration and usage + properties: + id: + type: string + example: "password-reset" + description: + type: string + example: "Password reset request" + rate: + type: string + example: "30/day" + limit: + type: "integer" + format: "int64" + example: 30 + duration: + type: "integer" + format: "int64" + example: 86400 + remaining: + type: "integer" + format: "int64" + example: 28 + description: How many requests can be sent with the same scope before the limit applies + reset: + type: "integer" + format: "int64" + example: 1568126189 + description: A timestamp indicating when <code>remaining</code> will return to its higher possible value + reset_seconds: + type: "integer" + format: "int64" + example: 86267 + description: How many seconds to wait before <code>remaining</code> returns to its higher possible value + available: + type: "integer" + format: "int64" + example: 1568126089 + description: A timestamp indicating when the client can retry + available_seconds: + type: "integer" + format: "int64" + example: 54 + description: How many seconds to wait before a retry ResourceNotFound: type: "object" diff --git a/docs/users/account.rst b/docs/users/account.rst new file mode 100644 index 0000000000000000000000000000000000000000..6d98919873165765c8c714e171fa7a4c3eb8182c --- /dev/null +++ b/docs/users/account.rst @@ -0,0 +1,14 @@ +Manage your account +=================== + +Delete your account +------------------- + +You can delete your Funkwhale account by visiting your settings. The deletion form is found at the bottom of the page. You will need to input your password to confirm the deletion. + +Once the deletion request is submitted, your account and associated data will be removed from the server within a few minutes. This includes, but isn't limited to your avatar, email address, music, favorites, radios, followers and playlists. + +Your server will also broadcast a message to other server on the federation to inform them about the deletion. + +Please note that while these servers are supposed to comply and delete any local copy of your data, this isn't a strong guarantee and some data may remain available, especially on servers +that are offline or unreachable when the deletion message is broadcasted. diff --git a/docs/users/index.rst b/docs/users/index.rst index 9387f281bf71504bdcd457909551e84f09e6bbb0..557e9078258f4a88475edfe25221ac1225d0e723 100644 --- a/docs/users/index.rst +++ b/docs/users/index.rst @@ -21,6 +21,7 @@ Using Funkwhale .. toctree:: :maxdepth: 2 + account queue managing playlists @@ -28,6 +29,7 @@ Using Funkwhale radios follow apps + reports ../cli/index Troubleshooting Issues diff --git a/docs/users/reports.rst b/docs/users/reports.rst new file mode 100644 index 0000000000000000000000000000000000000000..bf870e5c3a623d7165c51ac535ab7f4507caac21 --- /dev/null +++ b/docs/users/reports.rst @@ -0,0 +1,54 @@ +Reporting content and accounts +============================== + +Funkwhale includes a report feature you can use to contact your pod's moderators. + +If you think some action, such as removal, should be taken toward an account or specific content (like an artist or a library), we encourage you to use +this feature. This is especially recommended if you find illegal or abusive content, or anything that could be an infraction of your pod's rules. + +After submission, your pod moderators will be notified and will be able to :doc:`act on your report </moderator/reports>`. + +Submit a report +--------------- + +You can submit those reports from various places in the app, depending on what you are reporting (see below). + +You'll need to pick a category for your report. Available categories are: + +- **Takedown request**: to request removal of copyrighted material +- **Illegal content**: to report an account, track, album, artist, library, playlist or account that features illegal content +- **Offensive content**: to report an account, track, album, artist, library, playlist or account that features offensive or abusive content +- **Invalid metadata**: to report a track, album or artist with invalid or incomplete metadata +- **Other**: to report anything else that doesn't fit into one of these categories + +You can also include with your report an additional explanation to ensure moderators can understand and act on the issue. + +Accountless reports +------------------- + +If this feature is enabled on the pod you are browsing, you'll be able to submit reports without an account. + +This works exactly the same, but the report form will have an extra "email" field where you should include a working +email address, in the event moderators need to contact you. + +Reporting an account +-------------------- + +Accounts can be reported in two ways. + +- When viewing user activity, such as favorites or listening history, the dropdown menu next to the corresponding activity will include an option to report the account +- When viewing a library the dropdown menu in the top right corner will include an option to report the corresponding account + +Reporting an artist, playlist, album or track +--------------------------------------------- + +Anything you can play can typically be reported using the dropdown menu on the "Play" button. + +Additionally, when viewing the detail page of an artist, playlist, album or track, you can find the +report option under the dropdown menu on the "More…" button. + + +Reporting a library +------------------- + +When viewing a library the dropdown menu in the top right corner will include an option to report the library. diff --git a/docs/users/upload.rst b/docs/users/upload.rst index 169c72710fa638d2999f70fef0d3a05995a19299..68238ac18ce321bc7c909516fd996c97c306fcbc 100644 --- a/docs/users/upload.rst +++ b/docs/users/upload.rst @@ -74,16 +74,19 @@ However, Funkwhale can understand and use additional tags to enhance user experi | ``Title`` (required) | ``Letting you`` | The track title | | | | | +----------------------------------+--------------------------------------------+---------------------------------------------------------------+ -| ``Album`` (required) | ``The Slip`` | The album title | -| | | | -+----------------------------------+--------------------------------------------+---------------------------------------------------------------+ | ``Artist`` (required) | ``Nine Inch Nails`` | The artist name | | | | | +----------------------------------+--------------------------------------------+---------------------------------------------------------------+ +| ``Album`` | ``The Slip`` | The album title. If none is provided, an [Unknown Album] | +| | | entry will be created | ++----------------------------------+--------------------------------------------+---------------------------------------------------------------+ | ``Album artist`` | ``Trent Reznor`` | The album artist name (can be different than the track | | | | artist) | | | | | +----------------------------------+--------------------------------------------+---------------------------------------------------------------+ +| ``Genre`` | ``Industrial, Metal`` | A comma separated list of tags to associate with the track | +| | | Other supported separators: ``;`` and ``/`` | ++----------------------------------+--------------------------------------------+---------------------------------------------------------------+ | ``Track number`` | ``4`` | The position of the track in the album/release | | | | | +----------------------------------+--------------------------------------------+---------------------------------------------------------------+ @@ -173,7 +176,7 @@ and reupload it. .. _unknown_error: -Unkwown error +Unknown error ::::::::::::: This error can happen for multiple reasons and likely indicates an issue with the Funkwhale diff --git a/front/Dockerfile b/front/Dockerfile index 43c968012b26741f70ca2ebb97cec4607fbb7f9c..6acd9d9db69fb133b354c359a7a80247bae6a145 100644 --- a/front/Dockerfile +++ b/front/Dockerfile @@ -1,4 +1,4 @@ -FROM node:9 +FROM node:11 # needed to compile translations RUN curl -L -o /usr/local/bin/jq https://github.com/stedolan/jq/releases/download/jq-1.5/jq-linux64 && chmod +x /usr/local/bin/jq diff --git a/front/locales/app.pot b/front/locales/app.pot index 4a7ddcd46f0ba9ca37c2e222379cf61f7c8245b1..184b17fe88b77e5083fcc45de83dfd693c83515c 100644 --- a/front/locales/app.pot +++ b/front/locales/app.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: front 0.1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-05-16 10:35+0200\n" +"POT-Creation-Date: 2019-10-01 15:15+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -38,6 +38,48 @@ msgctxt "Content/Auth/Title" msgid "%{ app } wants to access your Funkwhale account" msgstr "" +#: front/src/components/About.vue:173 src/components/Home.vue:56 +msgctxt "Content/Home/Stat" +msgid "%{ count } active user" +msgid_plural "%{ count } active users" +msgstr[0] "" +msgstr[1] "" + +#: front/src/components/About.vue:182 +msgctxt "Content/Home/Stat" +msgid "%{ count } albums" +msgid_plural "%{ count } albums" +msgstr[0] "" +msgstr[1] "" + +#: front/src/components/About.vue:152 +msgctxt "*/*/*" +msgid "%{ count } allowed domains" +msgid_plural "%{ count } allowed domains" +msgstr[0] "" +msgstr[1] "" + +#: front/src/components/About.vue:179 +msgctxt "Content/Home/Stat" +msgid "%{ count } artists" +msgid_plural "%{ count } artists" +msgstr[0] "" +msgstr[1] "" + +#: front/src/components/About.vue:176 src/components/Home.vue:59 +msgctxt "Content/Home/Stat" +msgid "%{ count } hour of music" +msgid_plural "%{ count } hours of music" +msgstr[0] "" +msgstr[1] "" + +#: front/src/components/About.vue:188 +msgctxt "Content/Home/Stat" +msgid "%{ count } listenings" +msgid_plural "%{ count } listenings" +msgstr[0] "" +msgstr[1] "" + #: front/src/components/common/ActionTable.vue:68 msgctxt "Content/*/Paragraph" msgid "%{ count } on %{ total } selected" @@ -45,8 +87,8 @@ msgid_plural "%{ count } on %{ total } selected" msgstr[0] "" msgstr[1] "" -#: front/src/components/Sidebar.vue:121 src/components/audio/album/Card.vue:52 -#: front/src/views/content/libraries/Card.vue:40 src/views/content/remote/Card.vue:30 +#: front/src/components/Sidebar.vue:125 src/components/audio/album/Card.vue:52 +#: front/src/views/content/libraries/Card.vue:40 src/views/content/remote/Card.vue:43 msgctxt "*/*/*" msgid "%{ count } track" msgid_plural "%{ count } tracks" @@ -67,7 +109,14 @@ msgid_plural "%{ count } tracks matching combined filters" msgstr[0] "" msgstr[1] "" -#: front/src/components/playlists/Card.vue:18 +#: front/src/components/About.vue:185 +msgctxt "Content/Home/Stat" +msgid "%{ count } tracks" +msgid_plural "%{ count } tracks" +msgstr[0] "" +msgstr[1] "" + +#: front/src/components/playlists/Card.vue:28 msgctxt "Content/*/Card/List item" msgid "%{ count} track" msgid_plural "%{ count } tracks" @@ -114,7 +163,7 @@ msgctxt "Popup/Playlist/Paragraph" msgid "<strong>%{ track }</strong> is already in <strong>%{ playlist }</strong>." msgstr "" -#: front/src/components/audio/artist/Card.vue:41 +#: front/src/components/audio/artist/Card.vue:11 msgctxt "Content/Artist/Card" msgid "1 album" msgid_plural "%{ count } albums" @@ -128,24 +177,41 @@ msgid_plural "%{ count } favorites" msgstr[0] "" msgstr[1] "" -#: front/src/components/Home.vue:64 -msgctxt "Content/Home/Title" -msgid "A clean library" +#: front/src/components/audio/artist/Card.vue:15 +msgctxt "Content/Artist/Card" +msgid "1 track" +msgid_plural "%{ count } tracks" +msgstr[0] "" +msgstr[1] "" + +#: front/src/views/Notifications.vue:21 src/views/Notifications.vue:55 +msgctxt "*/*/*" +msgid "30 days" +msgstr "" + +#: front/src/views/Notifications.vue:22 src/views/Notifications.vue:56 +msgctxt "*/*/*" +msgid "60 days" +msgstr "" + +#: front/src/views/Notifications.vue:23 src/views/Notifications.vue:57 +msgctxt "*/*/*" +msgid "90 days" msgstr "" #: front/src/components/library/FileUpload.vue:264 msgctxt "Content/Library/Help text" -msgid "A network error occured while uploading this file" +msgid "A network error occurred while uploading this file" msgstr "" -#: front/src/components/library/EditForm.vue:145 +#: front/src/components/library/EditForm.vue:161 msgctxt "*/*/Placeholder" msgid "A short summary describing your changes." msgstr "" #: front/src/components/About.vue:5 -msgctxt "Content/About/Title/Short, Noun" -msgid "About %{ instance }" +msgctxt "Content/Home/Header" +msgid "About %{ podName }" msgstr "" #: front/src/components/Footer.vue:6 @@ -153,7 +219,7 @@ msgctxt "Footer/About/Title" msgid "About %{instanceName}" msgstr "" -#: front/src/components/Footer.vue:45 +#: front/src/components/Footer.vue:53 src/components/Home.vue:85 msgctxt "Footer/*/Title/Short" msgid "About Funkwhale" msgstr "" @@ -163,9 +229,14 @@ msgctxt "Footer/About/List item.Link" msgid "About page" msgstr "" -#: front/src/components/About.vue:8 src/components/About.vue:67 -msgctxt "Content/About/Title" -msgid "About this instance" +#: front/src/components/Home.vue:19 +msgctxt "Content/Home/Header" +msgid "About this Funkwhale pod" +msgstr "" + +#: front/src/components/About.vue:21 src/components/About.vue:51 +msgctxt "Content/About/Header" +msgid "About this pod" msgstr "" #: front/src/views/content/libraries/Detail.vue:48 @@ -178,93 +249,87 @@ msgctxt "Content/Library/Table/Short" msgid "Accepted" msgstr "" -#: front/src/components/auth/SubsonicTokenForm.vue:110 +#: front/src/components/auth/SubsonicTokenForm.vue:117 msgctxt "Content/Settings/Message" msgid "Access disabled" msgstr "" -#: front/src/components/mixins/Translations.vue:73 -#: front/src/components/mixins/Translations.vue:74 +#: front/src/components/mixins/Translations.vue:85 +#: front/src/components/mixins/Translations.vue:86 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to audio files, libraries, artists, albums and tracks" msgstr "" -#: front/src/components/mixins/Translations.vue:97 -#: front/src/components/mixins/Translations.vue:98 +#: front/src/components/mixins/Translations.vue:109 +#: front/src/components/mixins/Translations.vue:110 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to content filters" msgstr "" -#: front/src/components/mixins/Translations.vue:105 -#: front/src/components/mixins/Translations.vue:106 +#: front/src/components/mixins/Translations.vue:117 +#: front/src/components/mixins/Translations.vue:118 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to edits" msgstr "" -#: front/src/components/mixins/Translations.vue:69 -#: front/src/components/mixins/Translations.vue:70 +#: front/src/components/mixins/Translations.vue:81 +#: front/src/components/mixins/Translations.vue:82 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to email, username, and profile information" msgstr "" -#: front/src/components/mixins/Translations.vue:77 -#: front/src/components/mixins/Translations.vue:78 +#: front/src/components/mixins/Translations.vue:89 +#: front/src/components/mixins/Translations.vue:90 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to favorites" msgstr "" -#: front/src/components/mixins/Translations.vue:85 -#: front/src/components/mixins/Translations.vue:86 +#: front/src/components/mixins/Translations.vue:97 +#: front/src/components/mixins/Translations.vue:98 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to follows" msgstr "" -#: front/src/components/mixins/Translations.vue:81 -#: front/src/components/mixins/Translations.vue:82 +#: front/src/components/mixins/Translations.vue:93 +#: front/src/components/mixins/Translations.vue:94 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to listening history" msgstr "" -#: front/src/components/mixins/Translations.vue:101 -#: front/src/components/mixins/Translations.vue:102 +#: front/src/components/mixins/Translations.vue:113 +#: front/src/components/mixins/Translations.vue:114 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to notifications" msgstr "" -#: front/src/components/mixins/Translations.vue:89 -#: front/src/components/mixins/Translations.vue:90 +#: front/src/components/mixins/Translations.vue:101 +#: front/src/components/mixins/Translations.vue:102 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to playlists" msgstr "" -#: front/src/components/mixins/Translations.vue:93 -#: front/src/components/mixins/Translations.vue:94 +#: front/src/components/mixins/Translations.vue:105 +#: front/src/components/mixins/Translations.vue:106 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to radios" msgstr "" -#: front/src/components/Home.vue:101 -msgctxt "Content/Home/List item" -msgid "Access your music from a clean interface that focuses on what really matters" -msgstr "" - #: front/src/components/manage/library/UploadsTable.vue:67 -#: front/src/components/mixins/Translations.vue:45 +#: front/src/components/mixins/Translations.vue:55 #: front/src/views/admin/library/UploadDetail.vue:175 -#: front/src/components/mixins/Translations.vue:46 +#: front/src/components/mixins/Translations.vue:56 msgctxt "Content/*/*/Noun" msgid "Accessed date" msgstr "" -#: front/src/views/admin/library/LibraryDetail.vue:104 -#: front/src/views/admin/library/UploadDetail.vue:111 -msgctxt "*/*/*/Noun" -msgid "Account" -msgstr "" - #: front/src/components/manage/library/LibrariesTable.vue:49 #: front/src/components/manage/library/UploadsTable.vue:61 -msgctxt "*/*/*" +#: front/src/components/manage/moderation/ReportCard.vue:156 +#: front/src/components/mixins/Report.vue:13 +#: front/src/views/admin/library/LibraryDetail.vue:113 +#: front/src/views/admin/library/UploadDetail.vue:111 +#: front/src/components/mixins/Report.vue:14 +msgctxt "*/*/*/Noun" msgid "Account" msgstr "" @@ -278,7 +343,7 @@ msgctxt "Content/Settings/Title" msgid "Account settings" msgstr "" -#: front/src/components/auth/Settings.vue:479 +#: front/src/components/auth/Settings.vue:544 msgctxt "Head/Settings/Title" msgid "Account Settings" msgstr "" @@ -295,7 +360,7 @@ msgstr "" #: front/src/views/admin/moderation/AccountsList.vue:3 #: front/src/views/admin/moderation/AccountsList.vue:24 -#: front/src/views/admin/moderation/Base.vue:8 +#: front/src/views/admin/moderation/Base.vue:11 msgctxt "*/Moderation/Title" msgid "Accounts" msgstr "" @@ -314,22 +379,24 @@ msgstr[1] "" #: front/src/components/common/ActionTable.vue:22 #: front/src/components/library/radios/Builder.vue:65 +#: front/src/components/manage/moderation/ReportCard.vue:210 msgctxt "Content/*/*/Noun" msgid "Actions" msgstr "" -#: front/src/components/manage/users/UsersTable.vue:53 +#: front/src/components/manage/users/UsersTable.vue:54 msgctxt "Content/Admin/Table" msgid "Active" msgstr "" -#: front/src/views/admin/library/AlbumDetail.vue:134 -#: front/src/views/admin/library/ArtistDetail.vue:123 -#: front/src/views/admin/library/LibraryDetail.vue:138 -#: front/src/views/admin/library/TrackDetail.vue:186 +#: front/src/views/admin/library/AlbumDetail.vue:140 +#: front/src/views/admin/library/ArtistDetail.vue:128 +#: front/src/views/admin/library/LibraryDetail.vue:147 +#: front/src/views/admin/library/TagDetail.vue:83 +#: front/src/views/admin/library/TrackDetail.vue:192 #: front/src/views/admin/library/UploadDetail.vue:160 -#: front/src/views/admin/moderation/AccountsDetail.vue:220 -#: front/src/views/admin/moderation/DomainsDetail.vue:136 +#: front/src/views/admin/moderation/AccountsDetail.vue:221 +#: front/src/views/admin/moderation/DomainsDetail.vue:173 msgctxt "Content/Moderation/Title" msgid "Activity" msgstr "" @@ -340,7 +407,7 @@ msgctxt "Content/Settings/Dropdown.Label/Noun" msgid "Activity visibility" msgstr "" -#: front/src/views/admin/moderation/DomainsList.vue:18 +#: front/src/views/admin/moderation/DomainsList.vue:22 msgctxt "Content/Moderation/Button/Verb" msgid "Add" msgstr "" @@ -386,7 +453,19 @@ msgctxt "Content/Radio/Paragraph" msgid "Add filters to customize your radio" msgstr "" -#: front/src/components/audio/PlayButton.vue:75 +#: front/src/components/manage/moderation/NoteForm.vue:12 +msgctxt "Content/Moderation/Button.Label/Verb" +msgid "Add note" +msgstr "" + +#: front/src/components/manage/moderation/DomainsTable.vue:191 +#: front/src/views/admin/moderation/DomainsDetail.vue:46 +#: front/src/views/admin/moderation/DomainsList.vue:18 +msgctxt "Content/Moderation/Action/Verb" +msgid "Add to allow-list" +msgstr "" + +#: front/src/components/audio/PlayButton.vue:91 msgctxt "*/Queue/Dropdown/Button/Title" msgid "Add to current queue" msgstr "" @@ -418,7 +497,7 @@ msgctxt "Popup/Playlist/Table.Button.Label/Verb" msgid "Add track" msgstr "" -#: front/src/components/manage/users/UsersTable.vue:69 +#: front/src/components/manage/users/UsersTable.vue:70 msgctxt "Content/Admin/Table.User role" msgid "Admin" msgstr "" @@ -428,46 +507,45 @@ msgctxt "Sidebar/Admin/Title/Noun" msgid "Administration" msgstr "" -#: front/src/views/admin/library/TrackDetail.vue:107 -msgctxt "*/*/*/Noun" -msgid "Album" -msgstr "" - -#: front/src/components/audio/SearchBar.vue:26 src/components/audio/track/Table.vue:9 -#: front/src/components/library/AlbumBase.vue:152 -#: front/src/components/library/ArtistBase.vue:194 +#: front/src/components/audio/SearchBar.vue:33 src/components/audio/track/Table.vue:9 +#: front/src/components/library/AlbumBase.vue:170 +#: front/src/components/library/ArtistBase.vue:212 #: front/src/components/manage/library/TracksTable.vue:40 -#: front/src/components/metadata/Search.vue:134 +#: front/src/components/metadata/Search.vue:134 src/components/mixins/Report.vue:41 +#: front/src/views/admin/library/TrackDetail.vue:113 #: front/src/views/content/libraries/FilesTable.vue:57 +#: front/src/components/mixins/Report.vue:42 msgctxt "*/*/*" msgid "Album" msgstr "" -#: front/src/views/admin/library/TrackDetail.vue:128 +#: front/src/views/admin/library/TrackDetail.vue:134 msgctxt "*/*/*/Noun" msgid "Album artist" msgstr "" -#: front/src/views/admin/library/AlbumDetail.vue:92 +#: front/src/views/admin/library/AlbumDetail.vue:98 msgctxt "Content/Moderation/Title" msgid "Album data" msgstr "" -#: front/src/components/mixins/Translations.vue:51 -#: front/src/components/mixins/Translations.vue:52 +#: front/src/components/mixins/Translations.vue:61 +#: front/src/components/mixins/Translations.vue:62 msgctxt "Content/*/Dropdown/Noun" msgid "Album name" msgstr "" -#: front/src/components/audio/Search.vue:19 src/components/instance/Stats.vue:48 -#: front/src/components/library/Albums.vue:120 src/components/library/Library.vue:7 +#: front/src/components/audio/Search.vue:19 src/components/library/Albums.vue:129 +#: front/src/components/library/Library.vue:7 src/components/library/TagDetail.vue:28 #: front/src/components/manage/library/ArtistsTable.vue:41 +#: front/src/components/manage/library/TagsTable.vue:43 #: front/src/views/admin/library/AlbumsList.vue:24 -#: front/src/views/admin/library/ArtistDetail.vue:241 +#: front/src/views/admin/library/ArtistDetail.vue:256 #: front/src/views/admin/library/Base.vue:11 -#: front/src/views/admin/library/LibraryDetail.vue:219 -#: front/src/views/admin/moderation/AccountsDetail.vue:354 -#: front/src/views/admin/moderation/DomainsDetail.vue:264 +#: front/src/views/admin/library/LibraryDetail.vue:238 +#: front/src/views/admin/library/TagDetail.vue:133 +#: front/src/views/admin/moderation/AccountsDetail.vue:366 +#: front/src/views/admin/moderation/DomainsDetail.vue:301 msgctxt "*/*/*" msgid "Albums" msgstr "" @@ -481,7 +559,10 @@ msgstr "" #: front/src/components/manage/library/LibrariesTable.vue:13 #: front/src/components/manage/library/UploadsTable.vue:13 #: front/src/components/manage/library/UploadsTable.vue:22 +#: front/src/components/manage/moderation/DomainsTable.vue:11 #: front/src/components/manage/users/InvitationsTable.vue:19 +#: front/src/components/moderation/ReportCategoryDropdown.vue:32 +#: front/src/views/admin/moderation/ReportsList.vue:17 #: front/src/views/content/libraries/FilesTable.vue:13 msgctxt "Content/*/Dropdown" msgid "All" @@ -499,34 +580,49 @@ msgctxt "Head/Authorize/Title" msgid "Allow application" msgstr "" +#: front/src/components/About.vue:136 +msgctxt "*/*/*" +msgid "Allow-list" +msgstr "" + +#: front/src/components/About.vue:149 +msgctxt "*/*/*" +msgid "Allowed domains" +msgstr "" + #: front/src/components/library/ImportStatusModal.vue:17 msgctxt "Popup/Import/Message" -msgid "An error occured during upload processing. You will find more information below." +msgid "An error occurred during upload processing. You will find more information below." msgstr "" #: front/src/components/playlists/Editor.vue:13 msgctxt "Content/Playlist/Error message.Title" -msgid "An error occured while saving your changes" +msgid "An error occurred while saving your changes" msgstr "" #: front/src/components/federation/FetchButton.vue:21 msgctxt "Popup/*/Message.Content" -msgid "An error occured while trying to refresh data:" +msgid "An error occurred while trying to refresh data:" msgstr "" #: front/src/components/federation/FetchButton.vue:41 msgctxt "*/*/Error" -msgid "An HTTP error occured while contacting the remote server" -msgstr "" - -#: front/src/components/auth/Login.vue:10 -msgctxt "Content/Login/Error message/List item" -msgid "An unknown error happend, this can mean the server is down or cannot be reached" +msgid "An HTTP error occurred while contacting the remote server" msgstr "" #: front/src/components/library/ImportStatusModal.vue:145 msgctxt "Popup/Import/Error.Label" -msgid "An unkwown error occured" +msgid "An unknown error occurred" +msgstr "" + +#: front/src/components/About.vue:123 +msgctxt "*/*/*" +msgid "Anonymous access" +msgstr "" + +#: front/src/components/moderation/ReportModal.vue:54 +msgctxt "Popup/Moderation/Error message" +msgid "Anonymous reports are disabled, please sign-in to submit a report." msgstr "" #: front/src/components/auth/Settings.vue:175 src/components/auth/Settings.vue:225 @@ -576,28 +672,25 @@ msgctxt "Content/Login/Title" msgid "Are you sure you want to log out?" msgstr "" +#: front/src/components/audio/SearchBar.vue:32 src/components/audio/track/Table.vue:8 #: front/src/components/manage/library/AlbumsTable.vue:40 #: front/src/components/manage/library/TracksTable.vue:41 -msgctxt "*/*/*" -msgid "Artist" -msgstr "" - -#: front/src/components/audio/SearchBar.vue:25 src/components/audio/track/Table.vue:8 -#: front/src/components/metadata/Search.vue:130 -#: front/src/views/admin/library/AlbumDetail.vue:108 -#: front/src/views/admin/library/TrackDetail.vue:118 -#: front/src/views/content/libraries/FilesTable.vue:56 +#: front/src/components/metadata/Search.vue:130 src/components/mixins/Report.vue:55 +#: front/src/views/admin/library/AlbumDetail.vue:114 +#: front/src/views/admin/library/TrackDetail.vue:124 +#: front/src/views/content/libraries/FilesTable.vue:56 src/entities.js:12 +#: front/src/components/mixins/Report.vue:56 msgctxt "*/*/*/Noun" msgid "Artist" msgstr "" -#: front/src/views/admin/library/ArtistDetail.vue:91 +#: front/src/views/admin/library/ArtistDetail.vue:96 msgctxt "Content/Moderation/Title" msgid "Artist data" msgstr "" -#: front/src/components/mixins/Translations.vue:52 -#: front/src/components/mixins/Translations.vue:53 +#: front/src/components/mixins/Translations.vue:62 +#: front/src/components/mixins/Translations.vue:63 msgctxt "Content/*/Dropdown/Noun" msgid "Artist name" msgstr "" @@ -607,32 +700,33 @@ msgctxt "*/Search/Input.Placeholder" msgid "Artist, album, track…" msgstr "" +#: front/src/components/audio/Search.vue:10 src/components/library/Artists.vue:117 +#: front/src/components/library/Library.vue:10 +#: front/src/components/library/TagDetail.vue:19 +#: front/src/components/manage/library/TagsTable.vue:42 #: front/src/views/admin/library/ArtistsList.vue:24 #: front/src/views/admin/library/Base.vue:8 -#: front/src/views/admin/library/LibraryDetail.vue:209 -msgctxt "*/*/*" -msgid "Artists" -msgstr "" - -#: front/src/components/audio/Search.vue:10 src/components/instance/Stats.vue:42 -#: front/src/components/library/Artists.vue:117 src/components/library/Library.vue:10 -#: front/src/views/admin/moderation/AccountsDetail.vue:346 -#: front/src/views/admin/moderation/DomainsDetail.vue:254 +#: front/src/views/admin/library/LibraryDetail.vue:228 +#: front/src/views/admin/library/TagDetail.vue:123 +#: front/src/views/admin/moderation/AccountsDetail.vue:358 +#: front/src/views/admin/moderation/DomainsDetail.vue:291 msgctxt "*/*/*/Noun" msgid "Artists" msgstr "" -#: front/src/components/favorites/List.vue:34 src/components/library/Albums.vue:25 -#: front/src/components/library/Artists.vue:25 src/components/library/Radios.vue:44 +#: front/src/components/favorites/List.vue:34 src/components/library/Albums.vue:29 +#: front/src/components/library/Artists.vue:29 src/components/library/Radios.vue:44 #: front/src/components/manage/library/AlbumsTable.vue:21 #: front/src/components/manage/library/ArtistsTable.vue:21 #: front/src/components/manage/library/EditsCardList.vue:39 #: front/src/components/manage/library/LibrariesTable.vue:30 +#: front/src/components/manage/library/TagsTable.vue:21 #: front/src/components/manage/library/TracksTable.vue:21 #: front/src/components/manage/library/UploadsTable.vue:40 #: front/src/components/manage/moderation/AccountsTable.vue:21 -#: front/src/components/manage/moderation/DomainsTable.vue:19 +#: front/src/components/manage/moderation/DomainsTable.vue:27 #: front/src/components/manage/users/UsersTable.vue:19 +#: front/src/views/admin/moderation/ReportsList.vue:44 #: front/src/views/content/libraries/FilesTable.vue:31 #: front/src/views/playlists/List.vue:27 msgctxt "Content/Search/Dropdown" @@ -644,18 +738,24 @@ msgctxt "Content/Signup/Button.Label/Verb" msgid "Ask for a password reset" msgstr "" -#: front/src/views/admin/library/AlbumDetail.vue:198 -#: front/src/views/admin/library/ArtistDetail.vue:187 -#: front/src/views/admin/library/LibraryDetail.vue:176 -#: front/src/views/admin/library/TrackDetail.vue:250 +#: front/src/components/manage/moderation/ReportCard.vue:72 +msgctxt "Content/Moderation/*" +msgid "Assigned to" +msgstr "" + +#: front/src/views/admin/library/AlbumDetail.vue:214 +#: front/src/views/admin/library/ArtistDetail.vue:202 +#: front/src/views/admin/library/LibraryDetail.vue:195 +#: front/src/views/admin/library/TagDetail.vue:113 +#: front/src/views/admin/library/TrackDetail.vue:266 #: front/src/views/admin/library/UploadDetail.vue:191 -#: front/src/views/admin/moderation/AccountsDetail.vue:274 -#: front/src/views/admin/moderation/DomainsDetail.vue:202 +#: front/src/views/admin/moderation/AccountsDetail.vue:285 +#: front/src/views/admin/moderation/DomainsDetail.vue:239 msgctxt "Content/Moderation/Title" msgid "Audio content" msgstr "" -#: front/src/components/ShortcutsModal.vue:55 +#: front/src/components/ShortcutsModal.vue:92 msgctxt "Popup/Keyboard shortcuts/Title" msgid "Audio player shortcuts" msgstr "" @@ -698,9 +798,9 @@ msgid "Back to settings" msgstr "" #: front/src/components/library/TrackDetail.vue:48 -#: front/src/components/mixins/Translations.vue:55 +#: front/src/components/mixins/Translations.vue:67 #: front/src/views/admin/library/UploadDetail.vue:227 -#: front/src/components/mixins/Translations.vue:56 +#: front/src/components/mixins/Translations.vue:68 msgctxt "Content/Track/*/Noun" msgid "Bitrate" msgstr "" @@ -726,6 +826,11 @@ msgctxt "Sidebar/Library/List item.Link/Verb" msgid "Browse library" msgstr "" +#: front/src/components/Home.vue:132 +msgctxt "Content/Home/Link" +msgid "Browse public content" +msgstr "" + #: front/src/components/library/Albums.vue:4 msgctxt "Content/Album/Title" msgid "Browsing albums" @@ -756,38 +861,40 @@ msgctxt "Content/Album/Card" msgid "By %{ artist }" msgstr "" -#: front/src/views/content/remote/Card.vue:112 +#: front/src/views/content/remote/Card.vue:125 msgctxt "Popup/Library/Paragraph" msgid "By unfollowing this library, you loose access to its content." msgstr "" -#: front/src/views/admin/library/AlbumDetail.vue:214 -#: front/src/views/admin/library/ArtistDetail.vue:203 -#: front/src/views/admin/library/LibraryDetail.vue:192 -#: front/src/views/admin/library/TrackDetail.vue:266 +#: front/src/views/admin/library/AlbumDetail.vue:230 +#: front/src/views/admin/library/ArtistDetail.vue:218 +#: front/src/views/admin/library/LibraryDetail.vue:211 +#: front/src/views/admin/library/TrackDetail.vue:282 #: front/src/views/admin/library/UploadDetail.vue:208 -#: front/src/views/admin/moderation/AccountsDetail.vue:290 -#: front/src/views/admin/moderation/DomainsDetail.vue:217 +#: front/src/views/admin/moderation/AccountsDetail.vue:301 +#: front/src/views/admin/moderation/DomainsDetail.vue:254 msgctxt "Content/Moderation/Table.Label/Noun" msgid "Cached size" msgstr "" #: front/src/components/SetInstanceModal.vue:37 #: front/src/components/common/DangerousButton.vue:17 -#: front/src/components/library/AlbumBase.vue:36 -#: front/src/components/library/ArtistBase.vue:47 -#: front/src/components/library/EditForm.vue:95 -#: front/src/components/library/TrackBase.vue:55 +#: front/src/components/library/AlbumBase.vue:37 +#: front/src/components/library/ArtistBase.vue:48 +#: front/src/components/library/EditForm.vue:107 +#: front/src/components/library/TrackBase.vue:53 #: front/src/components/library/radios/Filter.vue:53 #: front/src/components/manage/moderation/InstancePolicyForm.vue:54 #: front/src/components/moderation/FilterModal.vue:39 +#: front/src/components/moderation/ReportModal.vue:59 #: front/src/components/playlists/PlaylistModal.vue:26 #: front/src/components/playlists/PlaylistModal.vue:77 +#: front/src/views/playlists/Detail.vue:62 msgctxt "*/*/Button.Label/Verb" msgid "Cancel" msgstr "" -#: front/src/views/content/remote/Card.vue:97 +#: front/src/views/content/remote/Card.vue:110 msgctxt "Content/Library/Card.Paragraph" msgid "Cancel follow request" msgstr "" @@ -802,6 +909,14 @@ msgctxt "Content/Library/Help text" msgid "Cannot upload this file, ensure it is not too big" msgstr "" +#: front/src/components/manage/moderation/ReportCard.vue:30 +#: front/src/components/mixins/Translations.vue:42 +#: front/src/components/moderation/ReportCategoryDropdown.vue:2 +#: front/src/components/mixins/Translations.vue:43 +msgctxt "*/*/*" +msgid "Category" +msgstr "" + #: front/src/components/Footer.vue:21 msgctxt "Footer/Settings/Dropdown.Label/Short, Verb" msgid "Change language" @@ -817,6 +932,11 @@ msgctxt "Content/Settings/Button.Label" msgid "Change password" msgstr "" +#: front/src/components/Footer.vue:37 +msgctxt "Footer/Settings/Dropdown.Label/Short, Verb" +msgid "Change theme" +msgstr "" + #: front/src/views/auth/PasswordResetConfirm.vue:62 msgctxt "*/Signup/Title" msgid "Change your password" @@ -842,7 +962,7 @@ msgctxt "Popup/Settings/Paragraph" msgid "Changing your password will have the following consequences:" msgstr "" -#: front/src/components/Footer.vue:40 +#: front/src/components/Footer.vue:48 msgctxt "Footer/*/List item.Link" msgid "Chat room" msgstr "" @@ -857,12 +977,9 @@ msgctxt "Popup/Instance/Title" msgid "Choose your instance" msgstr "" -#: front/src/components/manage/users/InvitationForm.vue:37 -msgctxt "Content/Admin/Button.Label/Verb" -msgid "Clear" -msgstr "" - #: front/src/components/library/EditForm.vue:75 +#: front/src/components/library/EditForm.vue:88 +#: front/src/components/manage/users/InvitationForm.vue:37 msgctxt "Content/Library/Button.Label" msgid "Clear" msgstr "" @@ -873,14 +990,14 @@ msgctxt "*/Playlist/Button.Label/Verb" msgid "Clear playlist" msgstr "" -#: front/src/components/audio/Player.vue:642 -msgctxt "Sidebar/Player/Icon.Tooltip/Verb" -msgid "Clear your queue" +#: front/src/components/ShortcutsModal.vue:144 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Clear queue" msgstr "" -#: front/src/components/Home.vue:44 -msgctxt "Content/Home/List item/Verb" -msgid "Click once, listen for hours using built-in radios" +#: front/src/components/audio/Player.vue:668 +msgctxt "Sidebar/Player/Icon.Tooltip/Verb" +msgid "Clear your queue" msgstr "" #: front/src/components/mixins/Translations.vue:21 @@ -894,22 +1011,24 @@ msgctxt "Content/Library/Paragraph/Call to action" msgid "Click to select files to upload or drag and drop files or directories" msgstr "" +#: front/src/components/ShortcutsModal.vue:38 #: front/src/components/federation/FetchButton.vue:85 #: front/src/components/library/ImportStatusModal.vue:79 +#: front/src/components/manage/moderation/InstancePolicyModal.vue:34 msgctxt "*/*/Button.Label/Verb" msgid "Close" msgstr "" -#: front/src/components/ShortcutsModal.vue:20 -msgctxt "Popup/Keyboard shortcuts/Button.Label/Verb" -msgid "Close" -msgstr "" - #: front/src/components/federation/FetchButton.vue:88 msgctxt "*/*/Button.Label/Verb" msgid "Close and reload page" msgstr "" +#: front/src/components/About.vue:94 +msgctxt "*/*/*/State of registrations" +msgid "Closed" +msgstr "" + #: front/src/components/manage/users/InvitationForm.vue:26 #: front/src/components/manage/users/InvitationsTable.vue:42 msgctxt "Content/Admin/Table.Label/Noun" @@ -917,8 +1036,8 @@ msgid "Code" msgstr "" #: front/src/components/audio/album/Card.vue:41 -#: front/src/components/audio/artist/Card.vue:33 -msgctxt "Content/*/Card.Link/Verb" +#: front/src/components/common/CollapseLink.vue:3 +msgctxt "*/*/Button,Label" msgid "Collapse" msgstr "" @@ -942,18 +1061,19 @@ msgctxt "Content/Signup/Form.Label" msgid "Confirmation code" msgstr "" +#: front/src/components/About.vue:67 src/components/Home.vue:65 +msgctxt "Content/Home/Header/Name" +msgid "Contact" +msgstr "" + #: front/src/components/moderation/FilterModal.vue:90 msgctxt "*/Moderation/Message" msgid "Content filter successfully added" msgstr "" -#: front/src/components/mixins/Translations.vue:96 -#: front/src/components/mixins/Translations.vue:97 -msgctxt "Content/OAuth Scopes/Label" -msgid "Content filters" -msgstr "" - #: front/src/components/auth/Settings.vue:116 +#: front/src/components/mixins/Translations.vue:108 +#: front/src/components/mixins/Translations.vue:109 msgctxt "Content/Settings/Title/Noun" msgid "Content filters" msgstr "" @@ -968,13 +1088,19 @@ msgctxt "Content/*/Button.Help text.Paragraph" msgid "Content have been updated, click refresh to see up-to-date content" msgstr "" -#: front/src/components/Footer.vue:48 +#: front/src/components/About.vue:46 +msgctxt "Content/About/Header" +msgid "Contents" +msgstr "" + +#: front/src/components/Footer.vue:56 msgctxt "Footer/*/List item.Link" msgid "Contribute" msgstr "" -#: front/src/components/audio/EmbedWizard.vue:19 +#: front/src/components/audio/EmbedWizard.vue:29 #: front/src/components/common/CopyInput.vue:8 +#: front/src/components/forms/PasswordInput.vue:43 msgctxt "*/*/Button.Label/Short, Verb" msgid "Copy" msgstr "" @@ -989,14 +1115,14 @@ msgctxt "Content/Auth/Paragraph" msgid "Copy-paste the following code in the application:" msgstr "" -#: front/src/components/audio/EmbedWizard.vue:21 +#: front/src/components/audio/EmbedWizard.vue:31 msgctxt "Popup/Embed/Paragraph" msgid "Copy/paste this code in your website HTML" msgstr "" #: front/src/components/library/TrackDetail.vue:10 -#: front/src/views/admin/library/TrackDetail.vue:153 -msgctxt "Content/Track/Table.Label/Noun" +#: front/src/views/admin/library/TrackDetail.vue:159 src/edits.js:77 +msgctxt "Content/Track/*/Noun" msgid "Copyright" msgstr "" @@ -1010,29 +1136,20 @@ msgctxt "Content/Library/Error message.Title" msgid "Could not fetch remote library" msgstr "" -#: front/src/components/Home.vue:80 -msgctxt "Content/Home/List item" -msgid "Covers, lyrics, our goal is to have them all ;)" -msgstr "" - #: front/src/components/manage/moderation/InstancePolicyForm.vue:58 msgctxt "Content/Moderation/Card.Button.Label/Verb" msgid "Create" msgstr "" -#: front/src/components/auth/Signup.vue:4 +#: front/src/views/auth/Signup.vue:4 msgctxt "Content/Signup/Title" msgid "Create a funkwhale account" msgstr "" -#: front/src/components/auth/Settings.vue:220 -msgctxt "Content/Settings/Button.Label" -msgid "Create a new application" -msgstr "" - #: front/src/components/auth/ApplicationNew.vue:8 #: front/src/components/auth/ApplicationNew.vue:41 -msgctxt "Content/Applications/Title" +#: front/src/components/auth/Settings.vue:220 +msgctxt "Content/Settings/Button.Label" msgid "Create a new application" msgstr "" @@ -1046,7 +1163,7 @@ msgctxt "Popup/Playlist/Title/Verb" msgid "Create a new playlist" msgstr "" -#: front/src/components/Sidebar.vue:57 src/components/auth/Login.vue:17 +#: front/src/components/Sidebar.vue:57 src/components/auth/LoginForm.vue:15 msgctxt "*/Signup/Link/Verb" msgid "Create an account" msgstr "" @@ -1061,7 +1178,7 @@ msgctxt "Content/Library/Button.Label/Verb" msgid "Create library" msgstr "" -#: front/src/components/auth/Signup.vue:53 +#: front/src/components/auth/SignupForm.vue:49 msgctxt "Content/Signup/Button.Label" msgid "Create my account" msgstr "" @@ -1085,11 +1202,13 @@ msgstr "" #: front/src/components/manage/library/AlbumsTable.vue:44 #: front/src/components/manage/library/ArtistsTable.vue:43 #: front/src/components/manage/library/LibrariesTable.vue:54 +#: front/src/components/manage/library/TagsTable.vue:45 #: front/src/components/manage/library/TracksTable.vue:44 #: front/src/components/manage/library/UploadsTable.vue:66 +#: front/src/components/manage/moderation/ReportCard.vue:43 #: front/src/components/manage/users/InvitationsTable.vue:40 -#: front/src/components/mixins/Translations.vue:43 -#: front/src/components/mixins/Translations.vue:44 +#: front/src/components/mixins/Translations.vue:53 +#: front/src/components/mixins/Translations.vue:54 msgctxt "Content/*/*/Noun" msgid "Creation date" msgstr "" @@ -1099,6 +1218,11 @@ msgctxt "Content/Settings/Title/Noun" msgid "Current avatar" msgstr "" +#: front/src/components/admin/SettingsGroup.vue:67 +msgctxt "Content/Settings/Title/Noun" +msgid "Current image" +msgstr "" + #: front/src/views/content/libraries/DetailArea.vue:4 msgctxt "Content/Library/Title" msgid "Current library" @@ -1114,6 +1238,11 @@ msgctxt "Content/Library/Title" msgid "Current usage" msgstr "" +#: front/src/components/Footer.vue:94 +msgctxt "Footer/Settings/Dropdown.Label/Theme name" +msgid "Dark" +msgstr "" + #: front/src/components/federation/FetchButton.vue:53 msgctxt "*/*/Error" msgid "Data returned by the remote server had invalid or missing attributes" @@ -1134,7 +1263,7 @@ msgctxt "Popup/Import/Table.Label/Noun" msgid "Debug information" msgstr "" -#: front/src/components/ShortcutsModal.vue:75 +#: front/src/components/ShortcutsModal.vue:128 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Decrease volume" msgstr "" @@ -1145,22 +1274,28 @@ msgstr "" #: front/src/components/manage/library/AlbumsTable.vue:188 #: front/src/components/manage/library/ArtistsTable.vue:178 #: front/src/components/manage/library/LibrariesTable.vue:205 +#: front/src/components/manage/library/TagsTable.vue:179 #: front/src/components/manage/library/TracksTable.vue:188 #: front/src/components/manage/library/UploadsTable.vue:255 #: front/src/components/manage/moderation/InstancePolicyForm.vue:61 +#: front/src/components/manage/moderation/NotesThread.vue:24 +#: front/src/components/manage/moderation/NotesThread.vue:29 +#: front/src/components/manage/moderation/ReportCard.vue:360 #: front/src/components/manage/users/InvitationsTable.vue:167 -#: front/src/views/admin/library/AlbumDetail.vue:72 -#: front/src/views/admin/library/AlbumDetail.vue:77 -#: front/src/views/admin/library/ArtistDetail.vue:71 +#: front/src/views/admin/library/AlbumDetail.vue:78 +#: front/src/views/admin/library/AlbumDetail.vue:83 #: front/src/views/admin/library/ArtistDetail.vue:76 +#: front/src/views/admin/library/ArtistDetail.vue:81 #: front/src/views/admin/library/LibraryDetail.vue:58 #: front/src/views/admin/library/LibraryDetail.vue:63 -#: front/src/views/admin/library/TrackDetail.vue:71 -#: front/src/views/admin/library/TrackDetail.vue:76 +#: front/src/views/admin/library/TagDetail.vue:41 +#: front/src/views/admin/library/TagDetail.vue:46 +#: front/src/views/admin/library/TrackDetail.vue:77 +#: front/src/views/admin/library/TrackDetail.vue:82 #: front/src/views/admin/library/UploadDetail.vue:65 #: front/src/views/admin/library/UploadDetail.vue:70 #: front/src/views/content/libraries/FilesTable.vue:222 -#: front/src/views/content/libraries/Form.vue:29 src/views/playlists/Detail.vue:34 +#: front/src/views/content/libraries/Form.vue:29 src/views/playlists/Detail.vue:42 msgctxt "*/*/*/Verb" msgid "Delete" msgstr "" @@ -1185,7 +1320,17 @@ msgctxt "Popup/Moderation/Button.Label/Verb" msgid "Delete moderation rule" msgstr "" -#: front/src/views/playlists/Detail.vue:39 +#: front/src/components/auth/Settings.vue:274 src/components/auth/Settings.vue:302 +msgctxt "*/*/Button.Label" +msgid "Delete my account" +msgstr "" + +#: front/src/components/auth/Settings.vue:297 +msgctxt "*/*/Button.Label" +msgid "Delete my account…" +msgstr "" + +#: front/src/views/playlists/Detail.vue:47 msgctxt "Popup/Playlist/Button.Label/Verb" msgid "Delete playlist" msgstr "" @@ -1195,13 +1340,23 @@ msgctxt "Popup/Radio/Button.Label/Verb" msgid "Delete radio" msgstr "" -#: front/src/views/admin/library/AlbumDetail.vue:73 -#: front/src/views/admin/library/TrackDetail.vue:72 +#: front/src/components/manage/moderation/ReportCard.vue:357 +msgctxt "Content/Moderation/Button/Verb" +msgid "Delete reported object" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:358 +msgctxt "Content/Moderation/Popup/Header" +msgid "Delete reported object?" +msgstr "" + +#: front/src/views/admin/library/AlbumDetail.vue:79 +#: front/src/views/admin/library/TrackDetail.vue:78 msgctxt "Popup/Library/Title" msgid "Delete this album?" msgstr "" -#: front/src/views/admin/library/ArtistDetail.vue:72 +#: front/src/views/admin/library/ArtistDetail.vue:77 msgctxt "Popup/Library/Title" msgid "Delete this artist?" msgstr "" @@ -1217,50 +1372,63 @@ msgctxt "Popup/Moderation/Title" msgid "Delete this moderation rule?" msgstr "" +#: front/src/components/manage/moderation/NotesThread.vue:25 +msgctxt "Popup/Moderation/Title" +msgid "Delete this note?" +msgstr "" + #: front/src/components/library/EditCard.vue:94 msgctxt "Popup/Library/Title" msgid "Delete this suggestion?" msgstr "" +#: front/src/views/admin/library/TagDetail.vue:42 +msgctxt "Popup/Library/Title" +msgid "Delete this tag?" +msgstr "" + #: front/src/views/admin/library/UploadDetail.vue:66 msgctxt "Popup/Library/Title" msgid "Delete this upload?" msgstr "" -#: front/src/components/favorites/List.vue:35 src/components/library/Albums.vue:26 -#: front/src/components/library/Artists.vue:26 src/components/library/Radios.vue:47 +#: front/src/components/favorites/List.vue:35 src/components/library/Albums.vue:30 +#: front/src/components/library/Artists.vue:30 src/components/library/Radios.vue:47 #: front/src/components/manage/library/AlbumsTable.vue:22 #: front/src/components/manage/library/ArtistsTable.vue:22 #: front/src/components/manage/library/EditsCardList.vue:40 #: front/src/components/manage/library/LibrariesTable.vue:31 +#: front/src/components/manage/library/TagsTable.vue:22 #: front/src/components/manage/library/TracksTable.vue:22 #: front/src/components/manage/library/UploadsTable.vue:41 #: front/src/components/manage/moderation/AccountsTable.vue:22 -#: front/src/components/manage/moderation/DomainsTable.vue:20 +#: front/src/components/manage/moderation/DomainsTable.vue:28 #: front/src/components/manage/users/UsersTable.vue:20 +#: front/src/views/admin/moderation/ReportsList.vue:45 #: front/src/views/content/libraries/FilesTable.vue:32 #: front/src/views/playlists/List.vue:28 msgctxt "Content/Search/Dropdown" msgid "Descending" msgstr "" -#: front/src/views/admin/library/LibraryDetail.vue:123 -msgctxt "*/*/*/Noun" -msgid "Description" +#: front/src/components/manage/moderation/NoteForm.vue:37 +msgctxt "Content/Moderation/Placeholder" +msgid "Describe what actions have been taken, or any other related updates…" msgstr "" #: front/src/components/library/radios/Builder.vue:25 +#: front/src/views/admin/library/LibraryDetail.vue:132 #: front/src/views/content/libraries/Form.vue:14 -msgctxt "Content/*/Input.Label/Noun" +msgctxt "*/*/*/Noun" msgid "Description" msgstr "" -#: front/src/views/content/libraries/Card.vue:48 src/views/content/remote/Card.vue:54 +#: front/src/views/content/libraries/Card.vue:48 src/views/content/remote/Card.vue:67 msgctxt "Content/Library/Card.Button.Label/Noun" msgid "Details" msgstr "" -#: front/src/views/admin/moderation/AccountsDetail.vue:491 +#: front/src/views/admin/moderation/AccountsDetail.vue:511 msgctxt "Content/Moderation/Help text" msgid "Determine how much content the user can upload. Leave empty to use the default value of the instance." msgstr "" @@ -1272,38 +1440,50 @@ msgid "Determine the visibility level of your activity" msgstr "" #: front/src/components/auth/Settings.vue:104 -#: front/src/components/auth/SubsonicTokenForm.vue:51 +#: front/src/components/auth/SubsonicTokenForm.vue:56 msgctxt "Popup/Settings/Button.Label" msgid "Disable access" msgstr "" -#: front/src/components/auth/SubsonicTokenForm.vue:48 +#: front/src/components/auth/SubsonicTokenForm.vue:53 msgctxt "Content/Settings/Button.Label/Verb" msgid "Disable Subsonic access" msgstr "" -#: front/src/components/auth/SubsonicTokenForm.vue:49 +#: front/src/components/auth/SubsonicTokenForm.vue:54 msgctxt "Popup/Settings/Title" msgid "Disable Subsonic API access?" msgstr "" +#: front/src/components/About.vue:118 src/components/About.vue:131 +#: front/src/components/About.vue:144 #: front/src/components/manage/moderation/InstancePolicyForm.vue:18 #: front/src/views/admin/moderation/AccountsDetail.vue:157 #: front/src/views/admin/moderation/AccountsDetail.vue:161 -msgctxt "*/*/*" +msgctxt "*/*/*/State of feature" msgid "Disabled" msgstr "" -#: front/src/views/admin/library/TrackDetail.vue:145 +#: front/src/views/admin/library/TrackDetail.vue:151 msgctxt "*/*/*/Noun" msgid "Disc number" msgstr "" +#: front/src/components/Home.vue:157 +msgctxt "Content/Home/Link" +msgid "Discover everything you need to know about Funkwhale and its features" +msgstr "" + #: front/src/components/auth/SubsonicTokenForm.vue:13 msgctxt "Content/Settings/Link" msgid "Discover how to use Funkwhale from other apps" msgstr "" +#: front/src/views/Notifications.vue:45 +msgctxt "Content/Notifications/Button.Label/Verb" +msgid "Discover other ways to help" +msgstr "" + #: front/src/views/admin/moderation/AccountsDetail.vue:132 msgctxt "'Content/*/*/Noun'" msgid "Display name" @@ -1319,6 +1499,11 @@ msgctxt "Content/Moderation/Help text" msgid "Do not download any media file (audio, album cover, account avatar…) from this account or domain. This will purge existing content as well." msgstr "" +#: front/src/views/Notifications.vue:36 +msgctxt "Content/Notifications/Header" +msgid "Do you like Funkwhale?" +msgstr "" + #: front/src/components/playlists/Editor.vue:51 msgctxt "Popup/Playlist/Title" msgid "Do you want to clear the playlist \"%{ playlist }\"?" @@ -1329,7 +1514,7 @@ msgctxt "Modal/*/Title" msgid "Do you want to confirm this action?" msgstr "" -#: front/src/views/playlists/Detail.vue:35 +#: front/src/views/playlists/Detail.vue:43 msgctxt "Popup/Playlist/Title/Call to action" msgid "Do you want to delete the playlist \"%{ playlist }\"?" msgstr "" @@ -1339,6 +1524,11 @@ msgctxt "Popup/Radio/Title" msgid "Do you want to delete the radio \"%{ radio }\"?" msgstr "" +#: front/src/components/auth/Settings.vue:298 +msgctxt "Popup/Settings/Title" +msgid "Do you want to delete your account?" +msgstr "" + #: front/src/components/moderation/FilterModal.vue:3 msgctxt "Popup/Moderation/Title/Verb" msgid "Do you want to hide content from artist \"%{ name }\"?" @@ -1351,7 +1541,12 @@ msgid_plural "Do you want to launch %{ action } on %{ count } elements?" msgstr[0] "" msgstr[1] "" -#: front/src/components/Sidebar.vue:118 +#: front/src/components/moderation/ReportModal.vue:3 +msgctxt "Popup/Moderation/Title/Verb" +msgid "Do you want to report this object?" +msgstr "" + +#: front/src/components/Sidebar.vue:122 msgctxt "Sidebar/Queue/Message" msgid "Do you want to restore your previous queue?" msgstr "" @@ -1367,26 +1562,33 @@ msgstr "" #: front/src/components/manage/library/TracksTable.vue:42 #: front/src/components/manage/library/UploadsTable.vue:62 #: front/src/components/manage/moderation/AccountsTable.vue:40 -#: front/src/components/mixins/Translations.vue:60 -#: front/src/views/admin/library/AlbumDetail.vue:118 -#: front/src/views/admin/library/ArtistDetail.vue:107 -#: front/src/views/admin/library/LibraryDetail.vue:114 -#: front/src/views/admin/library/TrackDetail.vue:170 +#: front/src/components/manage/moderation/ReportCard.vue:169 +#: front/src/components/manage/moderation/ReportCard.vue:179 +#: front/src/components/mixins/Translations.vue:72 +#: front/src/views/admin/library/AlbumDetail.vue:124 +#: front/src/views/admin/library/ArtistDetail.vue:112 +#: front/src/views/admin/library/LibraryDetail.vue:123 +#: front/src/views/admin/library/TrackDetail.vue:176 #: front/src/views/admin/library/UploadDetail.vue:121 #: front/src/views/admin/moderation/AccountsDetail.vue:123 -#: front/src/components/mixins/Translations.vue:61 +#: front/src/components/mixins/Translations.vue:73 msgctxt "Content/Moderation/*/Noun" msgid "Domain" msgstr "" -#: front/src/views/admin/moderation/Base.vue:5 +#: front/src/views/admin/moderation/Base.vue:8 #: front/src/views/admin/moderation/DomainsList.vue:3 -#: front/src/views/admin/moderation/DomainsList.vue:48 +#: front/src/views/admin/moderation/DomainsList.vue:54 msgctxt "*/Moderation/*/Noun" msgid "Domains" msgstr "" -#: front/src/components/library/TrackBase.vue:39 +#: front/src/views/Notifications.vue:42 +msgctxt "Content/Notifications/Button.Label/Verb" +msgid "Donate" +msgstr "" + +#: front/src/components/library/TrackBase.vue:37 #: front/src/views/admin/library/UploadDetail.vue:58 msgctxt "Content/Track/Link/Verb" msgid "Download" @@ -1399,10 +1601,10 @@ msgstr "" #: front/src/components/audio/track/Table.vue:10 #: front/src/components/library/TrackDetail.vue:30 -#: front/src/components/mixins/Translations.vue:56 +#: front/src/components/mixins/Translations.vue:68 #: front/src/views/admin/library/UploadDetail.vue:238 #: front/src/views/content/libraries/FilesTable.vue:60 -#: front/src/components/mixins/Translations.vue:57 +#: front/src/components/mixins/Translations.vue:69 msgctxt "Content/*/*" msgid "Duration" msgstr "" @@ -1412,39 +1614,24 @@ msgctxt "Content/Signup/Message" msgid "E-mail address confirmed" msgstr "" -#: front/src/components/Home.vue:88 -msgctxt "Content/Home/Title" -msgid "Easy to use" -msgstr "" - -#: front/src/components/library/AlbumBase.vue:68 -#: front/src/components/library/ArtistBase.vue:79 -#: front/src/components/library/TrackBase.vue:87 +#: front/src/components/auth/Settings.vue:246 src/components/library/AlbumBase.vue:73 +#: front/src/components/library/ArtistBase.vue:84 +#: front/src/components/library/TrackBase.vue:89 #: front/src/components/manage/moderation/InstancePolicyCard.vue:45 -#: front/src/components/radios/Card.vue:23 src/views/admin/library/AlbumDetail.vue:65 -#: front/src/views/admin/library/ArtistDetail.vue:64 -#: front/src/views/admin/library/TrackDetail.vue:64 +#: front/src/components/radios/Card.vue:23 src/views/admin/library/AlbumDetail.vue:71 +#: front/src/views/admin/library/ArtistDetail.vue:69 +#: front/src/views/admin/library/TrackDetail.vue:70 #: front/src/views/content/libraries/Detail.vue:9 src/views/playlists/Detail.vue:31 msgctxt "Content/*/Button.Label/Verb" msgid "Edit" msgstr "" -#: front/src/components/auth/Settings.vue:246 -msgctxt "Content/Settings/Button.Label" -msgid "Edit" -msgstr "" - #: front/src/components/auth/ApplicationEdit.vue:30 #: front/src/components/auth/ApplicationEdit.vue:75 msgctxt "Content/Applications/Title" msgid "Edit application" msgstr "" -#: front/src/components/About.vue:22 -msgctxt "Content/Settings/Button.Label/Verb" -msgid "Edit instance info" -msgstr "" - #: front/src/components/manage/moderation/InstancePolicyForm.vue:3 msgctxt "Content/Moderation/Card.Title/Verb" msgid "Edit moderation rule" @@ -1465,22 +1652,19 @@ msgctxt "Content/*/Title" msgid "Edit this track" msgstr "" -#: front/src/views/admin/library/AlbumDetail.vue:182 -#: front/src/views/admin/library/ArtistDetail.vue:171 +#: front/src/components/mixins/Translations.vue:116 +#: front/src/views/admin/library/AlbumDetail.vue:198 +#: front/src/views/admin/library/ArtistDetail.vue:186 #: front/src/views/admin/library/Base.vue:5 src/views/admin/library/EditsList.vue:24 -#: front/src/views/admin/library/TrackDetail.vue:234 +#: front/src/views/admin/library/TrackDetail.vue:250 +#: front/src/components/mixins/Translations.vue:117 msgctxt "*/Admin/*/Noun" msgid "Edits" msgstr "" -#: front/src/components/mixins/Translations.vue:104 -#: front/src/components/mixins/Translations.vue:105 -msgctxt "Content/OAuth Scopes/Label" -msgid "Edits" -msgstr "" - -#: front/src/components/auth/Signup.vue:30 +#: front/src/components/auth/SignupForm.vue:26 #: front/src/components/manage/users/UsersTable.vue:38 +#: front/src/components/moderation/ReportModal.vue:31 msgctxt "Content/*/*/Noun" msgid "Email" msgstr "" @@ -1490,50 +1674,57 @@ msgctxt "Content/*/*" msgid "Email address" msgstr "" -#: front/src/components/library/AlbumBase.vue:53 -#: front/src/components/library/ArtistBase.vue:64 -#: front/src/components/library/TrackBase.vue:72 +#: front/src/components/library/AlbumBase.vue:54 +#: front/src/components/library/ArtistBase.vue:65 +#: front/src/components/library/TrackBase.vue:70 src/views/playlists/Detail.vue:38 msgctxt "Content/*/Button.Label/Verb" msgid "Embed" msgstr "" -#: front/src/components/audio/EmbedWizard.vue:20 +#: front/src/components/audio/EmbedWizard.vue:30 msgctxt "Popup/Embed/Input.Label/Noun" msgid "Embed code" msgstr "" -#: front/src/components/library/AlbumBase.vue:26 +#: front/src/components/library/AlbumBase.vue:27 msgctxt "Popup/Album/Title/Verb" msgid "Embed this album on your website" msgstr "" -#: front/src/components/library/ArtistBase.vue:37 +#: front/src/components/library/ArtistBase.vue:38 msgctxt "Popup/Artist/Title/Verb" msgid "Embed this artist work on your website" msgstr "" -#: front/src/components/library/TrackBase.vue:45 +#: front/src/views/playlists/Detail.vue:52 +msgctxt "Popup/Album/Title/Verb" +msgid "Embed this playlist on your website" +msgstr "" + +#: front/src/components/library/TrackBase.vue:43 msgctxt "Popup/Track/Title" msgid "Embed this track on your website" msgstr "" -#: front/src/views/admin/moderation/AccountsDetail.vue:259 -#: front/src/views/admin/moderation/DomainsDetail.vue:187 +#: front/src/views/admin/moderation/AccountsDetail.vue:260 +#: front/src/views/admin/moderation/DomainsDetail.vue:224 msgctxt "Content/Moderation/Table.Label/Noun" msgid "Emitted library follows" msgstr "" -#: front/src/views/admin/moderation/AccountsDetail.vue:243 -#: front/src/views/admin/moderation/DomainsDetail.vue:171 +#: front/src/views/admin/moderation/AccountsDetail.vue:244 +#: front/src/views/admin/moderation/DomainsDetail.vue:208 msgctxt "Content/Moderation/Table.Label/Noun" msgid "Emitted messages" msgstr "" +#: front/src/components/About.vue:114 src/components/About.vue:127 +#: front/src/components/About.vue:140 #: front/src/components/manage/moderation/InstancePolicyCard.vue:8 #: front/src/components/manage/moderation/InstancePolicyForm.vue:17 #: front/src/views/admin/moderation/AccountsDetail.vue:156 #: front/src/views/admin/moderation/AccountsDetail.vue:160 -msgctxt "*/*/*" +msgctxt "*/*/*/State of feature" msgid "Enabled" msgstr "" @@ -1552,9 +1743,9 @@ msgctxt "Content/Search/Input.Placeholder" msgid "Enter a radio name…" msgstr "" -#: front/src/components/library/Albums.vue:119 +#: front/src/components/library/Albums.vue:128 msgctxt "Content/Search/Input.Placeholder" -msgid "Enter album title..." +msgid "Enter album title…" msgstr "" #: front/src/components/library/Artists.vue:116 @@ -1569,15 +1760,15 @@ msgstr "" #: front/src/views/auth/PasswordReset.vue:54 msgctxt "Content/Signup/Input.Placeholder" -msgid "Enter the email address binded to your account" +msgid "Enter the email address linked to your account" msgstr "" -#: front/src/components/auth/Signup.vue:103 +#: front/src/components/auth/SignupForm.vue:96 msgctxt "Content/Signup/Form/Placeholder" msgid "Enter your email" msgstr "" -#: front/src/components/auth/Signup.vue:98 src/components/auth/Signup.vue:100 +#: front/src/components/auth/SignupForm.vue:91 src/components/auth/SignupForm.vue:93 msgctxt "Content/Signup/Form/Placeholder" msgid "Enter your invitation code (case insensitive)" msgstr "" @@ -1587,12 +1778,12 @@ msgctxt "Content/Library/Input.Placeholder/Verb" msgid "Enter your search query…" msgstr "" -#: front/src/components/auth/Signup.vue:102 +#: front/src/components/auth/SignupForm.vue:95 msgctxt "Content/Signup/Form/Placeholder" msgid "Enter your username" msgstr "" -#: front/src/components/auth/Login.vue:83 +#: front/src/components/auth/LoginForm.vue:81 msgctxt "Content/Login/Input.Placeholder" msgid "Enter your username or email" msgstr "" @@ -1609,7 +1800,7 @@ msgctxt "Popup/Import/Table.Label/Noun" msgid "Error detail" msgstr "" -#: front/src/views/admin/Settings.vue:87 +#: front/src/views/admin/Settings.vue:89 msgctxt "Content/Admin/Menu" msgid "Error reporting" msgstr "" @@ -1665,16 +1856,12 @@ msgctxt "Popup/Moderation/Error message" msgid "Error while fetching application data" msgstr "" -#: front/src/views/admin/moderation/DomainsDetail.vue:118 +#: front/src/views/admin/moderation/DomainsDetail.vue:155 msgctxt "Content/Moderation/Table" msgid "Error while fetching node info" msgstr "" #: front/src/components/admin/SettingsGroup.vue:5 -msgctxt "Content/Settings/Error message.Title" -msgid "Error while saving settings" -msgstr "" - #: front/src/components/federation/FetchButton.vue:73 msgctxt "Content/*/Error message.Title" msgid "Error while saving settings" @@ -1685,6 +1872,16 @@ msgctxt "Content/Library/Error message.Title" msgid "Error while submitting edit" msgstr "" +#: front/src/components/manage/moderation/NoteForm.vue:3 +msgctxt "Content/Moderation/Error message.Title" +msgid "Error while submitting note" +msgstr "" + +#: front/src/components/moderation/ReportModal.vue:11 +msgctxt "Popup/Moderation/Error message" +msgid "Error while submitting report" +msgstr "" + #: front/src/components/mixins/Translations.vue:32 #: front/src/components/mixins/Translations.vue:33 msgctxt "Content/Library/Table/Short" @@ -1719,9 +1916,14 @@ msgctxt "Content/Radio/Table.Label/Verb" msgid "Exclude" msgstr "" +#: front/src/components/common/CollapseLink.vue:2 +msgctxt "*/*/Button,Label" +msgid "Expand" +msgstr "" + #: front/src/components/manage/users/InvitationsTable.vue:41 -#: front/src/components/mixins/Translations.vue:49 -#: front/src/components/mixins/Translations.vue:50 +#: front/src/components/mixins/Translations.vue:59 +#: front/src/components/mixins/Translations.vue:60 msgctxt "Content/Admin/Table.Label/Noun" msgid "Expiration date" msgstr "" @@ -1747,31 +1949,26 @@ msgctxt "Content/Library/Dropdown" msgid "Failed" msgstr "" -#: front/src/views/content/remote/Card.vue:62 +#: front/src/views/content/remote/Card.vue:75 msgctxt "Content/Library/Card.List item/Noun" msgid "Failed tracks:" msgstr "" -#: front/src/views/admin/library/AlbumDetail.vue:165 -#: front/src/views/admin/library/ArtistDetail.vue:154 -#: front/src/views/admin/library/TrackDetail.vue:217 +#: front/src/views/admin/library/AlbumDetail.vue:171 +#: front/src/views/admin/library/ArtistDetail.vue:159 +#: front/src/views/admin/library/TrackDetail.vue:223 msgctxt "*/*/*" msgid "Favorited tracks" msgstr "" -#: front/src/components/Sidebar.vue:66 +#: front/src/components/Sidebar.vue:66 src/components/mixins/Translations.vue:88 +#: front/src/components/mixins/Translations.vue:89 msgctxt "Sidebar/Favorites/List item.Link/Noun" msgid "Favorites" msgstr "" -#: front/src/components/mixins/Translations.vue:76 -#: front/src/components/mixins/Translations.vue:77 -msgctxt "Content/OAuth Scopes/Label" -msgid "Favorites" -msgstr "" - -#: front/src/views/admin/Settings.vue:84 -msgctxt "Content/Admin/Menu" +#: front/src/components/About.vue:110 src/views/admin/Settings.vue:84 +msgctxt "*/*/*" msgid "Federation" msgstr "" @@ -1795,6 +1992,11 @@ msgctxt "Content/Radio/Table.Label/Noun" msgid "Filter name" msgstr "" +#: front/src/components/Home.vue:118 +msgctxt "Content/Home/Link" +msgid "Find another pod" +msgstr "" + #: front/src/components/manage/library/UploadsTable.vue:26 #: front/src/components/mixins/Translations.vue:36 #: front/src/views/content/libraries/FilesTable.vue:17 @@ -1804,25 +2006,31 @@ msgid "Finished" msgstr "" #: front/src/components/manage/moderation/AccountsTable.vue:42 -#: front/src/components/manage/moderation/DomainsTable.vue:41 -#: front/src/views/admin/library/AlbumDetail.vue:149 -#: front/src/views/admin/library/ArtistDetail.vue:138 -#: front/src/views/admin/library/LibraryDetail.vue:153 -#: front/src/views/admin/library/TrackDetail.vue:201 +#: front/src/components/manage/moderation/DomainsTable.vue:49 +#: front/src/views/admin/library/AlbumDetail.vue:155 +#: front/src/views/admin/library/ArtistDetail.vue:143 +#: front/src/views/admin/library/LibraryDetail.vue:162 +#: front/src/views/admin/library/TagDetail.vue:98 +#: front/src/views/admin/library/TrackDetail.vue:207 #: front/src/views/admin/library/UploadDetail.vue:167 -#: front/src/views/admin/moderation/AccountsDetail.vue:235 -#: front/src/views/admin/moderation/DomainsDetail.vue:151 +#: front/src/views/admin/moderation/AccountsDetail.vue:236 +#: front/src/views/admin/moderation/DomainsDetail.vue:188 msgctxt "Content/Moderation/Table.Label/Short (Value is a date)" msgid "First seen" msgstr "" -#: front/src/components/mixins/Translations.vue:46 -#: front/src/components/mixins/Translations.vue:47 +#: front/src/components/mixins/Translations.vue:56 +#: front/src/components/mixins/Translations.vue:57 msgctxt "Content/Moderation/Dropdown/Noun" msgid "First seen date" msgstr "" -#: front/src/views/content/remote/Card.vue:87 +#: front/src/components/ShortcutsModal.vue:64 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Focus searchbar" +msgstr "" + +#: front/src/views/content/remote/Card.vue:100 msgctxt "Content/Library/Card.Button.Label/Verb" msgid "Follow" msgstr "" @@ -1832,36 +2040,32 @@ msgctxt "Content/Library/Title/Verb" msgid "Follow remote libraries" msgstr "" -#: front/src/views/content/remote/Card.vue:92 +#: front/src/views/content/remote/Card.vue:105 msgctxt "Content/Library/Card.Paragraph" msgid "Follow request pending approval" msgstr "" -#: front/src/components/mixins/Translations.vue:64 -#: front/src/views/admin/library/LibraryDetail.vue:161 +#: front/src/components/manage/library/LibrariesTable.vue:53 +#: front/src/components/mixins/Translations.vue:76 +#: front/src/views/admin/library/LibraryDetail.vue:170 #: front/src/views/content/libraries/Detail.vue:7 -#: front/src/components/mixins/Translations.vue:65 +#: front/src/components/mixins/Translations.vue:77 msgctxt "Content/Federation/*/Noun" msgid "Followers" msgstr "" -#: front/src/components/manage/library/LibrariesTable.vue:53 -msgctxt "Content/*/*/Noun" -msgid "Followers" -msgstr "" - -#: front/src/views/content/remote/Card.vue:103 +#: front/src/views/content/remote/Card.vue:116 msgctxt "Content/Library/Card.Paragraph" msgid "Following" msgstr "" -#: front/src/components/mixins/Translations.vue:84 -#: front/src/components/mixins/Translations.vue:85 +#: front/src/components/mixins/Translations.vue:96 +#: front/src/components/mixins/Translations.vue:97 msgctxt "Content/OAuth Scopes/Label" msgid "Follows" msgstr "" -#: front/src/components/library/TrackBase.vue:17 +#: front/src/components/library/TrackBase.vue:245 msgctxt "Content/Track/Paragraph" msgid "From album <a class=\"internal\" href=\"%{ albumUrl }\">%{ album }</a> by <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" msgstr "" @@ -1876,27 +2080,17 @@ msgctxt "Content/Settings/Paragraph'" msgid "Funkwhale is compatible with other music players that support the Subsonic API." msgstr "" -#: front/src/components/Home.vue:90 -msgctxt "Content/Home/Paragraph" -msgid "Funkwhale is dead simple to use." -msgstr "" - -#: front/src/components/Home.vue:39 -msgctxt "Content/Home/Paragraph" -msgid "Funkwhale is designed to make it easy to listen to music you like, or to discover new artists." -msgstr "" - -#: front/src/components/Home.vue:111 +#: front/src/components/Home.vue:88 msgctxt "Content/Home/Paragraph" -msgid "Funkwhale is free and gives you control on your music." +msgid "Funkwhale is free and developped by a friendly community of volunteers." msgstr "" -#: front/src/components/Home.vue:66 -msgctxt "Content/Home/Paragraph" -msgid "Funkwhale takes care of handling your music" +#: front/src/components/About.vue:78 +msgctxt "*/*/*" +msgid "Funkwhale version" msgstr "" -#: front/src/components/ShortcutsModal.vue:38 +#: front/src/components/ShortcutsModal.vue:56 msgctxt "Popup/Keyboard shortcuts/Title" msgid "General shortcuts" msgstr "" @@ -1906,31 +2100,16 @@ msgctxt "Content/Admin/Button.Label/Verb" msgid "Get a new invitation" msgstr "" -#: front/src/components/Home.vue:13 -msgctxt "Content/Home/Button.Label/Verb" -msgid "Get me to the library" -msgstr "" - -#: front/src/components/Home.vue:70 -msgctxt "Content/Home/List item/Verb" -msgid "Get quality metadata about your music thanks to <a href=\"%{ url }\" target=\"_blank\">MusicBrainz</a>" -msgstr "" - #: front/src/views/content/Home.vue:12 src/views/content/Home.vue:19 msgctxt "Content/Library/Button.Label/Verb" msgid "Get started" msgstr "" -#: front/src/components/Footer.vue:37 +#: front/src/components/Footer.vue:45 src/components/library/ImportStatusModal.vue:45 msgctxt "Footer/*/Link" msgid "Getting help" msgstr "" -#: front/src/components/library/ImportStatusModal.vue:45 -msgctxt "Popup/Import/Table.Label/Noun" -msgid "Getting help" -msgstr "" - #: front/src/components/common/ActionTable.vue:35 #: front/src/components/common/ActionTable.vue:56 msgctxt "Content/*/Button.Label/Short, Verb" @@ -1942,11 +2121,21 @@ msgctxt "Content/*/Button.Label/Verb" msgid "Go to home page" msgstr "" +#: front/src/views/Notifications.vue:27 src/views/Notifications.vue:61 +msgctxt "Content/Notifications/Button.Label" +msgid "Got it!" +msgstr "" + #: front/src/components/auth/Settings.vue:128 msgctxt "Content/Settings/Title" msgid "Hidden artists" msgstr "" +#: front/src/components/About.vue:155 +msgctxt "*/*/*/Verb" +msgid "Hide" +msgstr "" + #: front/src/components/manage/moderation/InstancePolicyForm.vue:114 msgctxt "Content/Moderation/Help text" msgid "Hide account or domain content, except from followers." @@ -1957,12 +2146,12 @@ msgctxt "Popup/*/Button.Label" msgid "Hide content" msgstr "" -#: front/src/components/audio/PlayButton.vue:26 +#: front/src/components/audio/PlayButton.vue:31 msgctxt "*/Queue/Dropdown/Button/Label/Short" msgid "Hide content from this artist" msgstr "" -#: front/src/components/audio/Player.vue:643 +#: front/src/components/audio/Player.vue:669 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Hide content from this artist…" msgstr "" @@ -1972,11 +2161,6 @@ msgctxt "Head/Home/Title" msgid "Home" msgstr "" -#: front/src/components/instance/Stats.vue:36 -msgctxt "Content/About/Paragraph/Unit" -msgid "Hours of music" -msgstr "" - #: front/src/components/auth/SubsonicTokenForm.vue:10 msgctxt "Content/Settings/Paragraph" msgid "However, accessing Funkwhale from those clients require a separate password you can set below." @@ -1984,7 +2168,7 @@ msgstr "" #: front/src/views/auth/PasswordResetConfirm.vue:24 msgctxt "Content/Signup/Paragraph" -msgid "If the email address provided in the previous step is valid and binded to a user account, you should receive an email with reset instructions in the next couple of minutes." +msgid "If the email address provided in the previous step is valid and linked to a user account, you should receive an email with reset instructions in the next couple of minutes." msgstr "" #: front/src/components/auth/Settings.vue:205 @@ -1992,6 +2176,12 @@ msgctxt "Content/Applications/Paragraph" msgid "If you authorize third-party applications to access your data, those applications will be listed here." msgstr "" +#: front/src/components/mixins/Translations.vue:46 +#: front/src/components/mixins/Translations.vue:47 +msgctxt "Content/Moderation/Dropdown" +msgid "Illegal content" +msgstr "" + #: front/src/components/library/ImportStatusModal.vue:3 msgctxt "Popup/Import/Title" msgid "Import detail" @@ -2003,14 +2193,10 @@ msgid "Import reference" msgstr "" #: front/src/components/manage/library/UploadsTable.vue:20 -#: front/src/views/content/libraries/FilesTable.vue:11 -#: front/src/views/content/libraries/FilesTable.vue:59 -msgctxt "Content/Library/*/Noun" -msgid "Import status" -msgstr "" - #: front/src/components/manage/library/UploadsTable.vue:64 #: front/src/views/admin/library/UploadDetail.vue:131 +#: front/src/views/content/libraries/FilesTable.vue:11 +#: front/src/views/content/libraries/FilesTable.vue:59 msgctxt "Content/*/*/Noun" msgid "Import status" msgstr "" @@ -2051,12 +2237,12 @@ msgctxt "Popup/Moderation/List item" msgid "In radio suggestions" msgstr "" -#: front/src/components/manage/users/UsersTable.vue:54 +#: front/src/components/manage/users/UsersTable.vue:55 msgctxt "Content/Admin/Table" msgid "Inactive" msgstr "" -#: front/src/components/ShortcutsModal.vue:71 +#: front/src/components/ShortcutsModal.vue:124 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Increase volume" msgstr "" @@ -2074,7 +2260,7 @@ msgctxt "Content/Settings/Dropdown/Short" msgid "Instance" msgstr "" -#: front/src/views/admin/moderation/DomainsDetail.vue:71 +#: front/src/views/admin/moderation/DomainsDetail.vue:99 msgctxt "Content/Moderation/Title" msgid "Instance data" msgstr "" @@ -2099,17 +2285,25 @@ msgctxt "Popup/Instance/Input.Label/Noun" msgid "Instance URL" msgstr "" +#: front/src/components/manage/moderation/ReportCard.vue:92 +#: front/src/components/manage/moderation/ReportCard.vue:203 +msgctxt "Content/*/*/Noun" +msgid "Internal notes" +msgstr "" + #: front/src/components/library/FileUpload.vue:268 msgctxt "Content/Library/Help text" msgid "Invalid file type, ensure you are uploading an audio file. Supported file extensions are %{ extensions }" msgstr "" #: front/src/components/library/ImportStatusModal.vue:139 +#: front/src/components/mixins/Translations.vue:45 +#: front/src/components/mixins/Translations.vue:46 msgctxt "Popup/Import/Error.Label" msgid "Invalid metadata" msgstr "" -#: front/src/components/auth/Signup.vue:44 +#: front/src/components/auth/SignupForm.vue:40 #: front/src/components/manage/users/InvitationForm.vue:11 msgctxt "Content/*/Input.Label" msgid "Invitation code" @@ -2121,7 +2315,13 @@ msgctxt "*/Admin/*/Noun" msgid "Invitations" msgstr "" -#: front/src/components/Footer.vue:41 +#: front/src/components/manage/moderation/DomainsTable.vue:9 +#: front/src/views/admin/moderation/DomainsDetail.vue:106 +msgctxt "Content/Moderation/*/Adjective" +msgid "Is present on allow-list" +msgstr "" + +#: front/src/components/Footer.vue:49 msgctxt "Footer/*/List item.Link" msgid "Issue tracker" msgstr "" @@ -2131,9 +2331,10 @@ msgctxt "Popup/Instance/Error message.Title" msgid "It is not possible to connect to the given URL" msgstr "" -#: front/src/components/Home.vue:50 -msgctxt "Content/Home/List item/Verb" -msgid "Keep a track of your favorite songs" +#: front/src/components/mixins/Translations.vue:65 +#: front/src/components/mixins/Translations.vue:66 +msgctxt "*/*/*/Noun" +msgid "Items" msgstr "" #: front/src/components/Footer.vue:33 src/components/ShortcutsModal.vue:3 @@ -2141,7 +2342,7 @@ msgctxt "*/*/*/Noun" msgid "Keyboard shortcuts" msgstr "" -#: front/src/views/admin/moderation/DomainsDetail.vue:161 +#: front/src/views/admin/moderation/DomainsDetail.vue:198 msgctxt "Content/Moderation/Table.Label.Link" msgid "Known accounts" msgstr "" @@ -2152,15 +2353,15 @@ msgid "Known libraries" msgstr "" #: front/src/components/manage/users/UsersTable.vue:41 -#: front/src/components/mixins/Translations.vue:58 -#: front/src/views/admin/moderation/AccountsDetail.vue:205 -#: front/src/components/mixins/Translations.vue:59 +#: front/src/components/mixins/Translations.vue:70 +#: front/src/views/admin/moderation/AccountsDetail.vue:206 +#: front/src/components/mixins/Translations.vue:71 msgctxt "Content/Profile/Table.Label/Short, Noun (Value is a date)" msgid "Last activity" msgstr "" -#: front/src/views/admin/moderation/AccountsDetail.vue:188 -#: front/src/views/admin/moderation/DomainsDetail.vue:78 +#: front/src/views/admin/moderation/AccountsDetail.vue:189 +#: front/src/views/admin/moderation/DomainsDetail.vue:115 msgctxt "Content/*/Table.Label" msgid "Last checked" msgstr "" @@ -2175,13 +2376,13 @@ msgctxt "Content/Moderation/Table.Label/Noun" msgid "Last seen" msgstr "" -#: front/src/components/mixins/Translations.vue:47 -#: front/src/components/mixins/Translations.vue:48 +#: front/src/components/mixins/Translations.vue:57 +#: front/src/components/mixins/Translations.vue:58 msgctxt "Content/Moderation/Dropdown/Noun" msgid "Last seen date" msgstr "" -#: front/src/views/content/remote/Card.vue:60 +#: front/src/views/content/remote/Card.vue:73 msgctxt "Content/Library/Card.List item/Noun" msgid "Last update:" msgstr "" @@ -2191,9 +2392,9 @@ msgctxt "Modal/*/Button.Label/Short, Verb" msgid "Launch" msgstr "" -#: front/src/components/Home.vue:10 -msgctxt "Content/Home/Button.Label/Verb" -msgid "Learn more about this instance" +#: front/src/components/Home.vue:35 +msgctxt "Content/Home/Link" +msgid "Learn more" msgstr "" #: front/src/components/manage/users/InvitationForm.vue:58 @@ -2201,29 +2402,31 @@ msgctxt "Content/Admin/Input.Placeholder" msgid "Leave empty for a random code" msgstr "" -#: front/src/components/audio/EmbedWizard.vue:7 +#: front/src/components/audio/EmbedWizard.vue:17 msgctxt "Popup/Embed/Paragraph" msgid "Leave empty for a responsive widget" msgstr "" -#: front/src/views/admin/library/AlbumDetail.vue:232 -#: front/src/views/admin/library/ArtistDetail.vue:221 -#: front/src/views/admin/library/TrackDetail.vue:284 -#: front/src/views/admin/moderation/AccountsDetail.vue:327 -#: front/src/views/admin/moderation/DomainsDetail.vue:234 -#: front/src/views/content/Base.vue:5 +#: front/src/components/mixins/Translations.vue:64 +#: front/src/components/mixins/Translations.vue:65 msgctxt "*/*/*/Noun" -msgid "Libraries" +msgid "Length" msgstr "" +#: front/src/views/admin/library/AlbumDetail.vue:248 +#: front/src/views/admin/library/ArtistDetail.vue:236 #: front/src/views/admin/library/Base.vue:17 #: front/src/views/admin/library/LibrariesList.vue:24 -msgctxt "*/*/*" +#: front/src/views/admin/library/TrackDetail.vue:300 +#: front/src/views/admin/moderation/AccountsDetail.vue:339 +#: front/src/views/admin/moderation/DomainsDetail.vue:271 +#: front/src/views/content/Base.vue:5 +msgctxt "*/*/*/Noun" msgid "Libraries" msgstr "" -#: front/src/components/mixins/Translations.vue:72 -#: front/src/components/mixins/Translations.vue:73 +#: front/src/components/mixins/Translations.vue:84 +#: front/src/components/mixins/Translations.vue:85 msgctxt "Content/OAuth Scopes/Label" msgid "Libraries and uploads" msgstr "" @@ -2233,12 +2436,14 @@ msgctxt "Content/Library/Paragraph" msgid "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." msgstr "" -#: front/src/components/Sidebar.vue:85 src/components/instance/Stats.vue:30 +#: front/src/components/Sidebar.vue:85 #: front/src/components/manage/library/UploadsTable.vue:60 -#: front/src/components/manage/users/UsersTable.vue:173 +#: front/src/components/manage/users/UsersTable.vue:174 +#: front/src/components/mixins/Report.vue:77 #: front/src/views/admin/library/UploadDetail.vue:144 -#: front/src/views/admin/moderation/AccountsDetail.vue:498 -msgctxt "*/*/*" +#: front/src/views/admin/moderation/AccountsDetail.vue:518 src/entities.js:132 +#: front/src/components/mixins/Report.vue:78 +msgctxt "*/*/*/Noun" msgid "Library" msgstr "" @@ -2269,21 +2474,37 @@ msgstr "" #: front/src/components/library/TrackDetail.vue:19 #: front/src/components/manage/library/TracksTable.vue:43 -#: front/src/views/admin/library/TrackDetail.vue:159 src/edits.js:61 +#: front/src/views/admin/library/TrackDetail.vue:165 src/edits.js:84 +#: front/src/entities.js:115 msgctxt "Content/*/*/Noun" msgid "License" msgstr "" -#: front/src/views/admin/library/AlbumDetail.vue:157 -#: front/src/views/admin/library/ArtistDetail.vue:146 -#: front/src/views/admin/library/TrackDetail.vue:209 -msgctxt "*/*/*/Noun" -msgid "Listenings" +#: front/src/components/Footer.vue:90 +msgctxt "Footer/Settings/Dropdown.Label/Theme name" +msgid "Light" msgstr "" -#: front/src/components/mixins/Translations.vue:80 -#: front/src/components/mixins/Translations.vue:81 -msgctxt "Content/OAuth Scopes/Label" +#: front/src/views/admin/library/AlbumDetail.vue:188 +#: front/src/views/admin/library/ArtistDetail.vue:176 +#: front/src/views/admin/library/LibraryDetail.vue:179 +#: front/src/views/admin/library/TrackDetail.vue:240 +#: front/src/views/admin/moderation/AccountsDetail.vue:269 +msgctxt "Content/Moderation/Table.Label/Noun" +msgid "Linked reports" +msgstr "" + +#: front/src/components/Home.vue:135 +msgctxt "Content/Home/Link" +msgid "Listen to public albums and playlists shared on this pod" +msgstr "" + +#: front/src/components/mixins/Translations.vue:92 +#: front/src/views/admin/library/AlbumDetail.vue:163 +#: front/src/views/admin/library/ArtistDetail.vue:151 +#: front/src/views/admin/library/TrackDetail.vue:215 +#: front/src/components/mixins/Translations.vue:93 +msgctxt "*/*/*/Noun" msgid "Listenings" msgstr "" @@ -2309,7 +2530,7 @@ msgctxt "Content/Library/Paragraph" msgid "Loading library data…" msgstr "" -#: front/src/views/Notifications.vue:19 +#: front/src/views/Notifications.vue:84 msgctxt "Content/Notifications/Paragraph" msgid "Loading notifications…" msgstr "" @@ -2334,6 +2555,7 @@ msgstr "" #: front/src/components/manage/library/LibrariesTable.vue:75 #: front/src/components/manage/library/TracksTable.vue:71 #: front/src/components/manage/library/UploadsTable.vue:99 +#: front/src/components/manage/moderation/ReportCard.vue:173 #: front/src/views/admin/library/AlbumDetail.vue:19 #: front/src/views/admin/library/ArtistDetail.vue:18 #: front/src/views/admin/library/LibraryDetail.vue:18 @@ -2349,12 +2571,12 @@ msgctxt "Content/Moderation/*/Short, Noun" msgid "Local account" msgstr "" -#: front/src/components/auth/Login.vue:84 +#: front/src/components/Home.vue:96 src/views/auth/Login.vue:29 msgctxt "Head/Login/Title" msgid "Log In" msgstr "" -#: front/src/components/auth/Login.vue:4 +#: front/src/views/auth/Login.vue:4 msgctxt "Content/Login/Title/Verb" msgid "Log in to your Funkwhale account" msgstr "" @@ -2369,7 +2591,7 @@ msgctxt "Sidebar/Profile/List item.Link" msgid "Logged in as %{ username }" msgstr "" -#: front/src/components/Sidebar.vue:54 src/components/auth/Login.vue:42 +#: front/src/components/Sidebar.vue:54 src/components/auth/LoginForm.vue:41 msgctxt "*/Login/*/Verb" msgid "Login" msgstr "" @@ -2389,31 +2611,36 @@ msgctxt "Content/Library/Paragraph" msgid "Looks like you don't have a library, it's time to create one." msgstr "" -#: front/src/components/audio/Player.vue:632 src/components/audio/Player.vue:633 +#: front/src/components/audio/Player.vue:658 src/components/audio/Player.vue:659 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Looping disabled. Click to switch to single-track looping." msgstr "" -#: front/src/components/audio/Player.vue:635 src/components/audio/Player.vue:636 +#: front/src/components/audio/Player.vue:661 src/components/audio/Player.vue:662 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Looping on a single track. Click to switch to whole queue looping." msgstr "" -#: front/src/components/audio/Player.vue:638 src/components/audio/Player.vue:639 +#: front/src/components/audio/Player.vue:664 src/components/audio/Player.vue:665 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Looping on whole queue. Click to disable looping." msgstr "" -#: front/src/components/Sidebar.vue:223 +#: front/src/components/Sidebar.vue:230 msgctxt "Sidebar/*/Hidden text" msgid "Main menu" msgstr "" -#: front/src/views/admin/library/Base.vue:31 +#: front/src/views/admin/library/Base.vue:34 msgctxt "Head/Admin/Title" msgid "Manage library" msgstr "" +#: front/src/components/manage/moderation/InstancePolicyModal.vue:8 +msgctxt "Popup/Moderation/Title/Verb" +msgid "Manage moderation rules for %{ obj }" +msgstr "" + #: front/src/components/playlists/PlaylistModal.vue:3 msgctxt "Popup/Playlist/Title/Verb" msgid "Manage playlists" @@ -2429,7 +2656,7 @@ msgctxt "Content/Playlist/Button.Label/Verb" msgid "Manage your playlists" msgstr "" -#: front/src/views/Notifications.vue:14 +#: front/src/views/Notifications.vue:79 msgctxt "Content/Notifications/Button.Label/Verb" msgid "Mark all as read" msgstr "" @@ -2444,12 +2671,12 @@ msgctxt "Content/Notifications/Button.Tooltip/Verb" msgid "Mark as unread" msgstr "" -#: front/src/views/admin/moderation/AccountsDetail.vue:310 +#: front/src/views/admin/moderation/AccountsDetail.vue:321 msgctxt "Content/*/*/Unit" msgid "MB" msgstr "" -#: front/src/components/audio/Player.vue:625 +#: front/src/components/audio/Player.vue:651 msgctxt "Sidebar/Player/Hidden text" msgid "Media player" msgstr "" @@ -2459,38 +2686,56 @@ msgctxt "Content/Profile/Paragraph" msgid "Member since %{ date }" msgstr "" +#: front/src/components/manage/moderation/ReportCard.vue:109 +#: front/src/components/moderation/ReportModal.vue:41 +msgctxt "*/*/Field.Label/Noun" +msgid "Message" +msgstr "" + #: front/src/components/Footer.vue:32 msgctxt "Footer/*/List item.Link" msgid "Mobile and desktop apps" msgstr "" -#: front/src/components/Sidebar.vue:96 src/components/manage/users/UsersTable.vue:177 -#: front/src/views/admin/moderation/AccountsDetail.vue:502 -#: front/src/views/admin/moderation/Base.vue:21 +#: front/src/components/Home.vue:143 +msgctxt "Content/Home/Link" +msgid "Mobile apps" +msgstr "" + +#: front/src/components/Sidebar.vue:96 src/components/manage/users/UsersTable.vue:178 +#: front/src/views/admin/Settings.vue:85 +#: front/src/views/admin/moderation/AccountsDetail.vue:522 +#: front/src/views/admin/moderation/Base.vue:43 msgctxt "*/Moderation/*" msgid "Moderation" msgstr "" #: front/src/views/admin/moderation/AccountsDetail.vue:78 -#: front/src/views/admin/moderation/DomainsDetail.vue:42 +#: front/src/views/admin/moderation/DomainsDetail.vue:70 msgctxt "Content/Moderation/Card.Paragraph" msgid "Moderation policies help you control how your instance interact with a given domain or account." msgstr "" +#: front/src/components/manage/moderation/InstancePolicyModal.vue:4 +msgctxt "Content/Moderation/Button.Label" +msgid "Moderation rules…" +msgstr "" + #: front/src/components/library/EditCard.vue:5 msgctxt "Content/Library/Card/Short" msgid "Modification %{ id }" msgstr "" -#: front/src/components/mixins/Translations.vue:48 -#: front/src/components/mixins/Translations.vue:49 +#: front/src/components/mixins/Translations.vue:58 +#: front/src/components/mixins/Translations.vue:59 msgctxt "Content/Playlist/Dropdown/Noun" msgid "Modification date" msgstr "" -#: front/src/components/library/AlbumBase.vue:42 -#: front/src/components/library/ArtistBase.vue:53 -#: front/src/components/library/TrackBase.vue:61 +#: front/src/components/audio/PlayButton.vue:100 +#: front/src/components/library/AlbumBase.vue:43 +#: front/src/components/library/ArtistBase.vue:54 +#: front/src/components/library/TrackBase.vue:59 msgctxt "*/*/Button.Label/Noun" msgid "More…" msgstr "" @@ -2500,7 +2745,7 @@ msgctxt "*/*/*/Noun" msgid "Music" msgstr "" -#: front/src/components/audio/Player.vue:631 +#: front/src/components/audio/Player.vue:657 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Mute" msgstr "" @@ -2547,7 +2792,8 @@ msgctxt "Content/Library/Title" msgid "My libraries" msgstr "" -#: front/src/components/audio/track/Row.vue:40 src/components/library/EditCard.vue:60 +#: front/src/components/About.vue:105 src/components/audio/track/Row.vue:40 +#: front/src/components/library/EditCard.vue:60 #: front/src/components/library/EditForm.vue:70 #: front/src/components/library/TrackDetail.vue:34 #: front/src/components/library/TrackDetail.vue:43 @@ -2557,54 +2803,56 @@ msgstr "" #: front/src/components/manage/library/TracksTable.vue:76 #: front/src/components/manage/library/UploadsTable.vue:121 #: front/src/components/manage/library/UploadsTable.vue:128 -#: front/src/components/manage/users/UsersTable.vue:61 +#: front/src/components/manage/moderation/ReportCard.vue:78 +#: front/src/components/manage/moderation/ReportCard.vue:87 +#: front/src/components/manage/moderation/ReportCard.vue:193 +#: front/src/components/manage/users/UsersTable.vue:62 #: front/src/views/admin/library/UploadDetail.vue:179 #: front/src/views/admin/library/UploadDetail.vue:214 #: front/src/views/admin/library/UploadDetail.vue:233 #: front/src/views/admin/library/UploadDetail.vue:244 #: front/src/views/admin/library/UploadDetail.vue:257 -#: front/src/views/admin/moderation/AccountsDetail.vue:192 -#: front/src/views/admin/moderation/DomainsDetail.vue:82 +#: front/src/views/admin/moderation/AccountsDetail.vue:193 +#: front/src/views/admin/moderation/DomainsDetail.vue:119 #: front/src/views/content/libraries/FilesTable.vue:95 #: front/src/views/content/libraries/FilesTable.vue:101 msgctxt "*/*/*" msgid "N/A" msgstr "" -#: front/src/components/manage/library/LibrariesTable.vue:48 -#: front/src/components/manage/library/UploadsTable.vue:59 -msgctxt "*/*/*" -msgid "Name" -msgstr "" - #: front/src/components/auth/ApplicationForm.vue:9 -msgctxt "Content/Applications/Input.Label/Noun" -msgid "Name" -msgstr "" - #: front/src/components/auth/Settings.vue:133 #: front/src/components/manage/library/ArtistsTable.vue:39 +#: front/src/components/manage/library/LibrariesTable.vue:48 +#: front/src/components/manage/library/TagsTable.vue:41 +#: front/src/components/manage/library/UploadsTable.vue:59 #: front/src/components/manage/moderation/AccountsTable.vue:39 -#: front/src/components/manage/moderation/DomainsTable.vue:38 -#: front/src/components/mixins/Translations.vue:53 +#: front/src/components/manage/moderation/DomainsTable.vue:46 +#: front/src/components/mixins/Translations.vue:63 #: front/src/components/playlists/PlaylistModal.vue:45 -#: front/src/views/admin/library/ArtistDetail.vue:98 +#: front/src/views/admin/library/ArtistDetail.vue:103 #: front/src/views/admin/library/LibraryDetail.vue:85 +#: front/src/views/admin/library/TagDetail.vue:68 #: front/src/views/admin/library/UploadDetail.vue:92 -#: front/src/views/admin/moderation/DomainsDetail.vue:97 -#: front/src/views/content/libraries/Form.vue:10 src/edits.js:10 -#: front/src/components/mixins/Translations.vue:54 +#: front/src/views/admin/moderation/DomainsDetail.vue:134 +#: front/src/views/content/libraries/Form.vue:10 src/edits.js:17 +#: front/src/components/mixins/Translations.vue:64 msgctxt "*/*/*/Noun" msgid "Name" msgstr "" +#: front/src/views/Notifications.vue:24 src/views/Notifications.vue:58 +msgctxt "*/*/*" +msgid "Never" +msgstr "" + #: front/src/components/auth/Settings.vue:88 #: front/src/views/auth/PasswordResetConfirm.vue:14 msgctxt "Content/Settings/Input.Label" msgid "New password" msgstr "" -#: front/src/components/Sidebar.vue:173 +#: front/src/components/Sidebar.vue:177 msgctxt "Sidebar/Player/Paragraph" msgid "New tracks will be appended here automatically." msgstr "" @@ -2614,21 +2862,18 @@ msgctxt "Content/Library/Card.Table.Header/Short" msgid "New value" msgstr "" -#: front/src/components/audio/Player.vue:629 +#: front/src/components/audio/Player.vue:655 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Next track" msgstr "" -#: front/src/components/Sidebar.vue:130 +#: front/src/components/Sidebar.vue:134 +#: front/src/components/manage/moderation/DomainsTable.vue:13 +#: front/src/views/admin/moderation/DomainsDetail.vue:110 msgctxt "*/*/*" msgid "No" msgstr "" -#: front/src/components/Home.vue:95 -msgctxt "Content/Home/List item" -msgid "No add-ons, no plugins : you only need a web library" -msgstr "" - #: front/src/components/audio/Search.vue:25 msgctxt "Content/Search/Paragraph" msgid "No album matched your query" @@ -2644,6 +2889,11 @@ msgctxt "Content/Track/Table.Paragraph" msgid "No copyright information available for this track" msgstr "" +#: front/src/components/About.vue:25 src/components/Home.vue:25 +msgctxt "Content/Home/Paragraph" +msgid "No description available." +msgstr "" + #: front/src/components/library/TrackDetail.vue:25 msgctxt "Content/Track/Table.Paragraph" msgid "No licensing information for this track" @@ -2654,7 +2904,7 @@ msgctxt "Content/Federation/Paragraph" msgid "No matching library." msgstr "" -#: front/src/views/Notifications.vue:28 +#: front/src/views/Notifications.vue:93 msgctxt "Content/Notifications/Paragraph" msgid "No notification to show." msgstr "" @@ -2664,6 +2914,16 @@ msgctxt "Content/*/Paragraph" msgid "No results were found." msgstr "" +#: front/src/components/About.vue:32 +msgctxt "Content/Home/Paragraph" +msgid "No rules available." +msgstr "" + +#: front/src/components/About.vue:39 +msgctxt "Content/Home/Paragraph" +msgid "No terms available." +msgstr "" + #: front/src/components/mixins/Translations.vue:10 #: front/src/components/mixins/Translations.vue:11 msgctxt "Content/Settings/Dropdown" @@ -2680,18 +2940,19 @@ msgctxt "Content/Admin/Table" msgid "Not used" msgstr "" -#: front/src/components/mixins/Translations.vue:100 -#: front/src/components/mixins/Translations.vue:101 -msgctxt "Content/OAuth Scopes/Label" +#: front/src/components/Sidebar.vue:46 src/components/mixins/Translations.vue:112 +#: front/src/views/Notifications.vue:151 src/components/mixins/Translations.vue:113 +msgctxt "*/Notifications/*" msgid "Notifications" msgstr "" -#: front/src/components/Sidebar.vue:46 src/views/Notifications.vue:76 -msgctxt "*/Notifications/*" -msgid "Notifications" +#: front/src/components/mixins/Translations.vue:47 +#: front/src/components/mixins/Translations.vue:48 +msgctxt "Content/Moderation/Dropdown" +msgid "Offensive content" msgstr "" -#: front/src/components/Footer.vue:47 +#: front/src/components/Footer.vue:55 msgctxt "Footer/*/List item.Link" msgid "Official website" msgstr "" @@ -2706,6 +2967,11 @@ msgctxt "Content/Library/Card.Table.Header/Short" msgid "Old value" msgstr "" +#: front/src/components/About.vue:90 +msgctxt "*/*/*/State of registrations" +msgid "Open" +msgstr "" + #: front/src/components/manage/users/InvitationsTable.vue:20 msgctxt "Content/Admin/Dropdown/Adjective" msgid "Open" @@ -2716,23 +2982,26 @@ msgctxt "Popup/Import/Table.Label/Value" msgid "Open a support thread (include the debug information below in your message)" msgstr "" -#: front/src/components/library/AlbumBase.vue:73 -#: front/src/components/library/ArtistBase.vue:84 -#: front/src/components/library/TrackBase.vue:92 +#: front/src/components/library/AlbumBase.vue:87 +#: front/src/components/library/ArtistBase.vue:99 +#: front/src/components/library/TagDetail.vue:11 +#: front/src/components/library/TrackBase.vue:103 +#: front/src/components/manage/moderation/ReportCard.vue:128 msgctxt "Content/Moderation/Link" msgid "Open in moderation interface" msgstr "" -#: front/src/views/admin/library/AlbumDetail.vue:31 -#: front/src/views/admin/library/ArtistDetail.vue:30 -#: front/src/views/admin/library/TrackDetail.vue:30 +#: front/src/views/admin/library/AlbumDetail.vue:37 +#: front/src/views/admin/library/ArtistDetail.vue:35 +#: front/src/views/admin/library/TagDetail.vue:21 +#: front/src/views/admin/library/TrackDetail.vue:36 msgctxt "Content/Moderation/Link/Verb" msgid "Open local profile" msgstr "" -#: front/src/views/admin/library/AlbumDetail.vue:46 -#: front/src/views/admin/library/ArtistDetail.vue:45 -#: front/src/views/admin/library/TrackDetail.vue:45 +#: front/src/views/admin/library/AlbumDetail.vue:52 +#: front/src/views/admin/library/ArtistDetail.vue:50 +#: front/src/views/admin/library/TrackDetail.vue:51 msgctxt "Content/Moderation/Link/Verb" msgid "Open on MusicBrainz" msgstr "" @@ -2742,10 +3011,10 @@ msgctxt "Content/Moderation/Link/Verb" msgid "Open profile" msgstr "" -#: front/src/views/admin/library/AlbumDetail.vue:54 -#: front/src/views/admin/library/ArtistDetail.vue:53 +#: front/src/views/admin/library/AlbumDetail.vue:60 +#: front/src/views/admin/library/ArtistDetail.vue:58 #: front/src/views/admin/library/LibraryDetail.vue:49 -#: front/src/views/admin/library/TrackDetail.vue:53 +#: front/src/views/admin/library/TrackDetail.vue:59 #: front/src/views/admin/library/UploadDetail.vue:50 #: front/src/views/admin/moderation/AccountsDetail.vue:52 msgctxt "Content/Moderation/Link/Verb" @@ -2765,44 +3034,55 @@ msgstr "" #: front/src/components/favorites/List.vue:32 src/components/library/Radios.vue:41 #: front/src/components/manage/library/EditsCardList.vue:37 #: front/src/components/manage/users/UsersTable.vue:17 +#: front/src/views/admin/moderation/ReportsList.vue:42 #: front/src/views/playlists/List.vue:25 msgctxt "Content/Search/Dropdown.Label/Noun" msgid "Order" msgstr "" #: front/src/components/favorites/List.vue:24 src/components/library/Albums.vue:15 -#: front/src/components/library/Artists.vue:15 src/components/library/Radios.vue:33 +#: front/src/components/library/Artists.vue:19 src/components/library/Radios.vue:33 #: front/src/components/manage/library/AlbumsTable.vue:11 #: front/src/components/manage/library/ArtistsTable.vue:11 #: front/src/components/manage/library/EditsCardList.vue:29 #: front/src/components/manage/library/LibrariesTable.vue:20 +#: front/src/components/manage/library/TagsTable.vue:11 #: front/src/components/manage/library/TracksTable.vue:11 #: front/src/components/manage/library/UploadsTable.vue:30 #: front/src/components/manage/moderation/AccountsTable.vue:11 -#: front/src/components/manage/moderation/DomainsTable.vue:9 +#: front/src/components/manage/moderation/DomainsTable.vue:17 #: front/src/components/manage/users/InvitationsTable.vue:9 #: front/src/components/manage/users/UsersTable.vue:9 +#: front/src/views/admin/moderation/ReportsList.vue:34 #: front/src/views/content/libraries/FilesTable.vue:21 #: front/src/views/playlists/List.vue:17 msgctxt "Content/Search/Dropdown.Label/Noun" msgid "Ordering" msgstr "" -#: front/src/components/library/Albums.vue:23 src/components/library/Artists.vue:23 +#: front/src/components/library/Albums.vue:27 src/components/library/Artists.vue:27 #: front/src/components/manage/library/AlbumsTable.vue:19 #: front/src/components/manage/library/ArtistsTable.vue:19 #: front/src/components/manage/library/LibrariesTable.vue:28 +#: front/src/components/manage/library/TagsTable.vue:19 #: front/src/components/manage/library/TracksTable.vue:19 #: front/src/components/manage/library/UploadsTable.vue:38 #: front/src/components/manage/moderation/AccountsTable.vue:19 -#: front/src/components/manage/moderation/DomainsTable.vue:17 +#: front/src/components/manage/moderation/DomainsTable.vue:25 #: front/src/views/content/libraries/FilesTable.vue:29 msgctxt "Content/Search/Dropdown.Label/Noun" msgid "Ordering direction" msgstr "" +#: front/src/components/mixins/Translations.vue:48 +#: front/src/components/mixins/Translations.vue:49 +msgctxt "Content/Moderation/Dropdown" +msgid "Other" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:143 #: front/src/components/manage/users/InvitationsTable.vue:38 -msgctxt "Content/Admin/Table.Label" +msgctxt "*/*/*" msgid "Owner" msgstr "" @@ -2821,12 +3101,13 @@ msgctxt "Content/*/Hidden text/Noun" msgid "Pagination" msgstr "" -#: front/src/components/auth/Login.vue:33 src/components/auth/Signup.vue:40 -msgctxt "Content/*/Input.Label" +#: front/src/components/auth/LoginForm.vue:32 src/components/auth/Settings.vue:291 +#: front/src/components/auth/SignupForm.vue:36 +msgctxt "*/*/*" msgid "Password" msgstr "" -#: front/src/components/auth/SubsonicTokenForm.vue:94 +#: front/src/components/auth/SubsonicTokenForm.vue:100 msgctxt "Content/Settings/Message" msgid "Password updated" msgstr "" @@ -2836,12 +3117,12 @@ msgctxt "Content/Signup/Card.Title" msgid "Password updated successfully" msgstr "" -#: front/src/components/audio/Player.vue:628 +#: front/src/components/audio/Player.vue:654 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Pause track" msgstr "" -#: front/src/components/ShortcutsModal.vue:59 +#: front/src/components/ShortcutsModal.vue:96 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Pause/play the current track" msgstr "" @@ -2870,7 +3151,7 @@ msgctxt "Content/Library/Label" msgid "Pending files" msgstr "" -#: front/src/components/Sidebar.vue:225 +#: front/src/components/Sidebar.vue:232 msgctxt "Sidebar/Notifications/Hidden text" msgid "Pending follow requests" msgstr "" @@ -2881,83 +3162,74 @@ msgctxt "Content/Admin/*/Noun" msgid "Pending review" msgstr "" -#: front/src/components/Sidebar.vue:226 +#: front/src/components/Sidebar.vue:233 msgctxt "Sidebar/Moderation/Hidden text" msgid "Pending review edits" msgstr "" +#: front/src/components/auth/Settings.vue:176 #: front/src/components/manage/users/UsersTable.vue:42 #: front/src/views/admin/moderation/AccountsDetail.vue:166 -msgctxt "Content/Admin/Table.Label/Noun" -msgid "Permissions" -msgstr "" - -#: front/src/components/auth/Settings.vue:176 msgctxt "Content/*/*/Noun" msgid "Permissions" msgstr "" #: front/src/components/audio/PlayButton.vue:9 -#: front/src/components/library/TrackBase.vue:26 +#: front/src/components/library/TrackBase.vue:24 msgctxt "*/Queue/Button.Label/Short, Verb" msgid "Play" msgstr "" #: front/src/components/audio/album/Card.vue:48 -#: front/src/components/audio/artist/Card.vue:44 -#: front/src/components/library/AlbumBase.vue:20 +#: front/src/components/library/AlbumBase.vue:21 #: front/src/components/library/AlbumDetail.vue:11 src/views/playlists/Detail.vue:24 msgctxt "Content/Queue/Button.Label/Short, Verb" msgid "Play all" msgstr "" -#: front/src/components/library/ArtistBase.vue:31 +#: front/src/components/library/ArtistBase.vue:32 msgctxt "Content/Artist/Button.Label/Verb" msgid "Play all albums" msgstr "" -#: front/src/components/audio/PlayButton.vue:76 +#: front/src/components/audio/PlayButton.vue:92 msgctxt "*/Queue/Dropdown/Button/Title" msgid "Play next" msgstr "" -#: front/src/components/ShortcutsModal.vue:67 +#: front/src/components/ShortcutsModal.vue:120 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Play next track" msgstr "" -#: front/src/components/audio/PlayButton.vue:74 +#: front/src/components/audio/PlayButton.vue:90 msgctxt "*/Queue/Dropdown/Button/Title" msgid "Play now" msgstr "" -#: front/src/components/ShortcutsModal.vue:63 +#: front/src/components/ShortcutsModal.vue:116 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Play previous track" msgstr "" -#: front/src/components/audio/PlayButton.vue:77 +#: front/src/components/audio/PlayButton.vue:93 msgctxt "*/Queue/Dropdown/Button/Title" msgid "Play similar songs" msgstr "" -#: front/src/components/Sidebar.vue:224 +#: front/src/components/Sidebar.vue:231 msgctxt "Sidebar/Player/Hidden text" msgid "Play this track" msgstr "" -#: front/src/components/audio/Player.vue:627 +#: front/src/components/audio/Player.vue:653 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Play track" msgstr "" -#: front/src/components/audio/PlayButton.vue:82 -msgctxt "*/Queue/Button/Title" -msgid "Play..." -msgstr "" - -#: front/src/views/playlists/Detail.vue:91 -msgctxt "Head/Playlist/Title" +#: front/src/components/mixins/Report.vue:66 src/views/playlists/Detail.vue:121 +#: front/src/components/mixins/Report.vue:67 +msgctxt "*/*/*" msgid "Playlist" msgstr "" @@ -2993,24 +3265,20 @@ msgctxt "Content/Playlist/Dropdown.Label" msgid "Playlist visibility" msgstr "" -#: front/src/components/mixins/Translations.vue:88 -#: front/src/components/mixins/Translations.vue:89 -msgctxt "Content/OAuth Scopes/Label" -msgid "Playlists" -msgstr "" - #: front/src/components/Sidebar.vue:71 src/components/library/Home.vue:16 -#: front/src/components/library/Library.vue:16 src/views/admin/Settings.vue:83 -#: front/src/views/admin/library/AlbumDetail.vue:173 -#: front/src/views/admin/library/ArtistDetail.vue:162 -#: front/src/views/admin/library/TrackDetail.vue:225 src/views/playlists/List.vue:106 +#: front/src/components/library/Library.vue:16 +#: front/src/components/mixins/Translations.vue:100 src/views/admin/Settings.vue:83 +#: front/src/views/admin/library/AlbumDetail.vue:179 +#: front/src/views/admin/library/ArtistDetail.vue:167 +#: front/src/views/admin/library/TrackDetail.vue:231 src/views/playlists/List.vue:106 +#: front/src/components/mixins/Translations.vue:101 msgctxt "*/*/*" msgid "Playlists" msgstr "" -#: front/src/components/Home.vue:56 -msgctxt "Content/Home/List item" -msgid "Playlists? We got them" +#: front/src/components/audio/EmbedWizard.vue:9 +msgctxt "Content/Embed/Message" +msgid "Please contact your admins and ask them to update the corresponding setting." msgstr "" #: front/src/components/auth/Settings.vue:79 @@ -3018,7 +3286,7 @@ msgctxt "Content/Settings/Error message.List item/Call to action" msgid "Please double-check your password is correct" msgstr "" -#: front/src/components/auth/Login.vue:9 +#: front/src/components/auth/LoginForm.vue:5 msgctxt "Content/Login/Error message.List item/Call to action" msgid "Please double-check your username/password couple is correct" msgstr "" @@ -3028,8 +3296,13 @@ msgctxt "Content/Settings/Paragraph" msgid "PNG, GIF or JPG. At most 2MB. Will be downscaled to 400x400px." msgstr "" -#: front/src/views/admin/library/TrackDetail.vue:137 -msgctxt "*/*/*/Noun" +#: front/src/components/About.vue:72 +msgctxt "Content/About/Header/Name" +msgid "Pod configuration" +msgstr "" + +#: front/src/views/admin/library/TrackDetail.vue:143 src/edits.js:70 +msgctxt "*/*/*/Short, Noun" msgid "Position" msgstr "" @@ -3038,12 +3311,12 @@ msgctxt "Content/Moderation/Help text" msgid "Prevent account or domain from triggering notifications, except from followers." msgstr "" -#: front/src/components/audio/EmbedWizard.vue:33 +#: front/src/components/audio/EmbedWizard.vue:43 msgctxt "Popup/Embed/Title/Noun" msgid "Preview" msgstr "" -#: front/src/components/audio/Player.vue:626 +#: front/src/components/audio/Player.vue:652 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Previous track" msgstr "" @@ -3054,7 +3327,7 @@ msgctxt "Content/Settings/Dropdown/Short" msgid "Private" msgstr "" -#: front/src/views/content/remote/Card.vue:43 +#: front/src/views/content/remote/Card.vue:56 msgctxt "Content/Library/Card.List item" msgid "Problem during scanning" msgstr "" @@ -3075,14 +3348,19 @@ msgctxt "Content/Library/Tab.Title/Short" msgid "Processing" msgstr "" -#: front/src/components/mixins/Translations.vue:68 -#: front/src/components/mixins/Translations.vue:69 +#: front/src/components/mixins/Translations.vue:80 +#: front/src/components/mixins/Translations.vue:81 msgctxt "Content/OAuth Scopes/Label" msgid "Profile" msgstr "" +#: front/src/components/auth/SignupForm.vue:5 +msgctxt "Content/Signup/Form/Paragraph" +msgid "Public registrations are not possible on this instance. You will need an invitation code to sign up." +msgstr "" + #: front/src/components/manage/moderation/AccountsTable.vue:188 -#: front/src/components/manage/moderation/DomainsTable.vue:168 +#: front/src/components/manage/moderation/DomainsTable.vue:186 #: front/src/views/content/libraries/Quota.vue:36 #: front/src/views/content/libraries/Quota.vue:39 #: front/src/views/content/libraries/Quota.vue:62 @@ -3113,7 +3391,7 @@ msgctxt "Sidebar/Queue/Tab.Title/Noun" msgid "Queue" msgstr "" -#: front/src/components/audio/Player.vue:322 +#: front/src/components/audio/Player.vue:329 msgctxt "Content/Queue/Message" msgid "Queue shuffled!" msgstr "" @@ -3144,16 +3422,12 @@ msgid "Radio updated" msgstr "" #: front/src/components/library/Library.vue:13 src/components/library/Radios.vue:142 +#: front/src/components/mixins/Translations.vue:104 +#: front/src/components/mixins/Translations.vue:105 msgctxt "*/*/*" msgid "Radios" msgstr "" -#: front/src/components/mixins/Translations.vue:92 -#: front/src/components/mixins/Translations.vue:93 -msgctxt "Content/OAuth Scopes/Label" -msgid "Radios" -msgstr "" - #: front/src/components/auth/ApplicationForm.vue:151 msgctxt "Content/OAuth Scopes/Label/Verb" msgid "Read" @@ -3180,15 +3454,15 @@ msgctxt "Content/Moderation/*/Noun" msgid "Reason" msgstr "" -#: front/src/views/admin/moderation/AccountsDetail.vue:251 -#: front/src/views/admin/moderation/DomainsDetail.vue:179 +#: front/src/views/admin/moderation/AccountsDetail.vue:252 +#: front/src/views/admin/moderation/DomainsDetail.vue:216 msgctxt "Content/Moderation/Table.Label/Noun" msgid "Received library follows" msgstr "" -#: front/src/components/manage/moderation/DomainsTable.vue:40 -#: front/src/components/mixins/Translations.vue:62 -#: front/src/components/mixins/Translations.vue:63 +#: front/src/components/manage/moderation/DomainsTable.vue:48 +#: front/src/components/mixins/Translations.vue:74 +#: front/src/components/mixins/Translations.vue:75 msgctxt "Content/Moderation/*/Noun" msgid "Received messages" msgstr "" @@ -3208,6 +3482,11 @@ msgctxt "Content/Home/Title" msgid "Recently added" msgstr "" +#: front/src/components/Home.vue:167 +msgctxt "Content/Home/Title" +msgid "Recently added albums" +msgstr "" + #: front/src/components/library/Home.vue:11 msgctxt "Content/Home/Title" msgid "Recently favorited" @@ -3234,14 +3513,14 @@ msgctxt "Popup/*/Message.Title" msgid "Refresh error" msgstr "" -#: front/src/views/admin/library/AlbumDetail.vue:50 -#: front/src/views/admin/library/ArtistDetail.vue:49 -#: front/src/views/admin/library/TrackDetail.vue:49 +#: front/src/views/admin/library/AlbumDetail.vue:56 +#: front/src/views/admin/library/ArtistDetail.vue:54 +#: front/src/views/admin/library/TrackDetail.vue:55 msgctxt "Content/Moderation/Button/Verb" msgid "Refresh from remote server" msgstr "" -#: front/src/views/admin/moderation/DomainsDetail.vue:127 +#: front/src/views/admin/moderation/DomainsDetail.vue:164 msgctxt "Content/Moderation/Button.Label/Verb" msgid "Refresh node info" msgstr "" @@ -3276,12 +3555,12 @@ msgctxt "Popup/*/Title" msgid "Refreshing object from remote…" msgstr "" -#: front/src/components/auth/Signup.vue:9 -msgctxt "Content/Signup/Form/Paragraph" -msgid "Registration are closed on this instance, you will need an invitation code to signup." +#: front/src/components/About.vue:86 +msgctxt "*/*/*" +msgid "Registrations" msgstr "" -#: front/src/components/manage/users/UsersTable.vue:71 +#: front/src/components/manage/users/UsersTable.vue:72 msgctxt "Content/Admin/Table, User role" msgid "Regular user" msgstr "" @@ -3306,8 +3585,8 @@ msgid "Rejected" msgstr "" #: front/src/components/manage/library/AlbumsTable.vue:43 -#: front/src/components/mixins/Translations.vue:44 src/edits.js:28 -#: front/src/components/mixins/Translations.vue:45 +#: front/src/components/mixins/Translations.vue:54 src/edits.js:43 +#: front/src/components/mixins/Translations.vue:55 msgctxt "Content/*/*/Noun" msgid "Release date" msgstr "" @@ -3317,6 +3596,11 @@ msgctxt "Content/Library/Paragraph" msgid "Remaining storage space" msgstr "" +#: front/src/views/Notifications.vue:18 src/views/Notifications.vue:52 +msgctxt "Content/Notifications/Label" +msgid "Remind me in:" +msgstr "" + #: front/src/views/content/remote/Home.vue:6 msgctxt "Content/Library/Title/Noun" msgid "Remote libraries" @@ -3342,6 +3626,12 @@ msgctxt "Content/Moderation/Button.Label" msgid "Remove filter" msgstr "" +#: front/src/components/manage/moderation/DomainsTable.vue:198 +#: front/src/views/admin/moderation/DomainsDetail.vue:39 +msgctxt "Content/Moderation/Action/Verb" +msgid "Remove from allow-list" +msgstr "" + #: front/src/components/favorites/TrackFavoriteIcon.vue:26 msgctxt "Content/Track/Icon.Tooltip/Verb" msgid "Remove from favorites" @@ -3362,18 +3652,80 @@ msgctxt "Popup/Library/Paragraph" msgid "Removes uploaded tracks that could not be processed by the server completely, adding the corresponding data to your quota." msgstr "" -#: front/src/components/auth/SubsonicTokenForm.vue:33 -#: front/src/components/auth/SubsonicTokenForm.vue:36 +#: front/src/components/audio/PlayButton.vue:94 +msgctxt "*/Queue/Dropdown/Button/Title" +msgid "Replace current queue" +msgstr "" + +#: front/src/components/mixins/Report.vue:6 src/components/mixins/Report.vue:7 +msgctxt "*/Moderation/*/Verb" +msgid "Report @%{ username }…" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:5 +msgctxt "Content/Moderation/Card/Short" +msgid "Report %{ id }" +msgstr "" + +#: front/src/components/moderation/ReportModal.vue:139 +msgctxt "*/Moderation/Message" +msgid "Report successfully submitted, thank you" +msgstr "" + +#: front/src/components/mixins/Report.vue:36 src/components/mixins/Report.vue:37 +msgctxt "*/Moderation/*/Verb" +msgid "Report this album…" +msgstr "" + +#: front/src/components/mixins/Report.vue:50 src/components/mixins/Report.vue:51 +msgctxt "*/Moderation/*/Verb" +msgid "Report this artist…" +msgstr "" + +#: front/src/components/mixins/Report.vue:72 src/components/mixins/Report.vue:73 +msgctxt "*/Moderation/*/Verb" +msgid "Report this library…" +msgstr "" + +#: front/src/components/mixins/Report.vue:61 src/components/mixins/Report.vue:62 +msgctxt "*/Moderation/*/Verb" +msgid "Report this playlist…" +msgstr "" + +#: front/src/components/mixins/Report.vue:23 src/components/mixins/Report.vue:24 +msgctxt "*/Moderation/*/Verb" +msgid "Report this track…" +msgstr "" + +#: front/src/components/audio/PlayButton.vue:95 +msgctxt "*/Moderation/*/Button/Label,Verb" +msgid "Report…" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:117 +msgctxt "Content/*/*/Short" +msgid "Reported object" +msgstr "" + +#: front/src/views/admin/moderation/Base.vue:5 +#: front/src/views/admin/moderation/ReportsList.vue:3 +#: front/src/views/admin/moderation/ReportsList.vue:208 +msgctxt "*/Moderation/*/Noun" +msgid "Reports" +msgstr "" + +#: front/src/components/auth/SubsonicTokenForm.vue:38 +#: front/src/components/auth/SubsonicTokenForm.vue:41 msgctxt "*/Settings/Button.Label/Verb" msgid "Request a new password" msgstr "" -#: front/src/components/auth/SubsonicTokenForm.vue:34 +#: front/src/components/auth/SubsonicTokenForm.vue:39 msgctxt "Popup/Settings/Title" msgid "Request a new Subsonic API password?" msgstr "" -#: front/src/components/auth/SubsonicTokenForm.vue:42 +#: front/src/components/auth/SubsonicTokenForm.vue:47 msgctxt "Content/Settings/Button.Label/Verb" msgid "Request a password" msgstr "" @@ -3383,34 +3735,50 @@ msgctxt "Popup/*/Loading.Title" msgid "Requesting a fetch…" msgstr "" -#: front/src/components/library/EditForm.vue:82 +#: front/src/components/library/EditForm.vue:94 msgctxt "Content/Library/Button.Label" -msgid "Reset to initial value: %{ value }" +msgid "Reset to initial value" msgstr "" -#: front/src/components/auth/Login.vue:35 src/views/auth/PasswordReset.vue:4 +#: front/src/components/auth/LoginForm.vue:34 src/views/auth/PasswordReset.vue:4 #: front/src/views/auth/PasswordReset.vue:53 msgctxt "*/Login/*/Verb" msgid "Reset your password" msgstr "" +#: front/src/components/manage/moderation/ReportCard.vue:83 +msgctxt "Content/*/*/Noun" +msgid "Resolution date" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:218 +msgctxt "Content/*/Button.Label/Verb" +msgid "Resolve" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:62 +#: front/src/views/admin/moderation/ReportsList.vue:20 +msgctxt "Content/*/*/Short" +msgid "Resolved" +msgstr "" + #: front/src/views/content/libraries/FilesTable.vue:223 msgctxt "Content/Library/Dropdown/Verb" msgid "Restart import" msgstr "" -#: front/src/components/favorites/List.vue:39 src/components/library/Albums.vue:30 -#: front/src/components/library/Artists.vue:30 src/components/library/Radios.vue:52 +#: front/src/components/library/EditForm.vue:31 +msgctxt "Content/Library/Button.Label" +msgid "Restrict to unreviewed edits" +msgstr "" + +#: front/src/components/favorites/List.vue:39 src/components/library/Albums.vue:34 +#: front/src/components/library/Artists.vue:34 src/components/library/Radios.vue:52 #: front/src/views/playlists/List.vue:32 msgctxt "Content/Search/Dropdown.Label/Noun" msgid "Results per page" msgstr "" -#: front/src/components/library/EditForm.vue:31 -msgctxt "Content/Library/Button.Label" -msgid "Retrict to unreviewed edits" -msgstr "" - #: front/src/views/auth/EmailConfirm.vue:17 msgctxt "Content/Signup/Link/Verb" msgid "Return to login" @@ -3441,52 +3809,53 @@ msgctxt "Content/Moderation/Card.Title/Noun" msgid "Rule" msgstr "" -#: front/src/components/admin/SettingsGroup.vue:67 +#: front/src/components/About.vue:28 src/components/About.vue:56 +msgctxt "Content/About/Header" +msgid "Rules" +msgstr "" + +#: front/src/components/admin/SettingsGroup.vue:75 #: front/src/components/library/radios/Builder.vue:34 msgctxt "Content/*/Button.Label/Verb" msgid "Save" msgstr "" -#: front/src/views/content/remote/Card.vue:175 +#: front/src/views/content/remote/Card.vue:203 msgctxt "Content/Library/Message" msgid "Scan launched" msgstr "" -#: front/src/views/content/remote/Card.vue:67 +#: front/src/views/content/remote/Card.vue:80 msgctxt "Content/Library/Card.Button.Label/Verb" msgid "Scan now" msgstr "" -#: front/src/views/content/remote/Card.vue:35 +#: front/src/views/content/remote/Card.vue:48 msgctxt "Content/Library/Card.List item" msgid "Scan pending" msgstr "" -#: front/src/views/content/remote/Card.vue:176 +#: front/src/views/content/remote/Card.vue:204 msgctxt "Content/Library/Message" msgid "Scan skipped (previous scan is too recent)" msgstr "" -#: front/src/views/content/remote/Card.vue:47 +#: front/src/views/content/remote/Card.vue:60 msgctxt "Content/Library/Card.List item" msgid "Scanned" msgstr "" -#: front/src/views/content/remote/Card.vue:51 +#: front/src/views/content/remote/Card.vue:64 msgctxt "Content/Library/Card.List item" msgid "Scanned with errors" msgstr "" -#: front/src/views/content/remote/Card.vue:39 +#: front/src/views/content/remote/Card.vue:52 msgctxt "Content/Library/Card.List item" msgid "Scanning… (%{ progress }%)" msgstr "" #: front/src/components/auth/ApplicationForm.vue:22 -msgctxt "Content/Applications/Input.Label/Noun" -msgid "Scopes" -msgstr "" - #: front/src/components/auth/Settings.vue:226 msgctxt "Content/*/*/Noun" msgid "Scopes" @@ -3498,12 +3867,14 @@ msgstr "" #: front/src/components/manage/library/ArtistsTable.vue:5 #: front/src/components/manage/library/EditsCardList.vue:6 #: front/src/components/manage/library/LibrariesTable.vue:5 +#: front/src/components/manage/library/TagsTable.vue:5 #: front/src/components/manage/library/TracksTable.vue:5 #: front/src/components/manage/library/UploadsTable.vue:5 #: front/src/components/manage/moderation/AccountsTable.vue:5 #: front/src/components/manage/moderation/DomainsTable.vue:5 #: front/src/components/manage/users/InvitationsTable.vue:5 #: front/src/components/manage/users/UsersTable.vue:5 +#: front/src/views/admin/moderation/ReportsList.vue:8 #: front/src/views/content/libraries/FilesTable.vue:5 src/views/playlists/List.vue:13 msgctxt "Content/Search/Input.Label/Noun" msgid "Search" @@ -3515,6 +3886,7 @@ msgid "Search a remote library" msgstr "" #: front/src/components/manage/library/EditsCardList.vue:211 +#: front/src/views/admin/moderation/ReportsList.vue:207 msgctxt "Content/Search/Input.Placeholder" msgid "Search by account, summary, domain…" msgstr "" @@ -3549,7 +3921,12 @@ msgctxt "Content/Search/Input.Placeholder" msgid "Search by domain, username, bio…" msgstr "" -#: front/src/components/manage/moderation/DomainsTable.vue:151 +#: front/src/components/manage/library/TagsTable.vue:165 +msgctxt "Content/Search/Input.Placeholder" +msgid "Search by name" +msgstr "" + +#: front/src/components/manage/moderation/DomainsTable.vue:168 msgctxt "Content/Search/Input.Placeholder" msgid "Search by name…" msgstr "" @@ -3564,12 +3941,12 @@ msgctxt "Content/Admin/Input.Placeholder/Verb" msgid "Search by username, e-mail address, code…" msgstr "" -#: front/src/components/manage/users/UsersTable.vue:163 +#: front/src/components/manage/users/UsersTable.vue:164 msgctxt "Content/Search/Input.Placeholder" msgid "Search by username, e-mail address, name…" msgstr "" -#: front/src/components/audio/SearchBar.vue:20 +#: front/src/components/audio/SearchBar.vue:27 msgctxt "Sidebar/Search/Input.Placeholder" msgid "Search for artists, albums, tracks…" msgstr "" @@ -3579,15 +3956,27 @@ msgctxt "Content/Search/Title" msgid "Search for some music" msgstr "" -#: front/src/components/library/AlbumBase.vue:57 -#: front/src/components/library/ArtistBase.vue:68 -#: front/src/components/library/TrackBase.vue:76 +#: front/src/components/library/TagsSelector.vue:6 +msgctxt "*/Dropdown/Placeholder/Verb" +msgid "Search for tags…" +msgstr "" + +#: front/src/components/library/AlbumBase.vue:66 +#: front/src/components/library/ArtistBase.vue:77 +#: front/src/components/library/TrackBase.vue:82 +msgctxt "Content/*/Button.Label/Verb" +msgid "Search on Discogs" +msgstr "" + +#: front/src/components/library/AlbumBase.vue:58 +#: front/src/components/library/ArtistBase.vue:69 +#: front/src/components/library/TrackBase.vue:74 msgctxt "Content/*/Button.Label/Verb" msgid "Search on Wikipedia" msgstr "" -#: front/src/components/library/Library.vue:35 src/views/admin/library/Base.vue:32 -#: front/src/views/admin/moderation/Base.vue:22 src/views/admin/users/Base.vue:21 +#: front/src/components/library/Library.vue:35 src/views/admin/library/Base.vue:35 +#: front/src/views/admin/moderation/Base.vue:44 src/views/admin/users/Base.vue:21 #: front/src/views/content/Base.vue:19 msgctxt "Menu/*/Hidden text" msgid "Secondary menu" @@ -3598,6 +3987,26 @@ msgctxt "Content/Admin/Menu.Title" msgid "Sections" msgstr "" +#: front/src/components/ShortcutsModal.vue:108 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek backwards 30s" +msgstr "" + +#: front/src/components/ShortcutsModal.vue:100 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek backwards 5s" +msgstr "" + +#: front/src/components/ShortcutsModal.vue:112 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek forwards 30s" +msgstr "" + +#: front/src/components/ShortcutsModal.vue:104 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek forwards 5s" +msgstr "" + #: front/src/components/library/radios/Builder.vue:46 msgctxt "Content/Radio/Dropdown.Placeholder/Verb" msgid "Select a filter" @@ -3615,9 +4024,14 @@ msgctxt "Content/*/Link/Verb" msgid "Select only current page" msgstr "" -#: front/src/components/Sidebar.vue:43 src/components/Sidebar.vue:108 -#: front/src/components/manage/users/UsersTable.vue:181 -#: front/src/views/admin/moderation/AccountsDetail.vue:506 +#: front/src/components/Home.vue:43 +msgctxt "Content/Home/Link" +msgid "Server rules" +msgstr "" + +#: front/src/components/Sidebar.vue:43 src/components/Sidebar.vue:112 +#: front/src/components/manage/users/UsersTable.vue:182 +#: front/src/views/admin/moderation/AccountsDetail.vue:526 msgctxt "*/*/*/Noun" msgid "Settings" msgstr "" @@ -3643,11 +4057,21 @@ msgid "Share this link with other users so they can request access to your libra msgstr "" #: front/src/views/content/libraries/Detail.vue:14 -#: front/src/views/content/remote/Card.vue:77 +#: front/src/views/content/remote/Card.vue:90 msgctxt "Content/Library/Title" msgid "Sharing link" msgstr "" +#: front/src/components/audio/EmbedWizard.vue:5 +msgctxt "Content/Embed/Message" +msgid "Sharing will not work because this pod doesn't allow anonymous users to access content." +msgstr "" + +#: front/src/components/About.vue:156 +msgctxt "*/*/*/Verb" +msgid "Show" +msgstr "" + #: front/src/components/audio/album/Card.vue:38 msgctxt "Content/Album/Card.Link/Verb" msgid "Show %{ count } more track" @@ -3655,10 +4079,10 @@ msgid_plural "Show %{ count } more tracks" msgstr[0] "" msgstr[1] "" -#: front/src/components/audio/artist/Card.vue:30 -msgctxt "Content/Artist/Card.Link" -msgid "Show 1 more album" -msgid_plural "Show %{ count } more albums" +#: front/src/components/tags/List.vue:11 +msgctxt "Content/*/Button/Label/Verb" +msgid "Show 1 more tag" +msgid_plural "Show %{ count } more tags" msgstr[0] "" msgstr[1] "" @@ -3667,17 +4091,27 @@ msgctxt "Content/Library/Button.Label" msgid "Show all edits" msgstr "" -#: front/src/components/ShortcutsModal.vue:42 +#: front/src/components/ShortcutsModal.vue:60 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Show available keyboard shortcuts" msgstr "" -#: front/src/views/Notifications.vue:7 +#: front/src/components/common/ExpandableDiv.vue:7 +msgctxt "*/*/Button,Label" +msgid "Show less" +msgstr "" + +#: front/src/components/common/ExpandableDiv.vue:8 +msgctxt "*/*/Button,Label" +msgid "Show more" +msgstr "" + +#: front/src/views/Notifications.vue:72 msgctxt "Content/Notifications/Form.Label/Verb" msgid "Show read notifications" msgstr "" -#: front/src/components/forms/PasswordInput.vue:26 +#: front/src/components/forms/PasswordInput.vue:42 msgctxt "Content/Settings/Button.Tooltip/Verb" msgid "Show/hide password" msgstr "" @@ -3686,56 +4120,63 @@ msgstr "" #: front/src/components/manage/library/ArtistsTable.vue:84 #: front/src/components/manage/library/EditsCardList.vue:72 #: front/src/components/manage/library/LibrariesTable.vue:110 +#: front/src/components/manage/library/TagsTable.vue:79 #: front/src/components/manage/library/TracksTable.vue:95 #: front/src/components/manage/library/UploadsTable.vue:144 #: front/src/components/manage/moderation/AccountsTable.vue:88 -#: front/src/components/manage/moderation/DomainsTable.vue:74 +#: front/src/components/manage/moderation/DomainsTable.vue:85 #: front/src/components/manage/users/InvitationsTable.vue:76 -#: front/src/components/manage/users/UsersTable.vue:87 +#: front/src/components/manage/users/UsersTable.vue:88 #: front/src/views/content/libraries/FilesTable.vue:117 msgctxt "Content/*/Paragraph" msgid "Showing results %{ start }-%{ end } on %{ total }" msgstr "" -#: front/src/components/ShortcutsModal.vue:83 +#: front/src/components/ShortcutsModal.vue:140 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Shuffle queue" msgstr "" -#: front/src/components/audio/Player.vue:641 +#: front/src/components/audio/Player.vue:667 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Shuffle your queue" msgstr "" -#: front/src/components/auth/Signup.vue:97 +#: front/src/components/Home.vue:103 +msgctxt "*/Signup/Title" +msgid "Sign up" +msgstr "" + +#: front/src/views/auth/Signup.vue:37 msgctxt "*/Signup/Title" msgid "Sign Up" msgstr "" +#: front/src/components/Home.vue:107 +msgctxt "Content/Home/Paragraph" +msgid "Sign up now to keep a track of your favorites, create playlists, discover new content and much more!" +msgstr "" + #: front/src/components/manage/users/UsersTable.vue:40 msgctxt "Content/Admin/Table.Label/Short, Noun (Value is a date)" msgid "Sign-up" msgstr "" -#: front/src/components/mixins/Translations.vue:57 -#: front/src/views/admin/moderation/AccountsDetail.vue:197 -#: front/src/components/mixins/Translations.vue:58 +#: front/src/components/mixins/Translations.vue:69 +#: front/src/views/admin/moderation/AccountsDetail.vue:198 +#: front/src/components/mixins/Translations.vue:70 msgctxt "Content/Admin/Table.Label/Noun" msgid "Sign-up date" msgstr "" -#: front/src/components/manage/library/UploadsTable.vue:65 -#: front/src/views/admin/library/UploadDetail.vue:219 -msgctxt "Content/*/*/Noun" -msgid "Size" -msgstr "" - #: front/src/components/library/FileUpload.vue:94 #: front/src/components/library/TrackDetail.vue:39 -#: front/src/components/mixins/Translations.vue:54 +#: front/src/components/manage/library/UploadsTable.vue:65 +#: front/src/components/mixins/Translations.vue:66 +#: front/src/views/admin/library/UploadDetail.vue:219 #: front/src/views/content/libraries/FilesTable.vue:61 -#: front/src/components/mixins/Translations.vue:55 -msgctxt "Content/Library/*/in MB" +#: front/src/components/mixins/Translations.vue:67 +msgctxt "Content/*/*/Noun" msgid "Size" msgstr "" @@ -3752,7 +4193,7 @@ msgctxt "Content/Library/Label" msgid "Skipped files" msgstr "" -#: front/src/views/admin/moderation/DomainsDetail.vue:89 +#: front/src/views/admin/moderation/DomainsDetail.vue:126 msgctxt "Content/Moderation/Table.Label" msgid "Software" msgstr "" @@ -3767,78 +4208,62 @@ msgctxt "Content/*/Paragraph" msgid "Sorry, the page you asked for does not exist:" msgstr "" -#: front/src/components/Footer.vue:49 +#: front/src/components/Footer.vue:57 msgctxt "Footer/*/List item.Link" msgid "Source code" msgstr "" #: front/src/components/auth/Profile.vue:23 -#: front/src/components/manage/users/UsersTable.vue:70 +#: front/src/components/manage/users/UsersTable.vue:71 msgctxt "Content/Profile/User role" msgid "Staff member" msgstr "" -#: front/src/components/audio/PlayButton.vue:23 src/components/radios/Button.vue:4 +#: front/src/components/audio/PlayButton.vue:27 src/components/radios/Button.vue:4 msgctxt "*/Queue/Button.Label/Short, Verb" msgid "Start radio" msgstr "" -#: front/src/views/admin/Settings.vue:86 -msgctxt "Content/Admin/Menu" +#: front/src/components/About.vue:170 src/components/Home.vue:53 +#: front/src/views/admin/Settings.vue:87 +msgctxt "Content/Home/Header" msgid "Statistics" msgstr "" -#: front/src/views/admin/moderation/AccountsDetail.vue:490 +#: front/src/views/admin/moderation/AccountsDetail.vue:510 msgctxt "Content/Moderation/Help text" msgid "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this account" msgstr "" -#: front/src/views/admin/moderation/DomainsDetail.vue:371 +#: front/src/views/admin/moderation/DomainsDetail.vue:418 msgctxt "Content/Moderation/Help text" msgid "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this domain" msgstr "" -#: front/src/views/admin/library/AlbumDetail.vue:329 -#: front/src/views/admin/library/ArtistDetail.vue:328 -#: front/src/views/admin/library/LibraryDetail.vue:316 -#: front/src/views/admin/library/TrackDetail.vue:371 +#: front/src/views/admin/library/AlbumDetail.vue:346 +#: front/src/views/admin/library/ArtistDetail.vue:345 +#: front/src/views/admin/library/LibraryDetail.vue:356 +#: front/src/views/admin/library/TagDetail.vue:210 +#: front/src/views/admin/library/TrackDetail.vue:389 #: front/src/views/admin/library/UploadDetail.vue:335 msgctxt "Content/Moderation/Help text" msgid "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" msgstr "" -#: front/src/views/admin/moderation/DomainsDetail.vue:115 -msgctxt "Content/Moderation/Table.Label (Value is Error message)" -msgid "Status" -msgstr "" - #: front/src/components/library/FileUpload.vue:95 -msgctxt "Content/Library/Table.Label (Value is Uploading/Uploaded/Error)" -msgid "Status" -msgstr "" - -#: front/src/views/content/libraries/Detail.vue:28 -msgctxt "Content/Library.Federation/Table.Label (Value is Approved/Rejected)" -msgid "Status" -msgstr "" - +#: front/src/components/manage/library/EditsCardList.vue:12 +#: front/src/components/manage/moderation/ReportCard.vue:57 #: front/src/components/manage/users/InvitationsTable.vue:17 #: front/src/components/manage/users/InvitationsTable.vue:39 -msgctxt "Content/Admin/*/Noun (Value is Used/Not used)" -msgid "Status" -msgstr "" - #: front/src/components/manage/users/UsersTable.vue:43 -msgctxt "Content/Admin/Table.Label/Noun (Value is Regular user/Admin)" -msgid "Status" -msgstr "" - -#: front/src/components/manage/library/EditsCardList.vue:12 -msgctxt "Content/Search/Dropdown.Label (Value is All/Pending review/Approved/Rejected)" +#: front/src/views/admin/moderation/DomainsDetail.vue:152 +#: front/src/views/admin/moderation/ReportsList.vue:14 +#: front/src/views/content/libraries/Detail.vue:28 +msgctxt "*/*/*" msgid "Status" msgstr "" -#: front/src/components/Sidebar.vue:174 src/components/radios/Button.vue:3 +#: front/src/components/Sidebar.vue:178 src/components/radios/Button.vue:3 msgctxt "*/Player/Button.Label/Short, Verb" msgid "Stop radio" msgstr "" @@ -3848,7 +4273,7 @@ msgctxt "*/*/Button.Label/Verb" msgid "Submit" msgstr "" -#: front/src/components/library/EditForm.vue:98 +#: front/src/components/library/EditForm.vue:110 msgctxt "Content/Library/Button.Label/Verb" msgid "Submit and apply edit" msgstr "" @@ -3858,12 +4283,22 @@ msgctxt "Content/Library/Button.Label" msgid "Submit another edit" msgstr "" -#: front/src/components/library/EditForm.vue:99 +#: front/src/components/moderation/ReportModal.vue:64 +msgctxt "Popup/*/Button.Label" +msgid "Submit report" +msgstr "" + +#: front/src/components/library/EditForm.vue:111 msgctxt "Content/Library/Button.Label/Verb" msgid "Submit suggestion" msgstr "" -#: front/src/views/admin/Settings.vue:85 +#: front/src/components/manage/moderation/ReportCard.vue:17 +msgctxt "Content/Moderation/*" +msgid "Submitted by" +msgstr "" + +#: front/src/views/admin/Settings.vue:86 msgctxt "Content/Admin/Menu" msgid "Subsonic" msgstr "" @@ -3903,16 +4338,21 @@ msgctxt "Content/Library/Tab.Title/Short" msgid "Summary" msgstr "" -#: front/src/components/library/EditForm.vue:87 +#: front/src/components/library/EditForm.vue:99 msgctxt "*/*/*" msgid "Summary (optional)" msgstr "" -#: front/src/components/Footer.vue:39 +#: front/src/components/Footer.vue:47 msgctxt "Footer/*/Listitem.Link" msgid "Support forum" msgstr "" +#: front/src/views/Notifications.vue:10 +msgctxt "Content/Notifications/Header" +msgid "Support this Funkwhale pod" +msgstr "" + #: front/src/components/library/FileUpload.vue:85 msgctxt "Content/Library/Paragraph" msgid "Supported extensions: %{ extensions }" @@ -3923,18 +4363,41 @@ msgctxt "Content/Playlist/Paragraph" msgid "Syncing changes to server…" msgstr "" -#: front/src/components/audio/EmbedWizard.vue:25 +#: front/src/components/audio/SearchBar.vue:35 +msgctxt "*/*/*/Noun" +msgid "Tag" +msgstr "" + +#: front/src/views/admin/library/TagDetail.vue:61 +msgctxt "Content/Moderation/Title" +msgid "Tag data" +msgstr "" + +#: front/src/components/library/Albums.vue:23 src/components/library/Artists.vue:15 +#: front/src/views/admin/library/Base.vue:23 src/views/admin/library/TagsList.vue:24 +#: front/src/edits.js:24 src/edits.js:50 src/edits.js:91 src/entities.js:120 +msgctxt "*/*/*/Noun" +msgid "Tags" +msgstr "" + +#: front/src/components/mixins/Translations.vue:44 +#: front/src/components/mixins/Translations.vue:45 +msgctxt "Content/Moderation/Dropdown" +msgid "Takedown request" +msgstr "" + +#: front/src/components/About.vue:35 src/components/About.vue:61 +msgctxt "Content/About/Header" +msgid "Terms and privacy policy" +msgstr "" + +#: front/src/components/audio/EmbedWizard.vue:35 #: front/src/components/common/CopyInput.vue:3 msgctxt "Content/*/Paragraph" msgid "Text copied to clipboard!" msgstr "" -#: front/src/components/Home.vue:26 -msgctxt "Content/Home/Paragraph" -msgid "That's simple: we loved Grooveshark and we want to build something even better." -msgstr "" - -#: front/src/views/admin/library/AlbumDetail.vue:75 +#: front/src/views/admin/library/AlbumDetail.vue:81 msgctxt "Content/Moderation/Paragraph" msgid "The album will be removed, as well as associated uploads, tracks, favorites and listening history. This action is irreversible." msgstr "" @@ -3944,12 +4407,12 @@ msgctxt "Content/Auth/Paragraph" msgid "The application is also requesting the following unknown permissions:" msgstr "" -#: front/src/views/admin/library/ArtistDetail.vue:74 +#: front/src/views/admin/library/ArtistDetail.vue:79 msgctxt "Content/Moderation/Paragraph" msgid "The artist will be removed, as well as associated uploads, tracks, albums, favorites and listening history. This action is irreversible." msgstr "" -#: front/src/components/Footer.vue:53 +#: front/src/components/Footer.vue:61 msgctxt "Footer/*/List item.Link" msgid "The funkwhale logo was kindly designed and provided by Francis Gading." msgstr "" @@ -3984,9 +4447,14 @@ msgctxt "Sidebar/Player/Error message.Paragraph" msgid "The next track will play automatically in a few seconds…" msgstr "" -#: front/src/components/Home.vue:116 -msgctxt "Content/Home/List item" -msgid "The plaform is free and open-source, you can install it and modify it without worries" +#: front/src/components/manage/moderation/NotesThread.vue:27 +msgctxt "Content/Moderation/Paragraph" +msgid "The note will be removed. This action is irreversible." +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:120 +msgctxt "Content/Moderation/Message" +msgid "The object associated with this report was deleted." msgstr "" #: front/src/components/playlists/Form.vue:14 @@ -4006,12 +4474,12 @@ msgstr "" #: front/src/components/federation/FetchButton.vue:44 msgctxt "*/*/Error" -msgid "The remote server didn't answered fast enough" +msgid "The remote server didn't respond quickly enough" msgstr "" #: front/src/components/federation/FetchButton.vue:50 msgctxt "*/*/Error" -msgid "The return server returned invalid JSON or JSON-LD data" +msgid "The remote server returned invalid JSON or JSON-LD data" msgstr "" #: front/src/components/manage/library/AlbumsTable.vue:189 @@ -4029,6 +4497,11 @@ msgctxt "Popup/*/Paragraph" msgid "The selected library will be removed, as well as associated uploads and follows. This action is irreversible." msgstr "" +#: front/src/components/manage/library/TagsTable.vue:180 +msgctxt "Popup/*/Paragraph" +msgid "The selected tag will be removed and unlinked with existing content, if any. This action is irreversible." +msgstr "" + #: front/src/components/manage/library/TracksTable.vue:189 msgctxt "Popup/*/Paragraph" msgid "The selected tracks will be removed, as well as associated uploads, favorites and listening history. This action is irreversible." @@ -4054,6 +4527,11 @@ msgctxt "Popup/Library/Paragraph" msgid "The suggestion will be completely removed, this action is irreversible." msgstr "" +#: front/src/views/admin/library/TagDetail.vue:44 +msgctxt "Content/Moderation/Paragraph" +msgid "The tag will be removed and unlinked from any existing entity. This action is irreversible." +msgstr "" + #: front/src/components/playlists/PlaylistModal.vue:34 msgctxt "Popup/Playlist/Error message.Title" msgid "The track can't be added to a playlist" @@ -4064,7 +4542,7 @@ msgctxt "Sidebar/Player/Error message.Title" msgid "The track cannot be loaded" msgstr "" -#: front/src/views/admin/library/TrackDetail.vue:74 +#: front/src/views/admin/library/TrackDetail.vue:80 msgctxt "Content/Moderation/Paragraph" msgid "The track will be removed, as well as associated uploads, favorites and listening history. This action is irreversible." msgstr "" @@ -4099,17 +4577,32 @@ msgctxt "Content/Artist/Paragraph" msgid "This artist is present in the following libraries:" msgstr "" +#: front/src/components/manage/moderation/DomainsTable.vue:169 +msgctxt "Content/Moderation/Popup" +msgid "This domain is present in your allow-list" +msgstr "" + #: front/src/views/admin/moderation/AccountsDetail.vue:84 -#: front/src/views/admin/moderation/DomainsDetail.vue:48 +#: front/src/views/admin/moderation/DomainsDetail.vue:76 msgctxt "Content/Moderation/Card.Title" msgid "This domain is subject to specific moderation rules" msgstr "" +#: front/src/components/manage/moderation/InstancePolicyModal.vue:16 +msgctxt "Content/Moderation/Card.Title" +msgid "This entity is subject to specific moderation rules" +msgstr "" + #: front/src/views/content/Home.vue:9 msgctxt "Content/Library/Paragraph" msgid "This instance offers up to %{quota} of storage space for every user." msgstr "" +#: front/src/components/auth/Settings.vue:300 +msgctxt "Popup/Settings/Paragraph" +msgid "This is irreversible and will permanently remove your data from our servers. You will we immediatly logged out." +msgstr "" + #: front/src/components/auth/Settings.vue:165 msgctxt "Content/Settings/Paragraph" msgid "This is the list of applications that have access to your account data." @@ -4130,12 +4623,12 @@ msgctxt "Content/Library/Input.Placeholder" msgid "This library contains my personal music, I hope you like it." msgstr "" -#: front/src/views/content/remote/Card.vue:141 +#: front/src/views/content/remote/Card.vue:169 msgctxt "Content/Library/Card.Help text" msgid "This library is private and your approval from its owner is needed to access its content" msgstr "" -#: front/src/views/content/remote/Card.vue:142 +#: front/src/views/content/remote/Card.vue:170 msgctxt "Content/Library/Card.Help text" msgid "This library is public and you can access its content freely" msgstr "" @@ -4152,6 +4645,11 @@ msgctxt "Content/*/Message" msgid "This object is managed by another server, you cannot edit it." msgstr "" +#: front/src/components/Home.vue:87 +msgctxt "Content/Home/Paragraph" +msgid "This pod runs Funkwhale, a community-driven project that lets you listen and share music and audio within a decentralized, open network." +msgstr "" + #: front/src/components/library/FileUpload.vue:51 msgctxt "Content/Library/Paragraph" msgid "This reference will be used to group imported files together." @@ -4160,7 +4658,7 @@ msgstr "" #: front/src/components/mixins/Translations.vue:33 #: front/src/components/mixins/Translations.vue:34 msgctxt "Content/Library/Help text" -msgid "This track could not be processed, please it is tagged correctly" +msgid "This track could not be processed, please make sure it is tagged correctly" msgstr "" #: front/src/components/mixins/Translations.vue:29 @@ -4175,7 +4673,7 @@ msgctxt "Content/Library/Help text" msgid "This track is already present in one of your libraries" msgstr "" -#: front/src/components/audio/PlayButton.vue:85 +#: front/src/components/audio/PlayButton.vue:103 msgctxt "*/Queue/Button/Title" msgid "This track is not available in any library you have access to" msgstr "" @@ -4185,7 +4683,7 @@ msgctxt "Content/Track/Paragraph" msgid "This track is present in the following libraries:" msgstr "" -#: front/src/views/playlists/Detail.vue:38 +#: front/src/views/playlists/Detail.vue:46 msgctxt "Popup/Playlist/Paragraph" msgid "This will completely delete this playlist and cannot be undone." msgstr "" @@ -4195,12 +4693,17 @@ msgctxt "Popup/Radio/Paragraph" msgid "This will completely delete this radio and cannot be undone." msgstr "" -#: front/src/components/auth/SubsonicTokenForm.vue:50 +#: front/src/components/auth/SubsonicTokenForm.vue:55 msgctxt "Popup/Settings/Paragraph" msgid "This will completely disable access to the Subsonic API using from account." msgstr "" -#: front/src/components/auth/SubsonicTokenForm.vue:35 +#: front/src/components/manage/moderation/ReportCard.vue:359 +msgctxt "Content/Moderation/Popup,Paragraph" +msgid "This will delete the object associated with this report and mark the report as resolved. The deletion is irreversible." +msgstr "" + +#: front/src/components/auth/SubsonicTokenForm.vue:40 msgctxt "Popup/Settings/Paragraph" msgid "This will log you out from existing devices that use the current password." msgstr "" @@ -4220,21 +4723,14 @@ msgctxt "Popup/Playlist/Paragraph" msgid "This will remove all tracks from this playlist and cannot be undone." msgstr "" -#: front/src/views/admin/library/AlbumDetail.vue:99 -#: front/src/views/admin/library/TrackDetail.vue:98 src/edits.js:21 src/edits.js:39 -msgctxt "*/*/*/Noun" -msgid "Title" -msgstr "" - #: front/src/components/audio/track/Table.vue:7 -#: front/src/views/content/libraries/FilesTable.vue:55 -msgctxt "Content/Track/*/Noun" -msgid "Title" -msgstr "" - #: front/src/components/manage/library/AlbumsTable.vue:39 #: front/src/components/manage/library/TracksTable.vue:39 -msgctxt "*/*/*" +#: front/src/views/admin/library/AlbumDetail.vue:105 +#: front/src/views/admin/library/TrackDetail.vue:104 +#: front/src/views/content/libraries/FilesTable.vue:55 src/edits.js:36 +#: front/src/edits.js:62 +msgctxt "*/*/*/Noun" msgid "Title" msgstr "" @@ -4243,17 +4739,27 @@ msgctxt "Popup/Instance/Paragraph" msgid "To continue, please select the Funkwhale instance you want to connect to. Enter the address directly, or select one of the suggested choices." msgstr "" -#: front/src/components/ShortcutsModal.vue:79 +#: front/src/components/ShortcutsModal.vue:148 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Toggle favorite" +msgstr "" + +#: front/src/components/ShortcutsModal.vue:132 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Toggle mute" +msgstr "" + +#: front/src/components/ShortcutsModal.vue:136 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Toggle queue looping" msgstr "" -#: front/src/views/admin/library/AlbumDetail.vue:222 -#: front/src/views/admin/library/ArtistDetail.vue:211 -#: front/src/views/admin/library/LibraryDetail.vue:200 -#: front/src/views/admin/library/TrackDetail.vue:274 -#: front/src/views/admin/moderation/AccountsDetail.vue:317 -#: front/src/views/admin/moderation/DomainsDetail.vue:225 +#: front/src/views/admin/library/AlbumDetail.vue:238 +#: front/src/views/admin/library/ArtistDetail.vue:226 +#: front/src/views/admin/library/LibraryDetail.vue:219 +#: front/src/views/admin/library/TrackDetail.vue:290 +#: front/src/views/admin/moderation/AccountsDetail.vue:329 +#: front/src/views/admin/moderation/DomainsDetail.vue:262 msgctxt "Content/Moderation/Table.Label" msgid "Total size" msgstr "" @@ -4263,20 +4769,17 @@ msgctxt "Content/Library/Card.Help text" msgid "Total size of the files in this library" msgstr "" -#: front/src/views/admin/moderation/DomainsDetail.vue:105 +#: front/src/views/admin/moderation/DomainsDetail.vue:142 msgctxt "Content/*/*" msgid "Total users" msgstr "" -#: front/src/views/admin/library/UploadDetail.vue:199 -msgctxt "*/*/*" -msgid "Track" -msgstr "" - -#: front/src/components/audio/SearchBar.vue:27 -#: front/src/components/library/TrackBase.vue:173 +#: front/src/components/audio/SearchBar.vue:34 +#: front/src/components/library/TrackBase.vue:188 #: front/src/components/library/TrackDetail.vue:128 -#: front/src/components/metadata/Search.vue:138 +#: front/src/components/metadata/Search.vue:138 src/components/mixins/Report.vue:28 +#: front/src/views/admin/library/UploadDetail.vue:199 +#: front/src/components/mixins/Report.vue:29 msgctxt "*/*/*/Noun" msgid "Track" msgstr "" @@ -4286,7 +4789,7 @@ msgctxt "Content/Library/Card/Short" msgid "Track #%{ id } - %{ name }" msgstr "" -#: front/src/views/admin/library/TrackDetail.vue:91 +#: front/src/views/admin/library/TrackDetail.vue:97 msgctxt "Content/Moderation/Title" msgid "Track data" msgstr "" @@ -4296,30 +4799,28 @@ msgctxt "Content/Track/Title/Noun" msgid "Track information" msgstr "" -#: front/src/components/mixins/Translations.vue:50 -#: front/src/components/mixins/Translations.vue:51 +#: front/src/components/mixins/Translations.vue:60 +#: front/src/components/mixins/Translations.vue:61 msgctxt "Content/*/Dropdown/Noun" msgid "Track name" msgstr "" -#: front/src/components/instance/Stats.vue:54 #: front/src/components/library/AlbumDetail.vue:19 -#: front/src/components/playlists/PlaylistModal.vue:47 -#: front/src/views/admin/moderation/AccountsDetail.vue:362 -#: front/src/views/admin/moderation/DomainsDetail.vue:274 -#: front/src/views/content/Base.vue:8 src/views/content/libraries/Detail.vue:8 -#: front/src/views/playlists/Detail.vue:51 src/views/radios/Detail.vue:34 -msgctxt "*/*/*/Noun" -msgid "Tracks" -msgstr "" - +#: front/src/components/library/TagDetail.vue:36 #: front/src/components/manage/library/AlbumsTable.vue:42 #: front/src/components/manage/library/ArtistsTable.vue:42 -#: front/src/views/admin/library/AlbumDetail.vue:252 -#: front/src/views/admin/library/ArtistDetail.vue:251 +#: front/src/components/manage/library/TagsTable.vue:44 +#: front/src/components/playlists/PlaylistModal.vue:47 +#: front/src/views/admin/library/AlbumDetail.vue:268 +#: front/src/views/admin/library/ArtistDetail.vue:266 #: front/src/views/admin/library/Base.vue:14 -#: front/src/views/admin/library/LibraryDetail.vue:229 +#: front/src/views/admin/library/LibraryDetail.vue:248 +#: front/src/views/admin/library/TagDetail.vue:143 #: front/src/views/admin/library/TracksList.vue:24 +#: front/src/views/admin/moderation/AccountsDetail.vue:374 +#: front/src/views/admin/moderation/DomainsDetail.vue:311 +#: front/src/views/content/Base.vue:8 src/views/content/libraries/Detail.vue:8 +#: front/src/views/playlists/Detail.vue:76 src/views/radios/Detail.vue:34 msgctxt "*/*/*" msgid "Tracks" msgstr "" @@ -4329,72 +4830,61 @@ msgctxt "Content/Artist/Title" msgid "Tracks by this artist" msgstr "" -#: front/src/components/instance/Stats.vue:25 -msgctxt "Content/About/Paragraph/Unit" -msgid "Tracks favorited" -msgstr "" - -#: front/src/components/instance/Stats.vue:19 -msgctxt "Content/About/Paragraph/Unit" -msgid "tracks listened" -msgstr "" - #: front/src/components/library/radios/Filter.vue:44 msgctxt "Popup/Radio/Title/Noun" msgid "Tracks matching filter" msgstr "" #: front/src/components/library/TrackDetail.vue:57 +#: front/src/components/manage/moderation/ReportCard.vue:134 #: front/src/views/admin/library/UploadDetail.vue:250 +#: front/src/views/admin/moderation/AccountsDetail.vue:181 msgctxt "Content/Track/Table.Label/Noun" msgid "Type" msgstr "" -#: front/src/views/admin/moderation/AccountsDetail.vue:180 -msgctxt "Content/Moderation/Table.Label/Noun" -msgid "Type" -msgstr "" - #: front/src/components/manage/moderation/AccountsTable.vue:44 -#: front/src/components/manage/moderation/DomainsTable.vue:42 +#: front/src/components/manage/moderation/DomainsTable.vue:50 msgctxt "Content/Moderation/Table.Label/Short" msgid "Under moderation rule" msgstr "" -#: front/src/views/content/remote/Card.vue:109 src/views/content/remote/Card.vue:114 +#: front/src/components/ShortcutsModal.vue:68 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Unfocus searchbar" +msgstr "" + +#: front/src/views/content/remote/Card.vue:122 src/views/content/remote/Card.vue:127 msgctxt "*/Library/Button.Label/Verb" msgid "Unfollow" msgstr "" -#: front/src/views/content/remote/Card.vue:110 +#: front/src/views/content/remote/Card.vue:123 msgctxt "Popup/Library/Title" msgid "Unfollow this library?" msgstr "" -#: front/src/components/About.vue:17 -msgctxt "Content/About/Paragraph" -msgid "Unfortunately, the owners of this instance did not yet take the time to complete this page." -msgstr "" - #: front/src/components/federation/FetchButton.vue:54 #: front/src/components/federation/FetchButton.vue:55 +#: front/src/components/library/ImportStatusModal.vue:144 msgctxt "*/*/Error" -msgid "Unknowkn error" +msgid "Unknown error" msgstr "" -#: front/src/components/library/ImportStatusModal.vue:144 -msgctxt "Popup/Import/Error.Label" -msgid "Unkwown error" +#: front/src/components/audio/Player.vue:656 +msgctxt "Sidebar/Player/Icon.Tooltip/Verb" +msgid "Unmute" msgstr "" -#: front/src/components/Home.vue:37 -msgctxt "Content/Home/Title" -msgid "Unlimited music" +#: front/src/components/manage/moderation/ReportCard.vue:225 +msgctxt "Content/*/Button.Label" +msgid "Unresolve" msgstr "" -#: front/src/components/audio/Player.vue:630 -msgctxt "Sidebar/Player/Icon.Tooltip/Verb" -msgid "Unmute" +#: front/src/components/manage/moderation/ReportCard.vue:67 +#: front/src/views/admin/moderation/ReportsList.vue:23 +msgctxt "Content/*/*/Short" +msgid "Unresolved" msgstr "" #: front/src/components/manage/moderation/InstancePolicyForm.vue:57 @@ -4478,8 +4968,9 @@ msgctxt "Content/Library/Title/Verb" msgid "Upload new tracks" msgstr "" -#: front/src/views/admin/moderation/AccountsDetail.vue:298 -msgctxt "Content/Moderation/Table.Label/Noun" +#: front/src/components/About.vue:99 +#: front/src/views/admin/moderation/AccountsDetail.vue:309 +msgctxt "*/*/*" msgid "Upload quota" msgstr "" @@ -4513,30 +5004,22 @@ msgctxt "Content/Library/Table" msgid "Uploading…" msgstr "" +#: front/src/components/manage/library/LibrariesTable.vue:52 +#: front/src/components/manage/moderation/AccountsTable.vue:41 +#: front/src/components/mixins/Translations.vue:75 +#: front/src/views/admin/library/AlbumDetail.vue:258 +#: front/src/views/admin/library/ArtistDetail.vue:246 #: front/src/views/admin/library/Base.vue:20 +#: front/src/views/admin/library/LibraryDetail.vue:258 +#: front/src/views/admin/library/TrackDetail.vue:310 #: front/src/views/admin/library/UploadsList.vue:24 +#: front/src/views/admin/moderation/AccountsDetail.vue:349 +#: front/src/views/admin/moderation/DomainsDetail.vue:281 +#: front/src/components/mixins/Translations.vue:76 msgctxt "*/*/*" msgid "Uploads" msgstr "" -#: front/src/components/manage/moderation/AccountsTable.vue:41 -#: front/src/components/mixins/Translations.vue:63 -#: front/src/views/admin/library/AlbumDetail.vue:242 -#: front/src/views/admin/library/ArtistDetail.vue:231 -#: front/src/views/admin/library/LibraryDetail.vue:239 -#: front/src/views/admin/library/TrackDetail.vue:294 -#: front/src/views/admin/moderation/AccountsDetail.vue:337 -#: front/src/views/admin/moderation/DomainsDetail.vue:244 -#: front/src/components/mixins/Translations.vue:64 -msgctxt "Content/Moderation/Table.Label/Noun" -msgid "Uploads" -msgstr "" - -#: front/src/components/manage/library/LibrariesTable.vue:52 -msgctxt "Content/*/*/Noun" -msgid "Uploads" -msgstr "" - #: front/src/components/auth/ApplicationForm.vue:16 msgctxt "Content/Applications/Help Text" msgid "Use \"urn:ietf:wg:oauth:2.0:oob\" as a redirect URI if your application is not served on the web." @@ -4547,11 +5030,26 @@ msgctxt "Footer/*/List item.Link" msgid "Use another instance" msgstr "" +#: front/src/components/Home.vue:146 +msgctxt "Content/Home/Link" +msgid "Use Funkwhale on other devices with our apps" +msgstr "" + +#: front/src/components/moderation/ReportModal.vue:44 +msgctxt "*/*/Field,Help" +msgid "Use this field to provide additional context to the moderator that will handle your report." +msgstr "" + #: front/src/views/auth/PasswordReset.vue:12 msgctxt "Content/Signup/Paragraph" msgid "Use this form to request a password reset. We will send an email to the given address with instructions to reset your password." msgstr "" +#: front/src/components/moderation/ReportModal.vue:18 +msgctxt "*/Moderation/Popup,Paragraph" +msgid "Use this form to submit a report to our moderation team." +msgstr "" + #: front/src/components/manage/moderation/InstancePolicyForm.vue:111 msgctxt "Content/Moderation/Help text" msgid "Use this setting to temporarily enable/disable the policy without completely removing it." @@ -4562,14 +5060,24 @@ msgctxt "Content/Admin/Table" msgid "Used" msgstr "" +#: front/src/components/Home.vue:125 +msgctxt "Content/Home/Header" +msgid "Useful links" +msgstr "" + #: front/src/views/content/libraries/Detail.vue:26 msgctxt "Content/Library/Table.Label" msgid "User" msgstr "" -#: front/src/components/instance/Stats.vue:5 -msgctxt "Content/About/Title/Noun" -msgid "User activity" +#: front/src/components/Home.vue:154 +msgctxt "Content/Home/Link" +msgid "User guides" +msgstr "" + +#: front/src/views/admin/Settings.vue:88 +msgctxt "Content/Admin/Menu" +msgid "User Interface" msgstr "" #: front/src/components/library/AlbumDetail.vue:26 @@ -4584,34 +5092,34 @@ msgctxt "Content/Radio/Title" msgid "User radios" msgstr "" -#: front/src/components/auth/Signup.vue:19 +#: front/src/components/auth/SignupForm.vue:15 #: front/src/components/manage/users/UsersTable.vue:37 -#: front/src/components/mixins/Translations.vue:59 +#: front/src/components/mixins/Translations.vue:71 #: front/src/views/admin/moderation/AccountsDetail.vue:114 -#: front/src/components/mixins/Translations.vue:60 +#: front/src/components/mixins/Translations.vue:72 msgctxt "Content/*/*" msgid "Username" msgstr "" -#: front/src/components/auth/Login.vue:15 +#: front/src/components/auth/LoginForm.vue:11 msgctxt "Content/Login/Input.Label/Noun" msgid "Username or email" msgstr "" -#: front/src/components/instance/Stats.vue:13 -msgctxt "Content/About/Paragraph/Unit" -msgid "users" -msgstr "" - -#: front/src/components/Sidebar.vue:102 -#: front/src/components/manage/moderation/DomainsTable.vue:39 -#: front/src/components/mixins/Translations.vue:61 src/views/admin/Settings.vue:81 +#: front/src/components/Sidebar.vue:106 +#: front/src/components/manage/moderation/DomainsTable.vue:47 +#: front/src/components/mixins/Translations.vue:73 src/views/admin/Settings.vue:81 #: front/src/views/admin/users/Base.vue:5 src/views/admin/users/UsersList.vue:21 -#: front/src/components/mixins/Translations.vue:62 +#: front/src/components/mixins/Translations.vue:74 msgctxt "*/*/*/Noun" msgid "Users" msgstr "" +#: front/src/components/Home.vue:110 +msgctxt "Content/Home/Paragraph" +msgid "Users on this pod also get %{ quota } of free storage to upload their own content!" +msgstr "" + #: front/src/components/Footer.vue:29 msgctxt "Footer/*/Title" msgid "Using Funkwhale" @@ -4629,44 +5137,57 @@ msgctxt "Content/Library/Link/Verb" msgid "View files" msgstr "" -#: front/src/components/library/AlbumBase.vue:81 -#: front/src/components/library/ArtistBase.vue:92 -#: front/src/components/library/TrackBase.vue:100 -#: front/src/views/admin/library/AlbumDetail.vue:42 -#: front/src/views/admin/library/ArtistDetail.vue:41 +#: front/src/components/library/AlbumBase.vue:95 +#: front/src/components/library/ArtistBase.vue:107 +#: front/src/components/library/TrackBase.vue:111 +#: front/src/views/admin/library/AlbumDetail.vue:48 +#: front/src/views/admin/library/ArtistDetail.vue:46 #: front/src/views/admin/library/LibraryDetail.vue:34 #: front/src/views/admin/library/LibraryDetail.vue:45 -#: front/src/views/admin/library/TrackDetail.vue:41 +#: front/src/views/admin/library/TagDetail.vue:32 +#: front/src/views/admin/library/TrackDetail.vue:47 #: front/src/views/admin/library/UploadDetail.vue:35 #: front/src/views/admin/library/UploadDetail.vue:46 #: front/src/views/admin/moderation/AccountsDetail.vue:37 #: front/src/views/admin/moderation/AccountsDetail.vue:45 +#: front/src/views/admin/moderation/DomainsDetail.vue:30 msgctxt "Content/Moderation/Link/Verb" msgid "View in Django's admin" msgstr "" -#: front/src/components/library/AlbumBase.vue:61 -#: front/src/components/library/ArtistBase.vue:72 -#: front/src/components/library/TrackBase.vue:80 +#: front/src/components/Home.vue:169 +msgctxt "Content/Home/Link" +msgid "View more…" +msgstr "" + +#: front/src/components/library/AlbumBase.vue:62 +#: front/src/components/library/ArtistBase.vue:73 +#: front/src/components/library/TrackBase.vue:78 #: front/src/components/metadata/ArtistCard.vue:49 #: front/src/components/metadata/ReleaseCard.vue:53 msgctxt "Content/*/*/Clickable, Verb" msgid "View on MusicBrainz" msgstr "" +#: front/src/components/manage/moderation/ReportCard.vue:124 +msgctxt "Content/Moderation/Link" +msgid "View public page" +msgstr "" + #: front/src/components/manage/library/LibrariesTable.vue:11 #: front/src/components/manage/library/LibrariesTable.vue:51 #: front/src/components/manage/library/UploadsTable.vue:11 #: front/src/components/manage/library/UploadsTable.vue:63 #: front/src/views/admin/library/LibraryDetail.vue:94 #: front/src/views/admin/library/UploadDetail.vue:101 +#: front/src/views/content/libraries/Form.vue:18 msgctxt "*/*/*" msgid "Visibility" msgstr "" -#: front/src/views/content/libraries/Form.vue:18 -msgctxt "Content/Library/Dropdown.Label" -msgid "Visibility" +#: front/src/components/Home.vue:91 +msgctxt "Content/Home/Link" +msgid "Visit funkwhale.audio" msgstr "" #: front/src/components/library/AlbumDetail.vue:4 @@ -4679,7 +5200,12 @@ msgctxt "Popup/*/Loading.Title" msgid "Waiting for result…" msgstr "" -#: front/src/components/auth/Login.vue:7 +#: front/src/components/auth/Settings.vue:285 +msgctxt "Content/Settings/Error message.Title" +msgid "We cannot delete your account" +msgstr "" + +#: front/src/components/auth/LoginForm.vue:3 msgctxt "Content/Login/Error message.Title" msgid "We cannot log you in" msgstr "" @@ -4689,9 +5215,9 @@ msgctxt "Content/*/Error message.Title" msgid "We cannot save your changes" msgstr "" -#: front/src/components/Home.vue:122 -msgctxt "Content/Home/List item" -msgid "We do not track you or bother you with ads" +#: front/src/views/Notifications.vue:39 +msgctxt "Content/Notifications/Paragraph" +msgid "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!" msgstr "" #: front/src/components/library/FileUpload.vue:39 @@ -4699,32 +5225,27 @@ msgctxt "Content/Library/Link" msgid "We recommend using Picard for that purpose." msgstr "" -#: front/src/components/Home.vue:7 -msgctxt "Content/Home/Title" -msgid "We think listening to music should be simple." +#: front/src/components/moderation/ReportModal.vue:35 +msgctxt "*/*/Field,Help" +msgid "We'll use this email if we need to contact you regarding this report." msgstr "" -#: front/src/components/Home.vue:148 +#: front/src/components/Home.vue:207 msgctxt "Head/Home/Title" msgid "Welcome" msgstr "" #: front/src/components/Home.vue:5 -msgctxt "Content/Home/Title/Verb" -msgid "Welcome on Funkwhale" -msgstr "" - -#: front/src/components/Home.vue:24 -msgctxt "Content/Home/Title" -msgid "Why funkwhale?" +msgctxt "Content/Home/Header" +msgid "Welcome to %{ podName }!" msgstr "" -#: front/src/components/audio/EmbedWizard.vue:13 +#: front/src/components/audio/EmbedWizard.vue:23 msgctxt "Popup/Embed/Input.Label" msgid "Widget height" msgstr "" -#: front/src/components/audio/EmbedWizard.vue:6 +#: front/src/components/audio/EmbedWizard.vue:16 msgctxt "Popup/Embed/Input.Label" msgid "Widget width" msgstr "" @@ -4744,9 +5265,11 @@ msgctxt "Content/OAuth Scopes/Help Text" msgid "Write-only access to user data" msgstr "" -#: front/src/components/Sidebar.vue:129 +#: front/src/components/Sidebar.vue:133 #: front/src/components/manage/moderation/AccountsTable.vue:72 -#: front/src/components/manage/moderation/DomainsTable.vue:58 +#: front/src/components/manage/moderation/DomainsTable.vue:12 +#: front/src/components/manage/moderation/DomainsTable.vue:69 +#: front/src/views/admin/moderation/DomainsDetail.vue:109 msgctxt "*/*/*" msgid "Yes" msgstr "" @@ -4793,17 +5316,12 @@ msgstr "" #: front/src/views/content/Home.vue:17 msgctxt "Content/Library/Paragraph" -msgid "You can follow libraries from other users to get access to new music. Public libraries can be followed immediatly, while following a private library requires approval from its owner." -msgstr "" - -#: front/src/components/Home.vue:128 -msgctxt "Content/Home/List item" -msgid "You can invite friends and family to your instance so they can enjoy your music" +msgid "You can 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." msgstr "" #: front/src/components/moderation/FilterModal.vue:31 msgctxt "Popup/Moderation/Paragraph" -msgid "You can manage and update your filters anytime from your account settings." +msgid "You can manage and update your filters any time from your account settings." msgstr "" #: front/src/views/auth/EmailConfirm.vue:24 @@ -4811,6 +5329,11 @@ msgctxt "Content/Signup/Paragraph" msgid "You can now use the service without limitations." msgstr "" +#: front/src/components/auth/Settings.vue:278 +msgctxt "Content/Settings/Paragraph'" +msgid "You can permanently and irreversibly delete your account and all the associated data using the form below. You will be asked for confirmation." +msgstr "" + #: front/src/components/library/radios/Builder.vue:7 msgctxt "Content/Radio/Paragraph" msgid "You can use this interface to build your own custom radio, which will play tracks according to your criteria." @@ -4836,7 +5359,7 @@ msgctxt "Content/Moderation/Card.Title" msgid "You don't have any rule in place for this account." msgstr "" -#: front/src/views/admin/moderation/DomainsDetail.vue:39 +#: front/src/views/admin/moderation/DomainsDetail.vue:67 msgctxt "Content/Moderation/Card.Title" msgid "You don't have any rule in place for this domain." msgstr "" @@ -4846,7 +5369,7 @@ msgctxt "Content/Library/Paragraph" msgid "You don't have the permission to edit this object, but you can suggest changes. Once submitted, suggestions will be reviewed before approval." msgstr "" -#: front/src/components/Sidebar.vue:171 +#: front/src/components/Sidebar.vue:175 msgctxt "Sidebar/Player/Title" msgid "You have a radio playing" msgstr "" @@ -4878,14 +5401,19 @@ msgstr "" #: front/src/components/moderation/FilterModal.vue:20 msgctxt "Popup/Moderation/Paragraph" -msgid "You will not see tracks, albums and user activity linked to this artist anymore:" +msgid "You will not see tracks, albums and user activity linked to this artist any more:" msgstr "" -#: front/src/components/auth/Signup.vue:13 +#: front/src/components/auth/SignupForm.vue:9 msgctxt "Content/Signup/Form/Paragraph" msgid "Your account cannot be created." msgstr "" +#: front/src/components/auth/Settings.vue:281 +msgctxt "Content/Settings/Paragraph'" +msgid "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." +msgstr "" + #: front/src/components/auth/Settings.vue:215 msgctxt "Content/Settings/Title/Noun" msgid "Your applications" @@ -4896,6 +5424,11 @@ msgctxt "Content/Settings/Error message.Title" msgid "Your avatar cannot be saved" msgstr "" +#: front/src/components/auth/Settings.vue:527 +msgctxt "*/Auth/Message" +msgid "Your deletion request was submitted, your account and content will be deleted shortly" +msgstr "" + #: front/src/components/library/EditForm.vue:3 msgctxt "Content/Library/Paragraph" msgid "Your edit was successfully submitted." @@ -4906,12 +5439,12 @@ msgctxt "Head/Favorites/Title" msgid "Your Favorites" msgstr "" -#: front/src/components/Home.vue:109 -msgctxt "Content/Home/Title" -msgid "Your music, your way" +#: front/src/views/Notifications.vue:5 +msgctxt "Content/Notifications/Title" +msgid "Your messages" msgstr "" -#: front/src/views/Notifications.vue:4 +#: front/src/views/Notifications.vue:69 msgctxt "Content/Notifications/Title" msgid "Your notifications" msgstr "" @@ -4928,7 +5461,7 @@ msgstr "" #: front/src/components/auth/Settings.vue:14 msgctxt "Content/Settings/Error message.Title" -msgid "Your settings can't be updateds" +msgid "Your settings can't be updated" msgstr "" #: front/src/components/auth/Settings.vue:101 @@ -4936,24 +5469,29 @@ msgctxt "Popup/Settings/List item" msgid "Your Subsonic password will be changed to a new, random one, logging you out from devices that used the old Subsonic password" msgstr "" -#: front/src/edits.js:47 -msgctxt "*/*/*/Short, Noun" -msgid "Position" +#: front/src/entities.js:126 +msgctxt "*/*/*/Noun" +msgid "MusicBrainz ID" msgstr "" -#: front/src/edits.js:54 -msgctxt "Content/Track/*/Noun" -msgid "Copyright" +#: front/src/main.js:110 +msgctxt "*/Error/Paragraph" +msgid "You sent too many requests and have been rate limited, please try again in %{ delay }" +msgstr "" + +#: front/src/main.js:113 +msgctxt "*/Error/Paragraph" +msgid "You sent too many requests and have been rate limited, please try again later" msgstr "" -#: front/src/components/library/AlbumBase.vue:183 +#: front/src/components/library/AlbumBase.vue:208 msgctxt "Content/Album/Header.Title" msgid "Album containing %{ count } track, by <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" msgid_plural "Album containing %{ count } tracks, by <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" msgstr[0] "" msgstr[1] "" -#: front/src/components/audio/PlayButton.vue:220 +#: front/src/components/audio/PlayButton.vue:246 msgctxt "*/Queue/Message" msgid "%{ count } track was added to your queue" msgid_plural "%{ count } tracks were added to your queue" diff --git a/front/locales/ar/LC_MESSAGES/app.po b/front/locales/ar/LC_MESSAGES/app.po index 83f9dcddff7ef80c06b2638fce30ef6cf8717b56..b72ee9c6d20343160b34261917a5dcfa4d6551f9 100644 --- a/front/locales/ar/LC_MESSAGES/app.po +++ b/front/locales/ar/LC_MESSAGES/app.po @@ -3,8 +3,8 @@ msgid "" msgstr "" "Project-Id-Version: Arabic (FunkWhale)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-05-16 10:35+0200\n" -"PO-Revision-Date: 2019-05-13 13:31+0000\n" +"POT-Creation-Date: 2019-10-01 15:15+0200\n" +"PO-Revision-Date: 2019-09-26 10:13+0000\n" "Last-Translator: ButterflyOfFire <butterflyoffire+funkwhale@protonmail.com>\n" "Language-Team: Arabic <https://translate.funkwhale.audio/projects/funkwhale/funkwhale/front/ar/>\n" "Language: ar\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n" -"X-Generator: Weblate 3.2.2\n" +"X-Generator: Weblate 3.7\n" #: front/src/components/playlists/PlaylistModal.vue:9 msgctxt "Popup/Playlist/Paragraph" @@ -34,6 +34,77 @@ msgctxt "Content/Auth/Title" msgid "%{ app } wants to access your Funkwhale account" msgstr "الدخول إلى Øسابك على Ùانك وايل Funkwhale" +#: front/src/components/About.vue:173 src/components/Home.vue:56 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } active user" +msgid_plural "%{ count } active users" +msgstr[0] "%{ count } مقطع" +msgstr[1] "%{ count } مَقطَع" +msgstr[2] "مَقطعين" +msgstr[3] "%{ count } مَقطَع" +msgstr[4] "%{ count } مَقاطÙع" +msgstr[5] "%{ count } مَقاطعا" + +#: front/src/components/About.vue:182 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } albums" +msgid_plural "%{ count } albums" +msgstr[0] "%{ count } مقطع" +msgstr[1] "%{ count } مَقطَع" +msgstr[2] "مَقطعين" +msgstr[3] "%{ count } مَقطَع" +msgstr[4] "%{ count } مَقاطÙع" +msgstr[5] "%{ count } مَقاطعا" + +#: front/src/components/About.vue:152 +msgctxt "*/*/*" +msgid "%{ count } allowed domains" +msgid_plural "%{ count } allowed domains" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" +msgstr[5] "" + +#: front/src/components/About.vue:179 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } artists" +msgid_plural "%{ count } artists" +msgstr[0] "%{ count } مقطع" +msgstr[1] "%{ count } مَقطَع" +msgstr[2] "مَقطعين" +msgstr[3] "%{ count } مَقطَع" +msgstr[4] "%{ count } مَقاطÙع" +msgstr[5] "%{ count } مَقاطعا" + +#: front/src/components/About.vue:176 src/components/Home.vue:59 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } hour of music" +msgid_plural "%{ count } hours of music" +msgstr[0] "%{ count } مقطع" +msgstr[1] "%{ count } مَقطَع" +msgstr[2] "مَقطعين" +msgstr[3] "%{ count } مَقطَع" +msgstr[4] "%{ count } مَقاطÙع" +msgstr[5] "%{ count } مَقاطعا" + +#: front/src/components/About.vue:188 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } listenings" +msgid_plural "%{ count } listenings" +msgstr[0] "%{ count } مقطع" +msgstr[1] "%{ count } مَقطَع" +msgstr[2] "مَقطعين" +msgstr[3] "%{ count } مَقطَع" +msgstr[4] "%{ count } مَقاطÙع" +msgstr[5] "%{ count } مَقاطعا" + #: front/src/components/common/ActionTable.vue:68 msgctxt "Content/*/Paragraph" msgid "%{ count } on %{ total } selected" @@ -45,9 +116,9 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: front/src/components/Sidebar.vue:121 src/components/audio/album/Card.vue:52 +#: front/src/components/Sidebar.vue:125 src/components/audio/album/Card.vue:52 #: front/src/views/content/libraries/Card.vue:40 -#: src/views/content/remote/Card.vue:30 +#: src/views/content/remote/Card.vue:43 msgctxt "*/*/*" msgid "%{ count } track" msgid_plural "%{ count } tracks" @@ -80,7 +151,19 @@ msgstr[3] "مقطع يناسب عامل التصÙية" msgstr[4] "مقطع يناسب عامل التصÙية" msgstr[5] "مقطع يناسب عامل التصÙية" -#: front/src/components/playlists/Card.vue:18 +#: front/src/components/About.vue:185 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } tracks" +msgid_plural "%{ count } tracks" +msgstr[0] "%{ count } مقطع" +msgstr[1] "%{ count } مَقطَع" +msgstr[2] "مَقطعين" +msgstr[3] "%{ count } مَقطَع" +msgstr[4] "%{ count } مَقاطÙع" +msgstr[5] "%{ count } مَقاطعا" + +#: front/src/components/playlists/Card.vue:28 msgctxt "Content/*/Card/List item" msgid "%{ count} track" msgid_plural "%{ count } tracks" @@ -94,7 +177,7 @@ msgstr[5] "%{ count } مَقاطÙع" #: front/src/views/content/libraries/Quota.vue:11 msgctxt "Content/Library/Paragraph" msgid "%{ current } used on %{ max } allowed" -msgstr "" +msgstr "%{ current } Ù…Ùستعمَلة Ù…ÙÙ† أصل %{ max } Ø§Ù„Ù…Ø³Ù…ÙˆØ Ø¨Ù‡Ø§" #: front/src/components/common/Duration.vue:2 msgctxt "Content/*/Paragraph" @@ -128,11 +211,10 @@ msgstr "المل٠الشخصي Ù„ÙÙ€ %{ username }" #: front/src/components/playlists/PlaylistModal.vue:21 msgctxt "Popup/Playlist/Paragraph" -msgid "" -"<strong>%{ track }</strong> is already in <strong>%{ playlist }</strong>." +msgid "<strong>%{ track }</strong> is already in <strong>%{ playlist }</strong>." msgstr "" -#: front/src/components/audio/artist/Card.vue:41 +#: front/src/components/audio/artist/Card.vue:11 msgctxt "Content/Artist/Card" msgid "1 album" msgid_plural "%{ count } albums" @@ -154,24 +236,48 @@ msgstr[3] "%{ count } Ù…Ùضّلة" msgstr[4] "%{ count } Ù…Ùضّلات" msgstr[5] "%{ count } Ù…Ùضّلات" -#: front/src/components/Home.vue:64 -msgctxt "Content/Home/Title" -msgid "A clean library" -msgstr "مكتبة صوتية نظيÙØ©" +#: front/src/components/audio/artist/Card.vue:15 +#, fuzzy +msgctxt "Content/Artist/Card" +msgid "1 track" +msgid_plural "%{ count } tracks" +msgstr[0] "إضاÙØ© مقطع صوتي" +msgstr[1] "إضاÙØ© مقطع صوتي" +msgstr[2] "إضاÙØ© مقطع صوتي" +msgstr[3] "إضاÙØ© مقطع صوتي" +msgstr[4] "إضاÙØ© مقطع صوتي" +msgstr[5] "إضاÙØ© مقطع صوتي" + +#: front/src/views/Notifications.vue:21 src/views/Notifications.vue:55 +msgctxt "*/*/*" +msgid "30 days" +msgstr "30 يوما" + +#: front/src/views/Notifications.vue:22 src/views/Notifications.vue:56 +msgctxt "*/*/*" +msgid "60 days" +msgstr "60 يوما" + +#: front/src/views/Notifications.vue:23 src/views/Notifications.vue:57 +msgctxt "*/*/*" +msgid "90 days" +msgstr "90 يوما" #: front/src/components/library/FileUpload.vue:264 +#, fuzzy msgctxt "Content/Library/Help text" -msgid "A network error occured while uploading this file" +msgid "A network error occurred while uploading this file" msgstr "Øدث خطأ ÙÙŠ الشبكة أثناء تØميل هذا الملÙ" -#: front/src/components/library/EditForm.vue:145 +#: front/src/components/library/EditForm.vue:161 msgctxt "*/*/Placeholder" msgid "A short summary describing your changes." msgstr "ملخص قصير لوص٠تغييراتك." #: front/src/components/About.vue:5 -msgctxt "Content/About/Title/Short, Noun" -msgid "About %{ instance }" +#, fuzzy +msgctxt "Content/Home/Header" +msgid "About %{ podName }" msgstr "عن %{ instance }" #: front/src/components/Footer.vue:6 @@ -179,7 +285,7 @@ msgctxt "Footer/About/Title" msgid "About %{instanceName}" msgstr "عن %{instanceName}" -#: front/src/components/Footer.vue:45 +#: front/src/components/Footer.vue:53 src/components/Home.vue:85 msgctxt "Footer/*/Title/Short" msgid "About Funkwhale" msgstr "عن Ùانك وايل Funkwhale" @@ -189,9 +295,16 @@ msgctxt "Footer/About/List item.Link" msgid "About page" msgstr "عن الصÙØØ©" -#: front/src/components/About.vue:8 src/components/About.vue:67 -msgctxt "Content/About/Title" -msgid "About this instance" +#: front/src/components/Home.vue:19 +#, fuzzy +msgctxt "Content/Home/Header" +msgid "About this Funkwhale pod" +msgstr "عن Ùانك وايل Funkwhale" + +#: front/src/components/About.vue:21 src/components/About.vue:51 +#, fuzzy +msgctxt "Content/About/Header" +msgid "About this pod" msgstr "عن مثيل الخادوم هذا" #: front/src/views/content/libraries/Detail.vue:48 @@ -204,94 +317,87 @@ msgctxt "Content/Library/Table/Short" msgid "Accepted" msgstr "تم قبوله" -#: front/src/components/auth/SubsonicTokenForm.vue:110 +#: front/src/components/auth/SubsonicTokenForm.vue:117 msgctxt "Content/Settings/Message" msgid "Access disabled" msgstr "عÙطّل الوصول" -#: front/src/components/mixins/Translations.vue:73 -#: front/src/components/mixins/Translations.vue:74 +#: front/src/components/mixins/Translations.vue:85 +#: front/src/components/mixins/Translations.vue:86 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to audio files, libraries, artists, albums and tracks" msgstr "الوصول إلى الملÙات الصوتية والمكتبات والÙنانين والألبومات والمَقاطÙع" -#: front/src/components/mixins/Translations.vue:97 -#: front/src/components/mixins/Translations.vue:98 +#: front/src/components/mixins/Translations.vue:109 +#: front/src/components/mixins/Translations.vue:110 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to content filters" msgstr "إختيار عامل تصÙية" -#: front/src/components/mixins/Translations.vue:105 -#: front/src/components/mixins/Translations.vue:106 +#: front/src/components/mixins/Translations.vue:117 +#: front/src/components/mixins/Translations.vue:118 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to edits" msgstr "عÙطّل النÙاذ" -#: front/src/components/mixins/Translations.vue:69 -#: front/src/components/mixins/Translations.vue:70 +#: front/src/components/mixins/Translations.vue:81 +#: front/src/components/mixins/Translations.vue:82 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to email, username, and profile information" msgstr "" -#: front/src/components/mixins/Translations.vue:77 -#: front/src/components/mixins/Translations.vue:78 +#: front/src/components/mixins/Translations.vue:89 +#: front/src/components/mixins/Translations.vue:90 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to favorites" msgstr "إضاÙØ© إلى المÙضلة" -#: front/src/components/mixins/Translations.vue:85 -#: front/src/components/mixins/Translations.vue:86 +#: front/src/components/mixins/Translations.vue:97 +#: front/src/components/mixins/Translations.vue:98 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to follows" -msgstr "" +msgstr "النÙاذ إلى المتابَعين" -#: front/src/components/mixins/Translations.vue:81 -#: front/src/components/mixins/Translations.vue:82 +#: front/src/components/mixins/Translations.vue:93 +#: front/src/components/mixins/Translations.vue:94 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to listening history" msgstr "" -#: front/src/components/mixins/Translations.vue:101 -#: front/src/components/mixins/Translations.vue:102 +#: front/src/components/mixins/Translations.vue:113 +#: front/src/components/mixins/Translations.vue:114 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to notifications" msgstr "كتم الإشعارات" -#: front/src/components/mixins/Translations.vue:89 -#: front/src/components/mixins/Translations.vue:90 +#: front/src/components/mixins/Translations.vue:101 +#: front/src/components/mixins/Translations.vue:102 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to playlists" msgstr "الوصول إلى قوائم المقاطع الموسيقية" -#: front/src/components/mixins/Translations.vue:93 -#: front/src/components/mixins/Translations.vue:94 +#: front/src/components/mixins/Translations.vue:105 +#: front/src/components/mixins/Translations.vue:106 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to radios" msgstr "عÙطّل النÙاذ" -#: front/src/components/Home.vue:101 -msgctxt "Content/Home/List item" -msgid "" -"Access your music from a clean interface that focuses on what really matters" -msgstr "صÙلوا إلى موسيقاكم عبر واجهة نظيÙØ© التصميم تÙركّز Ùعلًا على الأهمّ" - #: front/src/components/manage/library/UploadsTable.vue:67 -#: front/src/components/mixins/Translations.vue:45 +#: front/src/components/mixins/Translations.vue:55 #: front/src/views/admin/library/UploadDetail.vue:175 -#: front/src/components/mixins/Translations.vue:46 +#: front/src/components/mixins/Translations.vue:56 msgctxt "Content/*/*/Noun" msgid "Accessed date" msgstr "عÙطّل النÙاذ" -#: front/src/views/admin/library/LibraryDetail.vue:104 -#: front/src/views/admin/library/UploadDetail.vue:111 -msgctxt "*/*/*/Noun" -msgid "Account" -msgstr "الØسابات" - #: front/src/components/manage/library/LibrariesTable.vue:49 #: front/src/components/manage/library/UploadsTable.vue:61 -msgctxt "*/*/*" +#: front/src/components/manage/moderation/ReportCard.vue:156 +#: front/src/components/mixins/Report.vue:13 +#: front/src/views/admin/library/LibraryDetail.vue:113 +#: front/src/views/admin/library/UploadDetail.vue:111 +#: front/src/components/mixins/Report.vue:14 +msgctxt "*/*/*/Noun" msgid "Account" msgstr "الØسابات" @@ -305,7 +411,7 @@ msgctxt "Content/Settings/Title" msgid "Account settings" msgstr "إعدادات الØساب" -#: front/src/components/auth/Settings.vue:479 +#: front/src/components/auth/Settings.vue:544 msgctxt "Head/Settings/Title" msgid "Account Settings" msgstr "إعدادات الØساب" @@ -322,7 +428,7 @@ msgstr "البريد الإلكتروني الخاص بالØساب" #: front/src/views/admin/moderation/AccountsList.vue:3 #: front/src/views/admin/moderation/AccountsList.vue:24 -#: front/src/views/admin/moderation/Base.vue:8 +#: front/src/views/admin/moderation/Base.vue:11 msgctxt "*/Moderation/Title" msgid "Accounts" msgstr "الØسابات" @@ -335,8 +441,7 @@ msgstr "الإجراء" #: front/src/components/common/ActionTable.vue:101 msgctxt "Content/*/Paragraph" msgid "Action %{ action } was launched successfully on %{ count } element" -msgid_plural "" -"Action %{ action } was launched successfully on %{ count } elements" +msgid_plural "Action %{ action } was launched successfully on %{ count } elements" msgstr[0] "" msgstr[1] "" msgstr[2] "" @@ -346,22 +451,24 @@ msgstr[5] "" #: front/src/components/common/ActionTable.vue:22 #: front/src/components/library/radios/Builder.vue:65 +#: front/src/components/manage/moderation/ReportCard.vue:210 msgctxt "Content/*/*/Noun" msgid "Actions" msgstr "الإجراءات" -#: front/src/components/manage/users/UsersTable.vue:53 +#: front/src/components/manage/users/UsersTable.vue:54 msgctxt "Content/Admin/Table" msgid "Active" msgstr "نشÙØ·" -#: front/src/views/admin/library/AlbumDetail.vue:134 -#: front/src/views/admin/library/ArtistDetail.vue:123 -#: front/src/views/admin/library/LibraryDetail.vue:138 -#: front/src/views/admin/library/TrackDetail.vue:186 +#: front/src/views/admin/library/AlbumDetail.vue:140 +#: front/src/views/admin/library/ArtistDetail.vue:128 +#: front/src/views/admin/library/LibraryDetail.vue:147 +#: front/src/views/admin/library/TagDetail.vue:83 +#: front/src/views/admin/library/TrackDetail.vue:192 #: front/src/views/admin/library/UploadDetail.vue:160 -#: front/src/views/admin/moderation/AccountsDetail.vue:220 -#: front/src/views/admin/moderation/DomainsDetail.vue:136 +#: front/src/views/admin/moderation/AccountsDetail.vue:221 +#: front/src/views/admin/moderation/DomainsDetail.vue:173 msgctxt "Content/Moderation/Title" msgid "Activity" msgstr "النشاط" @@ -372,7 +479,7 @@ msgctxt "Content/Settings/Dropdown.Label/Noun" msgid "Activity visibility" msgstr "عرض النشاط" -#: front/src/views/admin/moderation/DomainsList.vue:18 +#: front/src/views/admin/moderation/DomainsList.vue:22 msgctxt "Content/Moderation/Button/Verb" msgid "Add" msgstr "إضاÙØ©" @@ -401,7 +508,7 @@ msgstr "إضاÙØ© المØتوى Ùˆ إدارته" #: front/src/components/playlists/PlaylistModal.vue:31 msgctxt "*/Playlist/Button.Label/Verb" msgid "Add anyways" -msgstr "" +msgstr "أضÙÙ‡ على أي Øال" #: front/src/components/Sidebar.vue:75 src/views/content/Base.vue:18 msgctxt "*/Library/*/Verb" @@ -418,7 +525,21 @@ msgctxt "Content/Radio/Paragraph" msgid "Add filters to customize your radio" msgstr "قم بإضاÙØ© عوامل تصÙية لتخصيص إذاعتك" -#: front/src/components/audio/PlayButton.vue:75 +#: front/src/components/manage/moderation/NoteForm.vue:12 +#, fuzzy +msgctxt "Content/Moderation/Button.Label/Verb" +msgid "Add note" +msgstr "إضاÙØ© Ù…Øتوى" + +#: front/src/components/manage/moderation/DomainsTable.vue:191 +#: front/src/views/admin/moderation/DomainsDetail.vue:46 +#: front/src/views/admin/moderation/DomainsList.vue:18 +#, fuzzy +msgctxt "Content/Moderation/Action/Verb" +msgid "Add to allow-list" +msgstr "إضاÙØ© إلى قائمة المقاطع الموسيقية…" + +#: front/src/components/audio/PlayButton.vue:91 msgctxt "*/Queue/Dropdown/Button/Title" msgid "Add to current queue" msgstr "أضÙ٠إلى قائمة الانتظار الØالية" @@ -450,7 +571,7 @@ msgctxt "Popup/Playlist/Table.Button.Label/Verb" msgid "Add track" msgstr "إضاÙØ© مقطع صوتي" -#: front/src/components/manage/users/UsersTable.vue:69 +#: front/src/components/manage/users/UsersTable.vue:70 msgctxt "Content/Admin/Table.User role" msgid "Admin" msgstr "المدير" @@ -460,49 +581,49 @@ msgctxt "Sidebar/Admin/Title/Noun" msgid "Administration" msgstr "الإدارة" -#: front/src/views/admin/library/TrackDetail.vue:107 -msgctxt "*/*/*/Noun" -msgid "Album" -msgstr "الألبوم" - -#: front/src/components/audio/SearchBar.vue:26 +#: front/src/components/audio/SearchBar.vue:33 #: src/components/audio/track/Table.vue:9 -#: front/src/components/library/AlbumBase.vue:152 -#: front/src/components/library/ArtistBase.vue:194 +#: front/src/components/library/AlbumBase.vue:170 +#: front/src/components/library/ArtistBase.vue:212 #: front/src/components/manage/library/TracksTable.vue:40 #: front/src/components/metadata/Search.vue:134 +#: src/components/mixins/Report.vue:41 +#: front/src/views/admin/library/TrackDetail.vue:113 #: front/src/views/content/libraries/FilesTable.vue:57 +#: front/src/components/mixins/Report.vue:42 msgctxt "*/*/*" msgid "Album" msgstr "الألبوم" -#: front/src/views/admin/library/TrackDetail.vue:128 +#: front/src/views/admin/library/TrackDetail.vue:134 msgctxt "*/*/*/Noun" msgid "Album artist" msgstr "Ù…ÙÙ† ألبومات هذا الÙنان" -#: front/src/views/admin/library/AlbumDetail.vue:92 +#: front/src/views/admin/library/AlbumDetail.vue:98 msgctxt "Content/Moderation/Title" msgid "Album data" msgstr "عنوان الألبوم" -#: front/src/components/mixins/Translations.vue:51 -#: front/src/components/mixins/Translations.vue:52 +#: front/src/components/mixins/Translations.vue:61 +#: front/src/components/mixins/Translations.vue:62 msgctxt "Content/*/Dropdown/Noun" msgid "Album name" msgstr "عنوان الألبوم" #: front/src/components/audio/Search.vue:19 -#: src/components/instance/Stats.vue:48 -#: front/src/components/library/Albums.vue:120 -#: src/components/library/Library.vue:7 +#: src/components/library/Albums.vue:129 +#: front/src/components/library/Library.vue:7 +#: src/components/library/TagDetail.vue:28 #: front/src/components/manage/library/ArtistsTable.vue:41 +#: front/src/components/manage/library/TagsTable.vue:43 #: front/src/views/admin/library/AlbumsList.vue:24 -#: front/src/views/admin/library/ArtistDetail.vue:241 +#: front/src/views/admin/library/ArtistDetail.vue:256 #: front/src/views/admin/library/Base.vue:11 -#: front/src/views/admin/library/LibraryDetail.vue:219 -#: front/src/views/admin/moderation/AccountsDetail.vue:354 -#: front/src/views/admin/moderation/DomainsDetail.vue:264 +#: front/src/views/admin/library/LibraryDetail.vue:238 +#: front/src/views/admin/library/TagDetail.vue:133 +#: front/src/views/admin/moderation/AccountsDetail.vue:366 +#: front/src/views/admin/moderation/DomainsDetail.vue:301 msgctxt "*/*/*" msgid "Albums" msgstr "الألبومات" @@ -516,7 +637,10 @@ msgstr "Ù…ÙÙ† ألبومات هذا الÙنان" #: front/src/components/manage/library/LibrariesTable.vue:13 #: front/src/components/manage/library/UploadsTable.vue:13 #: front/src/components/manage/library/UploadsTable.vue:22 +#: front/src/components/manage/moderation/DomainsTable.vue:11 #: front/src/components/manage/users/InvitationsTable.vue:19 +#: front/src/components/moderation/ReportCategoryDropdown.vue:32 +#: front/src/views/admin/moderation/ReportsList.vue:17 #: front/src/views/content/libraries/FilesTable.vue:13 msgctxt "Content/*/Dropdown" msgid "All" @@ -538,41 +662,56 @@ msgctxt "Head/Authorize/Title" msgid "Allow application" msgstr "ترخيص التطبيق" +#: front/src/components/About.vue:136 +msgctxt "*/*/*" +msgid "Allow-list" +msgstr "" + +#: front/src/components/About.vue:149 +#, fuzzy +msgctxt "*/*/*" +msgid "Allowed domains" +msgstr "إضاÙØ© نطاق" + #: front/src/components/library/ImportStatusModal.vue:17 msgctxt "Popup/Import/Message" -msgid "" -"An error occured during upload processing. You will find more information " -"below." +msgid "An error occurred during upload processing. You will find more information below." msgstr "" #: front/src/components/playlists/Editor.vue:13 +#, fuzzy msgctxt "Content/Playlist/Error message.Title" -msgid "An error occured while saving your changes" +msgid "An error occurred while saving your changes" msgstr "Øدث خطأ أثناء عملية ØÙظ التغييرات" #: front/src/components/federation/FetchButton.vue:21 +#, fuzzy msgctxt "Popup/*/Message.Content" -msgid "An error occured while trying to refresh data:" +msgid "An error occurred while trying to refresh data:" msgstr "Øدث خطأ أثناء عملية إنعاش البيانات:" #: front/src/components/federation/FetchButton.vue:41 +#, fuzzy msgctxt "*/*/Error" -msgid "An HTTP error occured while contacting the remote server" +msgid "An HTTP error occurred while contacting the remote server" msgstr "Øدث خطأ أثناء عملية ØÙظ التغييرات" -#: front/src/components/auth/Login.vue:10 -msgctxt "Content/Login/Error message/List item" -msgid "" -"An unknown error happend, this can mean the server is down or cannot be " -"reached" -msgstr "" -"طرأ هناك خطأ ما، ذلك قد يعني أن السيرÙر غير متصل أو أنّ الإتصال به غير ممكن" - #: front/src/components/library/ImportStatusModal.vue:145 +#, fuzzy msgctxt "Popup/Import/Error.Label" -msgid "An unkwown error occured" +msgid "An unknown error occurred" msgstr "Øدث خطأ مجهول" +#: front/src/components/About.vue:123 +msgctxt "*/*/*" +msgid "Anonymous access" +msgstr "وصول مجهول" + +#: front/src/components/moderation/ReportModal.vue:54 +msgctxt "Popup/Moderation/Error message" +msgid "Anonymous reports are disabled, please sign-in to submit a report." +msgstr "" + #: front/src/components/auth/Settings.vue:175 #: src/components/auth/Settings.vue:225 msgctxt "*/*/*/Noun" @@ -591,15 +730,13 @@ msgstr "Ù…ÙعرّÙ٠التطبيق" #: front/src/components/auth/ApplicationEdit.vue:16 msgctxt "Content/Application/Paragraph/" -msgid "" -"Application ID and secret are really sensitive values and must be treated " -"like passwords. Do not share those with anyone else." +msgid "Application ID and secret are really sensitive values and must be treated like passwords. Do not share those with anyone else." msgstr "" #: front/src/components/auth/ApplicationEdit.vue:25 msgctxt "Content/Applications/Label" msgid "Application secret" -msgstr "" +msgstr "سر التطبيق" #: front/src/components/library/EditCard.vue:81 #: front/src/components/notifications/NotificationRow.vue:66 @@ -611,7 +748,7 @@ msgstr "قبول" #: front/src/components/manage/library/EditsCardList.vue:21 msgctxt "Content/*/*/Short" msgid "Approved" -msgstr "قبول" +msgstr "التي تم قبولها" #: front/src/components/library/EditCard.vue:21 msgctxt "Content/Library/Card/Short" @@ -623,29 +760,27 @@ msgctxt "Content/Login/Title" msgid "Are you sure you want to log out?" msgstr "أمتأكد من أنك تريد الخروج ØŸ" +#: front/src/components/audio/SearchBar.vue:32 +#: src/components/audio/track/Table.vue:8 #: front/src/components/manage/library/AlbumsTable.vue:40 #: front/src/components/manage/library/TracksTable.vue:41 -msgctxt "*/*/*" -msgid "Artist" -msgstr "الÙنان" - -#: front/src/components/audio/SearchBar.vue:25 -#: src/components/audio/track/Table.vue:8 #: front/src/components/metadata/Search.vue:130 -#: front/src/views/admin/library/AlbumDetail.vue:108 -#: front/src/views/admin/library/TrackDetail.vue:118 -#: front/src/views/content/libraries/FilesTable.vue:56 +#: src/components/mixins/Report.vue:55 +#: front/src/views/admin/library/AlbumDetail.vue:114 +#: front/src/views/admin/library/TrackDetail.vue:124 +#: front/src/views/content/libraries/FilesTable.vue:56 src/entities.js:12 +#: front/src/components/mixins/Report.vue:56 msgctxt "*/*/*/Noun" msgid "Artist" msgstr "الÙنان" -#: front/src/views/admin/library/ArtistDetail.vue:91 +#: front/src/views/admin/library/ArtistDetail.vue:96 msgctxt "Content/Moderation/Title" msgid "Artist data" msgstr "إسم الÙنان" -#: front/src/components/mixins/Translations.vue:52 -#: front/src/components/mixins/Translations.vue:53 +#: front/src/components/mixins/Translations.vue:62 +#: front/src/components/mixins/Translations.vue:63 msgctxt "Content/*/Dropdown/Noun" msgid "Artist name" msgstr "إسم الÙنان" @@ -655,36 +790,36 @@ msgctxt "*/Search/Input.Placeholder" msgid "Artist, album, track…" msgstr "Ùنان ØŒ ألبوم ØŒ مقطع موسيقي …" +#: front/src/components/audio/Search.vue:10 +#: src/components/library/Artists.vue:117 +#: front/src/components/library/Library.vue:10 +#: front/src/components/library/TagDetail.vue:19 +#: front/src/components/manage/library/TagsTable.vue:42 #: front/src/views/admin/library/ArtistsList.vue:24 #: front/src/views/admin/library/Base.vue:8 -#: front/src/views/admin/library/LibraryDetail.vue:209 -msgctxt "*/*/*" -msgid "Artists" -msgstr "الÙنانون" - -#: front/src/components/audio/Search.vue:10 -#: src/components/instance/Stats.vue:42 -#: front/src/components/library/Artists.vue:117 -#: src/components/library/Library.vue:10 -#: front/src/views/admin/moderation/AccountsDetail.vue:346 -#: front/src/views/admin/moderation/DomainsDetail.vue:254 +#: front/src/views/admin/library/LibraryDetail.vue:228 +#: front/src/views/admin/library/TagDetail.vue:123 +#: front/src/views/admin/moderation/AccountsDetail.vue:358 +#: front/src/views/admin/moderation/DomainsDetail.vue:291 msgctxt "*/*/*/Noun" msgid "Artists" msgstr "الÙنانون" #: front/src/components/favorites/List.vue:34 -#: src/components/library/Albums.vue:25 -#: front/src/components/library/Artists.vue:25 +#: src/components/library/Albums.vue:29 +#: front/src/components/library/Artists.vue:29 #: src/components/library/Radios.vue:44 #: front/src/components/manage/library/AlbumsTable.vue:21 #: front/src/components/manage/library/ArtistsTable.vue:21 #: front/src/components/manage/library/EditsCardList.vue:39 #: front/src/components/manage/library/LibrariesTable.vue:30 +#: front/src/components/manage/library/TagsTable.vue:21 #: front/src/components/manage/library/TracksTable.vue:21 #: front/src/components/manage/library/UploadsTable.vue:40 #: front/src/components/manage/moderation/AccountsTable.vue:21 -#: front/src/components/manage/moderation/DomainsTable.vue:19 +#: front/src/components/manage/moderation/DomainsTable.vue:27 #: front/src/components/manage/users/UsersTable.vue:19 +#: front/src/views/admin/moderation/ReportsList.vue:44 #: front/src/views/content/libraries/FilesTable.vue:31 #: front/src/views/playlists/List.vue:27 msgctxt "Content/Search/Dropdown" @@ -696,18 +831,24 @@ msgctxt "Content/Signup/Button.Label/Verb" msgid "Ask for a password reset" msgstr "أطلب إعادة تعيين كلمة المرور" -#: front/src/views/admin/library/AlbumDetail.vue:198 -#: front/src/views/admin/library/ArtistDetail.vue:187 -#: front/src/views/admin/library/LibraryDetail.vue:176 -#: front/src/views/admin/library/TrackDetail.vue:250 +#: front/src/components/manage/moderation/ReportCard.vue:72 +msgctxt "Content/Moderation/*" +msgid "Assigned to" +msgstr "Ù†ÙسÙب إلى" + +#: front/src/views/admin/library/AlbumDetail.vue:214 +#: front/src/views/admin/library/ArtistDetail.vue:202 +#: front/src/views/admin/library/LibraryDetail.vue:195 +#: front/src/views/admin/library/TagDetail.vue:113 +#: front/src/views/admin/library/TrackDetail.vue:266 #: front/src/views/admin/library/UploadDetail.vue:191 -#: front/src/views/admin/moderation/AccountsDetail.vue:274 -#: front/src/views/admin/moderation/DomainsDetail.vue:202 +#: front/src/views/admin/moderation/AccountsDetail.vue:285 +#: front/src/views/admin/moderation/DomainsDetail.vue:239 msgctxt "Content/Moderation/Title" msgid "Audio content" -msgstr "Ù…Øتوى مسموع" +msgstr "المØتوى الصوتي" -#: front/src/components/ShortcutsModal.vue:55 +#: front/src/components/ShortcutsModal.vue:92 msgctxt "Popup/Keyboard shortcuts/Title" msgid "Audio player shortcuts" msgstr "اختصارات المÙشغّل الصوتي" @@ -750,9 +891,9 @@ msgid "Back to settings" msgstr "العودة إلى الإعدادات" #: front/src/components/library/TrackDetail.vue:48 -#: front/src/components/mixins/Translations.vue:55 +#: front/src/components/mixins/Translations.vue:67 #: front/src/views/admin/library/UploadDetail.vue:227 -#: front/src/components/mixins/Translations.vue:56 +#: front/src/components/mixins/Translations.vue:68 msgctxt "Content/Track/*/Noun" msgid "Bitrate" msgstr "معدل البت" @@ -765,10 +906,7 @@ msgstr "Øجب الكل" #: front/src/components/manage/moderation/InstancePolicyForm.vue:112 msgctxt "Content/Moderation/Help text" -msgid "" -"Block everything from this account or domain. This will prevent any " -"interaction with the entity, and purge related content (uploads, libraries, " -"follows, etc.)" +msgid "Block everything from this account or domain. This will prevent any interaction with the entity, and purge related content (uploads, libraries, follows, etc.)" msgstr "" #: front/src/components/Sidebar.vue:18 src/components/library/Library.vue:4 @@ -781,6 +919,12 @@ msgctxt "Sidebar/Library/List item.Link/Verb" msgid "Browse library" msgstr "تصÙØ Ø§Ù„Ù…ÙƒØªØ¨Ø©" +#: front/src/components/Home.vue:132 +#, fuzzy +msgctxt "Content/Home/Link" +msgid "Browse public content" +msgstr "تØديث Ù…Øتوى الجدول" + #: front/src/components/library/Albums.vue:4 msgctxt "Content/Album/Title" msgid "Browsing albums" @@ -811,39 +955,40 @@ msgctxt "Content/Album/Card" msgid "By %{ artist }" msgstr "Øسب %{ artist }" -#: front/src/views/content/remote/Card.vue:112 +#: front/src/views/content/remote/Card.vue:125 msgctxt "Popup/Library/Paragraph" msgid "By unfollowing this library, you loose access to its content." -msgstr "" -"إن قمت بإلغاء متابعة هذه المكتبة Ùسو٠لن تتمكن Ù…ÙÙ† الوصول إلى Ù…Øتواها." +msgstr "إن قمت بإلغاء متابعة هذه المكتبة Ùسو٠لن تتمكن Ù…ÙÙ† الوصول إلى Ù…Øتواها." -#: front/src/views/admin/library/AlbumDetail.vue:214 -#: front/src/views/admin/library/ArtistDetail.vue:203 -#: front/src/views/admin/library/LibraryDetail.vue:192 -#: front/src/views/admin/library/TrackDetail.vue:266 +#: front/src/views/admin/library/AlbumDetail.vue:230 +#: front/src/views/admin/library/ArtistDetail.vue:218 +#: front/src/views/admin/library/LibraryDetail.vue:211 +#: front/src/views/admin/library/TrackDetail.vue:282 #: front/src/views/admin/library/UploadDetail.vue:208 -#: front/src/views/admin/moderation/AccountsDetail.vue:290 -#: front/src/views/admin/moderation/DomainsDetail.vue:217 +#: front/src/views/admin/moderation/AccountsDetail.vue:301 +#: front/src/views/admin/moderation/DomainsDetail.vue:254 msgctxt "Content/Moderation/Table.Label/Noun" msgid "Cached size" msgstr "" #: front/src/components/SetInstanceModal.vue:37 #: front/src/components/common/DangerousButton.vue:17 -#: front/src/components/library/AlbumBase.vue:36 -#: front/src/components/library/ArtistBase.vue:47 -#: front/src/components/library/EditForm.vue:95 -#: front/src/components/library/TrackBase.vue:55 +#: front/src/components/library/AlbumBase.vue:37 +#: front/src/components/library/ArtistBase.vue:48 +#: front/src/components/library/EditForm.vue:107 +#: front/src/components/library/TrackBase.vue:53 #: front/src/components/library/radios/Filter.vue:53 #: front/src/components/manage/moderation/InstancePolicyForm.vue:54 #: front/src/components/moderation/FilterModal.vue:39 +#: front/src/components/moderation/ReportModal.vue:59 #: front/src/components/playlists/PlaylistModal.vue:26 #: front/src/components/playlists/PlaylistModal.vue:77 +#: front/src/views/playlists/Detail.vue:62 msgctxt "*/*/Button.Label/Verb" msgid "Cancel" msgstr "إلغاء" -#: front/src/views/content/remote/Card.vue:97 +#: front/src/views/content/remote/Card.vue:110 #, fuzzy msgctxt "Content/Library/Card.Paragraph" msgid "Cancel follow request" @@ -859,6 +1004,14 @@ msgctxt "Content/Library/Help text" msgid "Cannot upload this file, ensure it is not too big" msgstr "لا يمكن تØميل هذا الملÙØŒ تØقق أنّ Øجم المل٠ليس ضخما" +#: front/src/components/manage/moderation/ReportCard.vue:30 +#: front/src/components/mixins/Translations.vue:42 +#: front/src/components/moderation/ReportCategoryDropdown.vue:2 +#: front/src/components/mixins/Translations.vue:43 +msgctxt "*/*/*" +msgid "Category" +msgstr "الÙئة" + #: front/src/components/Footer.vue:21 msgctxt "Footer/Settings/Dropdown.Label/Short, Verb" msgid "Change language" @@ -874,6 +1027,11 @@ msgctxt "Content/Settings/Button.Label" msgid "Change password" msgstr "تغيير الكلمة السرية" +#: front/src/components/Footer.vue:37 +msgctxt "Footer/Settings/Dropdown.Label/Short, Verb" +msgid "Change theme" +msgstr "تغيير المظهر" + #: front/src/views/auth/PasswordResetConfirm.vue:62 msgctxt "*/Signup/Title" msgid "Change your password" @@ -891,28 +1049,22 @@ msgstr "تمت مزامنة التعديلات مع السيرÙر" #: front/src/components/auth/Settings.vue:71 msgctxt "Content/Settings/Paragraph'" -msgid "" -"Changing your password will also change your Subsonic API password if you " -"have requested one." -msgstr "" -"سو٠تتأثر كذلك الكلمة السرية لواجهة برمجة تطبيقات صاب سونيك Subsonic إن قمت " -"بتعديل كلمتك السرية." +msgid "Changing your password will also change your Subsonic API password if you have requested one." +msgstr "سو٠تتأثر كذلك الكلمة السرية لواجهة برمجة تطبيقات صاب سونيك Subsonic إن قمت بتعديل كلمتك السرية." #: front/src/components/auth/Settings.vue:98 msgctxt "Popup/Settings/Paragraph" msgid "Changing your password will have the following consequences:" msgstr "سو٠ينجرّ ما يلي عند تعديل كلمتك السرية:" -#: front/src/components/Footer.vue:40 +#: front/src/components/Footer.vue:48 msgctxt "Footer/*/List item.Link" msgid "Chat room" msgstr "قاعة المØادثة" #: front/src/components/auth/ApplicationForm.vue:24 msgctxt "Content/Applications/Paragraph/" -msgid "" -"Checking the parent \"Read\" or \"Write\" scopes implies access to all the " -"corresponding children scopes." +msgid "Checking the parent \"Read\" or \"Write\" scopes implies access to all the corresponding children scopes." msgstr "" #: front/src/components/SetInstanceModal.vue:2 @@ -920,12 +1072,9 @@ msgctxt "Popup/Instance/Title" msgid "Choose your instance" msgstr "اختر خادومك" -#: front/src/components/manage/users/InvitationForm.vue:37 -msgctxt "Content/Admin/Button.Label/Verb" -msgid "Clear" -msgstr "امسØ" - #: front/src/components/library/EditForm.vue:75 +#: front/src/components/library/EditForm.vue:88 +#: front/src/components/manage/users/InvitationForm.vue:37 msgctxt "Content/Library/Button.Label" msgid "Clear" msgstr "امسØ" @@ -936,44 +1085,47 @@ msgctxt "*/Playlist/Button.Label/Verb" msgid "Clear playlist" msgstr "Ù…Ø³Ø Ù‚Ø§Ø¦Ù…Ø© المَقاطع الموسيقية" -#: front/src/components/audio/Player.vue:642 +#: front/src/components/ShortcutsModal.vue:144 +#, fuzzy +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Clear queue" +msgstr "Ù…Ø³Ø Ù‚Ø§Ø¦Ù…Ø© الانتظار الخاصة بك" + +#: front/src/components/audio/Player.vue:668 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Clear your queue" msgstr "Ù…Ø³Ø Ù‚Ø§Ø¦Ù…Ø© الانتظار الخاصة بك" -#: front/src/components/Home.vue:44 -msgctxt "Content/Home/List item/Verb" -msgid "Click once, listen for hours using built-in radios" -msgstr "إضغط مرة واØدة Ùˆ استمع لساعات Ù…ÙÙ† الموسيقى عبر الإذاعات المÙدمَجة" - #: front/src/components/mixins/Translations.vue:21 #: front/src/components/mixins/Translations.vue:22 msgctxt "Content/Library/Link.Title" -msgid "" -"Click to display more information about the import process for this upload" -msgstr "" +msgid "Click to display more information about the import process for this upload" +msgstr "اضغط لعرض المزيد من المعلومات Øول عملية استيراد هذا التØميل" #: front/src/components/library/FileUpload.vue:82 msgctxt "Content/Library/Paragraph/Call to action" msgid "Click to select files to upload or drag and drop files or directories" msgstr "اضغط لاختيار ملÙات أو قم بسØب وإلقاء ملÙات أو مجلدات" +#: front/src/components/ShortcutsModal.vue:38 #: front/src/components/federation/FetchButton.vue:85 #: front/src/components/library/ImportStatusModal.vue:79 +#: front/src/components/manage/moderation/InstancePolicyModal.vue:34 msgctxt "*/*/Button.Label/Verb" msgid "Close" msgstr "إغلاق" -#: front/src/components/ShortcutsModal.vue:20 -msgctxt "Popup/Keyboard shortcuts/Button.Label/Verb" -msgid "Close" -msgstr "إغلاق" - #: front/src/components/federation/FetchButton.vue:88 msgctxt "*/*/Button.Label/Verb" msgid "Close and reload page" msgstr "إغلاق وإعادة إنعاش الصÙØØ©" +#: front/src/components/About.vue:94 +#, fuzzy +msgctxt "*/*/*/State of registrations" +msgid "Closed" +msgstr "إغلاق" + #: front/src/components/manage/users/InvitationForm.vue:26 #: front/src/components/manage/users/InvitationsTable.vue:42 msgctxt "Content/Admin/Table.Label/Noun" @@ -981,8 +1133,9 @@ msgid "Code" msgstr "الرمز" #: front/src/components/audio/album/Card.vue:41 -#: front/src/components/audio/artist/Card.vue:33 -msgctxt "Content/*/Card.Link/Verb" +#: front/src/components/common/CollapseLink.vue:3 +#, fuzzy +msgctxt "*/*/Button,Label" msgid "Collapse" msgstr "تصغير" @@ -1006,26 +1159,26 @@ msgctxt "Content/Signup/Form.Label" msgid "Confirmation code" msgstr "رمز التأكيد" +#: front/src/components/About.vue:67 src/components/Home.vue:65 +msgctxt "Content/Home/Header/Name" +msgid "Contact" +msgstr "للإتصال" + #: front/src/components/moderation/FilterModal.vue:90 msgctxt "*/Moderation/Message" msgid "Content filter successfully added" msgstr "" -#: front/src/components/mixins/Translations.vue:96 -#: front/src/components/mixins/Translations.vue:97 -msgctxt "Content/OAuth Scopes/Label" -msgid "Content filters" -msgstr "عوامل تصÙية المØتوى" - #: front/src/components/auth/Settings.vue:116 +#: front/src/components/mixins/Translations.vue:108 +#: front/src/components/mixins/Translations.vue:109 msgctxt "Content/Settings/Title/Noun" msgid "Content filters" msgstr "عوامل تصÙية المØتوى" #: front/src/components/auth/Settings.vue:119 msgctxt "Content/Settings/Paragraph" -msgid "" -"Content filters help you hide content you don't want to see on the service." +msgid "Content filters help you hide content you don't want to see on the service." msgstr "" #: front/src/components/common/ActionTable.vue:8 @@ -1033,13 +1186,20 @@ msgctxt "Content/*/Button.Help text.Paragraph" msgid "Content have been updated, click refresh to see up-to-date content" msgstr "" -#: front/src/components/Footer.vue:48 +#: front/src/components/About.vue:46 +#, fuzzy +msgctxt "Content/About/Header" +msgid "Contents" +msgstr "عوامل تصÙية المØتوى" + +#: front/src/components/Footer.vue:56 msgctxt "Footer/*/List item.Link" msgid "Contribute" msgstr "المساهمة" -#: front/src/components/audio/EmbedWizard.vue:19 +#: front/src/components/audio/EmbedWizard.vue:29 #: front/src/components/common/CopyInput.vue:8 +#: front/src/components/forms/PasswordInput.vue:43 msgctxt "*/*/Button.Label/Short, Verb" msgid "Copy" msgstr "نسخ" @@ -1054,14 +1214,14 @@ msgctxt "Content/Auth/Paragraph" msgid "Copy-paste the following code in the application:" msgstr "" -#: front/src/components/audio/EmbedWizard.vue:21 +#: front/src/components/audio/EmbedWizard.vue:31 msgctxt "Popup/Embed/Paragraph" msgid "Copy/paste this code in your website HTML" msgstr "انسخ والصق هذا الرمز ÙÙŠ نص HTML على موقعك" #: front/src/components/library/TrackDetail.vue:10 -#: front/src/views/admin/library/TrackDetail.vue:153 -msgctxt "Content/Track/Table.Label/Noun" +#: front/src/views/admin/library/TrackDetail.vue:159 src/edits.js:77 +msgctxt "Content/Track/*/Noun" msgid "Copyright" msgstr "الØقوق" @@ -1075,29 +1235,20 @@ msgctxt "Content/Library/Error message.Title" msgid "Could not fetch remote library" msgstr "تعذر جلب المكتبة البÙعدية" -#: front/src/components/Home.vue:80 -msgctxt "Content/Home/List item" -msgid "Covers, lyrics, our goal is to have them all ;)" -msgstr "أغلÙÙØ© الألبومات Ùˆ كلمات الأغاني، هدÙنا هو دمجها جميعا ;)" - #: front/src/components/manage/moderation/InstancePolicyForm.vue:58 msgctxt "Content/Moderation/Card.Button.Label/Verb" msgid "Create" msgstr "إنشاء" -#: front/src/components/auth/Signup.vue:4 +#: front/src/views/auth/Signup.vue:4 msgctxt "Content/Signup/Title" msgid "Create a funkwhale account" msgstr "أنشئ Øسابا على Ùانك وايل" -#: front/src/components/auth/Settings.vue:220 -msgctxt "Content/Settings/Button.Label" -msgid "Create a new application" -msgstr "أنشئ تطبيقا جديدا" - #: front/src/components/auth/ApplicationNew.vue:8 #: front/src/components/auth/ApplicationNew.vue:41 -msgctxt "Content/Applications/Title" +#: front/src/components/auth/Settings.vue:220 +msgctxt "Content/Settings/Button.Label" msgid "Create a new application" msgstr "أنشئ تطبيقا جديدا" @@ -1111,7 +1262,7 @@ msgctxt "Popup/Playlist/Title/Verb" msgid "Create a new playlist" msgstr "أنشئ قائمة مَقاطÙع موسيقية جديدة" -#: front/src/components/Sidebar.vue:57 src/components/auth/Login.vue:17 +#: front/src/components/Sidebar.vue:57 src/components/auth/LoginForm.vue:15 msgctxt "*/Signup/Link/Verb" msgid "Create an account" msgstr "أنشئ Øسابا" @@ -1126,7 +1277,7 @@ msgctxt "Content/Library/Button.Label/Verb" msgid "Create library" msgstr "أنشئ مكتبة" -#: front/src/components/auth/Signup.vue:53 +#: front/src/components/auth/SignupForm.vue:49 msgctxt "Content/Signup/Button.Label" msgid "Create my account" msgstr "أنشئ Øسابي" @@ -1151,11 +1302,13 @@ msgstr "أنشئ إذاعتك" #: front/src/components/manage/library/AlbumsTable.vue:44 #: front/src/components/manage/library/ArtistsTable.vue:43 #: front/src/components/manage/library/LibrariesTable.vue:54 +#: front/src/components/manage/library/TagsTable.vue:45 #: front/src/components/manage/library/TracksTable.vue:44 #: front/src/components/manage/library/UploadsTable.vue:66 +#: front/src/components/manage/moderation/ReportCard.vue:43 #: front/src/components/manage/users/InvitationsTable.vue:40 -#: front/src/components/mixins/Translations.vue:43 -#: front/src/components/mixins/Translations.vue:44 +#: front/src/components/mixins/Translations.vue:53 +#: front/src/components/mixins/Translations.vue:54 msgctxt "Content/*/*/Noun" msgid "Creation date" msgstr "تاريخ الإنشاء" @@ -1165,6 +1318,12 @@ msgctxt "Content/Settings/Title/Noun" msgid "Current avatar" msgstr "الصورة الرمزية الØالية" +#: front/src/components/admin/SettingsGroup.vue:67 +#, fuzzy +msgctxt "Content/Settings/Title/Noun" +msgid "Current image" +msgstr "الاستعمال الØالي" + #: front/src/views/content/libraries/DetailArea.vue:4 msgctxt "Content/Library/Title" msgid "Current library" @@ -1180,6 +1339,11 @@ msgctxt "Content/Library/Title" msgid "Current usage" msgstr "الاستعمال الØالي" +#: front/src/components/Footer.vue:94 +msgctxt "Footer/Settings/Dropdown.Label/Theme name" +msgid "Dark" +msgstr "" + #: front/src/components/federation/FetchButton.vue:53 msgctxt "*/*/Error" msgid "Data returned by the remote server had invalid or missing attributes" @@ -1200,7 +1364,7 @@ msgctxt "Popup/Import/Table.Label/Noun" msgid "Debug information" msgstr "معلومات عن المَقطَع" -#: front/src/components/ShortcutsModal.vue:75 +#: front/src/components/ShortcutsModal.vue:128 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Decrease volume" msgstr "تخÙيض الصوت" @@ -1212,23 +1376,29 @@ msgstr "تخÙيض الصوت" #: front/src/components/manage/library/AlbumsTable.vue:188 #: front/src/components/manage/library/ArtistsTable.vue:178 #: front/src/components/manage/library/LibrariesTable.vue:205 +#: front/src/components/manage/library/TagsTable.vue:179 #: front/src/components/manage/library/TracksTable.vue:188 #: front/src/components/manage/library/UploadsTable.vue:255 #: front/src/components/manage/moderation/InstancePolicyForm.vue:61 +#: front/src/components/manage/moderation/NotesThread.vue:24 +#: front/src/components/manage/moderation/NotesThread.vue:29 +#: front/src/components/manage/moderation/ReportCard.vue:360 #: front/src/components/manage/users/InvitationsTable.vue:167 -#: front/src/views/admin/library/AlbumDetail.vue:72 -#: front/src/views/admin/library/AlbumDetail.vue:77 -#: front/src/views/admin/library/ArtistDetail.vue:71 +#: front/src/views/admin/library/AlbumDetail.vue:78 +#: front/src/views/admin/library/AlbumDetail.vue:83 #: front/src/views/admin/library/ArtistDetail.vue:76 +#: front/src/views/admin/library/ArtistDetail.vue:81 #: front/src/views/admin/library/LibraryDetail.vue:58 #: front/src/views/admin/library/LibraryDetail.vue:63 -#: front/src/views/admin/library/TrackDetail.vue:71 -#: front/src/views/admin/library/TrackDetail.vue:76 +#: front/src/views/admin/library/TagDetail.vue:41 +#: front/src/views/admin/library/TagDetail.vue:46 +#: front/src/views/admin/library/TrackDetail.vue:77 +#: front/src/views/admin/library/TrackDetail.vue:82 #: front/src/views/admin/library/UploadDetail.vue:65 #: front/src/views/admin/library/UploadDetail.vue:70 #: front/src/views/content/libraries/FilesTable.vue:222 #: front/src/views/content/libraries/Form.vue:29 -#: src/views/playlists/Detail.vue:34 +#: src/views/playlists/Detail.vue:42 msgctxt "*/*/*/Verb" msgid "Delete" msgstr "ØØ°Ù" @@ -1253,7 +1423,20 @@ msgctxt "Popup/Moderation/Button.Label/Verb" msgid "Delete moderation rule" msgstr "Øذ٠قاعدة الإشراÙ" -#: front/src/views/playlists/Detail.vue:39 +#: front/src/components/auth/Settings.vue:274 +#: src/components/auth/Settings.vue:302 +#, fuzzy +msgctxt "*/*/Button.Label" +msgid "Delete my account" +msgstr "أنشئ Øسابي" + +#: front/src/components/auth/Settings.vue:297 +#, fuzzy +msgctxt "*/*/Button.Label" +msgid "Delete my account…" +msgstr "أنشئ Øسابي" + +#: front/src/views/playlists/Detail.vue:47 msgctxt "Popup/Playlist/Button.Label/Verb" msgid "Delete playlist" msgstr "Øذ٠قائمة الأغاني" @@ -1263,13 +1446,23 @@ msgctxt "Popup/Radio/Button.Label/Verb" msgid "Delete radio" msgstr "Øذ٠الإذاعة" -#: front/src/views/admin/library/AlbumDetail.vue:73 -#: front/src/views/admin/library/TrackDetail.vue:72 +#: front/src/components/manage/moderation/ReportCard.vue:357 +msgctxt "Content/Moderation/Button/Verb" +msgid "Delete reported object" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:358 +msgctxt "Content/Moderation/Popup/Header" +msgid "Delete reported object?" +msgstr "" + +#: front/src/views/admin/library/AlbumDetail.vue:79 +#: front/src/views/admin/library/TrackDetail.vue:78 msgctxt "Popup/Library/Title" msgid "Delete this album?" msgstr "أتريد Øذ٠هذه المكتبة؟" -#: front/src/views/admin/library/ArtistDetail.vue:72 +#: front/src/views/admin/library/ArtistDetail.vue:77 msgctxt "Popup/Library/Title" msgid "Delete this artist?" msgstr "أتريد Øذ٠هذه المكتبة؟" @@ -1285,57 +1478,70 @@ msgctxt "Popup/Moderation/Title" msgid "Delete this moderation rule?" msgstr "أتريد Øذ٠قاعدة الإشرا٠هذه؟" +#: front/src/components/manage/moderation/NotesThread.vue:25 +#, fuzzy +msgctxt "Popup/Moderation/Title" +msgid "Delete this note?" +msgstr "أتريد Øذ٠هذه المكتبة؟" + #: front/src/components/library/EditCard.vue:94 msgctxt "Popup/Library/Title" msgid "Delete this suggestion?" msgstr "أتريد Øذ٠قاعدة الإشرا٠هذه؟" +#: front/src/views/admin/library/TagDetail.vue:42 +#, fuzzy +msgctxt "Popup/Library/Title" +msgid "Delete this tag?" +msgstr "أتريد Øذ٠هذه المكتبة؟" + #: front/src/views/admin/library/UploadDetail.vue:66 msgctxt "Popup/Library/Title" msgid "Delete this upload?" msgstr "أتريد Øذ٠هذه المكتبة؟" #: front/src/components/favorites/List.vue:35 -#: src/components/library/Albums.vue:26 -#: front/src/components/library/Artists.vue:26 +#: src/components/library/Albums.vue:30 +#: front/src/components/library/Artists.vue:30 #: src/components/library/Radios.vue:47 #: front/src/components/manage/library/AlbumsTable.vue:22 #: front/src/components/manage/library/ArtistsTable.vue:22 #: front/src/components/manage/library/EditsCardList.vue:40 #: front/src/components/manage/library/LibrariesTable.vue:31 +#: front/src/components/manage/library/TagsTable.vue:22 #: front/src/components/manage/library/TracksTable.vue:22 #: front/src/components/manage/library/UploadsTable.vue:41 #: front/src/components/manage/moderation/AccountsTable.vue:22 -#: front/src/components/manage/moderation/DomainsTable.vue:20 +#: front/src/components/manage/moderation/DomainsTable.vue:28 #: front/src/components/manage/users/UsersTable.vue:20 +#: front/src/views/admin/moderation/ReportsList.vue:45 #: front/src/views/content/libraries/FilesTable.vue:32 #: front/src/views/playlists/List.vue:28 msgctxt "Content/Search/Dropdown" msgid "Descending" msgstr "تنازليًا" -#: front/src/views/admin/library/LibraryDetail.vue:123 -msgctxt "*/*/*/Noun" -msgid "Description" -msgstr "الوصÙ" +#: front/src/components/manage/moderation/NoteForm.vue:37 +msgctxt "Content/Moderation/Placeholder" +msgid "Describe what actions have been taken, or any other related updates…" +msgstr "" #: front/src/components/library/radios/Builder.vue:25 +#: front/src/views/admin/library/LibraryDetail.vue:132 #: front/src/views/content/libraries/Form.vue:14 -msgctxt "Content/*/Input.Label/Noun" +msgctxt "*/*/*/Noun" msgid "Description" msgstr "الوصÙ" #: front/src/views/content/libraries/Card.vue:48 -#: src/views/content/remote/Card.vue:54 +#: src/views/content/remote/Card.vue:67 msgctxt "Content/Library/Card.Button.Label/Noun" msgid "Details" msgstr "التÙاصيل" -#: front/src/views/admin/moderation/AccountsDetail.vue:491 +#: front/src/views/admin/moderation/AccountsDetail.vue:511 msgctxt "Content/Moderation/Help text" -msgid "" -"Determine how much content the user can upload. Leave empty to use the " -"default value of the instance." +msgid "Determine how much content the user can upload. Leave empty to use the default value of the instance." msgstr "" #: front/src/components/mixins/Translations.vue:8 @@ -1345,38 +1551,51 @@ msgid "Determine the visibility level of your activity" msgstr "" #: front/src/components/auth/Settings.vue:104 -#: front/src/components/auth/SubsonicTokenForm.vue:51 +#: front/src/components/auth/SubsonicTokenForm.vue:56 msgctxt "Popup/Settings/Button.Label" msgid "Disable access" msgstr "تعطيل النÙاذ" -#: front/src/components/auth/SubsonicTokenForm.vue:48 +#: front/src/components/auth/SubsonicTokenForm.vue:53 msgctxt "Content/Settings/Button.Label/Verb" msgid "Disable Subsonic access" msgstr "تعطيل النÙاذ عبر صاب سونيك Subsonic" -#: front/src/components/auth/SubsonicTokenForm.vue:49 +#: front/src/components/auth/SubsonicTokenForm.vue:54 msgctxt "Popup/Settings/Title" msgid "Disable Subsonic API access?" msgstr "تعطيل النÙاذ عبر واجهة برمجة التطبيقات صاب سونيك ØŸ" +#: front/src/components/About.vue:118 src/components/About.vue:131 +#: front/src/components/About.vue:144 #: front/src/components/manage/moderation/InstancePolicyForm.vue:18 #: front/src/views/admin/moderation/AccountsDetail.vue:157 #: front/src/views/admin/moderation/AccountsDetail.vue:161 -msgctxt "*/*/*" +#, fuzzy +msgctxt "*/*/*/State of feature" msgid "Disabled" msgstr "معطل" -#: front/src/views/admin/library/TrackDetail.vue:145 +#: front/src/views/admin/library/TrackDetail.vue:151 msgctxt "*/*/*/Noun" msgid "Disc number" msgstr "القرص رقم" +#: front/src/components/Home.vue:157 +msgctxt "Content/Home/Link" +msgid "Discover everything you need to know about Funkwhale and its features" +msgstr "" + #: front/src/components/auth/SubsonicTokenForm.vue:13 msgctxt "Content/Settings/Link" msgid "Discover how to use Funkwhale from other apps" msgstr "إكتش٠كيÙية استخدام Ùانك وايل Funkwhale عبر التطبيقات الأخرى" +#: front/src/views/Notifications.vue:45 +msgctxt "Content/Notifications/Button.Label/Verb" +msgid "Discover other ways to help" +msgstr "" + #: front/src/views/admin/moderation/AccountsDetail.vue:132 msgctxt "'Content/*/*/Noun'" msgid "Display name" @@ -1389,11 +1608,15 @@ msgstr "إعرضها للعامة" #: front/src/components/manage/moderation/InstancePolicyForm.vue:122 msgctxt "Content/Moderation/Help text" -msgid "" -"Do not download any media file (audio, album cover, account avatar…) from " -"this account or domain. This will purge existing content as well." +msgid "Do not download any media file (audio, album cover, account avatar…) from this account or domain. This will purge existing content as well." msgstr "" +#: front/src/views/Notifications.vue:36 +#, fuzzy +msgctxt "Content/Notifications/Header" +msgid "Do you like Funkwhale?" +msgstr "عن Ùانك وايل Funkwhale" + #: front/src/components/playlists/Editor.vue:51 msgctxt "Popup/Playlist/Title" msgid "Do you want to clear the playlist \"%{ playlist }\"?" @@ -1404,7 +1627,7 @@ msgctxt "Modal/*/Title" msgid "Do you want to confirm this action?" msgstr "هل تؤكّد هذا الإجراء ØŸ" -#: front/src/views/playlists/Detail.vue:35 +#: front/src/views/playlists/Detail.vue:43 msgctxt "Popup/Playlist/Title/Call to action" msgid "Do you want to delete the playlist \"%{ playlist }\"?" msgstr "متأكّد Ù…ÙÙ† أنك تريد Øذ٠قائمة المَقاطÙع الموسيقية \"%{ playlist }\" ØŸ" @@ -1414,6 +1637,12 @@ msgctxt "Popup/Radio/Title" msgid "Do you want to delete the radio \"%{ radio }\"?" msgstr "أتريد Øقا Øذ٠إذاعة \"%{ radio }\" ØŸ" +#: front/src/components/auth/Settings.vue:298 +#, fuzzy +msgctxt "Popup/Settings/Title" +msgid "Do you want to delete your account?" +msgstr "هل تريد استرجاع قائمة الإنتظار السابقة للأغاني ØŸ" + #: front/src/components/moderation/FilterModal.vue:3 msgctxt "Popup/Moderation/Title/Verb" msgid "Do you want to hide content from artist \"%{ name }\"?" @@ -1430,7 +1659,13 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: front/src/components/Sidebar.vue:118 +#: front/src/components/moderation/ReportModal.vue:3 +#, fuzzy +msgctxt "Popup/Moderation/Title/Verb" +msgid "Do you want to report this object?" +msgstr "هل تؤكّد هذا الإجراء ØŸ" + +#: front/src/components/Sidebar.vue:122 msgctxt "Sidebar/Queue/Message" msgid "Do you want to restore your previous queue?" msgstr "هل تريد استرجاع قائمة الإنتظار السابقة للأغاني ØŸ" @@ -1446,26 +1681,33 @@ msgstr "الدليل" #: front/src/components/manage/library/TracksTable.vue:42 #: front/src/components/manage/library/UploadsTable.vue:62 #: front/src/components/manage/moderation/AccountsTable.vue:40 -#: front/src/components/mixins/Translations.vue:60 -#: front/src/views/admin/library/AlbumDetail.vue:118 -#: front/src/views/admin/library/ArtistDetail.vue:107 -#: front/src/views/admin/library/LibraryDetail.vue:114 -#: front/src/views/admin/library/TrackDetail.vue:170 +#: front/src/components/manage/moderation/ReportCard.vue:169 +#: front/src/components/manage/moderation/ReportCard.vue:179 +#: front/src/components/mixins/Translations.vue:72 +#: front/src/views/admin/library/AlbumDetail.vue:124 +#: front/src/views/admin/library/ArtistDetail.vue:112 +#: front/src/views/admin/library/LibraryDetail.vue:123 +#: front/src/views/admin/library/TrackDetail.vue:176 #: front/src/views/admin/library/UploadDetail.vue:121 #: front/src/views/admin/moderation/AccountsDetail.vue:123 -#: front/src/components/mixins/Translations.vue:61 +#: front/src/components/mixins/Translations.vue:73 msgctxt "Content/Moderation/*/Noun" msgid "Domain" msgstr "النطاق" -#: front/src/views/admin/moderation/Base.vue:5 +#: front/src/views/admin/moderation/Base.vue:8 #: front/src/views/admin/moderation/DomainsList.vue:3 -#: front/src/views/admin/moderation/DomainsList.vue:48 +#: front/src/views/admin/moderation/DomainsList.vue:54 msgctxt "*/Moderation/*/Noun" msgid "Domains" msgstr "النطاقات" -#: front/src/components/library/TrackBase.vue:39 +#: front/src/views/Notifications.vue:42 +msgctxt "Content/Notifications/Button.Label/Verb" +msgid "Donate" +msgstr "" + +#: front/src/components/library/TrackBase.vue:37 #: front/src/views/admin/library/UploadDetail.vue:58 msgctxt "Content/Track/Link/Verb" msgid "Download" @@ -1478,10 +1720,10 @@ msgstr "اسØب والقي أعمدةً قصد ترتيب المقاطÙع عل #: front/src/components/audio/track/Table.vue:10 #: front/src/components/library/TrackDetail.vue:30 -#: front/src/components/mixins/Translations.vue:56 +#: front/src/components/mixins/Translations.vue:68 #: front/src/views/admin/library/UploadDetail.vue:238 #: front/src/views/content/libraries/FilesTable.vue:60 -#: front/src/components/mixins/Translations.vue:57 +#: front/src/components/mixins/Translations.vue:69 msgctxt "Content/*/*" msgid "Duration" msgstr "المدّة" @@ -1491,41 +1733,27 @@ msgctxt "Content/Signup/Message" msgid "E-mail address confirmed" msgstr "عنوان البريد الإلكتروني مؤكَّد" -#: front/src/components/Home.vue:88 -msgctxt "Content/Home/Title" -msgid "Easy to use" -msgstr "سهل للإستخدام" - -#: front/src/components/library/AlbumBase.vue:68 -#: front/src/components/library/ArtistBase.vue:79 -#: front/src/components/library/TrackBase.vue:87 +#: front/src/components/auth/Settings.vue:246 +#: src/components/library/AlbumBase.vue:73 +#: front/src/components/library/ArtistBase.vue:84 +#: front/src/components/library/TrackBase.vue:89 #: front/src/components/manage/moderation/InstancePolicyCard.vue:45 #: front/src/components/radios/Card.vue:23 -#: src/views/admin/library/AlbumDetail.vue:65 -#: front/src/views/admin/library/ArtistDetail.vue:64 -#: front/src/views/admin/library/TrackDetail.vue:64 +#: src/views/admin/library/AlbumDetail.vue:71 +#: front/src/views/admin/library/ArtistDetail.vue:69 +#: front/src/views/admin/library/TrackDetail.vue:70 #: front/src/views/content/libraries/Detail.vue:9 #: src/views/playlists/Detail.vue:31 msgctxt "Content/*/Button.Label/Verb" msgid "Edit" msgstr "تعديل" -#: front/src/components/auth/Settings.vue:246 -msgctxt "Content/Settings/Button.Label" -msgid "Edit" -msgstr "تعديل" - #: front/src/components/auth/ApplicationEdit.vue:30 #: front/src/components/auth/ApplicationEdit.vue:75 msgctxt "Content/Applications/Title" msgid "Edit application" msgstr "Øدث خطأ أثناء تطبيق الإجراء" -#: front/src/components/About.vue:22 -msgctxt "Content/Settings/Button.Label/Verb" -msgid "Edit instance info" -msgstr "تعديل معلومات مثيل الخادوم" - #: front/src/components/manage/moderation/InstancePolicyForm.vue:3 msgctxt "Content/Moderation/Card.Title/Verb" msgid "Edit moderation rule" @@ -1546,23 +1774,20 @@ msgctxt "Content/*/Title" msgid "Edit this track" msgstr "شغّÙÙ„ هذا المَقطَع" -#: front/src/views/admin/library/AlbumDetail.vue:182 -#: front/src/views/admin/library/ArtistDetail.vue:171 +#: front/src/components/mixins/Translations.vue:116 +#: front/src/views/admin/library/AlbumDetail.vue:198 +#: front/src/views/admin/library/ArtistDetail.vue:186 #: front/src/views/admin/library/Base.vue:5 #: src/views/admin/library/EditsList.vue:24 -#: front/src/views/admin/library/TrackDetail.vue:234 +#: front/src/views/admin/library/TrackDetail.vue:250 +#: front/src/components/mixins/Translations.vue:117 msgctxt "*/Admin/*/Noun" msgid "Edits" msgstr "تعديل" -#: front/src/components/mixins/Translations.vue:104 -#: front/src/components/mixins/Translations.vue:105 -msgctxt "Content/OAuth Scopes/Label" -msgid "Edits" -msgstr "تعديل" - -#: front/src/components/auth/Signup.vue:30 +#: front/src/components/auth/SignupForm.vue:26 #: front/src/components/manage/users/UsersTable.vue:38 +#: front/src/components/moderation/ReportModal.vue:31 msgctxt "Content/*/*/Noun" msgid "Email" msgstr "البريد الإلكتروني" @@ -1572,50 +1797,60 @@ msgctxt "Content/*/*" msgid "Email address" msgstr "عنوان البريد الإلكتروني" -#: front/src/components/library/AlbumBase.vue:53 -#: front/src/components/library/ArtistBase.vue:64 -#: front/src/components/library/TrackBase.vue:72 +#: front/src/components/library/AlbumBase.vue:54 +#: front/src/components/library/ArtistBase.vue:65 +#: front/src/components/library/TrackBase.vue:70 +#: src/views/playlists/Detail.vue:38 msgctxt "Content/*/Button.Label/Verb" msgid "Embed" msgstr "ادمج" -#: front/src/components/audio/EmbedWizard.vue:20 +#: front/src/components/audio/EmbedWizard.vue:30 msgctxt "Popup/Embed/Input.Label/Noun" msgid "Embed code" msgstr "رمز الإدماج" -#: front/src/components/library/AlbumBase.vue:26 +#: front/src/components/library/AlbumBase.vue:27 msgctxt "Popup/Album/Title/Verb" msgid "Embed this album on your website" msgstr "ادرج هذا الألبوم على موقعك" -#: front/src/components/library/ArtistBase.vue:37 +#: front/src/components/library/ArtistBase.vue:38 msgctxt "Popup/Artist/Title/Verb" msgid "Embed this artist work on your website" msgstr "ادمج هذا المَقطع على موقعك" -#: front/src/components/library/TrackBase.vue:45 +#: front/src/views/playlists/Detail.vue:52 +#, fuzzy +msgctxt "Popup/Album/Title/Verb" +msgid "Embed this playlist on your website" +msgstr "ادرج هذا الألبوم على موقعك" + +#: front/src/components/library/TrackBase.vue:43 msgctxt "Popup/Track/Title" msgid "Embed this track on your website" msgstr "ادمج هذا المَقطع على موقعك" -#: front/src/views/admin/moderation/AccountsDetail.vue:259 -#: front/src/views/admin/moderation/DomainsDetail.vue:187 +#: front/src/views/admin/moderation/AccountsDetail.vue:260 +#: front/src/views/admin/moderation/DomainsDetail.vue:224 msgctxt "Content/Moderation/Table.Label/Noun" msgid "Emitted library follows" msgstr "أدخÙÙ„ عنوان رابط لمكتبة ما" -#: front/src/views/admin/moderation/AccountsDetail.vue:243 -#: front/src/views/admin/moderation/DomainsDetail.vue:171 +#: front/src/views/admin/moderation/AccountsDetail.vue:244 +#: front/src/views/admin/moderation/DomainsDetail.vue:208 msgctxt "Content/Moderation/Table.Label/Noun" msgid "Emitted messages" msgstr "الرسائل المÙرسَلة" +#: front/src/components/About.vue:114 src/components/About.vue:127 +#: front/src/components/About.vue:140 #: front/src/components/manage/moderation/InstancePolicyCard.vue:8 #: front/src/components/manage/moderation/InstancePolicyForm.vue:17 #: front/src/views/admin/moderation/AccountsDetail.vue:156 #: front/src/views/admin/moderation/AccountsDetail.vue:160 -msgctxt "*/*/*" +#, fuzzy +msgctxt "*/*/*/State of feature" msgid "Enabled" msgstr "تم تنشيطه" @@ -1634,9 +1869,9 @@ msgctxt "Content/Search/Input.Placeholder" msgid "Enter a radio name…" msgstr "أدخÙÙ„ إسم إذاعة…" -#: front/src/components/library/Albums.vue:119 +#: front/src/components/library/Albums.vue:128 msgctxt "Content/Search/Input.Placeholder" -msgid "Enter album title..." +msgid "Enter album title…" msgstr "أدخل اسم ألبوم ما…" #: front/src/components/library/Artists.vue:116 @@ -1650,16 +1885,18 @@ msgid "Enter playlist name…" msgstr "أدخÙÙ„ إسم قائمة مَقاطÙع٠موسيقية…" #: front/src/views/auth/PasswordReset.vue:54 +#, fuzzy msgctxt "Content/Signup/Input.Placeholder" -msgid "Enter the email address binded to your account" +msgid "Enter the email address linked to your account" msgstr "ادخل عنوان البريد الإلكتروني المÙقترن بØسابك" -#: front/src/components/auth/Signup.vue:103 +#: front/src/components/auth/SignupForm.vue:96 msgctxt "Content/Signup/Form/Placeholder" msgid "Enter your email" msgstr "أدخÙÙ„ عنوان بريدك الإلكتروني" -#: front/src/components/auth/Signup.vue:98 src/components/auth/Signup.vue:100 +#: front/src/components/auth/SignupForm.vue:91 +#: src/components/auth/SignupForm.vue:93 msgctxt "Content/Signup/Form/Placeholder" msgid "Enter your invitation code (case insensitive)" msgstr "أدخÙÙ„ رمز الدعوة" @@ -1669,12 +1906,12 @@ msgctxt "Content/Library/Input.Placeholder/Verb" msgid "Enter your search query…" msgstr "أدخÙÙ„ طلب بØØ«Ùك…" -#: front/src/components/auth/Signup.vue:102 +#: front/src/components/auth/SignupForm.vue:95 msgctxt "Content/Signup/Form/Placeholder" msgid "Enter your username" msgstr "أدخÙÙ„ إسم المستخدÙÙ…" -#: front/src/components/auth/Login.vue:83 +#: front/src/components/auth/LoginForm.vue:81 msgctxt "Content/Login/Input.Placeholder" msgid "Enter your username or email" msgstr "أدخل اسم المستخدÙÙ… أو البريد الإلكتروني" @@ -1691,7 +1928,7 @@ msgctxt "Popup/Import/Table.Label/Noun" msgid "Error detail" msgstr "سÙجÙÙ„ الأخطاء" -#: front/src/views/admin/Settings.vue:87 +#: front/src/views/admin/Settings.vue:89 msgctxt "Content/Admin/Menu" msgid "Error reporting" msgstr "سÙجÙÙ„ الأخطاء" @@ -1747,16 +1984,12 @@ msgctxt "Popup/Moderation/Error message" msgid "Error while fetching application data" msgstr "Øدث خطأ أثناء إنشاء الدعوة" -#: front/src/views/admin/moderation/DomainsDetail.vue:118 +#: front/src/views/admin/moderation/DomainsDetail.vue:155 msgctxt "Content/Moderation/Table" msgid "Error while fetching node info" msgstr "Øدث خطأ أثناء عملية جلب معلومات العقدة" #: front/src/components/admin/SettingsGroup.vue:5 -msgctxt "Content/Settings/Error message.Title" -msgid "Error while saving settings" -msgstr "Øدث خطأ أثناء ØÙظ الإعدادات" - #: front/src/components/federation/FetchButton.vue:73 msgctxt "Content/*/Error message.Title" msgid "Error while saving settings" @@ -1767,6 +2000,18 @@ msgctxt "Content/Library/Error message.Title" msgid "Error while submitting edit" msgstr "Øدث خطأ أثناء ØÙظ الإعدادات" +#: front/src/components/manage/moderation/NoteForm.vue:3 +#, fuzzy +msgctxt "Content/Moderation/Error message.Title" +msgid "Error while submitting note" +msgstr "Øدث خطأ أثناء ØÙظ الإعدادات" + +#: front/src/components/moderation/ReportModal.vue:11 +#, fuzzy +msgctxt "Popup/Moderation/Error message" +msgid "Error while submitting report" +msgstr "Øدث خطأ أثناء ØÙظ الإعدادات" + #: front/src/components/mixins/Translations.vue:32 #: front/src/components/mixins/Translations.vue:33 msgctxt "Content/Library/Table/Short" @@ -1801,9 +2046,14 @@ msgctxt "Content/Radio/Table.Label/Verb" msgid "Exclude" msgstr "إستثني" +#: front/src/components/common/CollapseLink.vue:2 +msgctxt "*/*/Button,Label" +msgid "Expand" +msgstr "" + #: front/src/components/manage/users/InvitationsTable.vue:41 -#: front/src/components/mixins/Translations.vue:49 -#: front/src/components/mixins/Translations.vue:50 +#: front/src/components/mixins/Translations.vue:59 +#: front/src/components/mixins/Translations.vue:60 msgctxt "Content/Admin/Table.Label/Noun" msgid "Expiration date" msgstr "تاريخ نهاية الصلاØية" @@ -1820,11 +2070,7 @@ msgstr "إنتهت صلاØيتها/ أو مستعمَلة" #: front/src/components/manage/moderation/InstancePolicyForm.vue:110 msgctxt "Content/Moderation/Help text" -msgid "" -"Explain why you're applying this policy. Depending on your instance " -"configuration, this will help you remember why you acted on this account or " -"domain, and may be displayed publicly to help users understand what " -"moderation rules are in place." +msgid "Explain why you're applying this policy. Depending on your instance configuration, this will help you remember why you acted on this account or domain, and may be displayed publicly to help users understand what moderation rules are in place." msgstr "" #: front/src/components/manage/library/UploadsTable.vue:25 @@ -1833,31 +2079,28 @@ msgctxt "Content/Library/Dropdown" msgid "Failed" msgstr "Ùشل" -#: front/src/views/content/remote/Card.vue:62 +#: front/src/views/content/remote/Card.vue:75 msgctxt "Content/Library/Card.List item/Noun" msgid "Failed tracks:" msgstr "المَقاطع الصوتية المخÙقة:" -#: front/src/views/admin/library/AlbumDetail.vue:165 -#: front/src/views/admin/library/ArtistDetail.vue:154 -#: front/src/views/admin/library/TrackDetail.vue:217 +#: front/src/views/admin/library/AlbumDetail.vue:171 +#: front/src/views/admin/library/ArtistDetail.vue:159 +#: front/src/views/admin/library/TrackDetail.vue:223 msgctxt "*/*/*" msgid "Favorited tracks" msgstr "المَقاطع الصوتية المÙضلة" #: front/src/components/Sidebar.vue:66 +#: src/components/mixins/Translations.vue:88 +#: front/src/components/mixins/Translations.vue:89 msgctxt "Sidebar/Favorites/List item.Link/Noun" msgid "Favorites" msgstr "المÙضلة" -#: front/src/components/mixins/Translations.vue:76 -#: front/src/components/mixins/Translations.vue:77 -msgctxt "Content/OAuth Scopes/Label" -msgid "Favorites" -msgstr "المÙضلة" - -#: front/src/views/admin/Settings.vue:84 -msgctxt "Content/Admin/Menu" +#: front/src/components/About.vue:110 src/views/admin/Settings.vue:84 +#, fuzzy +msgctxt "*/*/*" msgid "Federation" msgstr "الÙديرالية" @@ -1881,6 +2124,11 @@ msgctxt "Content/Radio/Table.Label/Noun" msgid "Filter name" msgstr "إسم عامل التصÙية" +#: front/src/components/Home.vue:118 +msgctxt "Content/Home/Link" +msgid "Find another pod" +msgstr "" + #: front/src/components/manage/library/UploadsTable.vue:26 #: front/src/components/mixins/Translations.vue:36 #: front/src/views/content/libraries/FilesTable.vue:17 @@ -1890,25 +2138,31 @@ msgid "Finished" msgstr "إكتمل" #: front/src/components/manage/moderation/AccountsTable.vue:42 -#: front/src/components/manage/moderation/DomainsTable.vue:41 -#: front/src/views/admin/library/AlbumDetail.vue:149 -#: front/src/views/admin/library/ArtistDetail.vue:138 -#: front/src/views/admin/library/LibraryDetail.vue:153 -#: front/src/views/admin/library/TrackDetail.vue:201 +#: front/src/components/manage/moderation/DomainsTable.vue:49 +#: front/src/views/admin/library/AlbumDetail.vue:155 +#: front/src/views/admin/library/ArtistDetail.vue:143 +#: front/src/views/admin/library/LibraryDetail.vue:162 +#: front/src/views/admin/library/TagDetail.vue:98 +#: front/src/views/admin/library/TrackDetail.vue:207 #: front/src/views/admin/library/UploadDetail.vue:167 -#: front/src/views/admin/moderation/AccountsDetail.vue:235 -#: front/src/views/admin/moderation/DomainsDetail.vue:151 +#: front/src/views/admin/moderation/AccountsDetail.vue:236 +#: front/src/views/admin/moderation/DomainsDetail.vue:188 msgctxt "Content/Moderation/Table.Label/Short (Value is a date)" msgid "First seen" msgstr "أول زيارة" -#: front/src/components/mixins/Translations.vue:46 -#: front/src/components/mixins/Translations.vue:47 +#: front/src/components/mixins/Translations.vue:56 +#: front/src/components/mixins/Translations.vue:57 msgctxt "Content/Moderation/Dropdown/Noun" msgid "First seen date" msgstr "تاريخ أول اكتشاÙ" -#: front/src/views/content/remote/Card.vue:87 +#: front/src/components/ShortcutsModal.vue:64 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Focus searchbar" +msgstr "" + +#: front/src/views/content/remote/Card.vue:100 msgctxt "Content/Library/Card.Button.Label/Verb" msgid "Follow" msgstr "إتبع" @@ -1918,40 +2172,34 @@ msgctxt "Content/Library/Title/Verb" msgid "Follow remote libraries" msgstr "متابعة المكتبات عن بÙعد" -#: front/src/views/content/remote/Card.vue:92 +#: front/src/views/content/remote/Card.vue:105 msgctxt "Content/Library/Card.Paragraph" msgid "Follow request pending approval" msgstr "طلب متابعة Ù…Ùعلّق ÙÙŠ انتظار القبول" -#: front/src/components/mixins/Translations.vue:64 -#: front/src/views/admin/library/LibraryDetail.vue:161 +#: front/src/components/manage/library/LibrariesTable.vue:53 +#: front/src/components/mixins/Translations.vue:76 +#: front/src/views/admin/library/LibraryDetail.vue:170 #: front/src/views/content/libraries/Detail.vue:7 -#: front/src/components/mixins/Translations.vue:65 +#: front/src/components/mixins/Translations.vue:77 msgctxt "Content/Federation/*/Noun" msgid "Followers" msgstr "المتابÙعون" -#: front/src/components/manage/library/LibrariesTable.vue:53 -msgctxt "Content/*/*/Noun" -msgid "Followers" -msgstr "المتابÙعون" - -#: front/src/views/content/remote/Card.vue:103 +#: front/src/views/content/remote/Card.vue:116 msgctxt "Content/Library/Card.Paragraph" msgid "Following" msgstr "ÙŠÙتابÙع" -#: front/src/components/mixins/Translations.vue:84 -#: front/src/components/mixins/Translations.vue:85 +#: front/src/components/mixins/Translations.vue:96 +#: front/src/components/mixins/Translations.vue:97 msgctxt "Content/OAuth Scopes/Label" msgid "Follows" msgstr "إتبع" -#: front/src/components/library/TrackBase.vue:17 +#: front/src/components/library/TrackBase.vue:245 msgctxt "Content/Track/Paragraph" -msgid "" -"From album <a class=\"internal\" href=\"%{ albumUrl }\">%{ album }</a> by <a" -" class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" +msgid "From album <a class=\"internal\" href=\"%{ albumUrl }\">%{ album }</a> by <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" msgstr "" #: front/src/components/auth/Authorize.vue:28 @@ -1961,38 +2209,21 @@ msgstr "تعطيل النÙاذ" #: front/src/components/auth/SubsonicTokenForm.vue:7 msgctxt "Content/Settings/Paragraph'" -msgid "" -"Funkwhale is compatible with other music players that support the Subsonic " -"API." -msgstr "" -"Ùانك وايل Funkwhale متواÙÙ‚ مع برمجيات تشغيل الموسيقى التي تدعم واجهة برمجية " -"تطبيقات صاب سونيك." +msgid "Funkwhale is compatible with other music players that support the Subsonic API." +msgstr "Ùانك وايل Funkwhale متواÙÙ‚ مع برمجيات تشغيل الموسيقى التي تدعم واجهة برمجية تطبيقات صاب سونيك." -#: front/src/components/Home.vue:90 -msgctxt "Content/Home/Paragraph" -msgid "Funkwhale is dead simple to use." -msgstr "Ùانك وايل Funkwhale سهلٌ جدًا للإستخدام." - -#: front/src/components/Home.vue:39 -msgctxt "Content/Home/Paragraph" -msgid "" -"Funkwhale is designed to make it easy to listen to music you like, or to " -"discover new artists." -msgstr "" -"Ø·ÙوّÙر Ùانك وايل Funkwhale لتسهيل الإستماع إلى الموسيقى التي تØبونها Ùˆ " -"لاكتشا٠Ùنّانين جÙدد." - -#: front/src/components/Home.vue:111 +#: front/src/components/Home.vue:88 +#, fuzzy msgctxt "Content/Home/Paragraph" -msgid "Funkwhale is free and gives you control on your music." +msgid "Funkwhale is free and developped by a friendly community of volunteers." msgstr "Ùانك وايل Funkwhale مجاني Ùˆ ÙŠÙعيد التØكّم ÙÙŠ موسيقاكم بين أيديكم." -#: front/src/components/Home.vue:66 -msgctxt "Content/Home/Paragraph" -msgid "Funkwhale takes care of handling your music" -msgstr "Ùانك وايل Funkwhale ÙŠÙØاÙظ على موسيقاكم" +#: front/src/components/About.vue:78 +msgctxt "*/*/*" +msgid "Funkwhale version" +msgstr "" -#: front/src/components/ShortcutsModal.vue:38 +#: front/src/components/ShortcutsModal.vue:56 msgctxt "Popup/Keyboard shortcuts/Title" msgid "General shortcuts" msgstr "الاختصارات العامة" @@ -2002,35 +2233,17 @@ msgctxt "Content/Admin/Button.Label/Verb" msgid "Get a new invitation" msgstr "تØصّل على دعوة جديدة" -#: front/src/components/Home.vue:13 -msgctxt "Content/Home/Button.Label/Verb" -msgid "Get me to the library" -msgstr "أنقلني إلى المكتبة" - -#: front/src/components/Home.vue:70 -msgctxt "Content/Home/List item/Verb" -msgid "" -"Get quality metadata about your music thanks to <a href=\"%{ url }\" " -"target=\"_blank\">MusicBrainz</a>" -msgstr "" -"اØصلوا على بيانات وصÙية ذات جودة عن موسيقاكم بÙضل <a href=\"%{ url }\" " -"target=\"_blank\">MusicBrainz</a>" - #: front/src/views/content/Home.vue:12 src/views/content/Home.vue:19 msgctxt "Content/Library/Button.Label/Verb" msgid "Get started" msgstr "إبدأ هنا" -#: front/src/components/Footer.vue:37 +#: front/src/components/Footer.vue:45 +#: src/components/library/ImportStatusModal.vue:45 msgctxt "Footer/*/Link" msgid "Getting help" msgstr "الØصول على مساعدة" -#: front/src/components/library/ImportStatusModal.vue:45 -msgctxt "Popup/Import/Table.Label/Noun" -msgid "Getting help" -msgstr "الØصول على مساعدة" - #: front/src/components/common/ActionTable.vue:35 #: front/src/components/common/ActionTable.vue:56 msgctxt "Content/*/Button.Label/Short, Verb" @@ -2042,11 +2255,21 @@ msgctxt "Content/*/Button.Label/Verb" msgid "Go to home page" msgstr "إنتقل إلى الصÙØØ© الرئيسية" +#: front/src/views/Notifications.vue:27 src/views/Notifications.vue:61 +msgctxt "Content/Notifications/Button.Label" +msgid "Got it!" +msgstr "" + #: front/src/components/auth/Settings.vue:128 msgctxt "Content/Settings/Title" msgid "Hidden artists" msgstr "الÙنانون المخÙيون" +#: front/src/components/About.vue:155 +msgctxt "*/*/*/Verb" +msgid "Hide" +msgstr "" + #: front/src/components/manage/moderation/InstancePolicyForm.vue:114 msgctxt "Content/Moderation/Help text" msgid "Hide account or domain content, except from followers." @@ -2057,12 +2280,12 @@ msgctxt "Popup/*/Button.Label" msgid "Hide content" msgstr "إخÙاء المØتوى" -#: front/src/components/audio/PlayButton.vue:26 +#: front/src/components/audio/PlayButton.vue:31 msgctxt "*/Queue/Dropdown/Button/Label/Short" msgid "Hide content from this artist" msgstr "إخÙاء المØتوى القادم Ù…ÙÙ† هذا الÙنان" -#: front/src/components/audio/Player.vue:643 +#: front/src/components/audio/Player.vue:669 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Hide content from this artist…" msgstr "إخÙاء المØتوى القادم Ù…ÙÙ† هذا الÙنان…" @@ -2072,33 +2295,28 @@ msgctxt "Head/Home/Title" msgid "Home" msgstr "الرئيسية" -#: front/src/components/instance/Stats.vue:36 -msgctxt "Content/About/Paragraph/Unit" -msgid "Hours of music" -msgstr "ساعات Ù…ÙÙ† الموسيقى" - #: front/src/components/auth/SubsonicTokenForm.vue:10 msgctxt "Content/Settings/Paragraph" -msgid "" -"However, accessing Funkwhale from those clients require a separate password " -"you can set below." +msgid "However, accessing Funkwhale from those clients require a separate password you can set below." msgstr "" #: front/src/views/auth/PasswordResetConfirm.vue:24 msgctxt "Content/Signup/Paragraph" -msgid "" -"If the email address provided in the previous step is valid and binded to a " -"user account, you should receive an email with reset instructions in the " -"next couple of minutes." +msgid "If the email address provided in the previous step is valid and linked to a user account, you should receive an email with reset instructions in the next couple of minutes." msgstr "" #: front/src/components/auth/Settings.vue:205 msgctxt "Content/Applications/Paragraph" -msgid "" -"If you authorize third-party applications to access your data, those " -"applications will be listed here." +msgid "If you authorize third-party applications to access your data, those applications will be listed here." msgstr "" +#: front/src/components/mixins/Translations.vue:46 +#: front/src/components/mixins/Translations.vue:47 +#, fuzzy +msgctxt "Content/Moderation/Dropdown" +msgid "Illegal content" +msgstr "إخÙاء المØتوى" + #: front/src/components/library/ImportStatusModal.vue:3 msgctxt "Popup/Import/Title" msgid "Import detail" @@ -2110,14 +2328,10 @@ msgid "Import reference" msgstr "مصدر الإستيراد" #: front/src/components/manage/library/UploadsTable.vue:20 -#: front/src/views/content/libraries/FilesTable.vue:11 -#: front/src/views/content/libraries/FilesTable.vue:59 -msgctxt "Content/Library/*/Noun" -msgid "Import status" -msgstr "Øالة الاستيراد" - #: front/src/components/manage/library/UploadsTable.vue:64 #: front/src/views/admin/library/UploadDetail.vue:131 +#: front/src/views/content/libraries/FilesTable.vue:11 +#: front/src/views/content/libraries/FilesTable.vue:59 msgctxt "Content/*/*/Noun" msgid "Import status" msgstr "Øالة الاستيراد" @@ -2158,12 +2372,12 @@ msgctxt "Popup/Moderation/List item" msgid "In radio suggestions" msgstr "ÙÙŠ اقتراØات الإذاعات" -#: front/src/components/manage/users/UsersTable.vue:54 +#: front/src/components/manage/users/UsersTable.vue:55 msgctxt "Content/Admin/Table" msgid "Inactive" msgstr "غير ناشط" -#: front/src/components/ShortcutsModal.vue:71 +#: front/src/components/ShortcutsModal.vue:124 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Increase volume" msgstr "زيادة Øجم الصوت" @@ -2185,7 +2399,7 @@ msgctxt "Content/Settings/Dropdown/Short" msgid "Instance" msgstr "بيانات مثيل الخادم" -#: front/src/views/admin/moderation/DomainsDetail.vue:71 +#: front/src/views/admin/moderation/DomainsDetail.vue:99 msgctxt "Content/Moderation/Title" msgid "Instance data" msgstr "بيانات مثيل الخادم" @@ -2210,19 +2424,25 @@ msgctxt "Popup/Instance/Input.Label/Noun" msgid "Instance URL" msgstr "بيانات مثيل الخادم" +#: front/src/components/manage/moderation/ReportCard.vue:92 +#: front/src/components/manage/moderation/ReportCard.vue:203 +msgctxt "Content/*/*/Noun" +msgid "Internal notes" +msgstr "" + #: front/src/components/library/FileUpload.vue:268 msgctxt "Content/Library/Help text" -msgid "" -"Invalid file type, ensure you are uploading an audio file. Supported file " -"extensions are %{ extensions }" +msgid "Invalid file type, ensure you are uploading an audio file. Supported file extensions are %{ extensions }" msgstr "" #: front/src/components/library/ImportStatusModal.vue:139 +#: front/src/components/mixins/Translations.vue:45 +#: front/src/components/mixins/Translations.vue:46 msgctxt "Popup/Import/Error.Label" msgid "Invalid metadata" msgstr "" -#: front/src/components/auth/Signup.vue:44 +#: front/src/components/auth/SignupForm.vue:40 #: front/src/components/manage/users/InvitationForm.vue:11 msgctxt "Content/*/Input.Label" msgid "Invitation code" @@ -2234,7 +2454,13 @@ msgctxt "*/Admin/*/Noun" msgid "Invitations" msgstr "الدعوات" -#: front/src/components/Footer.vue:41 +#: front/src/components/manage/moderation/DomainsTable.vue:9 +#: front/src/views/admin/moderation/DomainsDetail.vue:106 +msgctxt "Content/Moderation/*/Adjective" +msgid "Is present on allow-list" +msgstr "" + +#: front/src/components/Footer.vue:49 msgctxt "Footer/*/List item.Link" msgid "Issue tracker" msgstr "متعقّب المشاكل" @@ -2244,17 +2470,18 @@ msgctxt "Popup/Instance/Error message.Title" msgid "It is not possible to connect to the given URL" msgstr "" -#: front/src/components/Home.vue:50 -msgctxt "Content/Home/List item/Verb" -msgid "Keep a track of your favorite songs" -msgstr "ØاÙظوا على أثر موسيقاكم Ùˆ أغانيكم المÙضّلة" +#: front/src/components/mixins/Translations.vue:65 +#: front/src/components/mixins/Translations.vue:66 +msgctxt "*/*/*/Noun" +msgid "Items" +msgstr "" #: front/src/components/Footer.vue:33 src/components/ShortcutsModal.vue:3 msgctxt "*/*/*/Noun" msgid "Keyboard shortcuts" msgstr "اختصارات لوØØ© المÙاتيØ" -#: front/src/views/admin/moderation/DomainsDetail.vue:161 +#: front/src/views/admin/moderation/DomainsDetail.vue:198 msgctxt "Content/Moderation/Table.Label.Link" msgid "Known accounts" msgstr "الØسابات المعروÙØ©" @@ -2265,15 +2492,15 @@ msgid "Known libraries" msgstr "المكتبات المعروÙØ©" #: front/src/components/manage/users/UsersTable.vue:41 -#: front/src/components/mixins/Translations.vue:58 -#: front/src/views/admin/moderation/AccountsDetail.vue:205 -#: front/src/components/mixins/Translations.vue:59 +#: front/src/components/mixins/Translations.vue:70 +#: front/src/views/admin/moderation/AccountsDetail.vue:206 +#: front/src/components/mixins/Translations.vue:71 msgctxt "Content/Profile/Table.Label/Short, Noun (Value is a date)" msgid "Last activity" msgstr "آخر نشاط" -#: front/src/views/admin/moderation/AccountsDetail.vue:188 -#: front/src/views/admin/moderation/DomainsDetail.vue:78 +#: front/src/views/admin/moderation/AccountsDetail.vue:189 +#: front/src/views/admin/moderation/DomainsDetail.vue:115 msgctxt "Content/*/Table.Label" msgid "Last checked" msgstr "آخÙر ÙØص" @@ -2288,13 +2515,13 @@ msgctxt "Content/Moderation/Table.Label/Noun" msgid "Last seen" msgstr "آخر زيارة" -#: front/src/components/mixins/Translations.vue:47 -#: front/src/components/mixins/Translations.vue:48 +#: front/src/components/mixins/Translations.vue:57 +#: front/src/components/mixins/Translations.vue:58 msgctxt "Content/Moderation/Dropdown/Noun" msgid "Last seen date" msgstr "آخÙر زيارة" -#: front/src/views/content/remote/Card.vue:60 +#: front/src/views/content/remote/Card.vue:73 msgctxt "Content/Library/Card.List item/Noun" msgid "Last update:" msgstr "آخÙر تØديث:" @@ -2304,57 +2531,60 @@ msgctxt "Modal/*/Button.Label/Short, Verb" msgid "Launch" msgstr "إبدأ" -#: front/src/components/Home.vue:10 -msgctxt "Content/Home/Button.Label/Verb" -msgid "Learn more about this instance" -msgstr "إعر٠المزيد عن مثيل الخادوم هذا" +#: front/src/components/Home.vue:35 +#, fuzzy +msgctxt "Content/Home/Link" +msgid "Learn more" +msgstr "جار٠تØميل المتابÙعين…" #: front/src/components/manage/users/InvitationForm.vue:58 msgctxt "Content/Admin/Input.Placeholder" msgid "Leave empty for a random code" msgstr "أتركه Ùارغًا للØصول على رمز عشوائي" -#: front/src/components/audio/EmbedWizard.vue:7 +#: front/src/components/audio/EmbedWizard.vue:17 msgctxt "Popup/Embed/Paragraph" msgid "Leave empty for a responsive widget" msgstr "أتركه Ùارغًا للØصول على ودجات تناسبي" -#: front/src/views/admin/library/AlbumDetail.vue:232 -#: front/src/views/admin/library/ArtistDetail.vue:221 -#: front/src/views/admin/library/TrackDetail.vue:284 -#: front/src/views/admin/moderation/AccountsDetail.vue:327 -#: front/src/views/admin/moderation/DomainsDetail.vue:234 -#: front/src/views/content/Base.vue:5 +#: front/src/components/mixins/Translations.vue:64 +#: front/src/components/mixins/Translations.vue:65 msgctxt "*/*/*/Noun" -msgid "Libraries" -msgstr "المكتبات" +msgid "Length" +msgstr "" +#: front/src/views/admin/library/AlbumDetail.vue:248 +#: front/src/views/admin/library/ArtistDetail.vue:236 #: front/src/views/admin/library/Base.vue:17 #: front/src/views/admin/library/LibrariesList.vue:24 -msgctxt "*/*/*" +#: front/src/views/admin/library/TrackDetail.vue:300 +#: front/src/views/admin/moderation/AccountsDetail.vue:339 +#: front/src/views/admin/moderation/DomainsDetail.vue:271 +#: front/src/views/content/Base.vue:5 +msgctxt "*/*/*/Noun" msgid "Libraries" msgstr "المكتبات" -#: front/src/components/mixins/Translations.vue:72 -#: front/src/components/mixins/Translations.vue:73 +#: front/src/components/mixins/Translations.vue:84 +#: front/src/components/mixins/Translations.vue:85 msgctxt "Content/OAuth Scopes/Label" msgid "Libraries and uploads" msgstr "تم تØديث المكتبة" #: front/src/views/content/libraries/Form.vue:2 msgctxt "Content/Library/Paragraph" -msgid "" -"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." +msgid "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." msgstr "" -#: front/src/components/Sidebar.vue:85 src/components/instance/Stats.vue:30 +#: front/src/components/Sidebar.vue:85 #: front/src/components/manage/library/UploadsTable.vue:60 -#: front/src/components/manage/users/UsersTable.vue:173 +#: front/src/components/manage/users/UsersTable.vue:174 +#: front/src/components/mixins/Report.vue:77 #: front/src/views/admin/library/UploadDetail.vue:144 -#: front/src/views/admin/moderation/AccountsDetail.vue:498 -msgctxt "*/*/*" +#: front/src/views/admin/moderation/AccountsDetail.vue:518 src/entities.js:132 +#: front/src/components/mixins/Report.vue:78 +#, fuzzy +msgctxt "*/*/*/Noun" msgid "Library" msgstr "المكتبة" @@ -2385,21 +2615,37 @@ msgstr "تم تØديث المكتبة" #: front/src/components/library/TrackDetail.vue:19 #: front/src/components/manage/library/TracksTable.vue:43 -#: front/src/views/admin/library/TrackDetail.vue:159 src/edits.js:61 +#: front/src/views/admin/library/TrackDetail.vue:165 src/edits.js:84 +#: front/src/entities.js:115 msgctxt "Content/*/*/Noun" msgid "License" msgstr "الرخصة" -#: front/src/views/admin/library/AlbumDetail.vue:157 -#: front/src/views/admin/library/ArtistDetail.vue:146 -#: front/src/views/admin/library/TrackDetail.vue:209 -msgctxt "*/*/*/Noun" -msgid "Listenings" +#: front/src/components/Footer.vue:90 +msgctxt "Footer/Settings/Dropdown.Label/Theme name" +msgid "Light" msgstr "" -#: front/src/components/mixins/Translations.vue:80 -#: front/src/components/mixins/Translations.vue:81 -msgctxt "Content/OAuth Scopes/Label" +#: front/src/views/admin/library/AlbumDetail.vue:188 +#: front/src/views/admin/library/ArtistDetail.vue:176 +#: front/src/views/admin/library/LibraryDetail.vue:179 +#: front/src/views/admin/library/TrackDetail.vue:240 +#: front/src/views/admin/moderation/AccountsDetail.vue:269 +msgctxt "Content/Moderation/Table.Label/Noun" +msgid "Linked reports" +msgstr "" + +#: front/src/components/Home.vue:135 +msgctxt "Content/Home/Link" +msgid "Listen to public albums and playlists shared on this pod" +msgstr "" + +#: front/src/components/mixins/Translations.vue:92 +#: front/src/views/admin/library/AlbumDetail.vue:163 +#: front/src/views/admin/library/ArtistDetail.vue:151 +#: front/src/views/admin/library/TrackDetail.vue:215 +#: front/src/components/mixins/Translations.vue:93 +msgctxt "*/*/*/Noun" msgid "Listenings" msgstr "" @@ -2425,7 +2671,7 @@ msgctxt "Content/Library/Paragraph" msgid "Loading library data…" msgstr "جار٠تØميل بيانات المكتبة…" -#: front/src/views/Notifications.vue:19 +#: front/src/views/Notifications.vue:84 msgctxt "Content/Notifications/Paragraph" msgid "Loading notifications…" msgstr "عملية تØميل الإشعارات جارية…" @@ -2450,6 +2696,7 @@ msgstr "جار٠تØميل Ù…Ùضلاتك…" #: front/src/components/manage/library/LibrariesTable.vue:75 #: front/src/components/manage/library/TracksTable.vue:71 #: front/src/components/manage/library/UploadsTable.vue:99 +#: front/src/components/manage/moderation/ReportCard.vue:173 #: front/src/views/admin/library/AlbumDetail.vue:19 #: front/src/views/admin/library/ArtistDetail.vue:18 #: front/src/views/admin/library/LibraryDetail.vue:18 @@ -2465,12 +2712,12 @@ msgctxt "Content/Moderation/*/Short, Noun" msgid "Local account" msgstr "Øساب Ù…Øلي" -#: front/src/components/auth/Login.vue:84 +#: front/src/components/Home.vue:96 src/views/auth/Login.vue:29 msgctxt "Head/Login/Title" msgid "Log In" msgstr "الدخول" -#: front/src/components/auth/Login.vue:4 +#: front/src/views/auth/Login.vue:4 msgctxt "Content/Login/Title/Verb" msgid "Log in to your Funkwhale account" msgstr "الدخول إلى Øسابك على Ùانك وايل Funkwhale" @@ -2485,7 +2732,7 @@ msgctxt "Sidebar/Profile/List item.Link" msgid "Logged in as %{ username }" msgstr "Ù…Ùتّصل كـ %{ username }" -#: front/src/components/Sidebar.vue:54 src/components/auth/Login.vue:42 +#: front/src/components/Sidebar.vue:54 src/components/auth/LoginForm.vue:41 msgctxt "*/Login/*/Verb" msgid "Login" msgstr "تسجيل الدخول" @@ -2505,34 +2752,40 @@ msgctxt "Content/Library/Paragraph" msgid "Looks like you don't have a library, it's time to create one." msgstr "يبدو أنه ليس لديك أية مكتبة بعد، Øان الأوان لإنشاء واØدة." -#: front/src/components/audio/Player.vue:632 -#: src/components/audio/Player.vue:633 +#: front/src/components/audio/Player.vue:658 +#: src/components/audio/Player.vue:659 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Looping disabled. Click to switch to single-track looping." msgstr "" -#: front/src/components/audio/Player.vue:635 -#: src/components/audio/Player.vue:636 +#: front/src/components/audio/Player.vue:661 +#: src/components/audio/Player.vue:662 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Looping on a single track. Click to switch to whole queue looping." msgstr "" -#: front/src/components/audio/Player.vue:638 -#: src/components/audio/Player.vue:639 +#: front/src/components/audio/Player.vue:664 +#: src/components/audio/Player.vue:665 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Looping on whole queue. Click to disable looping." msgstr "" -#: front/src/components/Sidebar.vue:223 +#: front/src/components/Sidebar.vue:230 msgctxt "Sidebar/*/Hidden text" msgid "Main menu" msgstr "القائمة الرئيسية" -#: front/src/views/admin/library/Base.vue:31 +#: front/src/views/admin/library/Base.vue:34 msgctxt "Head/Admin/Title" msgid "Manage library" msgstr "إدارة المكتبة" +#: front/src/components/manage/moderation/InstancePolicyModal.vue:8 +#, fuzzy +msgctxt "Popup/Moderation/Title/Verb" +msgid "Manage moderation rules for %{ obj }" +msgstr "تØديث قاعدة الإشراÙ" + #: front/src/components/playlists/PlaylistModal.vue:3 msgctxt "Popup/Playlist/Title/Verb" msgid "Manage playlists" @@ -2548,7 +2801,7 @@ msgctxt "Content/Playlist/Button.Label/Verb" msgid "Manage your playlists" msgstr "إدارة القوائم الخاصة الموسيقى" -#: front/src/views/Notifications.vue:14 +#: front/src/views/Notifications.vue:79 msgctxt "Content/Notifications/Button.Label/Verb" msgid "Mark all as read" msgstr "تØديد الكل كمقروء" @@ -2563,12 +2816,12 @@ msgctxt "Content/Notifications/Button.Tooltip/Verb" msgid "Mark as unread" msgstr "تØديد كغير مقروء" -#: front/src/views/admin/moderation/AccountsDetail.vue:310 +#: front/src/views/admin/moderation/AccountsDetail.vue:321 msgctxt "Content/*/*/Unit" msgid "MB" msgstr "MB" -#: front/src/components/audio/Player.vue:625 +#: front/src/components/audio/Player.vue:651 msgctxt "Sidebar/Player/Hidden text" msgid "Media player" msgstr "Ù…Ùشغّل الوسائط" @@ -2578,43 +2831,59 @@ msgctxt "Content/Profile/Paragraph" msgid "Member since %{ date }" msgstr "عضو منذ %{ date }" +#: front/src/components/manage/moderation/ReportCard.vue:109 +#: front/src/components/moderation/ReportModal.vue:41 +msgctxt "*/*/Field.Label/Noun" +msgid "Message" +msgstr "" + #: front/src/components/Footer.vue:32 msgctxt "Footer/*/List item.Link" msgid "Mobile and desktop apps" msgstr "تطبيقات الكمبيوتر والأجهزة المØمولة" +#: front/src/components/Home.vue:143 +#, fuzzy +msgctxt "Content/Home/Link" +msgid "Mobile apps" +msgstr "تطبيقات الكمبيوتر والأجهزة المØمولة" + #: front/src/components/Sidebar.vue:96 -#: src/components/manage/users/UsersTable.vue:177 -#: front/src/views/admin/moderation/AccountsDetail.vue:502 -#: front/src/views/admin/moderation/Base.vue:21 +#: src/components/manage/users/UsersTable.vue:178 +#: front/src/views/admin/Settings.vue:85 +#: front/src/views/admin/moderation/AccountsDetail.vue:522 +#: front/src/views/admin/moderation/Base.vue:43 msgctxt "*/Moderation/*" msgid "Moderation" msgstr "الإشراÙ" #: front/src/views/admin/moderation/AccountsDetail.vue:78 -#: front/src/views/admin/moderation/DomainsDetail.vue:42 +#: front/src/views/admin/moderation/DomainsDetail.vue:70 msgctxt "Content/Moderation/Card.Paragraph" -msgid "" -"Moderation policies help you control how your instance interact with a given" -" domain or account." -msgstr "" -"قواعد الإشرا٠تساعدكم على التØكم ÙÙŠ كيÙية تÙاعل مثيل خادومكم مع النطاقات Ùˆ " -"الØسابات الأخرى." +msgid "Moderation policies help you control how your instance interact with a given domain or account." +msgstr "قواعد الإشرا٠تساعدكم على التØكم ÙÙŠ كيÙية تÙاعل مثيل خادومكم مع النطاقات Ùˆ الØسابات الأخرى." + +#: front/src/components/manage/moderation/InstancePolicyModal.vue:4 +#, fuzzy +msgctxt "Content/Moderation/Button.Label" +msgid "Moderation rules…" +msgstr "تØديث قاعدة الإشراÙ" #: front/src/components/library/EditCard.vue:5 msgctxt "Content/Library/Card/Short" msgid "Modification %{ id }" msgstr "تاريخ التعديل" -#: front/src/components/mixins/Translations.vue:48 -#: front/src/components/mixins/Translations.vue:49 +#: front/src/components/mixins/Translations.vue:58 +#: front/src/components/mixins/Translations.vue:59 msgctxt "Content/Playlist/Dropdown/Noun" msgid "Modification date" msgstr "تاريخ التعديل" -#: front/src/components/library/AlbumBase.vue:42 -#: front/src/components/library/ArtistBase.vue:53 -#: front/src/components/library/TrackBase.vue:61 +#: front/src/components/audio/PlayButton.vue:100 +#: front/src/components/library/AlbumBase.vue:43 +#: front/src/components/library/ArtistBase.vue:54 +#: front/src/components/library/TrackBase.vue:59 msgctxt "*/*/Button.Label/Noun" msgid "More…" msgstr "" @@ -2624,7 +2893,7 @@ msgctxt "*/*/*/Noun" msgid "Music" msgstr "الموسيقى" -#: front/src/components/audio/Player.vue:631 +#: front/src/components/audio/Player.vue:657 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Mute" msgstr "كتم" @@ -2671,8 +2940,8 @@ msgctxt "Content/Library/Title" msgid "My libraries" msgstr "مكتباتي" -#: front/src/components/audio/track/Row.vue:40 -#: src/components/library/EditCard.vue:60 +#: front/src/components/About.vue:105 src/components/audio/track/Row.vue:40 +#: front/src/components/library/EditCard.vue:60 #: front/src/components/library/EditForm.vue:70 #: front/src/components/library/TrackDetail.vue:34 #: front/src/components/library/TrackDetail.vue:43 @@ -2682,54 +2951,56 @@ msgstr "مكتباتي" #: front/src/components/manage/library/TracksTable.vue:76 #: front/src/components/manage/library/UploadsTable.vue:121 #: front/src/components/manage/library/UploadsTable.vue:128 -#: front/src/components/manage/users/UsersTable.vue:61 +#: front/src/components/manage/moderation/ReportCard.vue:78 +#: front/src/components/manage/moderation/ReportCard.vue:87 +#: front/src/components/manage/moderation/ReportCard.vue:193 +#: front/src/components/manage/users/UsersTable.vue:62 #: front/src/views/admin/library/UploadDetail.vue:179 #: front/src/views/admin/library/UploadDetail.vue:214 #: front/src/views/admin/library/UploadDetail.vue:233 #: front/src/views/admin/library/UploadDetail.vue:244 #: front/src/views/admin/library/UploadDetail.vue:257 -#: front/src/views/admin/moderation/AccountsDetail.vue:192 -#: front/src/views/admin/moderation/DomainsDetail.vue:82 +#: front/src/views/admin/moderation/AccountsDetail.vue:193 +#: front/src/views/admin/moderation/DomainsDetail.vue:119 #: front/src/views/content/libraries/FilesTable.vue:95 #: front/src/views/content/libraries/FilesTable.vue:101 msgctxt "*/*/*" msgid "N/A" msgstr "غير متوÙر" -#: front/src/components/manage/library/LibrariesTable.vue:48 -#: front/src/components/manage/library/UploadsTable.vue:59 -msgctxt "*/*/*" -msgid "Name" -msgstr "الإسم" - #: front/src/components/auth/ApplicationForm.vue:9 -msgctxt "Content/Applications/Input.Label/Noun" -msgid "Name" -msgstr "الإسم" - #: front/src/components/auth/Settings.vue:133 #: front/src/components/manage/library/ArtistsTable.vue:39 +#: front/src/components/manage/library/LibrariesTable.vue:48 +#: front/src/components/manage/library/TagsTable.vue:41 +#: front/src/components/manage/library/UploadsTable.vue:59 #: front/src/components/manage/moderation/AccountsTable.vue:39 -#: front/src/components/manage/moderation/DomainsTable.vue:38 -#: front/src/components/mixins/Translations.vue:53 +#: front/src/components/manage/moderation/DomainsTable.vue:46 +#: front/src/components/mixins/Translations.vue:63 #: front/src/components/playlists/PlaylistModal.vue:45 -#: front/src/views/admin/library/ArtistDetail.vue:98 +#: front/src/views/admin/library/ArtistDetail.vue:103 #: front/src/views/admin/library/LibraryDetail.vue:85 +#: front/src/views/admin/library/TagDetail.vue:68 #: front/src/views/admin/library/UploadDetail.vue:92 -#: front/src/views/admin/moderation/DomainsDetail.vue:97 -#: front/src/views/content/libraries/Form.vue:10 src/edits.js:10 -#: front/src/components/mixins/Translations.vue:54 +#: front/src/views/admin/moderation/DomainsDetail.vue:134 +#: front/src/views/content/libraries/Form.vue:10 src/edits.js:17 +#: front/src/components/mixins/Translations.vue:64 msgctxt "*/*/*/Noun" msgid "Name" msgstr "الإسم" +#: front/src/views/Notifications.vue:24 src/views/Notifications.vue:58 +msgctxt "*/*/*" +msgid "Never" +msgstr "" + #: front/src/components/auth/Settings.vue:88 #: front/src/views/auth/PasswordResetConfirm.vue:14 msgctxt "Content/Settings/Input.Label" msgid "New password" msgstr "الكلمة السرية الجديدة" -#: front/src/components/Sidebar.vue:173 +#: front/src/components/Sidebar.vue:177 msgctxt "Sidebar/Player/Paragraph" msgid "New tracks will be appended here automatically." msgstr "سو٠يتم إضاÙØ© المَقاطÙع الجديدة هنا آليًا." @@ -2739,23 +3010,18 @@ msgctxt "Content/Library/Card.Table.Header/Short" msgid "New value" msgstr "" -#: front/src/components/audio/Player.vue:629 +#: front/src/components/audio/Player.vue:655 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Next track" msgstr "المَقطَع التالي" -#: front/src/components/Sidebar.vue:130 +#: front/src/components/Sidebar.vue:134 +#: front/src/components/manage/moderation/DomainsTable.vue:13 +#: front/src/views/admin/moderation/DomainsDetail.vue:110 msgctxt "*/*/*" msgid "No" msgstr "لا" -#: front/src/components/Home.vue:95 -msgctxt "Content/Home/List item" -msgid "No add-ons, no plugins : you only need a web library" -msgstr "" -"لا تØتاج إلى تنصيب إضاÙات٠أو Ù…ÙÙ„Øَقات٠: كل ما تØتاج إليه هي مكتبة موسيقية " -"على الويب" - #: front/src/components/audio/Search.vue:25 msgctxt "Content/Search/Paragraph" msgid "No album matched your query" @@ -2771,6 +3037,11 @@ msgctxt "Content/Track/Table.Paragraph" msgid "No copyright information available for this track" msgstr "لا تتوÙر هناك معلومات عن Øقوق التألي٠المتعلقة بهذا المقطع" +#: front/src/components/About.vue:25 src/components/Home.vue:25 +msgctxt "Content/Home/Paragraph" +msgid "No description available." +msgstr "" + #: front/src/components/library/TrackDetail.vue:25 msgctxt "Content/Track/Table.Paragraph" msgid "No licensing information for this track" @@ -2781,7 +3052,7 @@ msgctxt "Content/Federation/Paragraph" msgid "No matching library." msgstr "ليس هناك أية مكتبة مطابÙقة." -#: front/src/views/Notifications.vue:28 +#: front/src/views/Notifications.vue:93 msgctxt "Content/Notifications/Paragraph" msgid "No notification to show." msgstr "ليس هناك أي إشعار للعرض." @@ -2789,6 +3060,16 @@ msgstr "ليس هناك أي إشعار للعرض." #: front/src/components/common/EmptyState.vue:7 msgctxt "Content/*/Paragraph" msgid "No results were found." +msgstr "لم يتم العثور على أية نتيجة." + +#: front/src/components/About.vue:32 +msgctxt "Content/Home/Paragraph" +msgid "No rules available." +msgstr "" + +#: front/src/components/About.vue:39 +msgctxt "Content/Home/Paragraph" +msgid "No terms available." msgstr "" #: front/src/components/mixins/Translations.vue:10 @@ -2807,18 +3088,22 @@ msgctxt "Content/Admin/Table" msgid "Not used" msgstr "غير مستعمَل" -#: front/src/components/mixins/Translations.vue:100 -#: front/src/components/mixins/Translations.vue:101 -msgctxt "Content/OAuth Scopes/Label" -msgid "Notifications" -msgstr "الإشعارات" - -#: front/src/components/Sidebar.vue:46 src/views/Notifications.vue:76 +#: front/src/components/Sidebar.vue:46 +#: src/components/mixins/Translations.vue:112 +#: front/src/views/Notifications.vue:151 +#: src/components/mixins/Translations.vue:113 msgctxt "*/Notifications/*" msgid "Notifications" msgstr "الإشعارات" -#: front/src/components/Footer.vue:47 +#: front/src/components/mixins/Translations.vue:47 +#: front/src/components/mixins/Translations.vue:48 +#, fuzzy +msgctxt "Content/Moderation/Dropdown" +msgid "Offensive content" +msgstr "إخÙاء المØتوى" + +#: front/src/components/Footer.vue:55 msgctxt "Footer/*/List item.Link" msgid "Official website" msgstr "موقع الويب الرسمي" @@ -2833,6 +3118,12 @@ msgctxt "Content/Library/Card.Table.Header/Short" msgid "Old value" msgstr "" +#: front/src/components/About.vue:90 +#, fuzzy +msgctxt "*/*/*/State of registrations" +msgid "Open" +msgstr "Ù…ÙتوØ" + #: front/src/components/manage/users/InvitationsTable.vue:20 msgctxt "Content/Admin/Dropdown/Adjective" msgid "Open" @@ -2840,27 +3131,29 @@ msgstr "Ù…ÙتوØ" #: front/src/components/library/ImportStatusModal.vue:56 msgctxt "Popup/Import/Table.Label/Value" -msgid "" -"Open a support thread (include the debug information below in your message)" +msgid "Open a support thread (include the debug information below in your message)" msgstr "" -#: front/src/components/library/AlbumBase.vue:73 -#: front/src/components/library/ArtistBase.vue:84 -#: front/src/components/library/TrackBase.vue:92 +#: front/src/components/library/AlbumBase.vue:87 +#: front/src/components/library/ArtistBase.vue:99 +#: front/src/components/library/TagDetail.vue:11 +#: front/src/components/library/TrackBase.vue:103 +#: front/src/components/manage/moderation/ReportCard.vue:128 msgctxt "Content/Moderation/Link" msgid "Open in moderation interface" msgstr "تØديث قاعدة الإشراÙ" -#: front/src/views/admin/library/AlbumDetail.vue:31 -#: front/src/views/admin/library/ArtistDetail.vue:30 -#: front/src/views/admin/library/TrackDetail.vue:30 +#: front/src/views/admin/library/AlbumDetail.vue:37 +#: front/src/views/admin/library/ArtistDetail.vue:35 +#: front/src/views/admin/library/TagDetail.vue:21 +#: front/src/views/admin/library/TrackDetail.vue:36 msgctxt "Content/Moderation/Link/Verb" msgid "Open local profile" msgstr "اÙØªØ Ø§Ù„ØµÙØØ© الشخصية" -#: front/src/views/admin/library/AlbumDetail.vue:46 -#: front/src/views/admin/library/ArtistDetail.vue:45 -#: front/src/views/admin/library/TrackDetail.vue:45 +#: front/src/views/admin/library/AlbumDetail.vue:52 +#: front/src/views/admin/library/ArtistDetail.vue:50 +#: front/src/views/admin/library/TrackDetail.vue:51 msgctxt "Content/Moderation/Link/Verb" msgid "Open on MusicBrainz" msgstr "إطّلع عليه على ميوزيك براينز" @@ -2870,10 +3163,10 @@ msgctxt "Content/Moderation/Link/Verb" msgid "Open profile" msgstr "اÙØªØ Ø§Ù„ØµÙØØ© الشخصية" -#: front/src/views/admin/library/AlbumDetail.vue:54 -#: front/src/views/admin/library/ArtistDetail.vue:53 +#: front/src/views/admin/library/AlbumDetail.vue:60 +#: front/src/views/admin/library/ArtistDetail.vue:58 #: front/src/views/admin/library/LibraryDetail.vue:49 -#: front/src/views/admin/library/TrackDetail.vue:53 +#: front/src/views/admin/library/TrackDetail.vue:59 #: front/src/views/admin/library/UploadDetail.vue:50 #: front/src/views/admin/moderation/AccountsDetail.vue:52 msgctxt "Content/Moderation/Link/Verb" @@ -2894,6 +3187,7 @@ msgstr "أو قم بتخصيص قاعدتك" #: src/components/library/Radios.vue:41 #: front/src/components/manage/library/EditsCardList.vue:37 #: front/src/components/manage/users/UsersTable.vue:17 +#: front/src/views/admin/moderation/ReportsList.vue:42 #: front/src/views/playlists/List.vue:25 msgctxt "Content/Search/Dropdown.Label/Noun" msgid "Order" @@ -2901,40 +3195,51 @@ msgstr "الترتيب" #: front/src/components/favorites/List.vue:24 #: src/components/library/Albums.vue:15 -#: front/src/components/library/Artists.vue:15 +#: front/src/components/library/Artists.vue:19 #: src/components/library/Radios.vue:33 #: front/src/components/manage/library/AlbumsTable.vue:11 #: front/src/components/manage/library/ArtistsTable.vue:11 #: front/src/components/manage/library/EditsCardList.vue:29 #: front/src/components/manage/library/LibrariesTable.vue:20 +#: front/src/components/manage/library/TagsTable.vue:11 #: front/src/components/manage/library/TracksTable.vue:11 #: front/src/components/manage/library/UploadsTable.vue:30 #: front/src/components/manage/moderation/AccountsTable.vue:11 -#: front/src/components/manage/moderation/DomainsTable.vue:9 +#: front/src/components/manage/moderation/DomainsTable.vue:17 #: front/src/components/manage/users/InvitationsTable.vue:9 #: front/src/components/manage/users/UsersTable.vue:9 +#: front/src/views/admin/moderation/ReportsList.vue:34 #: front/src/views/content/libraries/FilesTable.vue:21 #: front/src/views/playlists/List.vue:17 msgctxt "Content/Search/Dropdown.Label/Noun" msgid "Ordering" msgstr "الترتيب" -#: front/src/components/library/Albums.vue:23 -#: src/components/library/Artists.vue:23 +#: front/src/components/library/Albums.vue:27 +#: src/components/library/Artists.vue:27 #: front/src/components/manage/library/AlbumsTable.vue:19 #: front/src/components/manage/library/ArtistsTable.vue:19 #: front/src/components/manage/library/LibrariesTable.vue:28 +#: front/src/components/manage/library/TagsTable.vue:19 #: front/src/components/manage/library/TracksTable.vue:19 #: front/src/components/manage/library/UploadsTable.vue:38 #: front/src/components/manage/moderation/AccountsTable.vue:19 -#: front/src/components/manage/moderation/DomainsTable.vue:17 +#: front/src/components/manage/moderation/DomainsTable.vue:25 #: front/src/views/content/libraries/FilesTable.vue:29 msgctxt "Content/Search/Dropdown.Label/Noun" msgid "Ordering direction" msgstr "اتجاه الترتيب" +#: front/src/components/mixins/Translations.vue:48 +#: front/src/components/mixins/Translations.vue:49 +msgctxt "Content/Moderation/Dropdown" +msgid "Other" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:143 #: front/src/components/manage/users/InvitationsTable.vue:38 -msgctxt "Content/Admin/Table.Label" +#, fuzzy +msgctxt "*/*/*" msgid "Owner" msgstr "المالك" @@ -2953,12 +3258,15 @@ msgctxt "Content/*/Hidden text/Noun" msgid "Pagination" msgstr "تتابÙع الصÙØات" -#: front/src/components/auth/Login.vue:33 src/components/auth/Signup.vue:40 -msgctxt "Content/*/Input.Label" +#: front/src/components/auth/LoginForm.vue:32 +#: src/components/auth/Settings.vue:291 +#: front/src/components/auth/SignupForm.vue:36 +#, fuzzy +msgctxt "*/*/*" msgid "Password" msgstr "كلمة السر" -#: front/src/components/auth/SubsonicTokenForm.vue:94 +#: front/src/components/auth/SubsonicTokenForm.vue:100 msgctxt "Content/Settings/Message" msgid "Password updated" msgstr "تم تØديث كلمة السر" @@ -2968,12 +3276,12 @@ msgctxt "Content/Signup/Card.Title" msgid "Password updated successfully" msgstr "تم تØديث كلمة السر بنجاØ" -#: front/src/components/audio/Player.vue:628 +#: front/src/components/audio/Player.vue:654 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Pause track" msgstr "ألبÙØ« المَقطَع" -#: front/src/components/ShortcutsModal.vue:59 +#: front/src/components/ShortcutsModal.vue:96 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Pause/play the current track" msgstr "إيقاÙ/تشغيل المقطع الØالي" @@ -3002,7 +3310,7 @@ msgctxt "Content/Library/Label" msgid "Pending files" msgstr "الملÙات المعلّقة" -#: front/src/components/Sidebar.vue:225 +#: front/src/components/Sidebar.vue:232 msgctxt "Sidebar/Notifications/Hidden text" msgid "Pending follow requests" msgstr "طلبات المتابَعة المعلَّقة" @@ -3013,84 +3321,76 @@ msgctxt "Content/Admin/*/Noun" msgid "Pending review" msgstr "الملÙات المعلّقة" -#: front/src/components/Sidebar.vue:226 +#: front/src/components/Sidebar.vue:233 msgctxt "Sidebar/Moderation/Hidden text" msgid "Pending review edits" msgstr "الملÙات المعلّقة" +#: front/src/components/auth/Settings.vue:176 #: front/src/components/manage/users/UsersTable.vue:42 #: front/src/views/admin/moderation/AccountsDetail.vue:166 -msgctxt "Content/Admin/Table.Label/Noun" -msgid "Permissions" -msgstr "الصّلاØيّات" - -#: front/src/components/auth/Settings.vue:176 msgctxt "Content/*/*/Noun" msgid "Permissions" msgstr "الصّلاØيّات" #: front/src/components/audio/PlayButton.vue:9 -#: front/src/components/library/TrackBase.vue:26 +#: front/src/components/library/TrackBase.vue:24 msgctxt "*/Queue/Button.Label/Short, Verb" msgid "Play" msgstr "غنّي" #: front/src/components/audio/album/Card.vue:48 -#: front/src/components/audio/artist/Card.vue:44 -#: front/src/components/library/AlbumBase.vue:20 +#: front/src/components/library/AlbumBase.vue:21 #: front/src/components/library/AlbumDetail.vue:11 #: src/views/playlists/Detail.vue:24 msgctxt "Content/Queue/Button.Label/Short, Verb" msgid "Play all" msgstr "تشغيل الكل" -#: front/src/components/library/ArtistBase.vue:31 +#: front/src/components/library/ArtistBase.vue:32 msgctxt "Content/Artist/Button.Label/Verb" msgid "Play all albums" msgstr "إعز٠كاÙØ© الألبومات" -#: front/src/components/audio/PlayButton.vue:76 +#: front/src/components/audio/PlayButton.vue:92 msgctxt "*/Queue/Dropdown/Button/Title" msgid "Play next" msgstr "إعز٠التالي" -#: front/src/components/ShortcutsModal.vue:67 +#: front/src/components/ShortcutsModal.vue:120 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Play next track" msgstr "شغّÙÙ„ المَقطَع التالي" -#: front/src/components/audio/PlayButton.vue:74 +#: front/src/components/audio/PlayButton.vue:90 msgctxt "*/Queue/Dropdown/Button/Title" msgid "Play now" msgstr "إعز٠الآن" -#: front/src/components/ShortcutsModal.vue:63 +#: front/src/components/ShortcutsModal.vue:116 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Play previous track" msgstr "شغّÙÙ„ المَقطَع السابق" -#: front/src/components/audio/PlayButton.vue:77 +#: front/src/components/audio/PlayButton.vue:93 msgctxt "*/Queue/Dropdown/Button/Title" msgid "Play similar songs" msgstr "" -#: front/src/components/Sidebar.vue:224 +#: front/src/components/Sidebar.vue:231 msgctxt "Sidebar/Player/Hidden text" msgid "Play this track" msgstr "شغّÙÙ„ هذا المَقطَع" -#: front/src/components/audio/Player.vue:627 +#: front/src/components/audio/Player.vue:653 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Play track" msgstr "إعز٠المَقطَع" -#: front/src/components/audio/PlayButton.vue:82 -msgctxt "*/Queue/Button/Title" -msgid "Play..." -msgstr "تشغيل…" - -#: front/src/views/playlists/Detail.vue:91 -msgctxt "Head/Playlist/Title" +#: front/src/components/mixins/Report.vue:66 src/views/playlists/Detail.vue:121 +#: front/src/components/mixins/Report.vue:67 +#, fuzzy +msgctxt "*/*/*" msgid "Playlist" msgstr "قائمة المَقاطÙع" @@ -3130,33 +3430,30 @@ msgctxt "Content/Playlist/Dropdown.Label" msgid "Playlist visibility" msgstr "مدى رؤية القائمة" -#: front/src/components/mixins/Translations.vue:88 -#: front/src/components/mixins/Translations.vue:89 -msgctxt "Content/OAuth Scopes/Label" -msgid "Playlists" -msgstr "قوائم المَقاطÙع" - #: front/src/components/Sidebar.vue:71 src/components/library/Home.vue:16 -#: front/src/components/library/Library.vue:16 src/views/admin/Settings.vue:83 -#: front/src/views/admin/library/AlbumDetail.vue:173 -#: front/src/views/admin/library/ArtistDetail.vue:162 -#: front/src/views/admin/library/TrackDetail.vue:225 +#: front/src/components/library/Library.vue:16 +#: front/src/components/mixins/Translations.vue:100 +#: src/views/admin/Settings.vue:83 +#: front/src/views/admin/library/AlbumDetail.vue:179 +#: front/src/views/admin/library/ArtistDetail.vue:167 +#: front/src/views/admin/library/TrackDetail.vue:231 #: src/views/playlists/List.vue:106 +#: front/src/components/mixins/Translations.vue:101 msgctxt "*/*/*" msgid "Playlists" msgstr "قوائم المَقاطÙع" -#: front/src/components/Home.vue:56 -msgctxt "Content/Home/List item" -msgid "Playlists? We got them" -msgstr "قوائم تشغيل الموسيقى ØŸ متوÙّرة لدينا" +#: front/src/components/audio/EmbedWizard.vue:9 +msgctxt "Content/Embed/Message" +msgid "Please contact your admins and ask them to update the corresponding setting." +msgstr "" #: front/src/components/auth/Settings.vue:79 msgctxt "Content/Settings/Error message.List item/Call to action" msgid "Please double-check your password is correct" msgstr "يرجى التأكّد Ù…ÙÙ† صØØ© الكلمة السرية" -#: front/src/components/auth/Login.vue:9 +#: front/src/components/auth/LoginForm.vue:5 msgctxt "Content/Login/Error message.List item/Call to action" msgid "Please double-check your username/password couple is correct" msgstr "الرجاء التأكّد Ù…ÙÙ† صØØ© اسم المستخدÙÙ… Ùˆ الكلمة السرية" @@ -3164,28 +3461,29 @@ msgstr "الرجاء التأكّد Ù…ÙÙ† صØØ© اسم المستخدÙÙ… Ùˆ #: front/src/components/auth/Settings.vue:46 msgctxt "Content/Settings/Paragraph" msgid "PNG, GIF or JPG. At most 2MB. Will be downscaled to 400x400px." +msgstr "نسق PNG أو GIF أو JPG. الØجم الأقصى 2 ميغابيت. سيتم تغيير Øجمها إلى 400×400 بكسل." + +#: front/src/components/About.vue:72 +msgctxt "Content/About/Header/Name" +msgid "Pod configuration" msgstr "" -"نسق PNG أو GIF أو JPG. الØجم الأقصى 2 ميغابيت. سيتم تغيير Øجمها إلى 400×400 " -"بكسل." -#: front/src/views/admin/library/TrackDetail.vue:137 -msgctxt "*/*/*/Noun" +#: front/src/views/admin/library/TrackDetail.vue:143 src/edits.js:70 +msgctxt "*/*/*/Short, Noun" msgid "Position" msgstr "تتابÙع الصÙØات" #: front/src/components/manage/moderation/InstancePolicyForm.vue:118 msgctxt "Content/Moderation/Help text" -msgid "" -"Prevent account or domain from triggering notifications, except from " -"followers." +msgid "Prevent account or domain from triggering notifications, except from followers." msgstr "إخÙاء الØساب أو Ù…Øتوى النطاق Ù…ÙÙ† الجميع باستثناء المتابÙعين." -#: front/src/components/audio/EmbedWizard.vue:33 +#: front/src/components/audio/EmbedWizard.vue:43 msgctxt "Popup/Embed/Title/Noun" msgid "Preview" msgstr "معاينة" -#: front/src/components/audio/Player.vue:626 +#: front/src/components/audio/Player.vue:652 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Previous track" msgstr "المَقطَع السابق" @@ -3196,7 +3494,7 @@ msgctxt "Content/Settings/Dropdown/Short" msgid "Private" msgstr "" -#: front/src/views/content/remote/Card.vue:43 +#: front/src/views/content/remote/Card.vue:56 msgctxt "Content/Library/Card.List item" msgid "Problem during scanning" msgstr "خطأ أثناء المسØ" @@ -3217,14 +3515,20 @@ msgctxt "Content/Library/Tab.Title/Short" msgid "Processing" msgstr "جار٠العمل" -#: front/src/components/mixins/Translations.vue:68 -#: front/src/components/mixins/Translations.vue:69 +#: front/src/components/mixins/Translations.vue:80 +#: front/src/components/mixins/Translations.vue:81 msgctxt "Content/OAuth Scopes/Label" msgid "Profile" msgstr "اÙØªØ Ø§Ù„ØµÙØØ© الشخصية" +#: front/src/components/auth/SignupForm.vue:5 +#, fuzzy +msgctxt "Content/Signup/Form/Paragraph" +msgid "Public registrations are not possible on this instance. You will need an invitation code to sign up." +msgstr "إنّ التسجيلات Ù…Ùغلَقة Øاليًا على هذا الخادوم، يلزمك رمز دعوة للتسجيل Ùيه." + #: front/src/components/manage/moderation/AccountsTable.vue:188 -#: front/src/components/manage/moderation/DomainsTable.vue:168 +#: front/src/components/manage/moderation/DomainsTable.vue:186 #: front/src/views/content/libraries/Quota.vue:36 #: front/src/views/content/libraries/Quota.vue:39 #: front/src/views/content/libraries/Quota.vue:62 @@ -3255,7 +3559,7 @@ msgctxt "Sidebar/Queue/Tab.Title/Noun" msgid "Queue" msgstr "قائمة الإنتظار" -#: front/src/components/audio/Player.vue:322 +#: front/src/components/audio/Player.vue:329 msgctxt "Content/Queue/Message" msgid "Queue shuffled!" msgstr "تم خلط قائمة الإنتظار !" @@ -3287,16 +3591,12 @@ msgstr "تم تØديث الإذاعة" #: front/src/components/library/Library.vue:13 #: src/components/library/Radios.vue:142 +#: front/src/components/mixins/Translations.vue:104 +#: front/src/components/mixins/Translations.vue:105 msgctxt "*/*/*" msgid "Radios" msgstr "الإذاعات" -#: front/src/components/mixins/Translations.vue:92 -#: front/src/components/mixins/Translations.vue:93 -msgctxt "Content/OAuth Scopes/Label" -msgid "Radios" -msgstr "الإذاعات" - #: front/src/components/auth/ApplicationForm.vue:151 msgctxt "Content/OAuth Scopes/Label/Verb" msgid "Read" @@ -3323,15 +3623,15 @@ msgctxt "Content/Moderation/*/Noun" msgid "Reason" msgstr "السبب" -#: front/src/views/admin/moderation/AccountsDetail.vue:251 -#: front/src/views/admin/moderation/DomainsDetail.vue:179 +#: front/src/views/admin/moderation/AccountsDetail.vue:252 +#: front/src/views/admin/moderation/DomainsDetail.vue:216 msgctxt "Content/Moderation/Table.Label/Noun" msgid "Received library follows" msgstr "الطلبات الواردة لمتابعة المكتبات" -#: front/src/components/manage/moderation/DomainsTable.vue:40 -#: front/src/components/mixins/Translations.vue:62 -#: front/src/components/mixins/Translations.vue:63 +#: front/src/components/manage/moderation/DomainsTable.vue:48 +#: front/src/components/mixins/Translations.vue:74 +#: front/src/components/mixins/Translations.vue:75 msgctxt "Content/Moderation/*/Noun" msgid "Received messages" msgstr "الرسائل الواردة" @@ -3351,6 +3651,12 @@ msgctxt "Content/Home/Title" msgid "Recently added" msgstr "تمت إضاÙتها مؤخرا" +#: front/src/components/Home.vue:167 +#, fuzzy +msgctxt "Content/Home/Title" +msgid "Recently added albums" +msgstr "تمت إضاÙتها مؤخرا" + #: front/src/components/library/Home.vue:11 msgctxt "Content/Home/Title" msgid "Recently favorited" @@ -3379,14 +3685,14 @@ msgctxt "Popup/*/Message.Title" msgid "Refresh error" msgstr "إنعاش" -#: front/src/views/admin/library/AlbumDetail.vue:50 -#: front/src/views/admin/library/ArtistDetail.vue:49 -#: front/src/views/admin/library/TrackDetail.vue:49 +#: front/src/views/admin/library/AlbumDetail.vue:56 +#: front/src/views/admin/library/ArtistDetail.vue:54 +#: front/src/views/admin/library/TrackDetail.vue:55 msgctxt "Content/Moderation/Button/Verb" msgid "Refresh from remote server" msgstr "" -#: front/src/views/admin/moderation/DomainsDetail.vue:127 +#: front/src/views/admin/moderation/DomainsDetail.vue:164 msgctxt "Content/Moderation/Button.Label/Verb" msgid "Refresh node info" msgstr "تØديث معلومات العÙقدة" @@ -3398,9 +3704,7 @@ msgstr "تØديث معلومات العÙقدة" #: front/src/components/federation/FetchButton.vue:80 msgctxt "Popup/*/Message.Content" -msgid "" -"Refresh request wasn't proceed in time by our server. It will be processed " -"later." +msgid "Refresh request wasn't proceed in time by our server. It will be processed later." msgstr "" #: front/src/components/federation/FetchButton.vue:16 @@ -3423,15 +3727,13 @@ msgctxt "Popup/*/Title" msgid "Refreshing object from remote…" msgstr "" -#: front/src/components/auth/Signup.vue:9 -msgctxt "Content/Signup/Form/Paragraph" -msgid "" -"Registration are closed on this instance, you will need an invitation code " -"to signup." -msgstr "" -"إنّ التسجيلات Ù…Ùغلَقة Øاليًا على هذا الخادوم، يلزمك رمز دعوة للتسجيل Ùيه." +#: front/src/components/About.vue:86 +#, fuzzy +msgctxt "*/*/*" +msgid "Registrations" +msgstr "الإدارة" -#: front/src/components/manage/users/UsersTable.vue:71 +#: front/src/components/manage/users/UsersTable.vue:72 msgctxt "Content/Admin/Table, User role" msgid "Regular user" msgstr "مستخدÙÙ… عادي" @@ -3456,8 +3758,8 @@ msgid "Rejected" msgstr "تم رÙضه" #: front/src/components/manage/library/AlbumsTable.vue:43 -#: front/src/components/mixins/Translations.vue:44 src/edits.js:28 -#: front/src/components/mixins/Translations.vue:45 +#: front/src/components/mixins/Translations.vue:54 src/edits.js:43 +#: front/src/components/mixins/Translations.vue:55 msgctxt "Content/*/*/Noun" msgid "Release date" msgstr "آخÙر زيارة" @@ -3465,6 +3767,11 @@ msgstr "آخÙر زيارة" #: front/src/components/library/FileUpload.vue:63 msgctxt "Content/Library/Paragraph" msgid "Remaining storage space" +msgstr "مساØØ© التخزين المتبقية" + +#: front/src/views/Notifications.vue:18 src/views/Notifications.vue:52 +msgctxt "Content/Notifications/Label" +msgid "Remind me in:" msgstr "" #: front/src/views/content/remote/Home.vue:6 @@ -3474,9 +3781,7 @@ msgstr "المكتبات البÙعدية" #: front/src/views/content/remote/Home.vue:7 msgctxt "Content/Library/Paragraph" -msgid "" -"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." +msgid "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." msgstr "" #: front/src/components/library/radios/Filter.vue:59 @@ -3494,6 +3799,13 @@ msgctxt "Content/Moderation/Button.Label" msgid "Remove filter" msgstr "Øذ٠الصورة الرمزية" +#: front/src/components/manage/moderation/DomainsTable.vue:198 +#: front/src/views/admin/moderation/DomainsDetail.vue:39 +#, fuzzy +msgctxt "Content/Moderation/Action/Verb" +msgid "Remove from allow-list" +msgstr "ØØ°Ù Ù…ÙÙ† المÙضلة" + #: front/src/components/favorites/TrackFavoriteIcon.vue:26 msgctxt "Content/Track/Icon.Tooltip/Verb" msgid "Remove from favorites" @@ -3501,39 +3813,104 @@ msgstr "ØØ°Ù Ù…ÙÙ† المÙضلة" #: front/src/views/content/libraries/Quota.vue:38 msgctxt "Popup/Library/Paragraph" -msgid "" -"Removes uploaded but yet to be processed tracks completely, adding the " -"corresponding data to your quota." +msgid "Removes uploaded but yet to be processed tracks completely, adding the corresponding data to your quota." msgstr "" #: front/src/views/content/libraries/Quota.vue:64 msgctxt "Popup/Library/Paragraph" -msgid "" -"Removes uploaded tracks skipped during the import processes completely, " -"adding the corresponding data to your quota." +msgid "Removes uploaded tracks skipped during the import processes completely, adding the corresponding data to your quota." msgstr "" #: front/src/views/content/libraries/Quota.vue:90 msgctxt "Popup/Library/Paragraph" -msgid "" -"Removes uploaded tracks that could not be processed by the server " -"completely, adding the corresponding data to your quota." +msgid "Removes uploaded tracks that could not be processed by the server completely, adding the corresponding data to your quota." +msgstr "" + +#: front/src/components/audio/PlayButton.vue:94 +#, fuzzy +msgctxt "*/Queue/Dropdown/Button/Title" +msgid "Replace current queue" +msgstr "أضÙ٠إلى قائمة الانتظار الØالية" + +#: front/src/components/mixins/Report.vue:6 src/components/mixins/Report.vue:7 +msgctxt "*/Moderation/*/Verb" +msgid "Report @%{ username }…" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:5 +msgctxt "Content/Moderation/Card/Short" +msgid "Report %{ id }" +msgstr "" + +#: front/src/components/moderation/ReportModal.vue:139 +msgctxt "*/Moderation/Message" +msgid "Report successfully submitted, thank you" +msgstr "" + +#: front/src/components/mixins/Report.vue:36 +#: src/components/mixins/Report.vue:37 +#, fuzzy +msgctxt "*/Moderation/*/Verb" +msgid "Report this album…" +msgstr "شغّÙÙ„ هذا المَقطَع" + +#: front/src/components/mixins/Report.vue:50 +#: src/components/mixins/Report.vue:51 +#, fuzzy +msgctxt "*/Moderation/*/Verb" +msgid "Report this artist…" +msgstr "شغّÙÙ„ هذا المَقطَع" + +#: front/src/components/mixins/Report.vue:72 +#: src/components/mixins/Report.vue:73 +#, fuzzy +msgctxt "*/Moderation/*/Verb" +msgid "Report this library…" +msgstr "أتريد Øذ٠هذه المكتبة؟" + +#: front/src/components/mixins/Report.vue:61 +#: src/components/mixins/Report.vue:62 +#, fuzzy +msgctxt "*/Moderation/*/Verb" +msgid "Report this playlist…" +msgstr "أضÙÙ‡ إلى قائمة التشغيل هذه" + +#: front/src/components/mixins/Report.vue:23 +#: src/components/mixins/Report.vue:24 +#, fuzzy +msgctxt "*/Moderation/*/Verb" +msgid "Report this track…" +msgstr "شغّÙÙ„ هذا المَقطَع" + +#: front/src/components/audio/PlayButton.vue:95 +msgctxt "*/Moderation/*/Button/Label,Verb" +msgid "Report…" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:117 +msgctxt "Content/*/*/Short" +msgid "Reported object" +msgstr "" + +#: front/src/views/admin/moderation/Base.vue:5 +#: front/src/views/admin/moderation/ReportsList.vue:3 +#: front/src/views/admin/moderation/ReportsList.vue:208 +msgctxt "*/Moderation/*/Noun" +msgid "Reports" msgstr "" -#: front/src/components/auth/SubsonicTokenForm.vue:33 -#: front/src/components/auth/SubsonicTokenForm.vue:36 +#: front/src/components/auth/SubsonicTokenForm.vue:38 +#: front/src/components/auth/SubsonicTokenForm.vue:41 msgctxt "*/Settings/Button.Label/Verb" msgid "Request a new password" msgstr "طلب كلمة سرية جديدة" -#: front/src/components/auth/SubsonicTokenForm.vue:34 +#: front/src/components/auth/SubsonicTokenForm.vue:39 msgctxt "Popup/Settings/Title" msgid "Request a new Subsonic API password?" -msgstr "" -"متأكد Ù…ÙÙ† أنك تريد إعادة طلب كلمة سرية جديدة لواجهة برمجة تطبيقات صاب سونيك " -"Subsonic APIØŸ" +msgstr "متأكد Ù…ÙÙ† أنك تريد إعادة طلب كلمة سرية جديدة لواجهة برمجة تطبيقات صاب سونيك Subsonic APIØŸ" -#: front/src/components/auth/SubsonicTokenForm.vue:42 +#: front/src/components/auth/SubsonicTokenForm.vue:47 msgctxt "Content/Settings/Button.Label/Verb" msgid "Request a password" msgstr "طلب كلمة سرية" @@ -3543,35 +3920,52 @@ msgctxt "Popup/*/Loading.Title" msgid "Requesting a fetch…" msgstr "" -#: front/src/components/library/EditForm.vue:82 +#: front/src/components/library/EditForm.vue:94 msgctxt "Content/Library/Button.Label" -msgid "Reset to initial value: %{ value }" +msgid "Reset to initial value" msgstr "" -#: front/src/components/auth/Login.vue:35 src/views/auth/PasswordReset.vue:4 -#: front/src/views/auth/PasswordReset.vue:53 +#: front/src/components/auth/LoginForm.vue:34 +#: src/views/auth/PasswordReset.vue:4 front/src/views/auth/PasswordReset.vue:53 msgctxt "*/Login/*/Verb" msgid "Reset your password" msgstr "إعادة تعيين كلمتك السرية" +#: front/src/components/manage/moderation/ReportCard.vue:83 +#, fuzzy +msgctxt "Content/*/*/Noun" +msgid "Resolution date" +msgstr "تاريخ الإنشاء" + +#: front/src/components/manage/moderation/ReportCard.vue:218 +msgctxt "Content/*/Button.Label/Verb" +msgid "Resolve" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:62 +#: front/src/views/admin/moderation/ReportsList.vue:20 +msgctxt "Content/*/*/Short" +msgid "Resolved" +msgstr "" + #: front/src/views/content/libraries/FilesTable.vue:223 msgctxt "Content/Library/Dropdown/Verb" msgid "Restart import" msgstr "إعادة Ù…Øاولة الإستيراد" +#: front/src/components/library/EditForm.vue:31 +msgctxt "Content/Library/Button.Label" +msgid "Restrict to unreviewed edits" +msgstr "" + #: front/src/components/favorites/List.vue:39 -#: src/components/library/Albums.vue:30 -#: front/src/components/library/Artists.vue:30 +#: src/components/library/Albums.vue:34 +#: front/src/components/library/Artists.vue:34 #: src/components/library/Radios.vue:52 front/src/views/playlists/List.vue:32 msgctxt "Content/Search/Dropdown.Label/Noun" msgid "Results per page" msgstr "عدد نتائج البØØ« ÙÙŠ كل صÙØØ©" -#: front/src/components/library/EditForm.vue:31 -msgctxt "Content/Library/Button.Label" -msgid "Retrict to unreviewed edits" -msgstr "" - #: front/src/views/auth/EmailConfirm.vue:17 msgctxt "Content/Signup/Link/Verb" msgid "Return to login" @@ -3602,52 +3996,54 @@ msgctxt "Content/Moderation/Card.Title/Noun" msgid "Rule" msgstr "القاعدة" -#: front/src/components/admin/SettingsGroup.vue:67 +#: front/src/components/About.vue:28 src/components/About.vue:56 +#, fuzzy +msgctxt "Content/About/Header" +msgid "Rules" +msgstr "القاعدة" + +#: front/src/components/admin/SettingsGroup.vue:75 #: front/src/components/library/radios/Builder.vue:34 msgctxt "Content/*/Button.Label/Verb" msgid "Save" msgstr "اØÙظ" -#: front/src/views/content/remote/Card.vue:175 +#: front/src/views/content/remote/Card.vue:203 msgctxt "Content/Library/Message" msgid "Scan launched" msgstr "بدأ الاستكشاÙ" -#: front/src/views/content/remote/Card.vue:67 +#: front/src/views/content/remote/Card.vue:80 msgctxt "Content/Library/Card.Button.Label/Verb" msgid "Scan now" msgstr "قم Ø¨Ø§Ù„Ù…Ø³Ø Ø§Ù„Ø¢Ù†" -#: front/src/views/content/remote/Card.vue:35 +#: front/src/views/content/remote/Card.vue:48 msgctxt "Content/Library/Card.List item" msgid "Scan pending" msgstr "Ù…Ø³Ø Ù…Ùعلَّق" -#: front/src/views/content/remote/Card.vue:176 +#: front/src/views/content/remote/Card.vue:204 msgctxt "Content/Library/Message" msgid "Scan skipped (previous scan is too recent)" msgstr "" -#: front/src/views/content/remote/Card.vue:47 +#: front/src/views/content/remote/Card.vue:60 msgctxt "Content/Library/Card.List item" msgid "Scanned" msgstr "تم مسØها" -#: front/src/views/content/remote/Card.vue:51 +#: front/src/views/content/remote/Card.vue:64 msgctxt "Content/Library/Card.List item" msgid "Scanned with errors" msgstr "تمت عملية Ø§Ù„Ù…Ø³Ø Ø¨Ø£Ø®Ø·Ø§Ø¡" -#: front/src/views/content/remote/Card.vue:39 +#: front/src/views/content/remote/Card.vue:52 msgctxt "Content/Library/Card.List item" msgid "Scanning… (%{ progress }%)" msgstr "جار٠المسØ… (%{ progress }%)" #: front/src/components/auth/ApplicationForm.vue:22 -msgctxt "Content/Applications/Input.Label/Noun" -msgid "Scopes" -msgstr "" - #: front/src/components/auth/Settings.vue:226 msgctxt "Content/*/*/Noun" msgid "Scopes" @@ -3660,12 +4056,14 @@ msgstr "" #: front/src/components/manage/library/ArtistsTable.vue:5 #: front/src/components/manage/library/EditsCardList.vue:6 #: front/src/components/manage/library/LibrariesTable.vue:5 +#: front/src/components/manage/library/TagsTable.vue:5 #: front/src/components/manage/library/TracksTable.vue:5 #: front/src/components/manage/library/UploadsTable.vue:5 #: front/src/components/manage/moderation/AccountsTable.vue:5 #: front/src/components/manage/moderation/DomainsTable.vue:5 #: front/src/components/manage/users/InvitationsTable.vue:5 #: front/src/components/manage/users/UsersTable.vue:5 +#: front/src/views/admin/moderation/ReportsList.vue:8 #: front/src/views/content/libraries/FilesTable.vue:5 #: src/views/playlists/List.vue:13 msgctxt "Content/Search/Input.Label/Noun" @@ -3678,6 +4076,7 @@ msgid "Search a remote library" msgstr "البØØ« عن مكتبة بÙعدية" #: front/src/components/manage/library/EditsCardList.vue:211 +#: front/src/views/admin/moderation/ReportsList.vue:207 msgctxt "Content/Search/Input.Placeholder" msgid "Search by account, summary, domain…" msgstr "البØØ« Øسب العنوان أو إسم Ùنان أو نطاق…" @@ -3712,7 +4111,13 @@ msgctxt "Content/Search/Input.Placeholder" msgid "Search by domain, username, bio…" msgstr "البØØ« عبر اسم نطاق أو مستخدÙÙ… أو نبذة…" -#: front/src/components/manage/moderation/DomainsTable.vue:151 +#: front/src/components/manage/library/TagsTable.vue:165 +#, fuzzy +msgctxt "Content/Search/Input.Placeholder" +msgid "Search by name" +msgstr "البØØ« باستخدام اسم…" + +#: front/src/components/manage/moderation/DomainsTable.vue:168 msgctxt "Content/Search/Input.Placeholder" msgid "Search by name…" msgstr "البØØ« باستخدام اسم…" @@ -3727,12 +4132,12 @@ msgctxt "Content/Admin/Input.Placeholder/Verb" msgid "Search by username, e-mail address, code…" msgstr "البØØ« باسم مستخدÙÙ… أو عنوان بريد إلكتروني أو رمز…" -#: front/src/components/manage/users/UsersTable.vue:163 +#: front/src/components/manage/users/UsersTable.vue:164 msgctxt "Content/Search/Input.Placeholder" msgid "Search by username, e-mail address, name…" msgstr "البØØ« باسم مستخدÙÙ… أو عنوان بريد إلكتروني أو إسم…" -#: front/src/components/audio/SearchBar.vue:20 +#: front/src/components/audio/SearchBar.vue:27 msgctxt "Sidebar/Search/Input.Placeholder" msgid "Search for artists, albums, tracks…" msgstr "البØØ« عن Ùنانين أو ألبومات أو مَقاطÙع صوتية…" @@ -3742,16 +4147,30 @@ msgctxt "Content/Search/Title" msgid "Search for some music" msgstr "البØØ« عن بعض Ù…ÙÙ† الموسيقى" -#: front/src/components/library/AlbumBase.vue:57 -#: front/src/components/library/ArtistBase.vue:68 -#: front/src/components/library/TrackBase.vue:76 +#: front/src/components/library/TagsSelector.vue:6 +#, fuzzy +msgctxt "*/Dropdown/Placeholder/Verb" +msgid "Search for tags…" +msgstr "البØØ« باستخدام اسم…" + +#: front/src/components/library/AlbumBase.vue:66 +#: front/src/components/library/ArtistBase.vue:77 +#: front/src/components/library/TrackBase.vue:82 +#, fuzzy +msgctxt "Content/*/Button.Label/Verb" +msgid "Search on Discogs" +msgstr "البØØ« عن بعض Ù…ÙÙ† الموسيقى" + +#: front/src/components/library/AlbumBase.vue:58 +#: front/src/components/library/ArtistBase.vue:69 +#: front/src/components/library/TrackBase.vue:74 msgctxt "Content/*/Button.Label/Verb" msgid "Search on Wikipedia" msgstr "البØØ« ÙÙŠ ويكيبيديا" #: front/src/components/library/Library.vue:35 -#: src/views/admin/library/Base.vue:32 -#: front/src/views/admin/moderation/Base.vue:22 +#: src/views/admin/library/Base.vue:35 +#: front/src/views/admin/moderation/Base.vue:44 #: src/views/admin/users/Base.vue:21 front/src/views/content/Base.vue:19 msgctxt "Menu/*/Hidden text" msgid "Secondary menu" @@ -3762,6 +4181,26 @@ msgctxt "Content/Admin/Menu.Title" msgid "Sections" msgstr "الأقسام" +#: front/src/components/ShortcutsModal.vue:108 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek backwards 30s" +msgstr "" + +#: front/src/components/ShortcutsModal.vue:100 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek backwards 5s" +msgstr "" + +#: front/src/components/ShortcutsModal.vue:112 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek forwards 30s" +msgstr "" + +#: front/src/components/ShortcutsModal.vue:104 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek forwards 5s" +msgstr "" + #: front/src/components/library/radios/Builder.vue:46 msgctxt "Content/Radio/Dropdown.Placeholder/Verb" msgid "Select a filter" @@ -3783,9 +4222,14 @@ msgctxt "Content/*/Link/Verb" msgid "Select only current page" msgstr "تØديد الصÙØØ© الØالية Ùقط" -#: front/src/components/Sidebar.vue:43 src/components/Sidebar.vue:108 -#: front/src/components/manage/users/UsersTable.vue:181 -#: front/src/views/admin/moderation/AccountsDetail.vue:506 +#: front/src/components/Home.vue:43 +msgctxt "Content/Home/Link" +msgid "Server rules" +msgstr "" + +#: front/src/components/Sidebar.vue:43 src/components/Sidebar.vue:112 +#: front/src/components/manage/users/UsersTable.vue:182 +#: front/src/views/admin/moderation/AccountsDetail.vue:526 msgctxt "*/*/*/Noun" msgid "Settings" msgstr "الإعدادات" @@ -3807,17 +4251,25 @@ msgstr "رابط المشاركة" #: front/src/views/content/libraries/Detail.vue:15 msgctxt "Content/Library/Paragraph" -msgid "" -"Share this link with other users so they can request access to your library." -msgstr "" -"قم بمشاركة هذا الرابط مع مستخدمين آخرين ليتمكنوا Ù…ÙÙ† طلب الوصول إلى مكتبتك." +msgid "Share this link with other users so they can request access to your library." +msgstr "قم بمشاركة هذا الرابط مع مستخدمين آخرين ليتمكنوا Ù…ÙÙ† طلب الوصول إلى مكتبتك." #: front/src/views/content/libraries/Detail.vue:14 -#: front/src/views/content/remote/Card.vue:77 +#: front/src/views/content/remote/Card.vue:90 msgctxt "Content/Library/Title" msgid "Sharing link" msgstr "رابط المشاركة" +#: front/src/components/audio/EmbedWizard.vue:5 +msgctxt "Content/Embed/Message" +msgid "Sharing will not work because this pod doesn't allow anonymous users to access content." +msgstr "" + +#: front/src/components/About.vue:156 +msgctxt "*/*/*/Verb" +msgid "Show" +msgstr "" + #: front/src/components/audio/album/Card.vue:38 msgctxt "Content/Album/Card.Link/Verb" msgid "Show %{ count } more track" @@ -3829,33 +4281,44 @@ msgstr[3] "اعرض %{ count } مَقطَع" msgstr[4] "اعرض %{ count } مَقاطÙع" msgstr[5] "اعرض %{ count } مَقاطÙع" -#: front/src/components/audio/artist/Card.vue:30 -msgctxt "Content/Artist/Card.Link" -msgid "Show 1 more album" -msgid_plural "Show %{ count } more albums" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" -msgstr[4] "" -msgstr[5] "" +#: front/src/components/tags/List.vue:11 +#, fuzzy +msgctxt "Content/*/Button/Label/Verb" +msgid "Show 1 more tag" +msgid_plural "Show %{ count } more tags" +msgstr[0] "اعرض %{ count } مقاطع" +msgstr[1] "اعرض %{ count } مَقطَع" +msgstr[2] "اعرض %{ count } مَقاطÙع" +msgstr[3] "اعرض %{ count } مَقطَع" +msgstr[4] "اعرض %{ count } مَقاطÙع" +msgstr[5] "اعرض %{ count } مَقاطÙع" #: front/src/components/library/EditForm.vue:21 msgctxt "Content/Library/Button.Label" msgid "Show all edits" msgstr "" -#: front/src/components/ShortcutsModal.vue:42 +#: front/src/components/ShortcutsModal.vue:60 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Show available keyboard shortcuts" msgstr "عرض اختصارات لوØØ© المÙØ§ØªÙŠØ Ø§Ù„Ù…ØªÙˆÙّرة" -#: front/src/views/Notifications.vue:7 +#: front/src/components/common/ExpandableDiv.vue:7 +msgctxt "*/*/Button,Label" +msgid "Show less" +msgstr "" + +#: front/src/components/common/ExpandableDiv.vue:8 +msgctxt "*/*/Button,Label" +msgid "Show more" +msgstr "" + +#: front/src/views/Notifications.vue:72 msgctxt "Content/Notifications/Form.Label/Verb" msgid "Show read notifications" msgstr "عرض الإشعارات المقروءة" -#: front/src/components/forms/PasswordInput.vue:26 +#: front/src/components/forms/PasswordInput.vue:42 msgctxt "Content/Settings/Button.Tooltip/Verb" msgid "Show/hide password" msgstr "إظهار/إخÙاء الكلمة السرية" @@ -3864,56 +4327,64 @@ msgstr "إظهار/إخÙاء الكلمة السرية" #: front/src/components/manage/library/ArtistsTable.vue:84 #: front/src/components/manage/library/EditsCardList.vue:72 #: front/src/components/manage/library/LibrariesTable.vue:110 +#: front/src/components/manage/library/TagsTable.vue:79 #: front/src/components/manage/library/TracksTable.vue:95 #: front/src/components/manage/library/UploadsTable.vue:144 #: front/src/components/manage/moderation/AccountsTable.vue:88 -#: front/src/components/manage/moderation/DomainsTable.vue:74 +#: front/src/components/manage/moderation/DomainsTable.vue:85 #: front/src/components/manage/users/InvitationsTable.vue:76 -#: front/src/components/manage/users/UsersTable.vue:87 +#: front/src/components/manage/users/UsersTable.vue:88 #: front/src/views/content/libraries/FilesTable.vue:117 msgctxt "Content/*/Paragraph" msgid "Showing results %{ start }-%{ end } on %{ total }" msgstr "عرض النتائج %{ start }-%{ end } Ù…ÙÙ† %{ total }" -#: front/src/components/ShortcutsModal.vue:83 +#: front/src/components/ShortcutsModal.vue:140 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Shuffle queue" msgstr "خلط قائمة الإنتظار" -#: front/src/components/audio/Player.vue:641 +#: front/src/components/audio/Player.vue:667 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Shuffle your queue" msgstr "خلط قائمة الإنتظار" -#: front/src/components/auth/Signup.vue:97 +#: front/src/components/Home.vue:103 +#, fuzzy msgctxt "*/Signup/Title" -msgid "Sign Up" +msgid "Sign up" msgstr "التسجيل" +#: front/src/views/auth/Signup.vue:37 +msgctxt "*/Signup/Title" +msgid "Sign Up" +msgstr "التسجيل" + +#: front/src/components/Home.vue:107 +msgctxt "Content/Home/Paragraph" +msgid "Sign up now to keep a track of your favorites, create playlists, discover new content and much more!" +msgstr "" + #: front/src/components/manage/users/UsersTable.vue:40 msgctxt "Content/Admin/Table.Label/Short, Noun (Value is a date)" msgid "Sign-up" msgstr "التسجيل" -#: front/src/components/mixins/Translations.vue:57 -#: front/src/views/admin/moderation/AccountsDetail.vue:197 -#: front/src/components/mixins/Translations.vue:58 +#: front/src/components/mixins/Translations.vue:69 +#: front/src/views/admin/moderation/AccountsDetail.vue:198 +#: front/src/components/mixins/Translations.vue:70 msgctxt "Content/Admin/Table.Label/Noun" msgid "Sign-up date" msgstr "تاريخ التسجيل" -#: front/src/components/manage/library/UploadsTable.vue:65 -#: front/src/views/admin/library/UploadDetail.vue:219 -msgctxt "Content/*/*/Noun" -msgid "Size" -msgstr "الØجم" - #: front/src/components/library/FileUpload.vue:94 #: front/src/components/library/TrackDetail.vue:39 -#: front/src/components/mixins/Translations.vue:54 +#: front/src/components/manage/library/UploadsTable.vue:65 +#: front/src/components/mixins/Translations.vue:66 +#: front/src/views/admin/library/UploadDetail.vue:219 #: front/src/views/content/libraries/FilesTable.vue:61 -#: front/src/components/mixins/Translations.vue:55 -msgctxt "Content/Library/*/in MB" +#: front/src/components/mixins/Translations.vue:67 +msgctxt "Content/*/*/Noun" msgid "Size" msgstr "الØجم" @@ -3930,7 +4401,7 @@ msgctxt "Content/Library/Label" msgid "Skipped files" msgstr "الملÙات التي تمّ تجاهلها" -#: front/src/views/admin/moderation/DomainsDetail.vue:89 +#: front/src/views/admin/moderation/DomainsDetail.vue:126 msgctxt "Content/Moderation/Table.Label" msgid "Software" msgstr "البرمجيات" @@ -3945,87 +4416,65 @@ msgctxt "Content/*/Paragraph" msgid "Sorry, the page you asked for does not exist:" msgstr "المعذرة، إنّ الصÙØØ© التي قمت بطلبها غير موجودة :" -#: front/src/components/Footer.vue:49 +#: front/src/components/Footer.vue:57 msgctxt "Footer/*/List item.Link" msgid "Source code" msgstr "Ø´Ùرة المصدر" #: front/src/components/auth/Profile.vue:23 -#: front/src/components/manage/users/UsersTable.vue:70 +#: front/src/components/manage/users/UsersTable.vue:71 msgctxt "Content/Profile/User role" msgid "Staff member" msgstr "عضو ÙÙŠ الÙريق" -#: front/src/components/audio/PlayButton.vue:23 +#: front/src/components/audio/PlayButton.vue:27 #: src/components/radios/Button.vue:4 msgctxt "*/Queue/Button.Label/Short, Verb" msgid "Start radio" msgstr "إيقا٠الإذاعة" -#: front/src/views/admin/Settings.vue:86 -msgctxt "Content/Admin/Menu" +#: front/src/components/About.vue:170 src/components/Home.vue:53 +#: front/src/views/admin/Settings.vue:87 +#, fuzzy +msgctxt "Content/Home/Header" msgid "Statistics" msgstr "الإØصائيات" -#: front/src/views/admin/moderation/AccountsDetail.vue:490 +#: front/src/views/admin/moderation/AccountsDetail.vue:510 msgctxt "Content/Moderation/Help text" -msgid "" -"Statistics are computed from known activity and content on your instance, " -"and do not reflect general activity for this account" +msgid "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this account" msgstr "" -#: front/src/views/admin/moderation/DomainsDetail.vue:371 +#: front/src/views/admin/moderation/DomainsDetail.vue:418 msgctxt "Content/Moderation/Help text" -msgid "" -"Statistics are computed from known activity and content on your instance, " -"and do not reflect general activity for this domain" +msgid "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this domain" msgstr "" -#: front/src/views/admin/library/AlbumDetail.vue:329 -#: front/src/views/admin/library/ArtistDetail.vue:328 -#: front/src/views/admin/library/LibraryDetail.vue:316 -#: front/src/views/admin/library/TrackDetail.vue:371 +#: front/src/views/admin/library/AlbumDetail.vue:346 +#: front/src/views/admin/library/ArtistDetail.vue:345 +#: front/src/views/admin/library/LibraryDetail.vue:356 +#: front/src/views/admin/library/TagDetail.vue:210 +#: front/src/views/admin/library/TrackDetail.vue:389 #: front/src/views/admin/library/UploadDetail.vue:335 msgctxt "Content/Moderation/Help text" -msgid "" -"Statistics are computed from known activity and content on your instance, " -"and do not reflect general activity for this object" +msgid "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" msgstr "" -#: front/src/views/admin/moderation/DomainsDetail.vue:115 -msgctxt "Content/Moderation/Table.Label (Value is Error message)" -msgid "Status" -msgstr "الØالة" - #: front/src/components/library/FileUpload.vue:95 -msgctxt "Content/Library/Table.Label (Value is Uploading/Uploaded/Error)" -msgid "Status" -msgstr "الØالة" - -#: front/src/views/content/libraries/Detail.vue:28 -msgctxt "Content/Library.Federation/Table.Label (Value is Approved/Rejected)" -msgid "Status" -msgstr "الØالة" - +#: front/src/components/manage/library/EditsCardList.vue:12 +#: front/src/components/manage/moderation/ReportCard.vue:57 #: front/src/components/manage/users/InvitationsTable.vue:17 #: front/src/components/manage/users/InvitationsTable.vue:39 -msgctxt "Content/Admin/*/Noun (Value is Used/Not used)" -msgid "Status" -msgstr "الØالة" - #: front/src/components/manage/users/UsersTable.vue:43 -msgctxt "Content/Admin/Table.Label/Noun (Value is Regular user/Admin)" -msgid "Status" -msgstr "الØالة" - -#: front/src/components/manage/library/EditsCardList.vue:12 -msgctxt "" -"Content/Search/Dropdown.Label (Value is All/Pending " -"review/Approved/Rejected)" +#: front/src/views/admin/moderation/DomainsDetail.vue:152 +#: front/src/views/admin/moderation/ReportsList.vue:14 +#: front/src/views/content/libraries/Detail.vue:28 +#, fuzzy +msgctxt "*/*/*" msgid "Status" msgstr "الØالة" -#: front/src/components/Sidebar.vue:174 src/components/radios/Button.vue:3 +#: front/src/components/Sidebar.vue:178 src/components/radios/Button.vue:3 msgctxt "*/Player/Button.Label/Short, Verb" msgid "Stop radio" msgstr "إيقا٠الإذاعة" @@ -4035,7 +4484,7 @@ msgctxt "*/*/Button.Label/Verb" msgid "Submit" msgstr "إرسال" -#: front/src/components/library/EditForm.vue:98 +#: front/src/components/library/EditForm.vue:110 msgctxt "Content/Library/Button.Label/Verb" msgid "Submit and apply edit" msgstr "" @@ -4045,12 +4494,24 @@ msgctxt "Content/Library/Button.Label" msgid "Submit another edit" msgstr "" -#: front/src/components/library/EditForm.vue:99 +#: front/src/components/moderation/ReportModal.vue:64 +#, fuzzy +msgctxt "Popup/*/Button.Label" +msgid "Submit report" +msgstr "إرسال" + +#: front/src/components/library/EditForm.vue:111 msgctxt "Content/Library/Button.Label/Verb" msgid "Submit suggestion" msgstr "" -#: front/src/views/admin/Settings.vue:85 +#: front/src/components/manage/moderation/ReportCard.vue:17 +#, fuzzy +msgctxt "Content/Moderation/*" +msgid "Submitted by" +msgstr "إرسال" + +#: front/src/views/admin/Settings.vue:86 msgctxt "Content/Admin/Menu" msgid "Subsonic" msgstr "صاب سونيك" @@ -4090,45 +4551,72 @@ msgctxt "Content/Library/Tab.Title/Short" msgid "Summary" msgstr "الملخص" -#: front/src/components/library/EditForm.vue:87 +#: front/src/components/library/EditForm.vue:99 msgctxt "*/*/*" msgid "Summary (optional)" msgstr "" -#: front/src/components/Footer.vue:39 +#: front/src/components/Footer.vue:47 msgctxt "Footer/*/Listitem.Link" msgid "Support forum" msgstr "المنتدى" +#: front/src/views/Notifications.vue:10 +msgctxt "Content/Notifications/Header" +msgid "Support this Funkwhale pod" +msgstr "" + #: front/src/components/library/FileUpload.vue:85 msgctxt "Content/Library/Paragraph" msgid "Supported extensions: %{ extensions }" -msgstr "" +msgstr "امتدادات الملÙات المدعومة: %{ extensions }" #: front/src/components/playlists/Editor.vue:9 msgctxt "Content/Playlist/Paragraph" msgid "Syncing changes to server…" msgstr "مزامنة التغييرات مع الخادم…" -#: front/src/components/audio/EmbedWizard.vue:25 +#: front/src/components/audio/SearchBar.vue:35 +msgctxt "*/*/*/Noun" +msgid "Tag" +msgstr "" + +#: front/src/views/admin/library/TagDetail.vue:61 +#, fuzzy +msgctxt "Content/Moderation/Title" +msgid "Tag data" +msgstr "اسم المَقطَع" + +#: front/src/components/library/Albums.vue:23 +#: src/components/library/Artists.vue:15 +#: front/src/views/admin/library/Base.vue:23 +#: src/views/admin/library/TagsList.vue:24 front/src/edits.js:24 +#: src/edits.js:50 src/edits.js:91 src/entities.js:120 +msgctxt "*/*/*/Noun" +msgid "Tags" +msgstr "" + +#: front/src/components/mixins/Translations.vue:44 +#: front/src/components/mixins/Translations.vue:45 +#, fuzzy +msgctxt "Content/Moderation/Dropdown" +msgid "Takedown request" +msgstr "طلبات المتابَعة المعلَّقة" + +#: front/src/components/About.vue:35 src/components/About.vue:61 +msgctxt "Content/About/Header" +msgid "Terms and privacy policy" +msgstr "" + +#: front/src/components/audio/EmbedWizard.vue:35 #: front/src/components/common/CopyInput.vue:3 msgctxt "Content/*/Paragraph" msgid "Text copied to clipboard!" msgstr "تم نسخ النص إلى الØاÙظة!" -#: front/src/components/Home.vue:26 -msgctxt "Content/Home/Paragraph" -msgid "" -"That's simple: we loved Grooveshark and we want to build something even " -"better." -msgstr "" -"Øسنًا الأمر سهل : Ø£Øببنا غرو٠شارْك Ùˆ أردنا تصميم مشروع Ø£Øسَن منه بكثير." - -#: front/src/views/admin/library/AlbumDetail.vue:75 +#: front/src/views/admin/library/AlbumDetail.vue:81 msgctxt "Content/Moderation/Paragraph" -msgid "" -"The album will be removed, as well as associated uploads, tracks, favorites " -"and listening history. This action is irreversible." +msgid "The album will be removed, as well as associated uploads, tracks, favorites and listening history. This action is irreversible." msgstr "" #: front/src/components/auth/Authorize.vue:39 @@ -4136,14 +4624,12 @@ msgctxt "Content/Auth/Paragraph" msgid "The application is also requesting the following unknown permissions:" msgstr "" -#: front/src/views/admin/library/ArtistDetail.vue:74 +#: front/src/views/admin/library/ArtistDetail.vue:79 msgctxt "Content/Moderation/Paragraph" -msgid "" -"The artist will be removed, as well as associated uploads, tracks, albums, " -"favorites and listening history. This action is irreversible." +msgid "The artist will be removed, as well as associated uploads, tracks, albums, favorites and listening history. This action is irreversible." msgstr "" -#: front/src/components/Footer.vue:53 +#: front/src/components/Footer.vue:61 msgctxt "Footer/*/List item.Link" msgid "The funkwhale logo was kindly designed and provided by Francis Gading." msgstr "تم تصميم شعار Ùانك وايل funkwhale بÙضل Ùˆ كَرَم Francis Gading." @@ -4155,23 +4641,17 @@ msgstr "" #: front/src/views/content/libraries/Form.vue:34 msgctxt "Popup/Library/Paragraph" -msgid "" -"The library and all its tracks will be deleted. This can not be undone." -msgstr "" -"سو٠يتم Øذ٠المكتبة Ùˆ كل ما تØتويه Ù…ÙÙ† مقاطÙع. لا يمكن الغاء هذا الإجراء." +msgid "The library and all its tracks will be deleted. This can not be undone." +msgstr "سو٠يتم Øذ٠المكتبة Ùˆ كل ما تØتويه Ù…ÙÙ† مقاطÙع. لا يمكن الغاء هذا الإجراء." #: front/src/views/admin/library/LibraryDetail.vue:61 msgctxt "Content/Moderation/Paragraph" -msgid "" -"The library will be removed, as well as associated uploads, and follows. " -"This action is irreversible." +msgid "The library will be removed, as well as associated uploads, and follows. This action is irreversible." msgstr "" #: front/src/components/library/ImportStatusModal.vue:140 msgctxt "Popup/Import/Error.Label" -msgid "" -"The metadata included in the file is invalid or some mandatory fields are " -"missing." +msgid "The metadata included in the file is invalid or some mandatory fields are missing." msgstr "" #: front/src/components/library/FileUpload.vue:38 @@ -4184,14 +4664,16 @@ msgctxt "Sidebar/Player/Error message.Paragraph" msgid "The next track will play automatically in a few seconds…" msgstr "سيتم تشغيل المقطَع اللاØÙ‚ تلقائيا خلال بضع ثوان…" -#: front/src/components/Home.vue:116 -msgctxt "Content/Home/List item" -msgid "" -"The plaform is free and open-source, you can install it and modify it " -"without worries" +#: front/src/components/manage/moderation/NotesThread.vue:27 +#, fuzzy +msgctxt "Content/Moderation/Paragraph" +msgid "The note will be removed. This action is irreversible." +msgstr "لا يمكن الغاء هذا الإجراء." + +#: front/src/components/manage/moderation/ReportCard.vue:120 +msgctxt "Content/Moderation/Message" +msgid "The object associated with this report was deleted." msgstr "" -"المنصّة مجانية Ùˆ Ù…ÙتوØØ© المصدر، بإمكانكم تنصيبها Ùˆ تعديلها كما ÙŠØلو لكم دون " -"قيود" #: front/src/components/playlists/Form.vue:14 msgctxt "Content/Playlist/Error message.Title" @@ -4205,46 +4687,43 @@ msgstr "ردَّ الخادم البÙعدي بإجابة HTTP %{ status }" #: front/src/components/federation/FetchButton.vue:13 msgctxt "Popup/*/Message.Content" -msgid "" -"The remote server answered, but returned data was unsupported by Funkwhale." +msgid "The remote server answered, but returned data was unsupported by Funkwhale." msgstr "" #: front/src/components/federation/FetchButton.vue:44 msgctxt "*/*/Error" -msgid "The remote server didn't answered fast enough" +msgid "The remote server didn't respond quickly enough" msgstr "" #: front/src/components/federation/FetchButton.vue:50 msgctxt "*/*/Error" -msgid "The return server returned invalid JSON or JSON-LD data" +msgid "The remote server returned invalid JSON or JSON-LD data" msgstr "" #: front/src/components/manage/library/AlbumsTable.vue:189 msgctxt "Popup/*/Paragraph" -msgid "" -"The selected albums will be removed, as well as associated tracks, uploads, " -"favorites and listening history. This action is irreversible." +msgid "The selected albums will be removed, as well as associated tracks, uploads, favorites and listening history. This action is irreversible." msgstr "" #: front/src/components/manage/library/ArtistsTable.vue:179 msgctxt "Popup/*/Paragraph" -msgid "" -"The selected artist will be removed, as well as associated uploads, tracks, " -"albums, favorites and listening history. This action is irreversible." +msgid "The selected artist will be removed, as well as associated uploads, tracks, albums, favorites and listening history. This action is irreversible." msgstr "" #: front/src/components/manage/library/LibrariesTable.vue:206 msgctxt "Popup/*/Paragraph" -msgid "" -"The selected library will be removed, as well as associated uploads and " -"follows. This action is irreversible." +msgid "The selected library will be removed, as well as associated uploads and follows. This action is irreversible." msgstr "" +#: front/src/components/manage/library/TagsTable.vue:180 +#, fuzzy +msgctxt "Popup/*/Paragraph" +msgid "The selected tag will be removed and unlinked with existing content, if any. This action is irreversible." +msgstr "لا يمكن الغاء هذا الإجراء." + #: front/src/components/manage/library/TracksTable.vue:189 msgctxt "Popup/*/Paragraph" -msgid "" -"The selected tracks will be removed, as well as associated uploads, " -"favorites and listening history. This action is irreversible." +msgid "The selected tracks will be removed, as well as associated uploads, favorites and listening history. This action is irreversible." msgstr "" #: front/src/components/manage/library/UploadsTable.vue:256 @@ -4260,15 +4739,19 @@ msgstr "" #: front/src/components/auth/SubsonicTokenForm.vue:4 msgctxt "Content/Settings/Paragraph" msgid "The Subsonic API is not available on this Funkwhale instance." -msgstr "" -"واجهة برمجة تطبيقات صاب سونيك غير متوÙرة غلى مثيل خادوم Ùانك وايل الØالي." +msgstr "واجهة برمجة تطبيقات صاب سونيك غير متوÙرة غلى مثيل خادوم Ùانك وايل الØالي." #: front/src/components/library/EditCard.vue:96 msgctxt "Popup/Library/Paragraph" -msgid "" -"The suggestion will be completely removed, this action is irreversible." +msgid "The suggestion will be completely removed, this action is irreversible." msgstr "" +#: front/src/views/admin/library/TagDetail.vue:44 +#, fuzzy +msgctxt "Content/Moderation/Paragraph" +msgid "The tag will be removed and unlinked from any existing entity. This action is irreversible." +msgstr "لا يمكن الغاء هذا الإجراء." + #: front/src/components/playlists/PlaylistModal.vue:34 msgctxt "Popup/Playlist/Error message.Title" msgid "The track can't be added to a playlist" @@ -4279,11 +4762,9 @@ msgctxt "Sidebar/Player/Error message.Title" msgid "The track cannot be loaded" msgstr "" -#: front/src/views/admin/library/TrackDetail.vue:74 +#: front/src/views/admin/library/TrackDetail.vue:80 msgctxt "Content/Moderation/Paragraph" -msgid "" -"The track will be removed, as well as associated uploads, favorites and " -"listening history. This action is irreversible." +msgid "The track will be removed, as well as associated uploads, favorites and listening history. This action is irreversible." msgstr "" #: front/src/views/admin/library/UploadDetail.vue:68 @@ -4316,21 +4797,36 @@ msgctxt "Content/Artist/Paragraph" msgid "This artist is present in the following libraries:" msgstr "هذا الÙنان متوÙر على المكتبات التالية:" +#: front/src/components/manage/moderation/DomainsTable.vue:169 +#, fuzzy +msgctxt "Content/Moderation/Popup" +msgid "This domain is present in your allow-list" +msgstr "هذا الÙنان متوÙر على المكتبات التالية:" + #: front/src/views/admin/moderation/AccountsDetail.vue:84 -#: front/src/views/admin/moderation/DomainsDetail.vue:48 +#: front/src/views/admin/moderation/DomainsDetail.vue:76 msgctxt "Content/Moderation/Card.Title" msgid "This domain is subject to specific moderation rules" msgstr "" +#: front/src/components/manage/moderation/InstancePolicyModal.vue:16 +msgctxt "Content/Moderation/Card.Title" +msgid "This entity is subject to specific moderation rules" +msgstr "" + #: front/src/views/content/Home.vue:9 msgctxt "Content/Library/Paragraph" msgid "This instance offers up to %{quota} of storage space for every user." msgstr "مثيل الخادوم هذا ÙŠÙØªÙŠØ Ù…Ø³Ø§ØØ© تخرين تÙقدَّر بـ %{quota} لكل مستخدÙÙ…." +#: front/src/components/auth/Settings.vue:300 +msgctxt "Popup/Settings/Paragraph" +msgid "This is irreversible and will permanently remove your data from our servers. You will we immediatly logged out." +msgstr "" + #: front/src/components/auth/Settings.vue:165 msgctxt "Content/Settings/Paragraph" -msgid "" -"This is the list of applications that have access to your account data." +msgid "This is the list of applications that have access to your account data." msgstr "" #: front/src/components/auth/Settings.vue:218 @@ -4348,23 +4844,19 @@ msgctxt "Content/Library/Input.Placeholder" msgid "This library contains my personal music, I hope you like it." msgstr "تØتوي هذه المكتبة على الموسيقى الخاصة بي، أتمنى أنها ستلقَى إعجابك." -#: front/src/views/content/remote/Card.vue:141 +#: front/src/views/content/remote/Card.vue:169 msgctxt "Content/Library/Card.Help text" -msgid "" -"This library is private and your approval from its owner is needed to access" -" its content" +msgid "This library is private and your approval from its owner is needed to access its content" msgstr "" -#: front/src/views/content/remote/Card.vue:142 +#: front/src/views/content/remote/Card.vue:170 msgctxt "Content/Library/Card.Help text" msgid "This library is public and you can access its content freely" msgstr "" #: front/src/components/common/ActionTable.vue:47 msgctxt "Modal/*/Paragraph" -msgid "" -"This may affect a lot of elements or have irreversible consequences, please " -"double check this is really what you want." +msgid "This may affect a lot of elements or have irreversible consequences, please double check this is really what you want." msgstr "" #: front/src/components/library/AlbumEdit.vue:8 @@ -4374,6 +4866,11 @@ msgctxt "Content/*/Message" msgid "This object is managed by another server, you cannot edit it." msgstr "" +#: front/src/components/Home.vue:87 +msgctxt "Content/Home/Paragraph" +msgid "This pod runs Funkwhale, a community-driven project that lets you listen and share music and audio within a decentralized, open network." +msgstr "" + #: front/src/components/library/FileUpload.vue:51 msgctxt "Content/Library/Paragraph" msgid "This reference will be used to group imported files together." @@ -4382,14 +4879,13 @@ msgstr "" #: front/src/components/mixins/Translations.vue:33 #: front/src/components/mixins/Translations.vue:34 msgctxt "Content/Library/Help text" -msgid "This track could not be processed, please it is tagged correctly" +msgid "This track could not be processed, please make sure it is tagged correctly" msgstr "" #: front/src/components/mixins/Translations.vue:29 #: front/src/components/mixins/Translations.vue:30 msgctxt "Content/Library/Help text" -msgid "" -"This track has been uploaded, but hasn't been processed by the server yet" +msgid "This track has been uploaded, but hasn't been processed by the server yet" msgstr "تم ارسال المقطع ولكن لم تتم معالجته بعد على الخادم" #: front/src/components/mixins/Translations.vue:25 @@ -4398,7 +4894,7 @@ msgctxt "Content/Library/Help text" msgid "This track is already present in one of your libraries" msgstr "إنّ المقطع متوÙّر Ù…ÙÙ† قبل ÙÙŠ Ø¥Øدى مكتباتك" -#: front/src/components/audio/PlayButton.vue:85 +#: front/src/components/audio/PlayButton.vue:103 msgctxt "*/Queue/Button/Title" msgid "This track is not available in any library you have access to" msgstr "" @@ -4408,92 +4904,84 @@ msgctxt "Content/Track/Paragraph" msgid "This track is present in the following libraries:" msgstr "هذا المقطع متوÙر كذلك على المكتبات التالية:" -#: front/src/views/playlists/Detail.vue:38 +#: front/src/views/playlists/Detail.vue:46 msgctxt "Popup/Playlist/Paragraph" msgid "This will completely delete this playlist and cannot be undone." -msgstr "" -"سو٠يؤدي ذلك إلى الØذ٠الكÙلّي لقائمة التشغيل هذه Ùˆ لا ÙŠÙمكن إلغاء العملية Ùˆ" -" العودة." +msgstr "سو٠يؤدي ذلك إلى الØذ٠الكÙلّي لقائمة التشغيل هذه Ùˆ لا ÙŠÙمكن إلغاء العملية Ùˆ العودة." #: front/src/views/radios/Detail.vue:27 msgctxt "Popup/Radio/Paragraph" msgid "This will completely delete this radio and cannot be undone." -msgstr "" -"سو٠يؤدي ذلك إلى الØذ٠الكÙلّي لهذه الإذاعة Ùˆ لا ÙŠÙمكن إلغاء العملية Ùˆ " -"العودة." +msgstr "سو٠يؤدي ذلك إلى الØذ٠الكÙلّي لهذه الإذاعة Ùˆ لا ÙŠÙمكن إلغاء العملية Ùˆ العودة." -#: front/src/components/auth/SubsonicTokenForm.vue:50 +#: front/src/components/auth/SubsonicTokenForm.vue:55 msgctxt "Popup/Settings/Paragraph" -msgid "" -"This will completely disable access to the Subsonic API using from account." +msgid "This will completely disable access to the Subsonic API using from account." msgstr "" -#: front/src/components/auth/SubsonicTokenForm.vue:35 -msgctxt "Popup/Settings/Paragraph" -msgid "" -"This will log you out from existing devices that use the current password." +#: front/src/components/manage/moderation/ReportCard.vue:359 +msgctxt "Content/Moderation/Popup,Paragraph" +msgid "This will delete the object associated with this report and mark the report as resolved. The deletion is irreversible." msgstr "" -"سيؤدي ذلك إلى إخراجك Ù…ÙÙ† الأجهزة الØالية التي تستخدم هذه الكلمة السرية." + +#: front/src/components/auth/SubsonicTokenForm.vue:40 +msgctxt "Popup/Settings/Paragraph" +msgid "This will log you out from existing devices that use the current password." +msgstr "سيؤدي ذلك إلى إخراجك Ù…ÙÙ† الأجهزة الØالية التي تستخدم هذه الكلمة السرية." #: front/src/components/auth/Settings.vue:253 msgctxt "Popup/Settings/Paragraph" -msgid "" -"This will permanently delete the application and all the associated tokens." -msgstr "" -"سو٠يؤدي ذلك إلى الØذ٠الكÙلّي لقائمة التشغيل هذه Ùˆ لا ÙŠÙمكن إلغاء العملية Ùˆ" -" العودة." +msgid "This will permanently delete the application and all the associated tokens." +msgstr "سو٠يؤدي ذلك إلى الØذ٠الكÙلّي لقائمة التشغيل هذه Ùˆ لا ÙŠÙمكن إلغاء العملية Ùˆ العودة." #: front/src/components/auth/Settings.vue:194 msgctxt "Popup/Settings/Paragraph" -msgid "" -"This will prevent this application from accessing the service on your " -"behalf." +msgid "This will prevent this application from accessing the service on your behalf." msgstr "" #: front/src/components/playlists/Editor.vue:54 msgctxt "Popup/Playlist/Paragraph" msgid "This will remove all tracks from this playlist and cannot be undone." -msgstr "" -"سو٠يؤدي ذلك إلى الØذ٠الكÙلّي لقائمة التشغيل هذه Ùˆ لا ÙŠÙمكن إلغاء العملية Ùˆ" -" العودة." - -#: front/src/views/admin/library/AlbumDetail.vue:99 -#: front/src/views/admin/library/TrackDetail.vue:98 src/edits.js:21 -#: src/edits.js:39 -msgctxt "*/*/*/Noun" -msgid "Title" -msgstr "العنوان" +msgstr "سو٠يؤدي ذلك إلى الØذ٠الكÙلّي لقائمة التشغيل هذه Ùˆ لا ÙŠÙمكن إلغاء العملية Ùˆ العودة." #: front/src/components/audio/track/Table.vue:7 -#: front/src/views/content/libraries/FilesTable.vue:55 -msgctxt "Content/Track/*/Noun" -msgid "Title" -msgstr "العنوان" - #: front/src/components/manage/library/AlbumsTable.vue:39 #: front/src/components/manage/library/TracksTable.vue:39 -msgctxt "*/*/*" +#: front/src/views/admin/library/AlbumDetail.vue:105 +#: front/src/views/admin/library/TrackDetail.vue:104 +#: front/src/views/content/libraries/FilesTable.vue:55 src/edits.js:36 +#: front/src/edits.js:62 +msgctxt "*/*/*/Noun" msgid "Title" msgstr "العنوان" #: front/src/components/SetInstanceModal.vue:16 msgctxt "Popup/Instance/Paragraph" -msgid "" -"To continue, please select the Funkwhale instance you want to connect to. " -"Enter the address directly, or select one of the suggested choices." +msgid "To continue, please select the Funkwhale instance you want to connect to. Enter the address directly, or select one of the suggested choices." +msgstr "" + +#: front/src/components/ShortcutsModal.vue:148 +#, fuzzy +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Toggle favorite" +msgstr "%{ count } Ù…Ùضّلة" + +#: front/src/components/ShortcutsModal.vue:132 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Toggle mute" msgstr "" -#: front/src/components/ShortcutsModal.vue:79 +#: front/src/components/ShortcutsModal.vue:136 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Toggle queue looping" msgstr "" -#: front/src/views/admin/library/AlbumDetail.vue:222 -#: front/src/views/admin/library/ArtistDetail.vue:211 -#: front/src/views/admin/library/LibraryDetail.vue:200 -#: front/src/views/admin/library/TrackDetail.vue:274 -#: front/src/views/admin/moderation/AccountsDetail.vue:317 -#: front/src/views/admin/moderation/DomainsDetail.vue:225 +#: front/src/views/admin/library/AlbumDetail.vue:238 +#: front/src/views/admin/library/ArtistDetail.vue:226 +#: front/src/views/admin/library/LibraryDetail.vue:219 +#: front/src/views/admin/library/TrackDetail.vue:290 +#: front/src/views/admin/moderation/AccountsDetail.vue:329 +#: front/src/views/admin/moderation/DomainsDetail.vue:262 msgctxt "Content/Moderation/Table.Label" msgid "Total size" msgstr "الØجم الإجمالي" @@ -4503,20 +4991,18 @@ msgctxt "Content/Library/Card.Help text" msgid "Total size of the files in this library" msgstr "الØجم الإجمالي للملÙات المتوÙّرة ÙÙŠ هذه المكتبة" -#: front/src/views/admin/moderation/DomainsDetail.vue:105 +#: front/src/views/admin/moderation/DomainsDetail.vue:142 msgctxt "Content/*/*" msgid "Total users" msgstr "العدد الإجمالي للمستخدÙمين" -#: front/src/views/admin/library/UploadDetail.vue:199 -msgctxt "*/*/*" -msgid "Track" -msgstr "المَقطَع" - -#: front/src/components/audio/SearchBar.vue:27 -#: front/src/components/library/TrackBase.vue:173 +#: front/src/components/audio/SearchBar.vue:34 +#: front/src/components/library/TrackBase.vue:188 #: front/src/components/library/TrackDetail.vue:128 #: front/src/components/metadata/Search.vue:138 +#: src/components/mixins/Report.vue:28 +#: front/src/views/admin/library/UploadDetail.vue:199 +#: front/src/components/mixins/Report.vue:29 msgctxt "*/*/*/Noun" msgid "Track" msgstr "المَقطَع" @@ -4526,7 +5012,7 @@ msgctxt "Content/Library/Card/Short" msgid "Track #%{ id } - %{ name }" msgstr "" -#: front/src/views/admin/library/TrackDetail.vue:91 +#: front/src/views/admin/library/TrackDetail.vue:97 msgctxt "Content/Moderation/Title" msgid "Track data" msgstr "اسم المَقطَع" @@ -4536,30 +5022,28 @@ msgctxt "Content/Track/Title/Noun" msgid "Track information" msgstr "معلومات عن المَقطَع" -#: front/src/components/mixins/Translations.vue:50 -#: front/src/components/mixins/Translations.vue:51 +#: front/src/components/mixins/Translations.vue:60 +#: front/src/components/mixins/Translations.vue:61 msgctxt "Content/*/Dropdown/Noun" msgid "Track name" msgstr "اسم المَقطَع" -#: front/src/components/instance/Stats.vue:54 #: front/src/components/library/AlbumDetail.vue:19 -#: front/src/components/playlists/PlaylistModal.vue:47 -#: front/src/views/admin/moderation/AccountsDetail.vue:362 -#: front/src/views/admin/moderation/DomainsDetail.vue:274 -#: front/src/views/content/Base.vue:8 src/views/content/libraries/Detail.vue:8 -#: front/src/views/playlists/Detail.vue:51 src/views/radios/Detail.vue:34 -msgctxt "*/*/*/Noun" -msgid "Tracks" -msgstr "المَقاطÙع" - +#: front/src/components/library/TagDetail.vue:36 #: front/src/components/manage/library/AlbumsTable.vue:42 #: front/src/components/manage/library/ArtistsTable.vue:42 -#: front/src/views/admin/library/AlbumDetail.vue:252 -#: front/src/views/admin/library/ArtistDetail.vue:251 +#: front/src/components/manage/library/TagsTable.vue:44 +#: front/src/components/playlists/PlaylistModal.vue:47 +#: front/src/views/admin/library/AlbumDetail.vue:268 +#: front/src/views/admin/library/ArtistDetail.vue:266 #: front/src/views/admin/library/Base.vue:14 -#: front/src/views/admin/library/LibraryDetail.vue:229 +#: front/src/views/admin/library/LibraryDetail.vue:248 +#: front/src/views/admin/library/TagDetail.vue:143 #: front/src/views/admin/library/TracksList.vue:24 +#: front/src/views/admin/moderation/AccountsDetail.vue:374 +#: front/src/views/admin/moderation/DomainsDetail.vue:311 +#: front/src/views/content/Base.vue:8 src/views/content/libraries/Detail.vue:8 +#: front/src/views/playlists/Detail.vue:76 src/views/radios/Detail.vue:34 msgctxt "*/*/*" msgid "Tracks" msgstr "المَقاطÙع" @@ -4569,78 +5053,64 @@ msgctxt "Content/Artist/Title" msgid "Tracks by this artist" msgstr "مَقاطÙع لهذا الÙنان" -#: front/src/components/instance/Stats.vue:25 -msgctxt "Content/About/Paragraph/Unit" -msgid "Tracks favorited" -msgstr "مَقاطÙع تم الإعجاب بها" - -#: front/src/components/instance/Stats.vue:19 -msgctxt "Content/About/Paragraph/Unit" -msgid "tracks listened" -msgstr "مَقاطÙع أستÙÙ…Ùع إليها" - #: front/src/components/library/radios/Filter.vue:44 msgctxt "Popup/Radio/Title/Noun" msgid "Tracks matching filter" msgstr "مقطع يناسب عامل التصÙية" #: front/src/components/library/TrackDetail.vue:57 +#: front/src/components/manage/moderation/ReportCard.vue:134 #: front/src/views/admin/library/UploadDetail.vue:250 +#: front/src/views/admin/moderation/AccountsDetail.vue:181 msgctxt "Content/Track/Table.Label/Noun" msgid "Type" msgstr "النوع" -#: front/src/views/admin/moderation/AccountsDetail.vue:180 -msgctxt "Content/Moderation/Table.Label/Noun" -msgid "Type" -msgstr "النوع" - #: front/src/components/manage/moderation/AccountsTable.vue:44 -#: front/src/components/manage/moderation/DomainsTable.vue:42 +#: front/src/components/manage/moderation/DomainsTable.vue:50 msgctxt "Content/Moderation/Table.Label/Short" msgid "Under moderation rule" msgstr "تØديث قاعدة الإشراÙ" -#: front/src/views/content/remote/Card.vue:109 -#: src/views/content/remote/Card.vue:114 +#: front/src/components/ShortcutsModal.vue:68 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Unfocus searchbar" +msgstr "" + +#: front/src/views/content/remote/Card.vue:122 +#: src/views/content/remote/Card.vue:127 msgctxt "*/Library/Button.Label/Verb" msgid "Unfollow" msgstr "إلغاء المتابعة" -#: front/src/views/content/remote/Card.vue:110 +#: front/src/views/content/remote/Card.vue:123 msgctxt "Popup/Library/Title" msgid "Unfollow this library?" msgstr "أتريد إلغاء متابعة هذه المكتبة؟" -#: front/src/components/About.vue:17 -msgctxt "Content/About/Paragraph" -msgid "" -"Unfortunately, the owners of this instance did not yet take the time to " -"complete this page." -msgstr "" -"لسوء الØظ، لم يأخذ أصØاب مثيل الخادوم هذا الوقت الكاÙÙŠ لاستكمال هذه الصÙØØ©." - #: front/src/components/federation/FetchButton.vue:54 #: front/src/components/federation/FetchButton.vue:55 -msgctxt "*/*/Error" -msgid "Unknowkn error" -msgstr "" - #: front/src/components/library/ImportStatusModal.vue:144 -msgctxt "Popup/Import/Error.Label" -msgid "Unkwown error" +msgctxt "*/*/Error" +msgid "Unknown error" msgstr "" -#: front/src/components/Home.vue:37 -msgctxt "Content/Home/Title" -msgid "Unlimited music" -msgstr "موسيقى بلا Øدود" - -#: front/src/components/audio/Player.vue:630 +#: front/src/components/audio/Player.vue:656 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Unmute" msgstr "إلغاء الكتم" +#: front/src/components/manage/moderation/ReportCard.vue:225 +msgctxt "Content/*/Button.Label" +msgid "Unresolve" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:67 +#: front/src/views/admin/moderation/ReportsList.vue:23 +msgctxt "Content/*/*/Short" +msgid "Unresolved" +msgstr "" + #: front/src/components/manage/moderation/InstancePolicyForm.vue:57 msgctxt "Content/Moderation/Card.Button.Label/Verb" msgid "Update" @@ -4704,12 +5174,8 @@ msgstr "تاريخ التØميل" #: front/src/components/library/FileUpload.vue:258 msgctxt "Content/Library/Help text" -msgid "" -"Upload denied, ensure the file is not too big and that you have not reached " -"your quota" -msgstr "" -"تم رÙض الإرسال، تØقق أن Øجم المل٠ليس ضخما Ùˆ أنّ مساØØ© التخرين Ø§Ù„Ù…Ø³Ù…ÙˆØ Ø¨Ù‡Ø§ " -"كاÙية" +msgid "Upload denied, ensure the file is not too big and that you have not reached your quota" +msgstr "تم رÙض الإرسال، تØقق أن Øجم المل٠ليس ضخما Ùˆ أنّ مساØØ© التخرين Ø§Ù„Ù…Ø³Ù…ÙˆØ Ø¨Ù‡Ø§ كاÙية" #: front/src/components/library/ImportStatusModal.vue:8 msgctxt "Popup/Import/Message" @@ -4718,20 +5184,18 @@ msgstr "" #: front/src/views/content/Home.vue:7 msgctxt "Content/Library/Paragraph" -msgid "" -"Upload music files (MP3, OGG, FLAC, etc.) from your personal library " -"directly from your browser to enjoy them here." -msgstr "" -"ارسل ملÙات موسيقية (MP3, OGG, FLAC, etc.) Ù…ÙÙ† مكتبتك الشخصية مباشرة Ù…ÙÙ† " -"متصÙØÙƒ للإستمتاع بها هنا." +msgid "Upload music files (MP3, OGG, FLAC, etc.) from your personal library directly from your browser to enjoy them here." +msgstr "ارسل ملÙات موسيقية (MP3, OGG, FLAC, etc.) Ù…ÙÙ† مكتبتك الشخصية مباشرة Ù…ÙÙ† متصÙØÙƒ للاستمتاع بها هنا." #: front/src/components/library/FileUpload.vue:30 msgctxt "Content/Library/Title/Verb" msgid "Upload new tracks" msgstr "إرسال مقاطع موسيقية جديدة" -#: front/src/views/admin/moderation/AccountsDetail.vue:298 -msgctxt "Content/Moderation/Table.Label/Noun" +#: front/src/components/About.vue:99 +#: front/src/views/admin/moderation/AccountsDetail.vue:309 +#, fuzzy +msgctxt "*/*/*" msgid "Upload quota" msgstr "Øصة التØميل" @@ -4742,15 +5206,13 @@ msgstr "انتهت مهلة الإرسال، الرجاء إعادة المØا #: front/src/components/library/ImportStatusModal.vue:14 msgctxt "Popup/Import/Message" -msgid "" -"Upload was skipped because a similar one is already available in one of your" -" libraries." +msgid "Upload was skipped because a similar one is already available in one of your libraries." msgstr "" #: front/src/components/library/ImportStatusModal.vue:11 msgctxt "Popup/Import/Message" msgid "Upload was successfully processed by the server." -msgstr "" +msgstr "تم تØميله Ø¨Ù†Ø¬Ø§Ø Ø¹Ù„Ù‰ الخادم." #: front/src/components/library/FileUpload.vue:109 msgctxt "Content/Library/Table" @@ -4767,35 +5229,25 @@ msgctxt "Content/Library/Table" msgid "Uploading…" msgstr "الإرسال جارÙ…" +#: front/src/components/manage/library/LibrariesTable.vue:52 +#: front/src/components/manage/moderation/AccountsTable.vue:41 +#: front/src/components/mixins/Translations.vue:75 +#: front/src/views/admin/library/AlbumDetail.vue:258 +#: front/src/views/admin/library/ArtistDetail.vue:246 #: front/src/views/admin/library/Base.vue:20 +#: front/src/views/admin/library/LibraryDetail.vue:258 +#: front/src/views/admin/library/TrackDetail.vue:310 #: front/src/views/admin/library/UploadsList.vue:24 +#: front/src/views/admin/moderation/AccountsDetail.vue:349 +#: front/src/views/admin/moderation/DomainsDetail.vue:281 +#: front/src/components/mixins/Translations.vue:76 msgctxt "*/*/*" msgid "Uploads" msgstr "المÙرسَلة" -#: front/src/components/manage/moderation/AccountsTable.vue:41 -#: front/src/components/mixins/Translations.vue:63 -#: front/src/views/admin/library/AlbumDetail.vue:242 -#: front/src/views/admin/library/ArtistDetail.vue:231 -#: front/src/views/admin/library/LibraryDetail.vue:239 -#: front/src/views/admin/library/TrackDetail.vue:294 -#: front/src/views/admin/moderation/AccountsDetail.vue:337 -#: front/src/views/admin/moderation/DomainsDetail.vue:244 -#: front/src/components/mixins/Translations.vue:64 -msgctxt "Content/Moderation/Table.Label/Noun" -msgid "Uploads" -msgstr "المÙرسَلة" - -#: front/src/components/manage/library/LibrariesTable.vue:52 -msgctxt "Content/*/*/Noun" -msgid "Uploads" -msgstr "المÙرسَلة" - #: front/src/components/auth/ApplicationForm.vue:16 msgctxt "Content/Applications/Help Text" -msgid "" -"Use \"urn:ietf:wg:oauth:2.0:oob\" as a redirect URI if your application is " -"not served on the web." +msgid "Use \"urn:ietf:wg:oauth:2.0:oob\" as a redirect URI if your application is not served on the web." msgstr "" #: front/src/components/Footer.vue:16 @@ -4803,20 +5255,29 @@ msgctxt "Footer/*/List item.Link" msgid "Use another instance" msgstr "إستخدم مثيل خادوم آخَر" +#: front/src/components/Home.vue:146 +msgctxt "Content/Home/Link" +msgid "Use Funkwhale on other devices with our apps" +msgstr "" + +#: front/src/components/moderation/ReportModal.vue:44 +msgctxt "*/*/Field,Help" +msgid "Use this field to provide additional context to the moderator that will handle your report." +msgstr "" + #: front/src/views/auth/PasswordReset.vue:12 msgctxt "Content/Signup/Paragraph" -msgid "" -"Use this form to request a password reset. We will send an email to the " -"given address with instructions to reset your password." +msgid "Use this form to request a password reset. We will send an email to the given address with instructions to reset your password." +msgstr "استخدم هذه الاستمارة لطلب إعادة ضبط كلمة المرور. سنرسل بريدا إلكترونيا إلى العنوان المعين مرÙوقا بتعليمات لإعادة ضبط كلمتك السرية." + +#: front/src/components/moderation/ReportModal.vue:18 +msgctxt "*/Moderation/Popup,Paragraph" +msgid "Use this form to submit a report to our moderation team." msgstr "" -"استخدم هذه الاستمارة لطلب إعادة ضبط كلمة المرور. سنرسل بريدا إلكترونيا إلى " -"العنوان المعين مرÙوقا بتعليمات لإعادة ضبط كلمتك السرية." #: front/src/components/manage/moderation/InstancePolicyForm.vue:111 msgctxt "Content/Moderation/Help text" -msgid "" -"Use this setting to temporarily enable/disable the policy without completely" -" removing it." +msgid "Use this setting to temporarily enable/disable the policy without completely removing it." msgstr "" #: front/src/components/manage/users/InvitationsTable.vue:49 @@ -4824,15 +5285,27 @@ msgctxt "Content/Admin/Table" msgid "Used" msgstr "Ù…Ùستخدَم" +#: front/src/components/Home.vue:125 +msgctxt "Content/Home/Header" +msgid "Useful links" +msgstr "" + #: front/src/views/content/libraries/Detail.vue:26 msgctxt "Content/Library/Table.Label" msgid "User" msgstr "المستخدÙÙ…" -#: front/src/components/instance/Stats.vue:5 -msgctxt "Content/About/Title/Noun" -msgid "User activity" -msgstr "نشاط المستخدÙÙ…" +#: front/src/components/Home.vue:154 +#, fuzzy +msgctxt "Content/Home/Link" +msgid "User guides" +msgstr "مكتبات المستخدÙÙ…" + +#: front/src/views/admin/Settings.vue:88 +#, fuzzy +msgctxt "Content/Admin/Menu" +msgid "User Interface" +msgstr "إسم المستخدÙÙ…" #: front/src/components/library/AlbumDetail.vue:26 #: front/src/components/library/ArtistDetail.vue:39 @@ -4846,35 +5319,35 @@ msgctxt "Content/Radio/Title" msgid "User radios" msgstr "إذاعات المستخدÙمين" -#: front/src/components/auth/Signup.vue:19 +#: front/src/components/auth/SignupForm.vue:15 #: front/src/components/manage/users/UsersTable.vue:37 -#: front/src/components/mixins/Translations.vue:59 +#: front/src/components/mixins/Translations.vue:71 #: front/src/views/admin/moderation/AccountsDetail.vue:114 -#: front/src/components/mixins/Translations.vue:60 +#: front/src/components/mixins/Translations.vue:72 msgctxt "Content/*/*" msgid "Username" msgstr "إسم المستخدÙÙ…" -#: front/src/components/auth/Login.vue:15 +#: front/src/components/auth/LoginForm.vue:11 msgctxt "Content/Login/Input.Label/Noun" msgid "Username or email" msgstr "اسم المستخدÙÙ… أو عنوان البريد الإلكتروني" -#: front/src/components/instance/Stats.vue:13 -msgctxt "Content/About/Paragraph/Unit" -msgid "users" -msgstr "مستخدÙÙ…" - -#: front/src/components/Sidebar.vue:102 -#: front/src/components/manage/moderation/DomainsTable.vue:39 -#: front/src/components/mixins/Translations.vue:61 +#: front/src/components/Sidebar.vue:106 +#: front/src/components/manage/moderation/DomainsTable.vue:47 +#: front/src/components/mixins/Translations.vue:73 #: src/views/admin/Settings.vue:81 front/src/views/admin/users/Base.vue:5 #: src/views/admin/users/UsersList.vue:21 -#: front/src/components/mixins/Translations.vue:62 +#: front/src/components/mixins/Translations.vue:74 msgctxt "*/*/*/Noun" msgid "Users" msgstr "المستخدÙمون" +#: front/src/components/Home.vue:110 +msgctxt "Content/Home/Paragraph" +msgid "Users on this pod also get %{ quota } of free storage to upload their own content!" +msgstr "" + #: front/src/components/Footer.vue:29 msgctxt "Footer/*/Title" msgid "Using Funkwhale" @@ -4892,45 +5365,60 @@ msgctxt "Content/Library/Link/Verb" msgid "View files" msgstr "عرض الملÙات" -#: front/src/components/library/AlbumBase.vue:81 -#: front/src/components/library/ArtistBase.vue:92 -#: front/src/components/library/TrackBase.vue:100 -#: front/src/views/admin/library/AlbumDetail.vue:42 -#: front/src/views/admin/library/ArtistDetail.vue:41 +#: front/src/components/library/AlbumBase.vue:95 +#: front/src/components/library/ArtistBase.vue:107 +#: front/src/components/library/TrackBase.vue:111 +#: front/src/views/admin/library/AlbumDetail.vue:48 +#: front/src/views/admin/library/ArtistDetail.vue:46 #: front/src/views/admin/library/LibraryDetail.vue:34 #: front/src/views/admin/library/LibraryDetail.vue:45 -#: front/src/views/admin/library/TrackDetail.vue:41 +#: front/src/views/admin/library/TagDetail.vue:32 +#: front/src/views/admin/library/TrackDetail.vue:47 #: front/src/views/admin/library/UploadDetail.vue:35 #: front/src/views/admin/library/UploadDetail.vue:46 #: front/src/views/admin/moderation/AccountsDetail.vue:37 #: front/src/views/admin/moderation/AccountsDetail.vue:45 +#: front/src/views/admin/moderation/DomainsDetail.vue:30 msgctxt "Content/Moderation/Link/Verb" msgid "View in Django's admin" msgstr "" -#: front/src/components/library/AlbumBase.vue:61 -#: front/src/components/library/ArtistBase.vue:72 -#: front/src/components/library/TrackBase.vue:80 +#: front/src/components/Home.vue:169 +#, fuzzy +msgctxt "Content/Home/Link" +msgid "View more…" +msgstr "جار٠تØميل المتابÙعين…" + +#: front/src/components/library/AlbumBase.vue:62 +#: front/src/components/library/ArtistBase.vue:73 +#: front/src/components/library/TrackBase.vue:78 #: front/src/components/metadata/ArtistCard.vue:49 #: front/src/components/metadata/ReleaseCard.vue:53 msgctxt "Content/*/*/Clickable, Verb" msgid "View on MusicBrainz" msgstr "إطّلع عليه على ميوزيك براينز" +#: front/src/components/manage/moderation/ReportCard.vue:124 +msgctxt "Content/Moderation/Link" +msgid "View public page" +msgstr "" + #: front/src/components/manage/library/LibrariesTable.vue:11 #: front/src/components/manage/library/LibrariesTable.vue:51 #: front/src/components/manage/library/UploadsTable.vue:11 #: front/src/components/manage/library/UploadsTable.vue:63 #: front/src/views/admin/library/LibraryDetail.vue:94 #: front/src/views/admin/library/UploadDetail.vue:101 +#: front/src/views/content/libraries/Form.vue:18 msgctxt "*/*/*" msgid "Visibility" msgstr "المشاهدة" -#: front/src/views/content/libraries/Form.vue:18 -msgctxt "Content/Library/Dropdown.Label" -msgid "Visibility" -msgstr "المشاهدة" +#: front/src/components/Home.vue:91 +#, fuzzy +msgctxt "Content/Home/Link" +msgid "Visit funkwhale.audio" +msgstr "لاستخدام Funkwhale" #: front/src/components/library/AlbumDetail.vue:4 msgctxt "Content/Album/" @@ -4942,7 +5430,13 @@ msgctxt "Popup/*/Loading.Title" msgid "Waiting for result…" msgstr "جار٠تØميل Ù…Ùضلاتك…" -#: front/src/components/auth/Login.vue:7 +#: front/src/components/auth/Settings.vue:285 +#, fuzzy +msgctxt "Content/Settings/Error message.Title" +msgid "We cannot delete your account" +msgstr "تعذر علينا تسجيل دخولك" + +#: front/src/components/auth/LoginForm.vue:3 msgctxt "Content/Login/Error message.Title" msgid "We cannot log you in" msgstr "تعذر علينا تسجيل دخولك" @@ -4952,42 +5446,37 @@ msgctxt "Content/*/Error message.Title" msgid "We cannot save your changes" msgstr "لا يمكننا إنشاء Øسابك" -#: front/src/components/Home.vue:122 -msgctxt "Content/Home/List item" -msgid "We do not track you or bother you with ads" -msgstr "لا نتعقّبك Ùˆ لا نزعجك بالإعلانات" +#: front/src/views/Notifications.vue:39 +msgctxt "Content/Notifications/Paragraph" +msgid "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!" +msgstr "" #: front/src/components/library/FileUpload.vue:39 msgctxt "Content/Library/Link" msgid "We recommend using Picard for that purpose." msgstr "ننصØكم باستخدام برنامج Picard لهذا الغرض." -#: front/src/components/Home.vue:7 -msgctxt "Content/Home/Title" -msgid "We think listening to music should be simple." -msgstr "نعتقد أنّ الاستماع إلى الموسيقى ينبغي أن يكون سهلًا." +#: front/src/components/moderation/ReportModal.vue:35 +msgctxt "*/*/Field,Help" +msgid "We'll use this email if we need to contact you regarding this report." +msgstr "" -#: front/src/components/Home.vue:148 +#: front/src/components/Home.vue:207 msgctxt "Head/Home/Title" msgid "Welcome" msgstr "مرØبًا" #: front/src/components/Home.vue:5 -msgctxt "Content/Home/Title/Verb" -msgid "Welcome on Funkwhale" -msgstr "أهلا وسهلا بك على Ùانك وايل Funkwhale" - -#: front/src/components/Home.vue:24 -msgctxt "Content/Home/Title" -msgid "Why funkwhale?" -msgstr "لماذا Ùانك وايل Funkwhale ØŸ" +msgctxt "Content/Home/Header" +msgid "Welcome to %{ podName }!" +msgstr "" -#: front/src/components/audio/EmbedWizard.vue:13 +#: front/src/components/audio/EmbedWizard.vue:23 msgctxt "Popup/Embed/Input.Label" msgid "Widget height" msgstr "طول الودجات" -#: front/src/components/audio/EmbedWizard.vue:6 +#: front/src/components/audio/EmbedWizard.vue:16 msgctxt "Popup/Embed/Input.Label" msgid "Widget width" msgstr "عرض الودجات" @@ -5007,9 +5496,11 @@ msgctxt "Content/OAuth Scopes/Help Text" msgid "Write-only access to user data" msgstr "" -#: front/src/components/Sidebar.vue:129 +#: front/src/components/Sidebar.vue:133 #: front/src/components/manage/moderation/AccountsTable.vue:72 -#: front/src/components/manage/moderation/DomainsTable.vue:58 +#: front/src/components/manage/moderation/DomainsTable.vue:12 +#: front/src/components/manage/moderation/DomainsTable.vue:69 +#: front/src/views/admin/moderation/DomainsDetail.vue:109 msgctxt "*/*/*" msgid "Yes" msgstr "نعم" @@ -5021,27 +5512,17 @@ msgstr "نعم، أؤكد الخروج !" #: front/src/views/content/libraries/Form.vue:19 msgctxt "Content/Library/Paragraph" -msgid "" -"You are able to share your library with other people, regardless of its " -"visibility." +msgid "You are able to share your library with other people, regardless of its visibility." msgstr "" #: front/src/components/library/FileUpload.vue:32 msgctxt "Content/Library/Paragraph" -msgid "" -"You are about to upload music to your library. Before proceeding, please " -"ensure that:" -msgstr "" -"إنك بصدد إرسال موسيقى إلى مكتبتك الصوتية. قبل المواصلة، ندعوك إلى التØقق من " -"أنّ:" +msgid "You are about to upload music to your library. Before proceeding, please ensure that:" +msgstr "إنك بصدد إرسال موسيقى إلى مكتبتك الصوتية. قبل المواصلة، ندعوك إلى التØقق من أنّ:" #: front/src/components/SetInstanceModal.vue:12 msgctxt "Popup/Login/Paragraph" -msgid "" -"You are currently connected to <a href=\"%{ url }\" target=\"_blank\">%{ " -"hostname } <i class=\"external icon\"/></a>. If you continue, you will " -"be disconnected from your current instance and all your local data will be " -"deleted." +msgid "You are currently connected to <a href=\"%{ url }\" target=\"_blank\">%{ hostname } <i class=\"external icon\"/></a>. If you continue, you will be disconnected from your current instance and all your local data will be deleted." msgstr "" #: front/src/components/library/ArtistDetail.vue:6 @@ -5056,12 +5537,8 @@ msgstr "أنت متّصل Øاليا بصÙØ© %{ username }" #: front/src/components/library/FileUpload.vue:35 msgctxt "Content/Library/List item" -msgid "" -"You are not uploading copyrighted content in a public library, otherwise you" -" may be infringing the law" -msgstr "" -"أنك لست بصدد تØميل Ù…Øتوى Ù…Øمي بØقوق التألي٠على مكتبة عامة ØŒ وإلا قد ØªØµØ¨Ø " -"مخالÙًا للقانون" +msgid "You are not uploading copyrighted content in a public library, otherwise you may be infringing the law" +msgstr "أنك لست بصدد تØميل Ù…Øتوى Ù…Øمي بØقوق التألي٠على مكتبة عامة ØŒ وإلا قد ØªØµØ¨Ø Ù…Ø®Ø§Ù„Ùًا للقانون" #: front/src/components/SetInstanceModal.vue:98 msgctxt "*/Instance/Message" @@ -5070,24 +5547,12 @@ msgstr "إنك الآن تستخدم خادم Funkwhale على %{ url }" #: front/src/views/content/Home.vue:17 msgctxt "Content/Library/Paragraph" -msgid "" -"You can follow libraries from other users to get access to new music. Public" -" libraries can be followed immediatly, while following a private library " -"requires approval from its owner." +msgid "You can 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." msgstr "" -#: front/src/components/Home.vue:128 -msgctxt "Content/Home/List item" -msgid "" -"You can invite friends and family to your instance so they can enjoy your " -"music" -msgstr "" -"يمكÙنك دعوة أصدقائك Ùˆ عائلتك للإنظمام إلى مثيل خادومك للإستمتاع بموسيقاك" - #: front/src/components/moderation/FilterModal.vue:31 msgctxt "Popup/Moderation/Paragraph" -msgid "" -"You can manage and update your filters anytime from your account settings." +msgid "You can manage and update your filters any time from your account settings." msgstr "" #: front/src/views/auth/EmailConfirm.vue:24 @@ -5095,20 +5560,19 @@ msgctxt "Content/Signup/Paragraph" msgid "You can now use the service without limitations." msgstr "بإمكانك الآن استعمال الخدمة Ù…ÙÙ† دون قيود." +#: front/src/components/auth/Settings.vue:278 +msgctxt "Content/Settings/Paragraph'" +msgid "You can permanently and irreversibly delete your account and all the associated data using the form below. You will be asked for confirmation." +msgstr "" + #: front/src/components/library/radios/Builder.vue:7 msgctxt "Content/Radio/Paragraph" -msgid "" -"You can use this interface to build your own custom radio, which will play " -"tracks according to your criteria." -msgstr "" -"يمكنك إنشاء قناتك الإذاعية الخاصة بك عبر هذه الواجهة Ùˆ تشغيل مقاطعك كيÙما " -"شئت." +msgid "You can use this interface to build your own custom radio, which will play tracks according to your criteria." +msgstr "يمكنك إنشاء قناتك الإذاعية الخاصة بك عبر هذه الواجهة Ùˆ تشغيل مقاطعك كيÙما شئت." #: front/src/components/auth/SubsonicTokenForm.vue:7 msgctxt "Content/Settings/Paragraph" -msgid "" -"You can use those to enjoy your playlist and music in offline mode, on your " -"smartphone or tablet, for instance." +msgid "You can use those to enjoy your playlist and music in offline mode, on your smartphone or tablet, for instance." msgstr "" #: front/src/components/auth/Settings.vue:202 @@ -5126,19 +5590,17 @@ msgctxt "Content/Moderation/Card.Title" msgid "You don't have any rule in place for this account." msgstr "ليس لديك أية قاعدة لهذا الØساب بعد." -#: front/src/views/admin/moderation/DomainsDetail.vue:39 +#: front/src/views/admin/moderation/DomainsDetail.vue:67 msgctxt "Content/Moderation/Card.Title" msgid "You don't have any rule in place for this domain." msgstr "ليس لديك أية قاعدة خاصة باسم النطاق هذا." #: front/src/components/library/EditForm.vue:52 msgctxt "Content/Library/Paragraph" -msgid "" -"You don't have the permission to edit this object, but you can suggest " -"changes. Once submitted, suggestions will be reviewed before approval." +msgid "You don't have the permission to edit this object, but you can suggest changes. Once submitted, suggestions will be reviewed before approval." msgstr "" -#: front/src/components/Sidebar.vue:171 +#: front/src/components/Sidebar.vue:175 msgctxt "Sidebar/Player/Title" msgid "You have a radio playing" msgstr "إنك تستمع إلى إذاعة" @@ -5150,8 +5612,7 @@ msgstr "ربما عندك مشكلة ÙÙŠ الاتصال." #: front/src/components/auth/Settings.vue:100 msgctxt "Popup/Settings/List item" -msgid "" -"You will be logged out from this session and have to log in with the new one" +msgid "You will be logged out from this session and have to log in with the new one" msgstr "" #: front/src/components/auth/Authorize.vue:51 @@ -5166,23 +5627,24 @@ msgstr "" #: front/src/components/auth/Settings.vue:71 msgctxt "Content/Settings/Paragraph" -msgid "" -"You will have to update your password on your clients that use this " -"password." +msgid "You will have to update your password on your clients that use this password." msgstr "يتوجب عليك تØديث كلمتك السرية على العملاء الآخرين اللذين يشتغلون بها." #: front/src/components/moderation/FilterModal.vue:20 msgctxt "Popup/Moderation/Paragraph" -msgid "" -"You will not see tracks, albums and user activity linked to this artist " -"anymore:" +msgid "You will not see tracks, albums and user activity linked to this artist any more:" msgstr "" -#: front/src/components/auth/Signup.vue:13 +#: front/src/components/auth/SignupForm.vue:9 msgctxt "Content/Signup/Form/Paragraph" msgid "Your account cannot be created." msgstr "لا يمكن إنشاء Øسابك." +#: front/src/components/auth/Settings.vue:281 +msgctxt "Content/Settings/Paragraph'" +msgid "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." +msgstr "" + #: front/src/components/auth/Settings.vue:215 msgctxt "Content/Settings/Title/Noun" msgid "Your applications" @@ -5193,6 +5655,11 @@ msgctxt "Content/Settings/Error message.Title" msgid "Your avatar cannot be saved" msgstr "" +#: front/src/components/auth/Settings.vue:527 +msgctxt "*/Auth/Message" +msgid "Your deletion request was submitted, your account and content will be deleted shortly" +msgstr "" + #: front/src/components/library/EditForm.vue:3 msgctxt "Content/Library/Paragraph" msgid "Your edit was successfully submitted." @@ -5203,12 +5670,13 @@ msgctxt "Head/Favorites/Title" msgid "Your Favorites" msgstr "Ù…Ùضّلاتك" -#: front/src/components/Home.vue:109 -msgctxt "Content/Home/Title" -msgid "Your music, your way" -msgstr "موسيقاك، كما ÙŠØلو لك" +#: front/src/views/Notifications.vue:5 +#, fuzzy +msgctxt "Content/Notifications/Title" +msgid "Your messages" +msgstr "الرسائل المÙرسَلة" -#: front/src/views/Notifications.vue:4 +#: front/src/views/Notifications.vue:69 msgctxt "Content/Notifications/Title" msgid "Your notifications" msgstr "إشعاراتك" @@ -5224,35 +5692,36 @@ msgid "Your password has been updated successfully." msgstr "تم تØديث كلمتك السرية بنجاØ." #: front/src/components/auth/Settings.vue:14 +#, fuzzy msgctxt "Content/Settings/Error message.Title" -msgid "Your settings can't be updateds" +msgid "Your settings can't be updated" msgstr "تم تØديث الإعدادات" #: front/src/components/auth/Settings.vue:101 msgctxt "Popup/Settings/List item" -msgid "" -"Your Subsonic password will be changed to a new, random one, logging you out" -" from devices that used the old Subsonic password" +msgid "Your Subsonic password will be changed to a new, random one, logging you out from devices that used the old Subsonic password" msgstr "" -#: front/src/edits.js:47 -msgctxt "*/*/*/Short, Noun" -msgid "Position" -msgstr "تتابÙع الصÙØات" +#: front/src/entities.js:126 +#, fuzzy +msgctxt "*/*/*/Noun" +msgid "MusicBrainz ID" +msgstr "إطّلع عليه على ميوزيك براينز" -#: front/src/edits.js:54 -msgctxt "Content/Track/*/Noun" -msgid "Copyright" -msgstr "الØقوق" +#: front/src/main.js:110 +msgctxt "*/Error/Paragraph" +msgid "You sent too many requests and have been rate limited, please try again in %{ delay }" +msgstr "" -#: front/src/components/library/AlbumBase.vue:183 +#: front/src/main.js:113 +msgctxt "*/Error/Paragraph" +msgid "You sent too many requests and have been rate limited, please try again later" +msgstr "" + +#: front/src/components/library/AlbumBase.vue:208 msgctxt "Content/Album/Header.Title" -msgid "" -"Album containing %{ count } track, by <a class=\"internal\" href=\"%{ " -"artistUrl }\">%{ artist }</a>" -msgid_plural "" -"Album containing %{ count } tracks, by <a class=\"internal\" href=\"%{ " -"artistUrl }\">%{ artist }</a>" +msgid "Album containing %{ count } track, by <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" +msgid_plural "Album containing %{ count } tracks, by <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" msgstr[0] "" msgstr[1] "" msgstr[2] "" @@ -5260,7 +5729,7 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: front/src/components/audio/PlayButton.vue:220 +#: front/src/components/audio/PlayButton.vue:246 msgctxt "*/Queue/Message" msgid "%{ count } track was added to your queue" msgid_plural "%{ count } tracks were added to your queue" diff --git a/front/locales/ca/LC_MESSAGES/app.po b/front/locales/ca/LC_MESSAGES/app.po new file mode 100644 index 0000000000000000000000000000000000000000..b233c72ff35f8f1ec481060414a1b834f13c9d79 --- /dev/null +++ b/front/locales/ca/LC_MESSAGES/app.po @@ -0,0 +1,5658 @@ +# Catalan translations for front package. +# Copyright (C) 2019 THE front'S COPYRIGHT HOLDER +# This file is distributed under the same license as the front package. +# Automatically generated, 2019. +# +msgid "" +msgstr "" +"Project-Id-Version: front 0.1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-10-01 15:15+0200\n" +"PO-Revision-Date: 2019-06-19 07:58+0000\n" +"Last-Translator: Xaloc <xaloc@tutanota.com>\n" +"Language-Team: none\n" +"Language: ca\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 3.2.2\n" + +#: front/src/components/playlists/PlaylistModal.vue:9 +msgctxt "Popup/Playlist/Paragraph" +msgid "\"%{ title }\", by %{ artist }" +msgstr "\"%{ title }\", de %{ artist }" + +#: front/src/components/Sidebar.vue:24 +msgctxt "Sidebar/Queue/Tab.Title" +msgid "(%{ index } of %{ length })" +msgstr "(%{ index } de %{ length })" + +#: front/src/components/Sidebar.vue:22 +msgctxt "Sidebar/Queue/Tab.Title" +msgid "(empty)" +msgstr "(buit)" + +#: front/src/components/auth/Authorize.vue:16 +msgctxt "Content/Auth/Title" +msgid "%{ app } wants to access your Funkwhale account" +msgstr "%{ app } vol accedir al vostre compte Funkwhale" + +#: front/src/components/About.vue:173 src/components/Home.vue:56 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } active user" +msgid_plural "%{ count } active users" +msgstr[0] "%{ count } pista" +msgstr[1] "%{ count } pistes" + +#: front/src/components/About.vue:182 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } albums" +msgid_plural "%{ count } albums" +msgstr[0] "%{ count } pista" +msgstr[1] "%{ count } pistes" + +#: front/src/components/About.vue:152 +msgctxt "*/*/*" +msgid "%{ count } allowed domains" +msgid_plural "%{ count } allowed domains" +msgstr[0] "" +msgstr[1] "" + +#: front/src/components/About.vue:179 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } artists" +msgid_plural "%{ count } artists" +msgstr[0] "%{ count } pista" +msgstr[1] "%{ count } pistes" + +#: front/src/components/About.vue:176 src/components/Home.vue:59 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } hour of music" +msgid_plural "%{ count } hours of music" +msgstr[0] "%{ count } pista" +msgstr[1] "%{ count } pistes" + +#: front/src/components/About.vue:188 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } listenings" +msgid_plural "%{ count } listenings" +msgstr[0] "%{ count } pista" +msgstr[1] "%{ count } pistes" + +#: front/src/components/common/ActionTable.vue:68 +msgctxt "Content/*/Paragraph" +msgid "%{ count } on %{ total } selected" +msgid_plural "%{ count } on %{ total } selected" +msgstr[0] "%{ count } de %{ total } seleccionat" +msgstr[1] "%{ count } de %{ total } seleccionats" + +#: front/src/components/Sidebar.vue:125 src/components/audio/album/Card.vue:52 +#: front/src/views/content/libraries/Card.vue:40 +#: src/views/content/remote/Card.vue:43 +msgctxt "*/*/*" +msgid "%{ count } track" +msgid_plural "%{ count } tracks" +msgstr[0] "%{ count } pista" +msgstr[1] "%{ count } pistes" + +#: front/src/components/library/ArtistBase.vue:13 +msgctxt "Content/Artist/Paragraph" +msgid "%{ count } track in %{ albumsCount } albums" +msgid_plural "%{ count } tracks in %{ albumsCount } albums" +msgstr[0] "%{ count } pista dins %{ albumsCount } à lbums" +msgstr[1] "%{ count } pistes dins %{ albumsCount } à lbums" + +#: front/src/components/library/radios/Builder.vue:81 +msgctxt "Content/Radio/Table.Paragraph/Short" +msgid "%{ count } track matching combined filters" +msgid_plural "%{ count } tracks matching combined filters" +msgstr[0] "%{ count } pista corresponent als filtres seleccionats" +msgstr[1] "%{ count } pistes corresponents als filtres seleccionats" + +#: front/src/components/About.vue:185 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } tracks" +msgid_plural "%{ count } tracks" +msgstr[0] "%{ count } pista" +msgstr[1] "%{ count } pistes" + +#: front/src/components/playlists/Card.vue:28 +msgctxt "Content/*/Card/List item" +msgid "%{ count} track" +msgid_plural "%{ count } tracks" +msgstr[0] "%{ count} pista" +msgstr[1] "%{ count } pistes" + +#: front/src/views/content/libraries/Quota.vue:11 +msgctxt "Content/Library/Paragraph" +msgid "%{ current } used on %{ max } allowed" +msgstr "%{ current } usats del %{ max } permesos" + +#: front/src/components/common/Duration.vue:2 +msgctxt "Content/*/Paragraph" +msgid "%{ hours } h %{ minutes } min" +msgstr "%{ hours } h %{ minutes } min" + +#: front/src/components/common/Duration.vue:5 +msgctxt "Content/*/Paragraph" +msgid "%{ minutes } min" +msgstr "%{ minutes } min" + +#: front/src/components/notifications/NotificationRow.vue:40 +msgctxt "Content/Notifications/Paragraph" +msgid "%{ username } accepted your follow on library \"%{ library }\"" +msgstr "%{ username } ha acceptat el seguiment de la biblioteca \"%{ library }\"" + +#: front/src/components/notifications/NotificationRow.vue:39 +msgctxt "Content/Notifications/Paragraph" +msgid "%{ username } followed your library \"%{ library }\"" +msgstr "%{ username } ha seguit la teva biblioteca \"%{ library }\"" + +#: front/src/components/notifications/NotificationRow.vue:41 +msgctxt "Content/Notifications/Paragraph" +msgid "%{ username } wants to follow your library \"%{ library }\"" +msgstr "%{ username } vol seguir la teva biblioteca \"%{ library }\"" + +#: front/src/components/auth/Profile.vue:46 +msgctxt "Head/Profile/Title" +msgid "%{ username }'s profile" +msgstr "Perfil de %{ username }" + +#: front/src/components/playlists/PlaylistModal.vue:21 +msgctxt "Popup/Playlist/Paragraph" +msgid "<strong>%{ track }</strong> is already in <strong>%{ playlist }</strong>." +msgstr "<strong>%{ track }</strong> ja és a <strong>%{ playlist }</strong>." + +#: front/src/components/audio/artist/Card.vue:11 +msgctxt "Content/Artist/Card" +msgid "1 album" +msgid_plural "%{ count } albums" +msgstr[0] "1 à lbum" +msgstr[1] "%{ count } à lbums" + +#: front/src/components/favorites/List.vue:10 +msgctxt "Content/Favorites/Title" +msgid "1 favorite" +msgid_plural "%{ count } favorites" +msgstr[0] "1 favorit" +msgstr[1] "%{ count } favorits" + +#: front/src/components/audio/artist/Card.vue:15 +#, fuzzy +msgctxt "Content/Artist/Card" +msgid "1 track" +msgid_plural "%{ count } tracks" +msgstr[0] "Afegir pista" +msgstr[1] "Afegir pista" + +#: front/src/views/Notifications.vue:21 src/views/Notifications.vue:55 +msgctxt "*/*/*" +msgid "30 days" +msgstr "" + +#: front/src/views/Notifications.vue:22 src/views/Notifications.vue:56 +msgctxt "*/*/*" +msgid "60 days" +msgstr "" + +#: front/src/views/Notifications.vue:23 src/views/Notifications.vue:57 +msgctxt "*/*/*" +msgid "90 days" +msgstr "" + +#: front/src/components/library/FileUpload.vue:264 +#, fuzzy +msgctxt "Content/Library/Help text" +msgid "A network error occurred while uploading this file" +msgstr "S'ha produït un error al pujar aquest fitxer" + +#: front/src/components/library/EditForm.vue:161 +msgctxt "*/*/Placeholder" +msgid "A short summary describing your changes." +msgstr "Una breu resum descrivint els teus canvis." + +#: front/src/components/About.vue:5 +#, fuzzy +msgctxt "Content/Home/Header" +msgid "About %{ podName }" +msgstr "Quant a %{ instance }" + +#: front/src/components/Footer.vue:6 +msgctxt "Footer/About/Title" +msgid "About %{instanceName}" +msgstr "Quant a %{instanceName}" + +#: front/src/components/Footer.vue:53 src/components/Home.vue:85 +msgctxt "Footer/*/Title/Short" +msgid "About Funkwhale" +msgstr "Quant a Funkwhale" + +#: front/src/components/Footer.vue:10 +msgctxt "Footer/About/List item.Link" +msgid "About page" +msgstr "Pà gina d’informació" + +#: front/src/components/Home.vue:19 +#, fuzzy +msgctxt "Content/Home/Header" +msgid "About this Funkwhale pod" +msgstr "Quant a Funkwhale" + +#: front/src/components/About.vue:21 src/components/About.vue:51 +#, fuzzy +msgctxt "Content/About/Header" +msgid "About this pod" +msgstr "Quant a aquesta instà ncia" + +#: front/src/views/content/libraries/Detail.vue:48 +msgctxt "Content/Library/Button.Label" +msgid "Accept" +msgstr "Acceptar" + +#: front/src/views/content/libraries/Detail.vue:40 +msgctxt "Content/Library/Table/Short" +msgid "Accepted" +msgstr "Acceptat" + +#: front/src/components/auth/SubsonicTokenForm.vue:117 +msgctxt "Content/Settings/Message" +msgid "Access disabled" +msgstr "Accés desactivat" + +#: front/src/components/mixins/Translations.vue:85 +#: front/src/components/mixins/Translations.vue:86 +msgctxt "Content/OAuth Scopes/Paragraph" +msgid "Access to audio files, libraries, artists, albums and tracks" +msgstr "Accés als arxius d'à udio, biblioteques, artistes, à lbums i cançons" + +#: front/src/components/mixins/Translations.vue:109 +#: front/src/components/mixins/Translations.vue:110 +msgctxt "Content/OAuth Scopes/Paragraph" +msgid "Access to content filters" +msgstr "Accés als filtres de contingut" + +#: front/src/components/mixins/Translations.vue:117 +#: front/src/components/mixins/Translations.vue:118 +msgctxt "Content/OAuth Scopes/Paragraph" +msgid "Access to edits" +msgstr "Accés deshabilitat" + +#: front/src/components/mixins/Translations.vue:81 +#: front/src/components/mixins/Translations.vue:82 +msgctxt "Content/OAuth Scopes/Paragraph" +msgid "Access to email, username, and profile information" +msgstr "Accés al correu, nom d'usuari i informació del perfil" + +#: front/src/components/mixins/Translations.vue:89 +#: front/src/components/mixins/Translations.vue:90 +msgctxt "Content/OAuth Scopes/Paragraph" +msgid "Access to favorites" +msgstr "Accés a favorits" + +#: front/src/components/mixins/Translations.vue:97 +#: front/src/components/mixins/Translations.vue:98 +msgctxt "Content/OAuth Scopes/Paragraph" +msgid "Access to follows" +msgstr "Accés als seguidors" + +#: front/src/components/mixins/Translations.vue:93 +#: front/src/components/mixins/Translations.vue:94 +msgctxt "Content/OAuth Scopes/Paragraph" +msgid "Access to listening history" +msgstr "Accés a l'historial de reproduccions" + +#: front/src/components/mixins/Translations.vue:113 +#: front/src/components/mixins/Translations.vue:114 +msgctxt "Content/OAuth Scopes/Paragraph" +msgid "Access to notifications" +msgstr "Accés a les notificacions" + +#: front/src/components/mixins/Translations.vue:101 +#: front/src/components/mixins/Translations.vue:102 +msgctxt "Content/OAuth Scopes/Paragraph" +msgid "Access to playlists" +msgstr "Accés a la llista de reproducció" + +#: front/src/components/mixins/Translations.vue:105 +#: front/src/components/mixins/Translations.vue:106 +msgctxt "Content/OAuth Scopes/Paragraph" +msgid "Access to radios" +msgstr "Accés a les rà dios" + +#: front/src/components/manage/library/UploadsTable.vue:67 +#: front/src/components/mixins/Translations.vue:55 +#: front/src/views/admin/library/UploadDetail.vue:175 +#: front/src/components/mixins/Translations.vue:56 +msgctxt "Content/*/*/Noun" +msgid "Accessed date" +msgstr "Data d'accés" + +#: front/src/components/manage/library/LibrariesTable.vue:49 +#: front/src/components/manage/library/UploadsTable.vue:61 +#: front/src/components/manage/moderation/ReportCard.vue:156 +#: front/src/components/mixins/Report.vue:13 +#: front/src/views/admin/library/LibraryDetail.vue:113 +#: front/src/views/admin/library/UploadDetail.vue:111 +#: front/src/components/mixins/Report.vue:14 +msgctxt "*/*/*/Noun" +msgid "Account" +msgstr "Compte" + +#: front/src/views/admin/moderation/AccountsDetail.vue:107 +msgctxt "Content/Moderation/Title" +msgid "Account data" +msgstr "Dades del compte" + +#: front/src/components/auth/Settings.vue:5 +msgctxt "Content/Settings/Title" +msgid "Account settings" +msgstr "Configuració del compte" + +#: front/src/components/auth/Settings.vue:544 +msgctxt "Head/Settings/Title" +msgid "Account Settings" +msgstr "Configuració del compte" + +#: front/src/components/manage/users/UsersTable.vue:39 +msgctxt "Content/Admin/Table.Label/Short, Noun" +msgid "Account status" +msgstr "Estat del compte" + +#: front/src/views/auth/PasswordReset.vue:14 +msgctxt "Content/Signup/Input.Label" +msgid "Account's email" +msgstr "Correu del compte" + +#: front/src/views/admin/moderation/AccountsList.vue:3 +#: front/src/views/admin/moderation/AccountsList.vue:24 +#: front/src/views/admin/moderation/Base.vue:11 +msgctxt "*/Moderation/Title" +msgid "Accounts" +msgstr "Comptes" + +#: front/src/views/content/libraries/Detail.vue:29 +msgctxt "Content/Library/Table.Label" +msgid "Action" +msgstr "Acció" + +#: front/src/components/common/ActionTable.vue:101 +msgctxt "Content/*/Paragraph" +msgid "Action %{ action } was launched successfully on %{ count } element" +msgid_plural "Action %{ action } was launched successfully on %{ count } elements" +msgstr[0] "L'acció %{ action } està en marxa en %{ count } element" +msgstr[1] "L'acció %{ action } està en marxa en %{ count } elements" + +#: front/src/components/common/ActionTable.vue:22 +#: front/src/components/library/radios/Builder.vue:65 +#: front/src/components/manage/moderation/ReportCard.vue:210 +msgctxt "Content/*/*/Noun" +msgid "Actions" +msgstr "Accions" + +#: front/src/components/manage/users/UsersTable.vue:54 +msgctxt "Content/Admin/Table" +msgid "Active" +msgstr "Actiu" + +#: front/src/views/admin/library/AlbumDetail.vue:140 +#: front/src/views/admin/library/ArtistDetail.vue:128 +#: front/src/views/admin/library/LibraryDetail.vue:147 +#: front/src/views/admin/library/TagDetail.vue:83 +#: front/src/views/admin/library/TrackDetail.vue:192 +#: front/src/views/admin/library/UploadDetail.vue:160 +#: front/src/views/admin/moderation/AccountsDetail.vue:221 +#: front/src/views/admin/moderation/DomainsDetail.vue:173 +msgctxt "Content/Moderation/Title" +msgid "Activity" +msgstr "Activitat" + +#: front/src/components/mixins/Translations.vue:7 +#: front/src/components/mixins/Translations.vue:8 +msgctxt "Content/Settings/Dropdown.Label/Noun" +msgid "Activity visibility" +msgstr "Visualitzar l'activitat" + +#: front/src/views/admin/moderation/DomainsList.vue:22 +msgctxt "Content/Moderation/Button/Verb" +msgid "Add" +msgstr "Afegir" + +#: front/src/views/admin/moderation/DomainsList.vue:13 +msgctxt "Content/Moderation/Form.Label/Verb" +msgid "Add a domain" +msgstr "Afegir un domini" + +#: front/src/views/admin/moderation/AccountsDetail.vue:79 +msgctxt "Content/Moderation/Button/Verb" +msgid "Add a moderation policy" +msgstr "Afegir una nova polÃtica de moderació" + +#: front/src/components/manage/moderation/InstancePolicyForm.vue:4 +msgctxt "Content/Moderation/Card.Button.Label/Verb" +msgid "Add a new moderation rule" +msgstr "Afegir una nova regla de moderació" + +#: front/src/views/content/Home.vue:35 +msgctxt "Content/Library/Title/Verb" +msgid "Add and manage content" +msgstr "Agregar i gestionar contingut" + +#: front/src/components/playlists/Editor.vue:28 +#: front/src/components/playlists/PlaylistModal.vue:31 +msgctxt "*/Playlist/Button.Label/Verb" +msgid "Add anyways" +msgstr "Afegeix de totes maneres" + +#: front/src/components/Sidebar.vue:75 src/views/content/Base.vue:18 +msgctxt "*/Library/*/Verb" +msgid "Add content" +msgstr "Afegir contingut" + +#: front/src/components/library/radios/Builder.vue:51 +msgctxt "Content/Radio/Button.Label/Verb" +msgid "Add filter" +msgstr "Afegir filtre" + +#: front/src/components/library/radios/Builder.vue:41 +msgctxt "Content/Radio/Paragraph" +msgid "Add filters to customize your radio" +msgstr "Afegir filtres per personalitzar la teva radio" + +#: front/src/components/manage/moderation/NoteForm.vue:12 +#, fuzzy +msgctxt "Content/Moderation/Button.Label/Verb" +msgid "Add note" +msgstr "Afegir contingut" + +#: front/src/components/manage/moderation/DomainsTable.vue:191 +#: front/src/views/admin/moderation/DomainsDetail.vue:46 +#: front/src/views/admin/moderation/DomainsList.vue:18 +#, fuzzy +msgctxt "Content/Moderation/Action/Verb" +msgid "Add to allow-list" +msgstr "Afegir a la llista de reproducció …" + +#: front/src/components/audio/PlayButton.vue:91 +msgctxt "*/Queue/Dropdown/Button/Title" +msgid "Add to current queue" +msgstr "Afegir a la cua de reproducció actual" + +#: front/src/components/favorites/TrackFavoriteIcon.vue:4 +#: front/src/components/favorites/TrackFavoriteIcon.vue:28 +msgctxt "Content/Track/*/Verb" +msgid "Add to favorites" +msgstr "Afegir a favorits" + +#: front/src/components/playlists/TrackPlaylistIcon.vue:6 +#: front/src/components/playlists/TrackPlaylistIcon.vue:34 +msgctxt "Sidebar/Player/Icon.Tooltip/Verb" +msgid "Add to playlist…" +msgstr "Afegir a la llista de reproducció …" + +#: front/src/components/audio/PlayButton.vue:15 +msgctxt "*/Queue/Dropdown/Button/Label/Short" +msgid "Add to queue" +msgstr "Afegir a la cua de reproducció" + +#: front/src/components/playlists/PlaylistModal.vue:142 +msgctxt "Popup/Playlist/Table.Button.Tooltip/Verb" +msgid "Add to this playlist" +msgstr "Afegir a la llista de reproducció" + +#: front/src/components/playlists/PlaylistModal.vue:68 +msgctxt "Popup/Playlist/Table.Button.Label/Verb" +msgid "Add track" +msgstr "Afegir pista" + +#: front/src/components/manage/users/UsersTable.vue:70 +msgctxt "Content/Admin/Table.User role" +msgid "Admin" +msgstr "Administrador" + +#: front/src/components/Sidebar.vue:79 +msgctxt "Sidebar/Admin/Title/Noun" +msgid "Administration" +msgstr "Administració" + +#: front/src/components/audio/SearchBar.vue:33 +#: src/components/audio/track/Table.vue:9 +#: front/src/components/library/AlbumBase.vue:170 +#: front/src/components/library/ArtistBase.vue:212 +#: front/src/components/manage/library/TracksTable.vue:40 +#: front/src/components/metadata/Search.vue:134 +#: src/components/mixins/Report.vue:41 +#: front/src/views/admin/library/TrackDetail.vue:113 +#: front/src/views/content/libraries/FilesTable.vue:57 +#: front/src/components/mixins/Report.vue:42 +msgctxt "*/*/*" +msgid "Album" +msgstr "Àlbum" + +#: front/src/views/admin/library/TrackDetail.vue:134 +msgctxt "*/*/*/Noun" +msgid "Album artist" +msgstr "Àlbum d'aquest artista" + +#: front/src/views/admin/library/AlbumDetail.vue:98 +msgctxt "Content/Moderation/Title" +msgid "Album data" +msgstr "Dades de l'à lbum" + +#: front/src/components/mixins/Translations.vue:61 +#: front/src/components/mixins/Translations.vue:62 +msgctxt "Content/*/Dropdown/Noun" +msgid "Album name" +msgstr "Nom de l'à lbum" + +#: front/src/components/audio/Search.vue:19 +#: src/components/library/Albums.vue:129 +#: front/src/components/library/Library.vue:7 +#: src/components/library/TagDetail.vue:28 +#: front/src/components/manage/library/ArtistsTable.vue:41 +#: front/src/components/manage/library/TagsTable.vue:43 +#: front/src/views/admin/library/AlbumsList.vue:24 +#: front/src/views/admin/library/ArtistDetail.vue:256 +#: front/src/views/admin/library/Base.vue:11 +#: front/src/views/admin/library/LibraryDetail.vue:238 +#: front/src/views/admin/library/TagDetail.vue:133 +#: front/src/views/admin/moderation/AccountsDetail.vue:366 +#: front/src/views/admin/moderation/DomainsDetail.vue:301 +msgctxt "*/*/*" +msgid "Albums" +msgstr "Àlbums" + +#: front/src/components/library/ArtistDetail.vue:21 +msgctxt "Content/Artist/Title" +msgid "Albums by this artist" +msgstr "Àlbums d'aquest artista" + +#: front/src/components/manage/library/EditsCardList.vue:15 +#: front/src/components/manage/library/LibrariesTable.vue:13 +#: front/src/components/manage/library/UploadsTable.vue:13 +#: front/src/components/manage/library/UploadsTable.vue:22 +#: front/src/components/manage/moderation/DomainsTable.vue:11 +#: front/src/components/manage/users/InvitationsTable.vue:19 +#: front/src/components/moderation/ReportCategoryDropdown.vue:32 +#: front/src/views/admin/moderation/ReportsList.vue:17 +#: front/src/views/content/libraries/FilesTable.vue:13 +msgctxt "Content/*/Dropdown" +msgid "All" +msgstr "Tot" + +#: front/src/components/common/ActionTable.vue:59 +msgctxt "Content/*/Paragraph" +msgid "All %{ count } element selected" +msgid_plural "All %{ count } elements selected" +msgstr[0] "Únic element seleccionat" +msgstr[1] "Tots els %{ count } elements seleccionats" + +#: front/src/components/auth/Authorize.vue:107 +msgctxt "Head/Authorize/Title" +msgid "Allow application" +msgstr "Autoritzar l'aplicació" + +#: front/src/components/About.vue:136 +msgctxt "*/*/*" +msgid "Allow-list" +msgstr "" + +#: front/src/components/About.vue:149 +#, fuzzy +msgctxt "*/*/*" +msgid "Allowed domains" +msgstr "Afegir un domini" + +#: front/src/components/library/ImportStatusModal.vue:17 +#, fuzzy +msgctxt "Popup/Import/Message" +msgid "An error occurred during upload processing. You will find more information below." +msgstr "S'ha produït un error durant la cà rrega. Més informació a sota." + +#: front/src/components/playlists/Editor.vue:13 +#, fuzzy +msgctxt "Content/Playlist/Error message.Title" +msgid "An error occurred while saving your changes" +msgstr "S'ha produït una error mentres es guardaven els canvis" + +#: front/src/components/federation/FetchButton.vue:21 +#, fuzzy +msgctxt "Popup/*/Message.Content" +msgid "An error occurred while trying to refresh data:" +msgstr "S'ha produït un error durant l'actualització de les dades:" + +#: front/src/components/federation/FetchButton.vue:41 +#, fuzzy +msgctxt "*/*/Error" +msgid "An HTTP error occurred while contacting the remote server" +msgstr "Un error HTTP s'ha produït al conectar-se al servidor remot" + +#: front/src/components/library/ImportStatusModal.vue:145 +#, fuzzy +msgctxt "Popup/Import/Error.Label" +msgid "An unknown error occurred" +msgstr "Un error desconegut s'ha produït" + +#: front/src/components/About.vue:123 +msgctxt "*/*/*" +msgid "Anonymous access" +msgstr "" + +#: front/src/components/moderation/ReportModal.vue:54 +msgctxt "Popup/Moderation/Error message" +msgid "Anonymous reports are disabled, please sign-in to submit a report." +msgstr "" + +#: front/src/components/auth/Settings.vue:175 +#: src/components/auth/Settings.vue:225 +msgctxt "*/*/*/Noun" +msgid "Application" +msgstr "Aplicació" + +#: front/src/components/auth/ApplicationEdit.vue:12 +msgctxt "Content/Applications/Title" +msgid "Application details" +msgstr "Detalls de l'aplicació" + +#: front/src/components/auth/ApplicationEdit.vue:21 +msgctxt "Content/Applications/Label" +msgid "Application ID" +msgstr "ID de l'aplicació" + +#: front/src/components/auth/ApplicationEdit.vue:16 +msgctxt "Content/Application/Paragraph/" +msgid "Application ID and secret are really sensitive values and must be treated like passwords. Do not share those with anyone else." +msgstr "L'ID i el secret de l'aplicació són valors realment sensibles i han de ser tractats com les contrasenyes. No els comparteixis amb ningú." + +#: front/src/components/auth/ApplicationEdit.vue:25 +msgctxt "Content/Applications/Label" +msgid "Application secret" +msgstr "Secret de l'aplicació" + +#: front/src/components/library/EditCard.vue:81 +#: front/src/components/notifications/NotificationRow.vue:66 +msgctxt "Content/*/Button.Label/Verb" +msgid "Approve" +msgstr "Aprovar" + +#: front/src/components/library/EditCard.vue:25 +#: front/src/components/manage/library/EditsCardList.vue:21 +msgctxt "Content/*/*/Short" +msgid "Approved" +msgstr "Aprovat" + +#: front/src/components/library/EditCard.vue:21 +msgctxt "Content/Library/Card/Short" +msgid "Approved and applied" +msgstr "Aprovat i aplicat" + +#: front/src/components/auth/Logout.vue:5 +msgctxt "Content/Login/Title" +msgid "Are you sure you want to log out?" +msgstr "Segur que vols tancat la sessió?" + +#: front/src/components/audio/SearchBar.vue:32 +#: src/components/audio/track/Table.vue:8 +#: front/src/components/manage/library/AlbumsTable.vue:40 +#: front/src/components/manage/library/TracksTable.vue:41 +#: front/src/components/metadata/Search.vue:130 +#: src/components/mixins/Report.vue:55 +#: front/src/views/admin/library/AlbumDetail.vue:114 +#: front/src/views/admin/library/TrackDetail.vue:124 +#: front/src/views/content/libraries/FilesTable.vue:56 src/entities.js:12 +#: front/src/components/mixins/Report.vue:56 +msgctxt "*/*/*/Noun" +msgid "Artist" +msgstr "Artista" + +#: front/src/views/admin/library/ArtistDetail.vue:96 +msgctxt "Content/Moderation/Title" +msgid "Artist data" +msgstr "Dades de l'artista" + +#: front/src/components/mixins/Translations.vue:62 +#: front/src/components/mixins/Translations.vue:63 +msgctxt "Content/*/Dropdown/Noun" +msgid "Artist name" +msgstr "Nom de l'artista" + +#: front/src/components/audio/Search.vue:65 +msgctxt "*/Search/Input.Placeholder" +msgid "Artist, album, track…" +msgstr "Artista, à lbum, pista …" + +#: front/src/components/audio/Search.vue:10 +#: src/components/library/Artists.vue:117 +#: front/src/components/library/Library.vue:10 +#: front/src/components/library/TagDetail.vue:19 +#: front/src/components/manage/library/TagsTable.vue:42 +#: front/src/views/admin/library/ArtistsList.vue:24 +#: front/src/views/admin/library/Base.vue:8 +#: front/src/views/admin/library/LibraryDetail.vue:228 +#: front/src/views/admin/library/TagDetail.vue:123 +#: front/src/views/admin/moderation/AccountsDetail.vue:358 +#: front/src/views/admin/moderation/DomainsDetail.vue:291 +msgctxt "*/*/*/Noun" +msgid "Artists" +msgstr "Artistes" + +#: front/src/components/favorites/List.vue:34 +#: src/components/library/Albums.vue:29 +#: front/src/components/library/Artists.vue:29 +#: src/components/library/Radios.vue:44 +#: front/src/components/manage/library/AlbumsTable.vue:21 +#: front/src/components/manage/library/ArtistsTable.vue:21 +#: front/src/components/manage/library/EditsCardList.vue:39 +#: front/src/components/manage/library/LibrariesTable.vue:30 +#: front/src/components/manage/library/TagsTable.vue:21 +#: front/src/components/manage/library/TracksTable.vue:21 +#: front/src/components/manage/library/UploadsTable.vue:40 +#: front/src/components/manage/moderation/AccountsTable.vue:21 +#: front/src/components/manage/moderation/DomainsTable.vue:27 +#: front/src/components/manage/users/UsersTable.vue:19 +#: front/src/views/admin/moderation/ReportsList.vue:44 +#: front/src/views/content/libraries/FilesTable.vue:31 +#: front/src/views/playlists/List.vue:27 +msgctxt "Content/Search/Dropdown" +msgid "Ascending" +msgstr "Ascendent" + +#: front/src/views/auth/PasswordReset.vue:28 +msgctxt "Content/Signup/Button.Label/Verb" +msgid "Ask for a password reset" +msgstr "Sol·licitar el restabliment de la contrasenya" + +#: front/src/components/manage/moderation/ReportCard.vue:72 +msgctxt "Content/Moderation/*" +msgid "Assigned to" +msgstr "" + +#: front/src/views/admin/library/AlbumDetail.vue:214 +#: front/src/views/admin/library/ArtistDetail.vue:202 +#: front/src/views/admin/library/LibraryDetail.vue:195 +#: front/src/views/admin/library/TagDetail.vue:113 +#: front/src/views/admin/library/TrackDetail.vue:266 +#: front/src/views/admin/library/UploadDetail.vue:191 +#: front/src/views/admin/moderation/AccountsDetail.vue:285 +#: front/src/views/admin/moderation/DomainsDetail.vue:239 +msgctxt "Content/Moderation/Title" +msgid "Audio content" +msgstr "Contingut d'à udio" + +#: front/src/components/ShortcutsModal.vue:92 +msgctxt "Popup/Keyboard shortcuts/Title" +msgid "Audio player shortcuts" +msgstr "Dreceres del reproductor d'à udio" + +#: front/src/components/auth/Authorize.vue:47 +msgctxt "Content/Signup/Button.Label/Verb" +msgid "Authorize %{ app }" +msgstr "Autoritzar %{ app }" + +#: front/src/components/auth/Authorize.vue:4 +msgctxt "Content/Auth/Title/Verb" +msgid "Authorize third-party app" +msgstr "Autoritzar una aplicació de tercers" + +#: front/src/components/auth/Settings.vue:162 +msgctxt "Content/Settings/Title/Noun" +msgid "Authorized apps" +msgstr "Apps autoritzades" + +#: front/src/components/playlists/PlaylistModal.vue:40 +msgctxt "Popup/Playlist/Title" +msgid "Available playlists" +msgstr "Llistes de reproducció disponibles" + +#: front/src/components/auth/Settings.vue:34 +msgctxt "Content/Settings/Title" +msgid "Avatar" +msgstr "Avatar" + +#: front/src/views/auth/PasswordReset.vue:25 +#: front/src/views/auth/PasswordResetConfirm.vue:18 +msgctxt "Content/Signup/Link" +msgid "Back to login" +msgstr "Tornar a la pà gina de connexió" + +#: front/src/components/auth/ApplicationEdit.vue:9 +#: front/src/components/auth/ApplicationNew.vue:5 +msgctxt "Content/Applications/Link" +msgid "Back to settings" +msgstr "Tornar a la configuració" + +#: front/src/components/library/TrackDetail.vue:48 +#: front/src/components/mixins/Translations.vue:67 +#: front/src/views/admin/library/UploadDetail.vue:227 +#: front/src/components/mixins/Translations.vue:68 +msgctxt "Content/Track/*/Noun" +msgid "Bitrate" +msgstr "Taxa de bits" + +#: front/src/components/manage/moderation/InstancePolicyCard.vue:19 +#: front/src/components/manage/moderation/InstancePolicyForm.vue:34 +msgctxt "Content/Moderation/*/Verb" +msgid "Block everything" +msgstr "Bloquejar-ho tot" + +#: front/src/components/manage/moderation/InstancePolicyForm.vue:112 +msgctxt "Content/Moderation/Help text" +msgid "Block everything from this account or domain. This will prevent any interaction with the entity, and purge related content (uploads, libraries, follows, etc.)" +msgstr "Bloquejar-ho tot des d'aquest compte o domini. Això evitarà qualsevol interacció amb l’entitat, i es netejarà el contingut relacionat (pistes, biblioteques, seguidors, …)" + +#: front/src/components/Sidebar.vue:18 src/components/library/Library.vue:4 +msgctxt "*/Library/*/Verb" +msgid "Browse" +msgstr "Navega" + +#: front/src/components/Sidebar.vue:65 +msgctxt "Sidebar/Library/List item.Link/Verb" +msgid "Browse library" +msgstr "Navegueu per la biblioteca" + +#: front/src/components/Home.vue:132 +#, fuzzy +msgctxt "Content/Home/Link" +msgid "Browse public content" +msgstr "El contingut de la taula s'ha actualitzat" + +#: front/src/components/library/Albums.vue:4 +msgctxt "Content/Album/Title" +msgid "Browsing albums" +msgstr "Navegueu pels à lbums" + +#: front/src/components/library/Artists.vue:4 +msgctxt "Content/Artist/Title" +msgid "Browsing artists" +msgstr "Navegueu pels artistes" + +#: front/src/views/playlists/List.vue:3 +msgctxt "Content/Playlist/Title" +msgid "Browsing playlists" +msgstr "Navegueu per la llistes de reproducció" + +#: front/src/components/library/Radios.vue:4 +msgctxt "Content/Radio/Title" +msgid "Browsing radios" +msgstr "Navegueu per les rà dios" + +#: front/src/components/library/radios/Builder.vue:5 +msgctxt "Content/Radio/Title" +msgid "Builder" +msgstr "Editor" + +#: front/src/components/audio/album/Card.vue:13 +msgctxt "Content/Album/Card" +msgid "By %{ artist }" +msgstr "De %{ artist }" + +#: front/src/views/content/remote/Card.vue:125 +msgctxt "Popup/Library/Paragraph" +msgid "By unfollowing this library, you loose access to its content." +msgstr "Si deixes de seguir aquesta biblioteca, perdrà s l'accés al seu contingut." + +#: front/src/views/admin/library/AlbumDetail.vue:230 +#: front/src/views/admin/library/ArtistDetail.vue:218 +#: front/src/views/admin/library/LibraryDetail.vue:211 +#: front/src/views/admin/library/TrackDetail.vue:282 +#: front/src/views/admin/library/UploadDetail.vue:208 +#: front/src/views/admin/moderation/AccountsDetail.vue:301 +#: front/src/views/admin/moderation/DomainsDetail.vue:254 +msgctxt "Content/Moderation/Table.Label/Noun" +msgid "Cached size" +msgstr "Mida de la memòria cau" + +#: front/src/components/SetInstanceModal.vue:37 +#: front/src/components/common/DangerousButton.vue:17 +#: front/src/components/library/AlbumBase.vue:37 +#: front/src/components/library/ArtistBase.vue:48 +#: front/src/components/library/EditForm.vue:107 +#: front/src/components/library/TrackBase.vue:53 +#: front/src/components/library/radios/Filter.vue:53 +#: front/src/components/manage/moderation/InstancePolicyForm.vue:54 +#: front/src/components/moderation/FilterModal.vue:39 +#: front/src/components/moderation/ReportModal.vue:59 +#: front/src/components/playlists/PlaylistModal.vue:26 +#: front/src/components/playlists/PlaylistModal.vue:77 +#: front/src/views/playlists/Detail.vue:62 +msgctxt "*/*/Button.Label/Verb" +msgid "Cancel" +msgstr "Cancelar" + +#: front/src/views/content/remote/Card.vue:110 +msgctxt "Content/Library/Card.Paragraph" +msgid "Cancel follow request" +msgstr "Cancel·lar la petició de seguiment" + +#: front/src/components/library/radios/Builder.vue:64 +msgctxt "Content/Radio/Table.Label/Noun (Value is a number of Tracks)" +msgid "Candidates" +msgstr "Pistes candidates" + +#: front/src/components/library/FileUpload.vue:261 +msgctxt "Content/Library/Help text" +msgid "Cannot upload this file, ensure it is not too big" +msgstr "És impossible carregar aquest fitxer, assegurat que no és massa gran" + +#: front/src/components/manage/moderation/ReportCard.vue:30 +#: front/src/components/mixins/Translations.vue:42 +#: front/src/components/moderation/ReportCategoryDropdown.vue:2 +#: front/src/components/mixins/Translations.vue:43 +msgctxt "*/*/*" +msgid "Category" +msgstr "" + +#: front/src/components/Footer.vue:21 +msgctxt "Footer/Settings/Dropdown.Label/Short, Verb" +msgid "Change language" +msgstr "Canviar l'idioma" + +#: front/src/components/auth/Settings.vue:68 +msgctxt "Content/Settings/Title/Verb" +msgid "Change my password" +msgstr "Canviar la meva contrasenya" + +#: front/src/components/auth/Settings.vue:95 +msgctxt "Content/Settings/Button.Label" +msgid "Change password" +msgstr "Canviar la contrasenya" + +#: front/src/components/Footer.vue:37 +msgctxt "Footer/Settings/Dropdown.Label/Short, Verb" +msgid "Change theme" +msgstr "" + +#: front/src/views/auth/PasswordResetConfirm.vue:62 +msgctxt "*/Signup/Title" +msgid "Change your password" +msgstr "Canviar la teva contrasenya" + +#: front/src/components/auth/Settings.vue:96 +msgctxt "Popup/Settings/Title" +msgid "Change your password?" +msgstr "Canviar la teva contrasenya?" + +#: front/src/components/playlists/Editor.vue:31 +msgctxt "Content/Playlist/Paragraph" +msgid "Changes synced with server" +msgstr "Canvis sincronitzats amb el servidor" + +#: front/src/components/auth/Settings.vue:71 +msgctxt "Content/Settings/Paragraph'" +msgid "Changing your password will also change your Subsonic API password if you have requested one." +msgstr "Si canvieu la vostra contrasenya també canviarà la vostra contrasenya de l’API Subsonic si l’heu sol·licitat." + +#: front/src/components/auth/Settings.vue:98 +msgctxt "Popup/Settings/Paragraph" +msgid "Changing your password will have the following consequences:" +msgstr "Canviar la teva contrasenya tindrà les següents conseqüències:" + +#: front/src/components/Footer.vue:48 +msgctxt "Footer/*/List item.Link" +msgid "Chat room" +msgstr "Sala de xat" + +#: front/src/components/auth/ApplicationForm.vue:24 +msgctxt "Content/Applications/Paragraph/" +msgid "Checking the parent \"Read\" or \"Write\" scopes implies access to all the corresponding children scopes." +msgstr "Comprovar els à mbits pare “Llegir†o “Escriure†implica l’accés a tots els à mbits fill que en deriven." + +#: front/src/components/SetInstanceModal.vue:2 +msgctxt "Popup/Instance/Title" +msgid "Choose your instance" +msgstr "Escull la teva instà ncia" + +#: front/src/components/library/EditForm.vue:75 +#: front/src/components/library/EditForm.vue:88 +#: front/src/components/manage/users/InvitationForm.vue:37 +msgctxt "Content/Library/Button.Label" +msgid "Clear" +msgstr "Netejar" + +#: front/src/components/playlists/Editor.vue:50 +#: front/src/components/playlists/Editor.vue:55 +msgctxt "*/Playlist/Button.Label/Verb" +msgid "Clear playlist" +msgstr "Buidar la llista de reproducció" + +#: front/src/components/ShortcutsModal.vue:144 +#, fuzzy +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Clear queue" +msgstr "Neteja la cua de reproducció" + +#: front/src/components/audio/Player.vue:668 +msgctxt "Sidebar/Player/Icon.Tooltip/Verb" +msgid "Clear your queue" +msgstr "Neteja la cua de reproducció" + +#: front/src/components/mixins/Translations.vue:21 +#: front/src/components/mixins/Translations.vue:22 +msgctxt "Content/Library/Link.Title" +msgid "Click to display more information about the import process for this upload" +msgstr "Feu clic per mostrar més informació sobre el procés d'importació per a aquesta cà rrega" + +#: front/src/components/library/FileUpload.vue:82 +msgctxt "Content/Library/Paragraph/Call to action" +msgid "Click to select files to upload or drag and drop files or directories" +msgstr "Feu clic per seleccionar fitxers per carregar o arrossega i deixa anar fitxers o directoris" + +#: front/src/components/ShortcutsModal.vue:38 +#: front/src/components/federation/FetchButton.vue:85 +#: front/src/components/library/ImportStatusModal.vue:79 +#: front/src/components/manage/moderation/InstancePolicyModal.vue:34 +msgctxt "*/*/Button.Label/Verb" +msgid "Close" +msgstr "Tancar" + +#: front/src/components/federation/FetchButton.vue:88 +msgctxt "*/*/Button.Label/Verb" +msgid "Close and reload page" +msgstr "Tancar i recarregar la pà gina" + +#: front/src/components/About.vue:94 +#, fuzzy +msgctxt "*/*/*/State of registrations" +msgid "Closed" +msgstr "Tancar" + +#: front/src/components/manage/users/InvitationForm.vue:26 +#: front/src/components/manage/users/InvitationsTable.vue:42 +msgctxt "Content/Admin/Table.Label/Noun" +msgid "Code" +msgstr "Codi" + +#: front/src/components/audio/album/Card.vue:41 +#: front/src/components/common/CollapseLink.vue:3 +#, fuzzy +msgctxt "*/*/Button,Label" +msgid "Collapse" +msgstr "Contraure" + +#: front/src/components/library/radios/Builder.vue:63 +msgctxt "Content/Radio/Table.Label/Verb (Value is a List of Parameters)" +msgid "Config" +msgstr "Configuració" + +#: front/src/components/common/DangerousButton.vue:21 +msgctxt "Modal/*/Button.Label/Short, Verb" +msgid "Confirm" +msgstr "Confirmar" + +#: front/src/views/auth/EmailConfirm.vue:51 +msgctxt "Head/Signup/Title" +msgid "Confirm your e-mail address" +msgstr "Confirma el teu correu electrònic" + +#: front/src/views/auth/EmailConfirm.vue:13 +msgctxt "Content/Signup/Form.Label" +msgid "Confirmation code" +msgstr "Codi de confirmació" + +#: front/src/components/About.vue:67 src/components/Home.vue:65 +msgctxt "Content/Home/Header/Name" +msgid "Contact" +msgstr "" + +#: front/src/components/moderation/FilterModal.vue:90 +msgctxt "*/Moderation/Message" +msgid "Content filter successfully added" +msgstr "S'ha afegit el filtre de contingut" + +#: front/src/components/auth/Settings.vue:116 +#: front/src/components/mixins/Translations.vue:108 +#: front/src/components/mixins/Translations.vue:109 +msgctxt "Content/Settings/Title/Noun" +msgid "Content filters" +msgstr "Filtres de continguts" + +#: front/src/components/auth/Settings.vue:119 +msgctxt "Content/Settings/Paragraph" +msgid "Content filters help you hide content you don't want to see on the service." +msgstr "Els filtres de contingut us ajuden a amagar el contingut que no voleu veure al servei." + +#: front/src/components/common/ActionTable.vue:8 +msgctxt "Content/*/Button.Help text.Paragraph" +msgid "Content have been updated, click refresh to see up-to-date content" +msgstr "S'ha actualitzat el contingut, refresca per veure el contingut actualitzat" + +#: front/src/components/About.vue:46 +#, fuzzy +msgctxt "Content/About/Header" +msgid "Contents" +msgstr "Filtres de continguts" + +#: front/src/components/Footer.vue:56 +msgctxt "Footer/*/List item.Link" +msgid "Contribute" +msgstr "Col·laborar" + +#: front/src/components/audio/EmbedWizard.vue:29 +#: front/src/components/common/CopyInput.vue:8 +#: front/src/components/forms/PasswordInput.vue:43 +msgctxt "*/*/Button.Label/Short, Verb" +msgid "Copy" +msgstr "Copiar" + +#: front/src/components/playlists/Editor.vue:194 +msgctxt "Content/Playlist/Button.Tooltip/Verb" +msgid "Copy queued tracks to playlist" +msgstr "Copiar les cançons de la cua de reproducció a la llista de reproducció" + +#: front/src/components/auth/Authorize.vue:55 +msgctxt "Content/Auth/Paragraph" +msgid "Copy-paste the following code in the application:" +msgstr "Copia i enganxa el codi de seguiment a la vostra aplicació:" + +#: front/src/components/audio/EmbedWizard.vue:31 +msgctxt "Popup/Embed/Paragraph" +msgid "Copy/paste this code in your website HTML" +msgstr "Còpia i enganxa aquest codi dins l'HTML de la vostra web" + +#: front/src/components/library/TrackDetail.vue:10 +#: front/src/views/admin/library/TrackDetail.vue:159 src/edits.js:77 +msgctxt "Content/Track/*/Noun" +msgid "Copyright" +msgstr "Drets d'autor" + +#: front/src/views/auth/EmailConfirm.vue:7 +msgctxt "Content/Signup/Paragraph" +msgid "Could not confirm your e-mail address" +msgstr "No hem pogut confirmar la teva adreça de correu electrònic" + +#: front/src/views/content/remote/ScanForm.vue:3 +msgctxt "Content/Library/Error message.Title" +msgid "Could not fetch remote library" +msgstr "Impossible recuperar la biblioteca remota" + +#: front/src/components/manage/moderation/InstancePolicyForm.vue:58 +msgctxt "Content/Moderation/Card.Button.Label/Verb" +msgid "Create" +msgstr "Crear" + +#: front/src/views/auth/Signup.vue:4 +msgctxt "Content/Signup/Title" +msgid "Create a funkwhale account" +msgstr "Crear un compte a Funkwhale" + +#: front/src/components/auth/ApplicationNew.vue:8 +#: front/src/components/auth/ApplicationNew.vue:41 +#: front/src/components/auth/Settings.vue:220 +msgctxt "Content/Settings/Button.Label" +msgid "Create a new application" +msgstr "Crear una nova aplicació" + +#: front/src/views/content/libraries/Home.vue:14 +msgctxt "Content/Library/Link/Verb" +msgid "Create a new library" +msgstr "Crear una nova biblioteca" + +#: front/src/components/playlists/Form.vue:2 +msgctxt "Popup/Playlist/Title/Verb" +msgid "Create a new playlist" +msgstr "Crear una nova llista de reproducció" + +#: front/src/components/Sidebar.vue:57 src/components/auth/LoginForm.vue:15 +msgctxt "*/Signup/Link/Verb" +msgid "Create an account" +msgstr "Crear un compte" + +#: front/src/components/auth/ApplicationForm.vue:65 +msgctxt "Content/Applications/Button.Label/Verb" +msgid "Create application" +msgstr "Crear una aplicació" + +#: front/src/views/content/libraries/Form.vue:26 +msgctxt "Content/Library/Button.Label/Verb" +msgid "Create library" +msgstr "Crear una biblioteca" + +#: front/src/components/auth/SignupForm.vue:49 +msgctxt "Content/Signup/Button.Label" +msgid "Create my account" +msgstr "Crear el meu compte" + +#: front/src/components/auth/Settings.vue:264 +msgctxt "Content/Applications/Paragraph" +msgid "Create one to integrate Funkwhale with third-party applications." +msgstr "Creeu-ne un per integrar Funkwhale amb aplicacions de tercers." + +#: front/src/components/playlists/Form.vue:34 +msgctxt "Content/Playlist/Button.Label/Verb" +msgid "Create playlist" +msgstr "Crear una llista de reproducció" + +#: front/src/components/library/Radios.vue:23 +msgctxt "Content/Radio/Button.Label/Verb" +msgid "Create your own radio" +msgstr "Crear la teva pròpia rà dio" + +#: front/src/components/auth/Settings.vue:134 +#: src/components/auth/Settings.vue:227 +#: front/src/components/manage/library/AlbumsTable.vue:44 +#: front/src/components/manage/library/ArtistsTable.vue:43 +#: front/src/components/manage/library/LibrariesTable.vue:54 +#: front/src/components/manage/library/TagsTable.vue:45 +#: front/src/components/manage/library/TracksTable.vue:44 +#: front/src/components/manage/library/UploadsTable.vue:66 +#: front/src/components/manage/moderation/ReportCard.vue:43 +#: front/src/components/manage/users/InvitationsTable.vue:40 +#: front/src/components/mixins/Translations.vue:53 +#: front/src/components/mixins/Translations.vue:54 +msgctxt "Content/*/*/Noun" +msgid "Creation date" +msgstr "Data de creació" + +#: front/src/components/auth/Settings.vue:54 +msgctxt "Content/Settings/Title/Noun" +msgid "Current avatar" +msgstr "Avatar actual" + +#: front/src/components/admin/SettingsGroup.vue:67 +#, fuzzy +msgctxt "Content/Settings/Title/Noun" +msgid "Current image" +msgstr "Ús actual" + +#: front/src/views/content/libraries/DetailArea.vue:4 +msgctxt "Content/Library/Title" +msgid "Current library" +msgstr "Biblioteca actual" + +#: front/src/components/playlists/PlaylistModal.vue:8 +msgctxt "Popup/Playlist/Title" +msgid "Current track" +msgstr "Pista actual" + +#: front/src/views/content/libraries/Quota.vue:2 +msgctxt "Content/Library/Title" +msgid "Current usage" +msgstr "Ús actual" + +#: front/src/components/Footer.vue:94 +msgctxt "Footer/Settings/Dropdown.Label/Theme name" +msgid "Dark" +msgstr "" + +#: front/src/components/federation/FetchButton.vue:53 +msgctxt "*/*/Error" +msgid "Data returned by the remote server had invalid or missing attributes" +msgstr "Les dades retornades pel servidor remot tenien atributs invà lids o en faltaven" + +#: front/src/components/federation/FetchButton.vue:17 +msgctxt "Popup/*/Message.Content" +msgid "Data was refreshed successfully from remote server." +msgstr "Les dades s'han actualitzat correctament des del servidor remot." + +#: front/src/views/content/libraries/Detail.vue:27 +msgctxt "Content/Library/Table.Label" +msgid "Date" +msgstr "Data" + +#: front/src/components/library/ImportStatusModal.vue:64 +msgctxt "Popup/Import/Table.Label/Noun" +msgid "Debug information" +msgstr "Informació de depuració" + +#: front/src/components/ShortcutsModal.vue:128 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Decrease volume" +msgstr "Disminueix el volum" + +#: front/src/components/auth/Settings.vue:150 +#: src/components/auth/Settings.vue:251 +#: front/src/components/library/EditCard.vue:93 +#: front/src/components/library/EditCard.vue:98 +#: front/src/components/manage/library/AlbumsTable.vue:188 +#: front/src/components/manage/library/ArtistsTable.vue:178 +#: front/src/components/manage/library/LibrariesTable.vue:205 +#: front/src/components/manage/library/TagsTable.vue:179 +#: front/src/components/manage/library/TracksTable.vue:188 +#: front/src/components/manage/library/UploadsTable.vue:255 +#: front/src/components/manage/moderation/InstancePolicyForm.vue:61 +#: front/src/components/manage/moderation/NotesThread.vue:24 +#: front/src/components/manage/moderation/NotesThread.vue:29 +#: front/src/components/manage/moderation/ReportCard.vue:360 +#: front/src/components/manage/users/InvitationsTable.vue:167 +#: front/src/views/admin/library/AlbumDetail.vue:78 +#: front/src/views/admin/library/AlbumDetail.vue:83 +#: front/src/views/admin/library/ArtistDetail.vue:76 +#: front/src/views/admin/library/ArtistDetail.vue:81 +#: front/src/views/admin/library/LibraryDetail.vue:58 +#: front/src/views/admin/library/LibraryDetail.vue:63 +#: front/src/views/admin/library/TagDetail.vue:41 +#: front/src/views/admin/library/TagDetail.vue:46 +#: front/src/views/admin/library/TrackDetail.vue:77 +#: front/src/views/admin/library/TrackDetail.vue:82 +#: front/src/views/admin/library/UploadDetail.vue:65 +#: front/src/views/admin/library/UploadDetail.vue:70 +#: front/src/views/content/libraries/FilesTable.vue:222 +#: front/src/views/content/libraries/Form.vue:29 +#: src/views/playlists/Detail.vue:42 +msgctxt "*/*/*/Verb" +msgid "Delete" +msgstr "Suprimir" + +#: front/src/components/auth/Settings.vue:254 +msgctxt "*/Settings/Button.Label/Verb" +msgid "Delete application" +msgstr "Suprimir l'aplicació" + +#: front/src/components/auth/Settings.vue:252 +msgctxt "Popup/Settings/Title" +msgid "Delete application \"%{ application }\"?" +msgstr "Suprimir l'aplicació \"%{ application }\"?" + +#: front/src/views/content/libraries/Form.vue:39 +msgctxt "Popup/Library/Button.Label/Verb" +msgid "Delete library" +msgstr "Suprimir la llibreria" + +#: front/src/components/manage/moderation/InstancePolicyForm.vue:69 +msgctxt "Popup/Moderation/Button.Label/Verb" +msgid "Delete moderation rule" +msgstr "Suprimir la regla de moderació" + +#: front/src/components/auth/Settings.vue:274 +#: src/components/auth/Settings.vue:302 +#, fuzzy +msgctxt "*/*/Button.Label" +msgid "Delete my account" +msgstr "Crear el meu compte" + +#: front/src/components/auth/Settings.vue:297 +#, fuzzy +msgctxt "*/*/Button.Label" +msgid "Delete my account…" +msgstr "Crear el meu compte" + +#: front/src/views/playlists/Detail.vue:47 +msgctxt "Popup/Playlist/Button.Label/Verb" +msgid "Delete playlist" +msgstr "Suprimir la llista de reproducció" + +#: front/src/views/radios/Detail.vue:28 +msgctxt "Popup/Radio/Button.Label/Verb" +msgid "Delete radio" +msgstr "Suprimir la rà dio" + +#: front/src/components/manage/moderation/ReportCard.vue:357 +msgctxt "Content/Moderation/Button/Verb" +msgid "Delete reported object" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:358 +msgctxt "Content/Moderation/Popup/Header" +msgid "Delete reported object?" +msgstr "" + +#: front/src/views/admin/library/AlbumDetail.vue:79 +#: front/src/views/admin/library/TrackDetail.vue:78 +msgctxt "Popup/Library/Title" +msgid "Delete this album?" +msgstr "Suprimir aquest à lbum?" + +#: front/src/views/admin/library/ArtistDetail.vue:77 +msgctxt "Popup/Library/Title" +msgid "Delete this artist?" +msgstr "Suprimir aquest artista?" + +#: front/src/views/admin/library/LibraryDetail.vue:59 +#: front/src/views/content/libraries/Form.vue:31 +msgctxt "Popup/Library/Title" +msgid "Delete this library?" +msgstr "Suprimir la biblioteca?" + +#: front/src/components/manage/moderation/InstancePolicyForm.vue:63 +msgctxt "Popup/Moderation/Title" +msgid "Delete this moderation rule?" +msgstr "Suprimir la regla de moderació?" + +#: front/src/components/manage/moderation/NotesThread.vue:25 +#, fuzzy +msgctxt "Popup/Moderation/Title" +msgid "Delete this note?" +msgstr "Suprimir aquest artista?" + +#: front/src/components/library/EditCard.vue:94 +msgctxt "Popup/Library/Title" +msgid "Delete this suggestion?" +msgstr "Suprimir aquesta suggerència?" + +#: front/src/views/admin/library/TagDetail.vue:42 +#, fuzzy +msgctxt "Popup/Library/Title" +msgid "Delete this tag?" +msgstr "Suprimir aquest à lbum?" + +#: front/src/views/admin/library/UploadDetail.vue:66 +msgctxt "Popup/Library/Title" +msgid "Delete this upload?" +msgstr "Suprimir aquest enviament?" + +#: front/src/components/favorites/List.vue:35 +#: src/components/library/Albums.vue:30 +#: front/src/components/library/Artists.vue:30 +#: src/components/library/Radios.vue:47 +#: front/src/components/manage/library/AlbumsTable.vue:22 +#: front/src/components/manage/library/ArtistsTable.vue:22 +#: front/src/components/manage/library/EditsCardList.vue:40 +#: front/src/components/manage/library/LibrariesTable.vue:31 +#: front/src/components/manage/library/TagsTable.vue:22 +#: front/src/components/manage/library/TracksTable.vue:22 +#: front/src/components/manage/library/UploadsTable.vue:41 +#: front/src/components/manage/moderation/AccountsTable.vue:22 +#: front/src/components/manage/moderation/DomainsTable.vue:28 +#: front/src/components/manage/users/UsersTable.vue:20 +#: front/src/views/admin/moderation/ReportsList.vue:45 +#: front/src/views/content/libraries/FilesTable.vue:32 +#: front/src/views/playlists/List.vue:28 +msgctxt "Content/Search/Dropdown" +msgid "Descending" +msgstr "Descendent" + +#: front/src/components/manage/moderation/NoteForm.vue:37 +msgctxt "Content/Moderation/Placeholder" +msgid "Describe what actions have been taken, or any other related updates…" +msgstr "" + +#: front/src/components/library/radios/Builder.vue:25 +#: front/src/views/admin/library/LibraryDetail.vue:132 +#: front/src/views/content/libraries/Form.vue:14 +msgctxt "*/*/*/Noun" +msgid "Description" +msgstr "Descripció" + +#: front/src/views/content/libraries/Card.vue:48 +#: src/views/content/remote/Card.vue:67 +msgctxt "Content/Library/Card.Button.Label/Noun" +msgid "Details" +msgstr "Detalls" + +#: front/src/views/admin/moderation/AccountsDetail.vue:511 +msgctxt "Content/Moderation/Help text" +msgid "Determine how much content the user can upload. Leave empty to use the default value of the instance." +msgstr "Determineu la quantitat de contingut que l'usuari pot carregar. Deixeu-ho en blanc per utilitzar el valor per defecte de la instà ncia." + +#: front/src/components/mixins/Translations.vue:8 +#: front/src/components/mixins/Translations.vue:9 +msgctxt "Content/Settings/Dropdown.Help text" +msgid "Determine the visibility level of your activity" +msgstr "Determina el nivell de la visibilitat de la teva activitat" + +#: front/src/components/auth/Settings.vue:104 +#: front/src/components/auth/SubsonicTokenForm.vue:56 +msgctxt "Popup/Settings/Button.Label" +msgid "Disable access" +msgstr "Desactivar l'accés" + +#: front/src/components/auth/SubsonicTokenForm.vue:53 +msgctxt "Content/Settings/Button.Label/Verb" +msgid "Disable Subsonic access" +msgstr "Desactivar l'accés via Subsonic" + +#: front/src/components/auth/SubsonicTokenForm.vue:54 +msgctxt "Popup/Settings/Title" +msgid "Disable Subsonic API access?" +msgstr "Desactivar l'accés a l'API Subsonic?" + +#: front/src/components/About.vue:118 src/components/About.vue:131 +#: front/src/components/About.vue:144 +#: front/src/components/manage/moderation/InstancePolicyForm.vue:18 +#: front/src/views/admin/moderation/AccountsDetail.vue:157 +#: front/src/views/admin/moderation/AccountsDetail.vue:161 +#, fuzzy +msgctxt "*/*/*/State of feature" +msgid "Disabled" +msgstr "Desactivat" + +#: front/src/views/admin/library/TrackDetail.vue:151 +msgctxt "*/*/*/Noun" +msgid "Disc number" +msgstr "Número de disc" + +#: front/src/components/Home.vue:157 +msgctxt "Content/Home/Link" +msgid "Discover everything you need to know about Funkwhale and its features" +msgstr "" + +#: front/src/components/auth/SubsonicTokenForm.vue:13 +msgctxt "Content/Settings/Link" +msgid "Discover how to use Funkwhale from other apps" +msgstr "Descobreix com utilitzar Funkwhale des d'altres aplicacions" + +#: front/src/views/Notifications.vue:45 +msgctxt "Content/Notifications/Button.Label/Verb" +msgid "Discover other ways to help" +msgstr "" + +#: front/src/views/admin/moderation/AccountsDetail.vue:132 +msgctxt "'Content/*/*/Noun'" +msgid "Display name" +msgstr "Mostra el nom" + +#: front/src/components/library/radios/Builder.vue:30 +msgctxt "Content/Radio/Checkbox.Label/Verb" +msgid "Display publicly" +msgstr "Mostrar públicament" + +#: front/src/components/manage/moderation/InstancePolicyForm.vue:122 +msgctxt "Content/Moderation/Help text" +msgid "Do not download any media file (audio, album cover, account avatar…) from this account or domain. This will purge existing content as well." +msgstr "No descarregueu cap fitxer multimèdia (à udio, portada, avatar del compte, …) des d'aquest compte o domini. Això també eliminarà el contingut existent." + +#: front/src/views/Notifications.vue:36 +#, fuzzy +msgctxt "Content/Notifications/Header" +msgid "Do you like Funkwhale?" +msgstr "Quant a Funkwhale" + +#: front/src/components/playlists/Editor.vue:51 +msgctxt "Popup/Playlist/Title" +msgid "Do you want to clear the playlist \"%{ playlist }\"?" +msgstr "Vols buidar la llista de reproducció \"%{ playlist }\"?" + +#: front/src/components/common/DangerousButton.vue:7 +msgctxt "Modal/*/Title" +msgid "Do you want to confirm this action?" +msgstr "Vols confirmar aquesta acció?" + +#: front/src/views/playlists/Detail.vue:43 +msgctxt "Popup/Playlist/Title/Call to action" +msgid "Do you want to delete the playlist \"%{ playlist }\"?" +msgstr "Vols eliminar aquesta llista de reproducció \"%{ playlist }\"?" + +#: front/src/views/radios/Detail.vue:26 +msgctxt "Popup/Radio/Title" +msgid "Do you want to delete the radio \"%{ radio }\"?" +msgstr "Vols suprimir aquesta rà dio \"%{ radio }\"?" + +#: front/src/components/auth/Settings.vue:298 +#, fuzzy +msgctxt "Popup/Settings/Title" +msgid "Do you want to delete your account?" +msgstr "Voleu restaurar la darrera cua de reproducció?" + +#: front/src/components/moderation/FilterModal.vue:3 +msgctxt "Popup/Moderation/Title/Verb" +msgid "Do you want to hide content from artist \"%{ name }\"?" +msgstr "Vols ocultar el contingut de l’artista \"%{ name }\"?" + +#: front/src/components/common/ActionTable.vue:37 +msgctxt "Modal/*/Title" +msgid "Do you want to launch %{ action } on %{ count } element?" +msgid_plural "Do you want to launch %{ action } on %{ count } elements?" +msgstr[0] "Vols executar l'acció %{ action } de %{ count } element?" +msgstr[1] "Vols executar l'acció %{ action } de %{ count } elements?" + +#: front/src/components/moderation/ReportModal.vue:3 +#, fuzzy +msgctxt "Popup/Moderation/Title/Verb" +msgid "Do you want to report this object?" +msgstr "Vols confirmar aquesta acció?" + +#: front/src/components/Sidebar.vue:122 +msgctxt "Sidebar/Queue/Message" +msgid "Do you want to restore your previous queue?" +msgstr "Voleu restaurar la darrera cua de reproducció?" + +#: front/src/components/Footer.vue:31 +msgctxt "Footer/*/List item.Link/Short, Noun" +msgid "Documentation" +msgstr "Documentació" + +#: front/src/components/manage/library/AlbumsTable.vue:41 +#: front/src/components/manage/library/ArtistsTable.vue:40 +#: front/src/components/manage/library/LibrariesTable.vue:50 +#: front/src/components/manage/library/TracksTable.vue:42 +#: front/src/components/manage/library/UploadsTable.vue:62 +#: front/src/components/manage/moderation/AccountsTable.vue:40 +#: front/src/components/manage/moderation/ReportCard.vue:169 +#: front/src/components/manage/moderation/ReportCard.vue:179 +#: front/src/components/mixins/Translations.vue:72 +#: front/src/views/admin/library/AlbumDetail.vue:124 +#: front/src/views/admin/library/ArtistDetail.vue:112 +#: front/src/views/admin/library/LibraryDetail.vue:123 +#: front/src/views/admin/library/TrackDetail.vue:176 +#: front/src/views/admin/library/UploadDetail.vue:121 +#: front/src/views/admin/moderation/AccountsDetail.vue:123 +#: front/src/components/mixins/Translations.vue:73 +msgctxt "Content/Moderation/*/Noun" +msgid "Domain" +msgstr "Domini" + +#: front/src/views/admin/moderation/Base.vue:8 +#: front/src/views/admin/moderation/DomainsList.vue:3 +#: front/src/views/admin/moderation/DomainsList.vue:54 +msgctxt "*/Moderation/*/Noun" +msgid "Domains" +msgstr "Dominis" + +#: front/src/views/Notifications.vue:42 +msgctxt "Content/Notifications/Button.Label/Verb" +msgid "Donate" +msgstr "" + +#: front/src/components/library/TrackBase.vue:37 +#: front/src/views/admin/library/UploadDetail.vue:58 +msgctxt "Content/Track/Link/Verb" +msgid "Download" +msgstr "Descarregar" + +#: front/src/components/playlists/Editor.vue:59 +msgctxt "Content/Playlist/Paragraph/Call to action" +msgid "Drag and drop rows to reorder tracks in the playlist" +msgstr "Arrossega i deixa anar les files per reordenar les cançons de lla llista de reproducció" + +#: front/src/components/audio/track/Table.vue:10 +#: front/src/components/library/TrackDetail.vue:30 +#: front/src/components/mixins/Translations.vue:68 +#: front/src/views/admin/library/UploadDetail.vue:238 +#: front/src/views/content/libraries/FilesTable.vue:60 +#: front/src/components/mixins/Translations.vue:69 +msgctxt "Content/*/*" +msgid "Duration" +msgstr "Durada" + +#: front/src/views/auth/EmailConfirm.vue:23 +msgctxt "Content/Signup/Message" +msgid "E-mail address confirmed" +msgstr "Correu electrònic confirmat" + +#: front/src/components/auth/Settings.vue:246 +#: src/components/library/AlbumBase.vue:73 +#: front/src/components/library/ArtistBase.vue:84 +#: front/src/components/library/TrackBase.vue:89 +#: front/src/components/manage/moderation/InstancePolicyCard.vue:45 +#: front/src/components/radios/Card.vue:23 +#: src/views/admin/library/AlbumDetail.vue:71 +#: front/src/views/admin/library/ArtistDetail.vue:69 +#: front/src/views/admin/library/TrackDetail.vue:70 +#: front/src/views/content/libraries/Detail.vue:9 +#: src/views/playlists/Detail.vue:31 +msgctxt "Content/*/Button.Label/Verb" +msgid "Edit" +msgstr "Editar" + +#: front/src/components/auth/ApplicationEdit.vue:30 +#: front/src/components/auth/ApplicationEdit.vue:75 +msgctxt "Content/Applications/Title" +msgid "Edit application" +msgstr "Editar l'aplicació" + +#: front/src/components/manage/moderation/InstancePolicyForm.vue:3 +msgctxt "Content/Moderation/Card.Title/Verb" +msgid "Edit moderation rule" +msgstr "Editar les regles de moderació" + +#: front/src/components/library/AlbumEdit.vue:4 +msgctxt "Content/*/Title" +msgid "Edit this album" +msgstr "Editar aquest à lbum" + +#: front/src/components/library/ArtistEdit.vue:4 +msgctxt "Content/*/Title" +msgid "Edit this artist" +msgstr "Editar l'artista" + +#: front/src/components/library/TrackEdit.vue:4 +msgctxt "Content/*/Title" +msgid "Edit this track" +msgstr "Edita aquesta pista" + +#: front/src/components/mixins/Translations.vue:116 +#: front/src/views/admin/library/AlbumDetail.vue:198 +#: front/src/views/admin/library/ArtistDetail.vue:186 +#: front/src/views/admin/library/Base.vue:5 +#: src/views/admin/library/EditsList.vue:24 +#: front/src/views/admin/library/TrackDetail.vue:250 +#: front/src/components/mixins/Translations.vue:117 +msgctxt "*/Admin/*/Noun" +msgid "Edits" +msgstr "Modificacions" + +#: front/src/components/auth/SignupForm.vue:26 +#: front/src/components/manage/users/UsersTable.vue:38 +#: front/src/components/moderation/ReportModal.vue:31 +msgctxt "Content/*/*/Noun" +msgid "Email" +msgstr "Correu electrònic" + +#: front/src/views/admin/moderation/AccountsDetail.vue:140 +msgctxt "Content/*/*" +msgid "Email address" +msgstr "Adreça de correu electrònic" + +#: front/src/components/library/AlbumBase.vue:54 +#: front/src/components/library/ArtistBase.vue:65 +#: front/src/components/library/TrackBase.vue:70 +#: src/views/playlists/Detail.vue:38 +msgctxt "Content/*/Button.Label/Verb" +msgid "Embed" +msgstr "Incrustar" + +#: front/src/components/audio/EmbedWizard.vue:30 +msgctxt "Popup/Embed/Input.Label/Noun" +msgid "Embed code" +msgstr "Codi incrustat" + +#: front/src/components/library/AlbumBase.vue:27 +msgctxt "Popup/Album/Title/Verb" +msgid "Embed this album on your website" +msgstr "Inserir aquest à lbum a la teva pà gina" + +#: front/src/components/library/ArtistBase.vue:38 +msgctxt "Popup/Artist/Title/Verb" +msgid "Embed this artist work on your website" +msgstr "Incrusta l'obra d'aquest artista a la teva pà gina web" + +#: front/src/views/playlists/Detail.vue:52 +#, fuzzy +msgctxt "Popup/Album/Title/Verb" +msgid "Embed this playlist on your website" +msgstr "Inserir aquest à lbum a la teva pà gina" + +#: front/src/components/library/TrackBase.vue:43 +msgctxt "Popup/Track/Title" +msgid "Embed this track on your website" +msgstr "Incrusta aquesta pista a la teva pà gina web" + +#: front/src/views/admin/moderation/AccountsDetail.vue:260 +#: front/src/views/admin/moderation/DomainsDetail.vue:224 +msgctxt "Content/Moderation/Table.Label/Noun" +msgid "Emitted library follows" +msgstr "Segueix la biblioteca emesa" + +#: front/src/views/admin/moderation/AccountsDetail.vue:244 +#: front/src/views/admin/moderation/DomainsDetail.vue:208 +msgctxt "Content/Moderation/Table.Label/Noun" +msgid "Emitted messages" +msgstr "Missatges emesos" + +#: front/src/components/About.vue:114 src/components/About.vue:127 +#: front/src/components/About.vue:140 +#: front/src/components/manage/moderation/InstancePolicyCard.vue:8 +#: front/src/components/manage/moderation/InstancePolicyForm.vue:17 +#: front/src/views/admin/moderation/AccountsDetail.vue:156 +#: front/src/views/admin/moderation/AccountsDetail.vue:160 +#, fuzzy +msgctxt "*/*/*/State of feature" +msgid "Enabled" +msgstr "Activat" + +#: front/src/views/playlists/Detail.vue:30 +msgctxt "Content/Playlist/Button.Label/Verb" +msgid "End edition" +msgstr "Acabar l'edició" + +#: front/src/views/content/remote/ScanForm.vue:50 +msgctxt "Content/Library/Input.Placeholder" +msgid "Enter a library URL" +msgstr "Introduir la URL de la biblioteca" + +#: front/src/components/library/Radios.vue:141 +msgctxt "Content/Search/Input.Placeholder" +msgid "Enter a radio name…" +msgstr "Introdueix un nom per la radio …" + +#: front/src/components/library/Albums.vue:128 +msgctxt "Content/Search/Input.Placeholder" +msgid "Enter album title…" +msgstr "Introduir el nom de l'à lbum …" + +#: front/src/components/library/Artists.vue:116 +msgctxt "Content/Search/Input.Placeholder" +msgid "Enter artist name…" +msgstr "Introduir el nom d'artista …" + +#: front/src/views/playlists/List.vue:107 +msgctxt "Content/Playlist/Placeholder/Call to action" +msgid "Enter playlist name…" +msgstr "Introduir el nom de la llista de reproducció …" + +#: front/src/views/auth/PasswordReset.vue:54 +#, fuzzy +msgctxt "Content/Signup/Input.Placeholder" +msgid "Enter the email address linked to your account" +msgstr "Introdueix el correu electrònic associat al vostre compte" + +#: front/src/components/auth/SignupForm.vue:96 +msgctxt "Content/Signup/Form/Placeholder" +msgid "Enter your email" +msgstr "Introdueix el teu correu electrònic" + +#: front/src/components/auth/SignupForm.vue:91 +#: src/components/auth/SignupForm.vue:93 +msgctxt "Content/Signup/Form/Placeholder" +msgid "Enter your invitation code (case insensitive)" +msgstr "Introdueix el codi d'invitació (No distingeix entre majúscules i minúscules)" + +#: front/src/components/metadata/Search.vue:114 +msgctxt "Content/Library/Input.Placeholder/Verb" +msgid "Enter your search query…" +msgstr "Introdueix la teva consulta …" + +#: front/src/components/auth/SignupForm.vue:95 +msgctxt "Content/Signup/Form/Placeholder" +msgid "Enter your username" +msgstr "Introdueix el nom del teu usuari" + +#: front/src/components/auth/LoginForm.vue:81 +msgctxt "Content/Login/Input.Placeholder" +msgid "Enter your username or email" +msgstr "Introdueix el teu nom d'usuari o bé el teu correu electrònic" + +#: front/src/components/auth/SubsonicTokenForm.vue:19 +#: front/src/views/content/libraries/Form.vue:4 +msgctxt "Content/*/Error message.Title" +msgid "Error" +msgstr "Error" + +#: front/src/components/federation/FetchButton.vue:34 +#: front/src/components/library/ImportStatusModal.vue:32 +msgctxt "Popup/Import/Table.Label/Noun" +msgid "Error detail" +msgstr "Detalls de l'error" + +#: front/src/views/admin/Settings.vue:89 +msgctxt "Content/Admin/Menu" +msgid "Error reporting" +msgstr "Informe d'errors" + +#: front/src/components/federation/FetchButton.vue:26 +#: front/src/components/library/ImportStatusModal.vue:24 +msgctxt "Popup/Import/Table.Label/Noun" +msgid "Error type" +msgstr "Tipus d'error" + +#: front/src/components/common/ActionTable.vue:94 +msgctxt "Content/*/Error message/Header" +msgid "Error while applying action" +msgstr "Error aplicant l’acció" + +#: front/src/views/auth/PasswordReset.vue:7 +msgctxt "Content/Signup/Card.Title" +msgid "Error while asking for a password reset" +msgstr "Error demanant el restabliment de la contrasenya" + +#: front/src/components/auth/Authorize.vue:6 +msgctxt "Popup/Moderation/Error message" +msgid "Error while authorizing application" +msgstr "Error autoritzant l'aplicació" + +#: front/src/views/auth/PasswordResetConfirm.vue:7 +msgctxt "Content/Signup/Card.Title" +msgid "Error while changing your password" +msgstr "Error al canviar de contrasenya" + +#: front/src/views/admin/moderation/DomainsList.vue:6 +msgctxt "Content/Moderation/Message.Title" +msgid "Error while creating domain" +msgstr "Error creant el domini" + +#: front/src/components/moderation/FilterModal.vue:13 +msgctxt "Popup/Moderation/Error message" +msgid "Error while creating filter" +msgstr "Error creant el filtre" + +#: front/src/components/manage/users/InvitationForm.vue:4 +msgctxt "Content/Admin/Error message.Title" +msgid "Error while creating invitation" +msgstr "Error creant la invitació" + +#: front/src/components/manage/moderation/InstancePolicyForm.vue:7 +msgctxt "Content/Moderation/Error message.Title" +msgid "Error while creating rule" +msgstr "Error creant la regla" + +#: front/src/components/auth/Authorize.vue:7 +msgctxt "Popup/Moderation/Error message" +msgid "Error while fetching application data" +msgstr "Error obtenint les dades de l'aplicació" + +#: front/src/views/admin/moderation/DomainsDetail.vue:155 +msgctxt "Content/Moderation/Table" +msgid "Error while fetching node info" +msgstr "Error obtenint informació del node" + +#: front/src/components/admin/SettingsGroup.vue:5 +#: front/src/components/federation/FetchButton.vue:73 +msgctxt "Content/*/Error message.Title" +msgid "Error while saving settings" +msgstr "Error guardant els canvis" + +#: front/src/components/library/EditForm.vue:46 +msgctxt "Content/Library/Error message.Title" +msgid "Error while submitting edit" +msgstr "Error trametent les modificaions" + +#: front/src/components/manage/moderation/NoteForm.vue:3 +#, fuzzy +msgctxt "Content/Moderation/Error message.Title" +msgid "Error while submitting note" +msgstr "Error trametent les modificaions" + +#: front/src/components/moderation/ReportModal.vue:11 +#, fuzzy +msgctxt "Popup/Moderation/Error message" +msgid "Error while submitting report" +msgstr "Error trametent les modificaions" + +#: front/src/components/mixins/Translations.vue:32 +#: front/src/components/mixins/Translations.vue:33 +msgctxt "Content/Library/Table/Short" +msgid "Errored" +msgstr "Per error" + +#: front/src/views/content/libraries/Quota.vue:75 +msgctxt "Content/Library/Label" +msgid "Errored files" +msgstr "Arxius erronis" + +#: front/src/components/mixins/Translations.vue:17 +#: front/src/components/mixins/Translations.vue:18 +msgctxt "Content/Settings/Dropdown/Short" +msgid "Everyone" +msgstr "Tothom" + +#: front/src/components/mixins/Translations.vue:11 +#: front/src/components/mixins/Translations.vue:12 +msgctxt "Content/Settings/Dropdown" +msgid "Everyone on this instance" +msgstr "Tothom d'aquesta instà ncia" + +#: front/src/components/mixins/Translations.vue:12 +#: front/src/components/mixins/Translations.vue:13 +msgctxt "Content/Settings/Dropdown" +msgid "Everyone, across all instances" +msgstr "Tothom, en totes les instà ncies" + +#: front/src/components/library/radios/Builder.vue:62 +msgctxt "Content/Radio/Table.Label/Verb" +msgid "Exclude" +msgstr "Excloure" + +#: front/src/components/common/CollapseLink.vue:2 +msgctxt "*/*/Button,Label" +msgid "Expand" +msgstr "" + +#: front/src/components/manage/users/InvitationsTable.vue:41 +#: front/src/components/mixins/Translations.vue:59 +#: front/src/components/mixins/Translations.vue:60 +msgctxt "Content/Admin/Table.Label/Noun" +msgid "Expiration date" +msgstr "Data de caducitat" + +#: front/src/components/manage/users/InvitationsTable.vue:50 +msgctxt "Content/Admin/Table" +msgid "Expired" +msgstr "Caducat" + +#: front/src/components/manage/users/InvitationsTable.vue:21 +msgctxt "Content/Admin/Dropdown/Adjective" +msgid "Expired/used" +msgstr "Caducat/utilitzat" + +#: front/src/components/manage/moderation/InstancePolicyForm.vue:110 +msgctxt "Content/Moderation/Help text" +msgid "Explain why you're applying this policy. Depending on your instance configuration, this will help you remember why you acted on this account or domain, and may be displayed publicly to help users understand what moderation rules are in place." +msgstr "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ó." + +#: front/src/components/manage/library/UploadsTable.vue:25 +#: front/src/views/content/libraries/FilesTable.vue:16 +msgctxt "Content/Library/Dropdown" +msgid "Failed" +msgstr "Fallat" + +#: front/src/views/content/remote/Card.vue:75 +msgctxt "Content/Library/Card.List item/Noun" +msgid "Failed tracks:" +msgstr "Pistes fallides:" + +#: front/src/views/admin/library/AlbumDetail.vue:171 +#: front/src/views/admin/library/ArtistDetail.vue:159 +#: front/src/views/admin/library/TrackDetail.vue:223 +msgctxt "*/*/*" +msgid "Favorited tracks" +msgstr "Pistes preferides" + +#: front/src/components/Sidebar.vue:66 +#: src/components/mixins/Translations.vue:88 +#: front/src/components/mixins/Translations.vue:89 +msgctxt "Sidebar/Favorites/List item.Link/Noun" +msgid "Favorites" +msgstr "Preferides" + +#: front/src/components/About.vue:110 src/views/admin/Settings.vue:84 +#, fuzzy +msgctxt "*/*/*" +msgid "Federation" +msgstr "Federació" + +#: front/src/components/library/TrackDetail.vue:66 +msgctxt "Content/*/*/Noun" +msgid "Federation ID" +msgstr "ID de federació" + +#: front/src/components/library/EditCard.vue:45 +msgctxt "Content/Library/Card.Table.Header/Short" +msgid "Field" +msgstr "Camp" + +#: front/src/components/library/FileUpload.vue:93 +msgctxt "Content/Library/Table.Label" +msgid "Filename" +msgstr "Nom del fitxer" + +#: front/src/components/library/radios/Builder.vue:61 +msgctxt "Content/Radio/Table.Label/Noun" +msgid "Filter name" +msgstr "Nom del filtre" + +#: front/src/components/Home.vue:118 +#, fuzzy +msgctxt "Content/Home/Link" +msgid "Find another pod" +msgstr "Envia una altre modificació" + +#: front/src/components/manage/library/UploadsTable.vue:26 +#: front/src/components/mixins/Translations.vue:36 +#: front/src/views/content/libraries/FilesTable.vue:17 +#: front/src/components/mixins/Translations.vue:37 +msgctxt "Content/Library/*" +msgid "Finished" +msgstr "Acabat" + +#: front/src/components/manage/moderation/AccountsTable.vue:42 +#: front/src/components/manage/moderation/DomainsTable.vue:49 +#: front/src/views/admin/library/AlbumDetail.vue:155 +#: front/src/views/admin/library/ArtistDetail.vue:143 +#: front/src/views/admin/library/LibraryDetail.vue:162 +#: front/src/views/admin/library/TagDetail.vue:98 +#: front/src/views/admin/library/TrackDetail.vue:207 +#: front/src/views/admin/library/UploadDetail.vue:167 +#: front/src/views/admin/moderation/AccountsDetail.vue:236 +#: front/src/views/admin/moderation/DomainsDetail.vue:188 +msgctxt "Content/Moderation/Table.Label/Short (Value is a date)" +msgid "First seen" +msgstr "Vist per primera vegada" + +#: front/src/components/mixins/Translations.vue:56 +#: front/src/components/mixins/Translations.vue:57 +msgctxt "Content/Moderation/Dropdown/Noun" +msgid "First seen date" +msgstr "Data de descoberta" + +#: front/src/components/ShortcutsModal.vue:64 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Focus searchbar" +msgstr "" + +#: front/src/views/content/remote/Card.vue:100 +msgctxt "Content/Library/Card.Button.Label/Verb" +msgid "Follow" +msgstr "Seguir" + +#: front/src/views/content/Home.vue:16 +msgctxt "Content/Library/Title/Verb" +msgid "Follow remote libraries" +msgstr "Seguir les biblioteques remotes" + +#: front/src/views/content/remote/Card.vue:105 +msgctxt "Content/Library/Card.Paragraph" +msgid "Follow request pending approval" +msgstr "Petició de seguiment pendent d'aprovació" + +#: front/src/components/manage/library/LibrariesTable.vue:53 +#: front/src/components/mixins/Translations.vue:76 +#: front/src/views/admin/library/LibraryDetail.vue:170 +#: front/src/views/content/libraries/Detail.vue:7 +#: front/src/components/mixins/Translations.vue:77 +msgctxt "Content/Federation/*/Noun" +msgid "Followers" +msgstr "Seguidors" + +#: front/src/views/content/remote/Card.vue:116 +msgctxt "Content/Library/Card.Paragraph" +msgid "Following" +msgstr "Seguidor" + +#: front/src/components/mixins/Translations.vue:96 +#: front/src/components/mixins/Translations.vue:97 +msgctxt "Content/OAuth Scopes/Label" +msgid "Follows" +msgstr "Seguidors" + +#: front/src/components/library/TrackBase.vue:245 +msgctxt "Content/Track/Paragraph" +msgid "From album <a class=\"internal\" href=\"%{ albumUrl }\">%{ album }</a> by <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" +msgstr "De l'à lbum <a class=\"internal\" href=\"%{ albumUrl }\">%{ album }</a> de <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" + +#: front/src/components/auth/Authorize.vue:28 +msgctxt "Content/Auth/Label/Noun" +msgid "Full access" +msgstr "Accés total" + +#: front/src/components/auth/SubsonicTokenForm.vue:7 +msgctxt "Content/Settings/Paragraph'" +msgid "Funkwhale is compatible with other music players that support the Subsonic API." +msgstr "Funkwhale és compatible amb altres reproductors de música que suporten l'API Subsonic." + +#: front/src/components/Home.vue:88 +#, fuzzy +msgctxt "Content/Home/Paragraph" +msgid "Funkwhale is free and developped by a friendly community of volunteers." +msgstr "Funkwahale és gratuïti et dona el control d ela teva música." + +#: front/src/components/About.vue:78 +msgctxt "*/*/*" +msgid "Funkwhale version" +msgstr "" + +#: front/src/components/ShortcutsModal.vue:56 +msgctxt "Popup/Keyboard shortcuts/Title" +msgid "General shortcuts" +msgstr "Dreceres principals" + +#: front/src/components/manage/users/InvitationForm.vue:16 +msgctxt "Content/Admin/Button.Label/Verb" +msgid "Get a new invitation" +msgstr "Obtenir una nova invitació" + +#: front/src/views/content/Home.vue:12 src/views/content/Home.vue:19 +msgctxt "Content/Library/Button.Label/Verb" +msgid "Get started" +msgstr "Començar" + +#: front/src/components/Footer.vue:45 +#: src/components/library/ImportStatusModal.vue:45 +msgctxt "Footer/*/Link" +msgid "Getting help" +msgstr "Obtenir ajuda" + +#: front/src/components/common/ActionTable.vue:35 +#: front/src/components/common/ActionTable.vue:56 +msgctxt "Content/*/Button.Label/Short, Verb" +msgid "Go" +msgstr "Vés" + +#: front/src/components/PageNotFound.vue:14 +msgctxt "Content/*/Button.Label/Verb" +msgid "Go to home page" +msgstr "Tornar a la pà gina d'inici" + +#: front/src/views/Notifications.vue:27 src/views/Notifications.vue:61 +msgctxt "Content/Notifications/Button.Label" +msgid "Got it!" +msgstr "" + +#: front/src/components/auth/Settings.vue:128 +msgctxt "Content/Settings/Title" +msgid "Hidden artists" +msgstr "Artistes ocults" + +#: front/src/components/About.vue:155 +msgctxt "*/*/*/Verb" +msgid "Hide" +msgstr "" + +#: front/src/components/manage/moderation/InstancePolicyForm.vue:114 +msgctxt "Content/Moderation/Help text" +msgid "Hide account or domain content, except from followers." +msgstr "Amagar el contingut del compte o domini, excepte pels seguidors." + +#: front/src/components/moderation/FilterModal.vue:40 +msgctxt "Popup/*/Button.Label" +msgid "Hide content" +msgstr "Amagar el contingut" + +#: front/src/components/audio/PlayButton.vue:31 +msgctxt "*/Queue/Dropdown/Button/Label/Short" +msgid "Hide content from this artist" +msgstr "Amagar la informació d'aquest artista" + +#: front/src/components/audio/Player.vue:669 +msgctxt "Sidebar/Player/Icon.Tooltip/Verb" +msgid "Hide content from this artist…" +msgstr "Amagar la informació d'aquest artista …" + +#: front/src/components/library/Home.vue:65 +msgctxt "Head/Home/Title" +msgid "Home" +msgstr "Inici" + +#: front/src/components/auth/SubsonicTokenForm.vue:10 +msgctxt "Content/Settings/Paragraph" +msgid "However, accessing Funkwhale from those clients require a separate password you can set below." +msgstr "Tanmateix, accedir a Funkwhale des d’aquests clients requereix una contrasenya separada que pots definir a continuació." + +#: front/src/views/auth/PasswordResetConfirm.vue:24 +#, fuzzy +msgctxt "Content/Signup/Paragraph" +msgid "If the email address provided in the previous step is valid and linked to a user account, you should receive an email with reset instructions in the next couple of minutes." +msgstr "Si l’adreça de correu electrònic proporcionada és và lida i està vinculada a un compte d’usuari, haureu de rebre un correu electrònic amb instruccions de restabliment en els propers minuts." + +#: front/src/components/auth/Settings.vue:205 +msgctxt "Content/Applications/Paragraph" +msgid "If you authorize third-party applications to access your data, those applications will be listed here." +msgstr "Si autoritzes a donar les teves dades a aplicacions de tercers, aquestes aplicacions seran llistades aquÃ." + +#: front/src/components/mixins/Translations.vue:46 +#: front/src/components/mixins/Translations.vue:47 +#, fuzzy +msgctxt "Content/Moderation/Dropdown" +msgid "Illegal content" +msgstr "Amagar el contingut" + +#: front/src/components/library/ImportStatusModal.vue:3 +msgctxt "Popup/Import/Title" +msgid "Import detail" +msgstr "Detalls de la importació" + +#: front/src/components/library/FileUpload.vue:50 +msgctxt "Content/Library/Input.Label/Noun" +msgid "Import reference" +msgstr "Referència de la importació" + +#: front/src/components/manage/library/UploadsTable.vue:20 +#: front/src/components/manage/library/UploadsTable.vue:64 +#: front/src/views/admin/library/UploadDetail.vue:131 +#: front/src/views/content/libraries/FilesTable.vue:11 +#: front/src/views/content/libraries/FilesTable.vue:59 +msgctxt "Content/*/*/Noun" +msgid "Import status" +msgstr "Estat de la importació" + +#: front/src/components/mixins/Translations.vue:37 +#: front/src/components/mixins/Translations.vue:38 +msgctxt "Content/Library/Help text" +msgid "Imported" +msgstr "Importat" + +#: front/src/components/federation/FetchButton.vue:47 +msgctxt "*/*/Error" +msgid "Impossible to connect to the remote server" +msgstr "Impossible connectar amb el servidor remot" + +#: front/src/components/moderation/FilterModal.vue:26 +msgctxt "Popup/Moderation/List item" +msgid "In \"Recently added\" widget" +msgstr "Dins el giny \"Afegit recentment\"" + +#: front/src/components/moderation/FilterModal.vue:27 +msgctxt "Popup/Moderation/List item" +msgid "In artists and album listings" +msgstr "Dins les llistes d'artistes i à lbums" + +#: front/src/components/favorites/TrackFavoriteIcon.vue:3 +msgctxt "Content/Track/Button.Message" +msgid "In favorites" +msgstr "A favorits" + +#: front/src/components/moderation/FilterModal.vue:25 +msgctxt "Popup/Moderation/List item" +msgid "In other users favorites and listening history" +msgstr "Dins els preferits d'altres usuaris i l'historiador de reproduccions" + +#: front/src/components/moderation/FilterModal.vue:28 +msgctxt "Popup/Moderation/List item" +msgid "In radio suggestions" +msgstr "Dins les sugerències de la rà dio" + +#: front/src/components/manage/users/UsersTable.vue:55 +msgctxt "Content/Admin/Table" +msgid "Inactive" +msgstr "Inactiu" + +#: front/src/components/ShortcutsModal.vue:124 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Increase volume" +msgstr "Augmentar el volum" + +#: front/src/components/playlists/Editor.vue:41 +msgctxt "Content/Playlist/Button.Label/Verb" +msgid "Insert from queue (%{ count } track)" +msgid_plural "Insert from queue (%{ count } tracks)" +msgstr[0] "Insereix des de la cua (%{ count } pista)" +msgstr[1] "Insereix des de la cua (%{ count } pistes)" + +#: front/src/components/mixins/Translations.vue:16 +#: front/src/components/mixins/Translations.vue:17 +msgctxt "Content/Settings/Dropdown/Short" +msgid "Instance" +msgstr "Instà ncia" + +#: front/src/views/admin/moderation/DomainsDetail.vue:99 +msgctxt "Content/Moderation/Title" +msgid "Instance data" +msgstr "Dades de la instà ncia" + +#: front/src/views/admin/Settings.vue:80 +msgctxt "Content/Admin/Menu" +msgid "Instance information" +msgstr "Informació d'aquesta instà ncia" + +#: front/src/components/library/Radios.vue:9 +msgctxt "Content/Radio/Title" +msgid "Instance radios" +msgstr "Rà dios de la instà ncia" + +#: front/src/views/admin/Settings.vue:75 +msgctxt "Head/Admin/Title" +msgid "Instance settings" +msgstr "Parà metres de la instà ncia" + +#: front/src/components/SetInstanceModal.vue:19 +msgctxt "Popup/Instance/Input.Label/Noun" +msgid "Instance URL" +msgstr "Adreça de la instà ncia" + +#: front/src/components/manage/moderation/ReportCard.vue:92 +#: front/src/components/manage/moderation/ReportCard.vue:203 +msgctxt "Content/*/*/Noun" +msgid "Internal notes" +msgstr "" + +#: front/src/components/library/FileUpload.vue:268 +msgctxt "Content/Library/Help text" +msgid "Invalid file type, ensure you are uploading an audio file. Supported file extensions are %{ extensions }" +msgstr "El tipus de fitxer no és và lid, assegurat de carregar un fitxer d'à udio. Les extensions de fitxers compatibles són %{ extensions }" + +#: front/src/components/library/ImportStatusModal.vue:139 +#: front/src/components/mixins/Translations.vue:45 +#: front/src/components/mixins/Translations.vue:46 +msgctxt "Popup/Import/Error.Label" +msgid "Invalid metadata" +msgstr "Metadades invà lides" + +#: front/src/components/auth/SignupForm.vue:40 +#: front/src/components/manage/users/InvitationForm.vue:11 +msgctxt "Content/*/Input.Label" +msgid "Invitation code" +msgstr "Codi d'invitació" + +#: front/src/views/admin/users/Base.vue:8 +#: front/src/views/admin/users/InvitationsList.vue:24 +msgctxt "*/Admin/*/Noun" +msgid "Invitations" +msgstr "Invitacions" + +#: front/src/components/manage/moderation/DomainsTable.vue:9 +#: front/src/views/admin/moderation/DomainsDetail.vue:106 +msgctxt "Content/Moderation/*/Adjective" +msgid "Is present on allow-list" +msgstr "" + +#: front/src/components/Footer.vue:49 +msgctxt "Footer/*/List item.Link" +msgid "Issue tracker" +msgstr "Seguiment de problemes" + +#: front/src/components/SetInstanceModal.vue:5 +msgctxt "Popup/Instance/Error message.Title" +msgid "It is not possible to connect to the given URL" +msgstr "No és possible conectar-se a la URL assenyalada" + +#: front/src/components/mixins/Translations.vue:65 +#: front/src/components/mixins/Translations.vue:66 +msgctxt "*/*/*/Noun" +msgid "Items" +msgstr "" + +#: front/src/components/Footer.vue:33 src/components/ShortcutsModal.vue:3 +msgctxt "*/*/*/Noun" +msgid "Keyboard shortcuts" +msgstr "Dreceres de teclat" + +#: front/src/views/admin/moderation/DomainsDetail.vue:198 +msgctxt "Content/Moderation/Table.Label.Link" +msgid "Known accounts" +msgstr "Comptes coneguts" + +#: front/src/views/content/remote/Home.vue:14 +msgctxt "Content/Library/Title" +msgid "Known libraries" +msgstr "Biblioteques conegudes" + +#: front/src/components/manage/users/UsersTable.vue:41 +#: front/src/components/mixins/Translations.vue:70 +#: front/src/views/admin/moderation/AccountsDetail.vue:206 +#: front/src/components/mixins/Translations.vue:71 +msgctxt "Content/Profile/Table.Label/Short, Noun (Value is a date)" +msgid "Last activity" +msgstr "Última activitat" + +#: front/src/views/admin/moderation/AccountsDetail.vue:189 +#: front/src/views/admin/moderation/DomainsDetail.vue:115 +msgctxt "Content/*/Table.Label" +msgid "Last checked" +msgstr "Última comprovació" + +#: front/src/components/playlists/PlaylistModal.vue:46 +msgctxt "Popup/Playlist/Table.Label/Short" +msgid "Last modification" +msgstr "Última modificació" + +#: front/src/components/manage/moderation/AccountsTable.vue:43 +msgctxt "Content/Moderation/Table.Label/Noun" +msgid "Last seen" +msgstr "Vist la darrera vegada" + +#: front/src/components/mixins/Translations.vue:57 +#: front/src/components/mixins/Translations.vue:58 +msgctxt "Content/Moderation/Dropdown/Noun" +msgid "Last seen date" +msgstr "Data de la darrera visita" + +#: front/src/views/content/remote/Card.vue:73 +msgctxt "Content/Library/Card.List item/Noun" +msgid "Last update:" +msgstr "Última actualització:" + +#: front/src/components/common/ActionTable.vue:49 +msgctxt "Modal/*/Button.Label/Short, Verb" +msgid "Launch" +msgstr "Iniciar" + +#: front/src/components/Home.vue:35 +#, fuzzy +msgctxt "Content/Home/Link" +msgid "Learn more" +msgstr "Carrega'n més …" + +#: front/src/components/manage/users/InvitationForm.vue:58 +msgctxt "Content/Admin/Input.Placeholder" +msgid "Leave empty for a random code" +msgstr "Deixar en blanc per obtenir un codi aleatori" + +#: front/src/components/audio/EmbedWizard.vue:17 +msgctxt "Popup/Embed/Paragraph" +msgid "Leave empty for a responsive widget" +msgstr "Deixeu-ho en blanc per a un giny responsiu" + +#: front/src/components/mixins/Translations.vue:64 +#: front/src/components/mixins/Translations.vue:65 +msgctxt "*/*/*/Noun" +msgid "Length" +msgstr "" + +#: front/src/views/admin/library/AlbumDetail.vue:248 +#: front/src/views/admin/library/ArtistDetail.vue:236 +#: front/src/views/admin/library/Base.vue:17 +#: front/src/views/admin/library/LibrariesList.vue:24 +#: front/src/views/admin/library/TrackDetail.vue:300 +#: front/src/views/admin/moderation/AccountsDetail.vue:339 +#: front/src/views/admin/moderation/DomainsDetail.vue:271 +#: front/src/views/content/Base.vue:5 +msgctxt "*/*/*/Noun" +msgid "Libraries" +msgstr "Biblioteques" + +#: front/src/components/mixins/Translations.vue:84 +#: front/src/components/mixins/Translations.vue:85 +msgctxt "Content/OAuth Scopes/Label" +msgid "Libraries and uploads" +msgstr "Biblioteques i cà rregues" + +#: front/src/views/content/libraries/Form.vue:2 +msgctxt "Content/Library/Paragraph" +msgid "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." +msgstr "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." + +#: front/src/components/Sidebar.vue:85 +#: front/src/components/manage/library/UploadsTable.vue:60 +#: front/src/components/manage/users/UsersTable.vue:174 +#: front/src/components/mixins/Report.vue:77 +#: front/src/views/admin/library/UploadDetail.vue:144 +#: front/src/views/admin/moderation/AccountsDetail.vue:518 src/entities.js:132 +#: front/src/components/mixins/Report.vue:78 +#, fuzzy +msgctxt "*/*/*/Noun" +msgid "Library" +msgstr "Biblioteca" + +#: front/src/views/content/libraries/Form.vue:103 +msgctxt "Content/Library/Message" +msgid "Library created" +msgstr "Biblioteca creada" + +#: front/src/views/admin/library/LibraryDetail.vue:78 +msgctxt "Content/Moderation/Title" +msgid "Library data" +msgstr "Dades de la biblioteca" + +#: front/src/views/content/libraries/Form.vue:123 +msgctxt "Content/Library/Message" +msgid "Library deleted" +msgstr "Biblioteca suprimida" + +#: front/src/views/admin/library/EditsList.vue:4 +msgctxt "Content/Admin/Title/Noun" +msgid "Library edits" +msgstr "Modificacions de la biblioteca" + +#: front/src/views/content/libraries/Form.vue:100 +msgctxt "Content/Library/Message" +msgid "Library updated" +msgstr "Biblioteca actualitzada" + +#: front/src/components/library/TrackDetail.vue:19 +#: front/src/components/manage/library/TracksTable.vue:43 +#: front/src/views/admin/library/TrackDetail.vue:165 src/edits.js:84 +#: front/src/entities.js:115 +msgctxt "Content/*/*/Noun" +msgid "License" +msgstr "Llicència" + +#: front/src/components/Footer.vue:90 +msgctxt "Footer/Settings/Dropdown.Label/Theme name" +msgid "Light" +msgstr "" + +#: front/src/views/admin/library/AlbumDetail.vue:188 +#: front/src/views/admin/library/ArtistDetail.vue:176 +#: front/src/views/admin/library/LibraryDetail.vue:179 +#: front/src/views/admin/library/TrackDetail.vue:240 +#: front/src/views/admin/moderation/AccountsDetail.vue:269 +msgctxt "Content/Moderation/Table.Label/Noun" +msgid "Linked reports" +msgstr "" + +#: front/src/components/Home.vue:135 +msgctxt "Content/Home/Link" +msgid "Listen to public albums and playlists shared on this pod" +msgstr "" + +#: front/src/components/mixins/Translations.vue:92 +#: front/src/views/admin/library/AlbumDetail.vue:163 +#: front/src/views/admin/library/ArtistDetail.vue:151 +#: front/src/views/admin/library/TrackDetail.vue:215 +#: front/src/components/mixins/Translations.vue:93 +msgctxt "*/*/*/Noun" +msgid "Listenings" +msgstr "Audicions" + +#: front/src/components/audio/track/Table.vue:25 +#: front/src/components/library/ArtistDetail.vue:28 +msgctxt "Content/*/Button.Label" +msgid "Load more…" +msgstr "Carrega'n més …" + +#: front/src/views/content/libraries/Detail.vue:21 +msgctxt "Content/Library/Paragraph" +msgid "Loading followers…" +msgstr "Carregant els seguidors …" + +#: front/src/views/content/libraries/Home.vue:3 +msgctxt "Content/Library/Paragraph" +msgid "Loading Libraries…" +msgstr "Carregant les biblioteques …" + +#: front/src/views/content/libraries/Detail.vue:3 +#: front/src/views/content/libraries/Upload.vue:3 +msgctxt "Content/Library/Paragraph" +msgid "Loading library data…" +msgstr "Carregant les dades de la biblioteca …" + +#: front/src/views/Notifications.vue:84 +msgctxt "Content/Notifications/Paragraph" +msgid "Loading notifications…" +msgstr "Carregant les notificacions …" + +#: front/src/views/content/remote/Home.vue:3 +msgctxt "Content/Library/Paragraph" +msgid "Loading remote libraries…" +msgstr "Carregant les biblioteques remotes …" + +#: front/src/views/content/libraries/Quota.vue:4 +msgctxt "Content/Library/Paragraph" +msgid "Loading usage data…" +msgstr "Carregant dades d'utilització …" + +#: front/src/components/favorites/List.vue:5 +msgctxt "Content/Favorites/Message" +msgid "Loading your favorites…" +msgstr "Carregant els vostres favorits …" + +#: front/src/components/manage/library/AlbumsTable.vue:65 +#: front/src/components/manage/library/ArtistsTable.vue:58 +#: front/src/components/manage/library/LibrariesTable.vue:75 +#: front/src/components/manage/library/TracksTable.vue:71 +#: front/src/components/manage/library/UploadsTable.vue:99 +#: front/src/components/manage/moderation/ReportCard.vue:173 +#: front/src/views/admin/library/AlbumDetail.vue:19 +#: front/src/views/admin/library/ArtistDetail.vue:18 +#: front/src/views/admin/library/LibraryDetail.vue:18 +#: front/src/views/admin/library/TrackDetail.vue:18 +#: front/src/views/admin/library/UploadDetail.vue:19 +msgctxt "Content/Moderation/*/Short, Noun" +msgid "Local" +msgstr "Local" + +#: front/src/components/manage/moderation/AccountsTable.vue:59 +#: front/src/views/admin/moderation/AccountsDetail.vue:18 +msgctxt "Content/Moderation/*/Short, Noun" +msgid "Local account" +msgstr "Compte local" + +#: front/src/components/Home.vue:96 src/views/auth/Login.vue:29 +msgctxt "Head/Login/Title" +msgid "Log In" +msgstr "Iniciar sessió" + +#: front/src/views/auth/Login.vue:4 +msgctxt "Content/Login/Title/Verb" +msgid "Log in to your Funkwhale account" +msgstr "Iniciar sessió amb el teu compte de Funkwhale" + +#: front/src/components/auth/Logout.vue:20 +msgctxt "Head/Login/Title" +msgid "Log Out" +msgstr "Tancar sessió" + +#: front/src/components/Sidebar.vue:38 +msgctxt "Sidebar/Profile/List item.Link" +msgid "Logged in as %{ username }" +msgstr "Sessió iniciada com a %{ username }" + +#: front/src/components/Sidebar.vue:54 src/components/auth/LoginForm.vue:41 +msgctxt "*/Login/*/Verb" +msgid "Login" +msgstr "Iniciar sessió" + +#: front/src/views/admin/moderation/AccountsDetail.vue:148 +msgctxt "Content/*/*/Noun" +msgid "Login status" +msgstr "Estat de la sessió" + +#: front/src/components/Sidebar.vue:52 +msgctxt "Sidebar/Login/List item.Link/Verb" +msgid "Logout" +msgstr "Tancar sessió" + +#: front/src/views/content/libraries/Home.vue:9 +msgctxt "Content/Library/Paragraph" +msgid "Looks like you don't have a library, it's time to create one." +msgstr "Sembla que no tens biblioteca, és hora de crear-ne una." + +#: front/src/components/audio/Player.vue:658 +#: src/components/audio/Player.vue:659 +msgctxt "Sidebar/Player/Icon.Tooltip" +msgid "Looping disabled. Click to switch to single-track looping." +msgstr "Bucle desactivat. Clica per activar el bucle d'una sola pista." + +#: front/src/components/audio/Player.vue:661 +#: src/components/audio/Player.vue:662 +msgctxt "Sidebar/Player/Icon.Tooltip" +msgid "Looping on a single track. Click to switch to whole queue looping." +msgstr "Bucle en una sola pista. Cliqueu per canviar al bucle complet de la cua." + +#: front/src/components/audio/Player.vue:664 +#: src/components/audio/Player.vue:665 +msgctxt "Sidebar/Player/Icon.Tooltip" +msgid "Looping on whole queue. Click to disable looping." +msgstr "Bucle a tota la cua. Cliqueu per inhabilitar el bucle." + +#: front/src/components/Sidebar.vue:230 +msgctxt "Sidebar/*/Hidden text" +msgid "Main menu" +msgstr "Menú principal" + +#: front/src/views/admin/library/Base.vue:34 +msgctxt "Head/Admin/Title" +msgid "Manage library" +msgstr "Gestionar la biblioteca" + +#: front/src/components/manage/moderation/InstancePolicyModal.vue:8 +#, fuzzy +msgctxt "Popup/Moderation/Title/Verb" +msgid "Manage moderation rules for %{ obj }" +msgstr "Sota la regla de moderació" + +#: front/src/components/playlists/PlaylistModal.vue:3 +msgctxt "Popup/Playlist/Title/Verb" +msgid "Manage playlists" +msgstr "Gestionar les llistes de reproducció" + +#: front/src/views/admin/users/Base.vue:20 +msgctxt "Head/Admin/Title" +msgid "Manage users" +msgstr "Gestionar els usuaris" + +#: front/src/views/playlists/List.vue:8 +msgctxt "Content/Playlist/Button.Label/Verb" +msgid "Manage your playlists" +msgstr "Gestiona les teves llistes de distribució" + +#: front/src/views/Notifications.vue:79 +msgctxt "Content/Notifications/Button.Label/Verb" +msgid "Mark all as read" +msgstr "Marca-ho tot com a llegit" + +#: front/src/components/notifications/NotificationRow.vue:46 +msgctxt "Content/Notifications/Button.Tooltip/Verb" +msgid "Mark as read" +msgstr "Marcat com a llegit" + +#: front/src/components/notifications/NotificationRow.vue:47 +msgctxt "Content/Notifications/Button.Tooltip/Verb" +msgid "Mark as unread" +msgstr "Marcat com a no llegit" + +#: front/src/views/admin/moderation/AccountsDetail.vue:321 +msgctxt "Content/*/*/Unit" +msgid "MB" +msgstr "MB" + +#: front/src/components/audio/Player.vue:651 +msgctxt "Sidebar/Player/Hidden text" +msgid "Media player" +msgstr "Reproductor multimèdia" + +#: front/src/components/auth/Profile.vue:12 +msgctxt "Content/Profile/Paragraph" +msgid "Member since %{ date }" +msgstr "Membre des de %{ date }" + +#: front/src/components/manage/moderation/ReportCard.vue:109 +#: front/src/components/moderation/ReportModal.vue:41 +msgctxt "*/*/Field.Label/Noun" +msgid "Message" +msgstr "" + +#: front/src/components/Footer.vue:32 +msgctxt "Footer/*/List item.Link" +msgid "Mobile and desktop apps" +msgstr "Aplicacions mòbils i d'escriptori" + +#: front/src/components/Home.vue:143 +#, fuzzy +msgctxt "Content/Home/Link" +msgid "Mobile apps" +msgstr "Aplicacions mòbils i d'escriptori" + +#: front/src/components/Sidebar.vue:96 +#: src/components/manage/users/UsersTable.vue:178 +#: front/src/views/admin/Settings.vue:85 +#: front/src/views/admin/moderation/AccountsDetail.vue:522 +#: front/src/views/admin/moderation/Base.vue:43 +msgctxt "*/Moderation/*" +msgid "Moderation" +msgstr "Moderació" + +#: front/src/views/admin/moderation/AccountsDetail.vue:78 +#: front/src/views/admin/moderation/DomainsDetail.vue:70 +msgctxt "Content/Moderation/Card.Paragraph" +msgid "Moderation policies help you control how your instance interact with a given domain or account." +msgstr "Les regles de moderació t'ajudaran a controlar com la vostra instà ncia interactua amb un domini o un compte determinat." + +#: front/src/components/manage/moderation/InstancePolicyModal.vue:4 +#, fuzzy +msgctxt "Content/Moderation/Button.Label" +msgid "Moderation rules…" +msgstr "Editar les regles de moderació" + +#: front/src/components/library/EditCard.vue:5 +msgctxt "Content/Library/Card/Short" +msgid "Modification %{ id }" +msgstr "Modificatició %{ id }" + +#: front/src/components/mixins/Translations.vue:58 +#: front/src/components/mixins/Translations.vue:59 +msgctxt "Content/Playlist/Dropdown/Noun" +msgid "Modification date" +msgstr "Data de modificació" + +#: front/src/components/audio/PlayButton.vue:100 +#: front/src/components/library/AlbumBase.vue:43 +#: front/src/components/library/ArtistBase.vue:54 +#: front/src/components/library/TrackBase.vue:59 +msgctxt "*/*/Button.Label/Noun" +msgid "More…" +msgstr "Més …" + +#: front/src/components/Sidebar.vue:63 src/views/admin/Settings.vue:82 +msgctxt "*/*/*/Noun" +msgid "Music" +msgstr "Música" + +#: front/src/components/audio/Player.vue:657 +msgctxt "Sidebar/Player/Icon.Tooltip/Verb" +msgid "Mute" +msgstr "Silencia" + +#: front/src/components/manage/moderation/InstancePolicyCard.vue:24 +#: front/src/components/manage/moderation/InstancePolicyForm.vue:115 +msgctxt "Content/Moderation/*/Verb" +msgid "Mute activity" +msgstr "Silencia l'activitat" + +#: front/src/components/manage/moderation/InstancePolicyCard.vue:28 +#: front/src/components/manage/moderation/InstancePolicyForm.vue:119 +msgctxt "Content/Moderation/*/Verb" +msgid "Mute notifications" +msgstr "Silencia les notificacions" + +#: front/src/components/Sidebar.vue:34 +msgctxt "Sidebar/Profile/Title" +msgid "My account" +msgstr "El meu compte" + +#: front/src/components/library/radios/Builder.vue:238 +msgctxt "Content/Radio/Input.Placeholder" +msgid "My awesome description" +msgstr "La meva descripció genial" + +#: front/src/views/content/libraries/Form.vue:72 +msgctxt "Content/Library/Input.Placeholder" +msgid "My awesome library" +msgstr "La meva impressionant biblioteca" + +#: front/src/components/playlists/Form.vue:76 +msgctxt "Content/Playlist/Input.Placeholder" +msgid "My awesome playlist" +msgstr "La meva impressionant llista de reproducció" + +#: front/src/components/library/radios/Builder.vue:237 +msgctxt "Content/Radio/Input.Placeholder" +msgid "My awesome radio" +msgstr "La meva rà dio genial" + +#: front/src/views/content/libraries/Home.vue:6 +msgctxt "Content/Library/Title" +msgid "My libraries" +msgstr "Les meves biblioteques" + +#: front/src/components/About.vue:105 src/components/audio/track/Row.vue:40 +#: front/src/components/library/EditCard.vue:60 +#: front/src/components/library/EditForm.vue:70 +#: front/src/components/library/TrackDetail.vue:34 +#: front/src/components/library/TrackDetail.vue:43 +#: front/src/components/library/TrackDetail.vue:52 +#: front/src/components/library/TrackDetail.vue:61 +#: front/src/components/manage/library/AlbumsTable.vue:73 +#: front/src/components/manage/library/TracksTable.vue:76 +#: front/src/components/manage/library/UploadsTable.vue:121 +#: front/src/components/manage/library/UploadsTable.vue:128 +#: front/src/components/manage/moderation/ReportCard.vue:78 +#: front/src/components/manage/moderation/ReportCard.vue:87 +#: front/src/components/manage/moderation/ReportCard.vue:193 +#: front/src/components/manage/users/UsersTable.vue:62 +#: front/src/views/admin/library/UploadDetail.vue:179 +#: front/src/views/admin/library/UploadDetail.vue:214 +#: front/src/views/admin/library/UploadDetail.vue:233 +#: front/src/views/admin/library/UploadDetail.vue:244 +#: front/src/views/admin/library/UploadDetail.vue:257 +#: front/src/views/admin/moderation/AccountsDetail.vue:193 +#: front/src/views/admin/moderation/DomainsDetail.vue:119 +#: front/src/views/content/libraries/FilesTable.vue:95 +#: front/src/views/content/libraries/FilesTable.vue:101 +msgctxt "*/*/*" +msgid "N/A" +msgstr "No disponible" + +#: front/src/components/auth/ApplicationForm.vue:9 +#: front/src/components/auth/Settings.vue:133 +#: front/src/components/manage/library/ArtistsTable.vue:39 +#: front/src/components/manage/library/LibrariesTable.vue:48 +#: front/src/components/manage/library/TagsTable.vue:41 +#: front/src/components/manage/library/UploadsTable.vue:59 +#: front/src/components/manage/moderation/AccountsTable.vue:39 +#: front/src/components/manage/moderation/DomainsTable.vue:46 +#: front/src/components/mixins/Translations.vue:63 +#: front/src/components/playlists/PlaylistModal.vue:45 +#: front/src/views/admin/library/ArtistDetail.vue:103 +#: front/src/views/admin/library/LibraryDetail.vue:85 +#: front/src/views/admin/library/TagDetail.vue:68 +#: front/src/views/admin/library/UploadDetail.vue:92 +#: front/src/views/admin/moderation/DomainsDetail.vue:134 +#: front/src/views/content/libraries/Form.vue:10 src/edits.js:17 +#: front/src/components/mixins/Translations.vue:64 +msgctxt "*/*/*/Noun" +msgid "Name" +msgstr "Nom" + +#: front/src/views/Notifications.vue:24 src/views/Notifications.vue:58 +msgctxt "*/*/*" +msgid "Never" +msgstr "" + +#: front/src/components/auth/Settings.vue:88 +#: front/src/views/auth/PasswordResetConfirm.vue:14 +msgctxt "Content/Settings/Input.Label" +msgid "New password" +msgstr "Nova contrasenya" + +#: front/src/components/Sidebar.vue:177 +msgctxt "Sidebar/Player/Paragraph" +msgid "New tracks will be appended here automatically." +msgstr "Les noves pistes s'afegiran automà ticament aquÃ." + +#: front/src/components/library/EditCard.vue:47 +msgctxt "Content/Library/Card.Table.Header/Short" +msgid "New value" +msgstr "Nou valor" + +#: front/src/components/audio/Player.vue:655 +msgctxt "Sidebar/Player/Icon.Tooltip" +msgid "Next track" +msgstr "Pista següent" + +#: front/src/components/Sidebar.vue:134 +#: front/src/components/manage/moderation/DomainsTable.vue:13 +#: front/src/views/admin/moderation/DomainsDetail.vue:110 +msgctxt "*/*/*" +msgid "No" +msgstr "No" + +#: front/src/components/audio/Search.vue:25 +msgctxt "Content/Search/Paragraph" +msgid "No album matched your query" +msgstr "Cap à lbum correspon a la teva consulta" + +#: front/src/components/audio/Search.vue:16 +msgctxt "Content/Search/Paragraph" +msgid "No artist matched your query" +msgstr "Cap artista coincideix amb la teva consulta" + +#: front/src/components/library/TrackDetail.vue:14 +msgctxt "Content/Track/Table.Paragraph" +msgid "No copyright information available for this track" +msgstr "No hi ha informació sobre els drets d'autor d'aquesta pista" + +#: front/src/components/About.vue:25 src/components/Home.vue:25 +msgctxt "Content/Home/Paragraph" +msgid "No description available." +msgstr "" + +#: front/src/components/library/TrackDetail.vue:25 +msgctxt "Content/Track/Table.Paragraph" +msgid "No licensing information for this track" +msgstr "No hi ha informació de la llicència d'aquesta pista" + +#: front/src/components/federation/LibraryWidget.vue:6 +msgctxt "Content/Federation/Paragraph" +msgid "No matching library." +msgstr "Sense biblioteques coincidents." + +#: front/src/views/Notifications.vue:93 +msgctxt "Content/Notifications/Paragraph" +msgid "No notification to show." +msgstr "No hi ha notificacions." + +#: front/src/components/common/EmptyState.vue:7 +msgctxt "Content/*/Paragraph" +msgid "No results were found." +msgstr "No s'ha trobat cap resultat." + +#: front/src/components/About.vue:32 +msgctxt "Content/Home/Paragraph" +msgid "No rules available." +msgstr "" + +#: front/src/components/About.vue:39 +msgctxt "Content/Home/Paragraph" +msgid "No terms available." +msgstr "" + +#: front/src/components/mixins/Translations.vue:10 +#: front/src/components/mixins/Translations.vue:11 +msgctxt "Content/Settings/Dropdown" +msgid "Nobody except me" +msgstr "Només jo" + +#: front/src/views/content/libraries/Detail.vue:57 +msgctxt "Content/Library/Paragraph" +msgid "Nobody is following this library" +msgstr "Ningú segueix aquesta biblioteca" + +#: front/src/components/manage/users/InvitationsTable.vue:51 +msgctxt "Content/Admin/Table" +msgid "Not used" +msgstr "No utilitzat" + +#: front/src/components/Sidebar.vue:46 +#: src/components/mixins/Translations.vue:112 +#: front/src/views/Notifications.vue:151 +#: src/components/mixins/Translations.vue:113 +msgctxt "*/Notifications/*" +msgid "Notifications" +msgstr "Notificacions" + +#: front/src/components/mixins/Translations.vue:47 +#: front/src/components/mixins/Translations.vue:48 +#, fuzzy +msgctxt "Content/Moderation/Dropdown" +msgid "Offensive content" +msgstr "Amagar el contingut" + +#: front/src/components/Footer.vue:55 +msgctxt "Footer/*/List item.Link" +msgid "Official website" +msgstr "Pà gina oficial" + +#: front/src/components/auth/Settings.vue:83 +msgctxt "Content/Settings/Input.Label" +msgid "Old password" +msgstr "Contrasenya antiga" + +#: front/src/components/library/EditCard.vue:46 +msgctxt "Content/Library/Card.Table.Header/Short" +msgid "Old value" +msgstr "Valor antic" + +#: front/src/components/About.vue:90 +#, fuzzy +msgctxt "*/*/*/State of registrations" +msgid "Open" +msgstr "Obert" + +#: front/src/components/manage/users/InvitationsTable.vue:20 +msgctxt "Content/Admin/Dropdown/Adjective" +msgid "Open" +msgstr "Obert" + +#: front/src/components/library/ImportStatusModal.vue:56 +msgctxt "Popup/Import/Table.Label/Value" +msgid "Open a support thread (include the debug information below in your message)" +msgstr "Obrir un fil de suport (incloure la informació de depuració a continuació dins el missatge)" + +#: front/src/components/library/AlbumBase.vue:87 +#: front/src/components/library/ArtistBase.vue:99 +#: front/src/components/library/TagDetail.vue:11 +#: front/src/components/library/TrackBase.vue:103 +#: front/src/components/manage/moderation/ReportCard.vue:128 +msgctxt "Content/Moderation/Link" +msgid "Open in moderation interface" +msgstr "Obrir dins la interfÃcie de moderació" + +#: front/src/views/admin/library/AlbumDetail.vue:37 +#: front/src/views/admin/library/ArtistDetail.vue:35 +#: front/src/views/admin/library/TagDetail.vue:21 +#: front/src/views/admin/library/TrackDetail.vue:36 +msgctxt "Content/Moderation/Link/Verb" +msgid "Open local profile" +msgstr "Obrir el perfil local" + +#: front/src/views/admin/library/AlbumDetail.vue:52 +#: front/src/views/admin/library/ArtistDetail.vue:50 +#: front/src/views/admin/library/TrackDetail.vue:51 +msgctxt "Content/Moderation/Link/Verb" +msgid "Open on MusicBrainz" +msgstr "Obrir dins MusicBrainz" + +#: front/src/views/admin/moderation/AccountsDetail.vue:23 +msgctxt "Content/Moderation/Link/Verb" +msgid "Open profile" +msgstr "Obrir el perfil" + +#: front/src/views/admin/library/AlbumDetail.vue:60 +#: front/src/views/admin/library/ArtistDetail.vue:58 +#: front/src/views/admin/library/LibraryDetail.vue:49 +#: front/src/views/admin/library/TrackDetail.vue:59 +#: front/src/views/admin/library/UploadDetail.vue:50 +#: front/src/views/admin/moderation/AccountsDetail.vue:52 +msgctxt "Content/Moderation/Link/Verb" +msgid "Open remote profile" +msgstr "Obrir el perfil remot" + +#: front/src/views/admin/moderation/DomainsDetail.vue:16 +msgctxt "Content/Moderation/Link/Verb" +msgid "Open website" +msgstr "Obrir la web" + +#: front/src/components/manage/moderation/InstancePolicyForm.vue:40 +msgctxt "Content/Moderation/Card.Title" +msgid "Or customize your rule" +msgstr "O personalitzeu la vostra regla" + +#: front/src/components/favorites/List.vue:32 +#: src/components/library/Radios.vue:41 +#: front/src/components/manage/library/EditsCardList.vue:37 +#: front/src/components/manage/users/UsersTable.vue:17 +#: front/src/views/admin/moderation/ReportsList.vue:42 +#: front/src/views/playlists/List.vue:25 +msgctxt "Content/Search/Dropdown.Label/Noun" +msgid "Order" +msgstr "Ordre" + +#: front/src/components/favorites/List.vue:24 +#: src/components/library/Albums.vue:15 +#: front/src/components/library/Artists.vue:19 +#: src/components/library/Radios.vue:33 +#: front/src/components/manage/library/AlbumsTable.vue:11 +#: front/src/components/manage/library/ArtistsTable.vue:11 +#: front/src/components/manage/library/EditsCardList.vue:29 +#: front/src/components/manage/library/LibrariesTable.vue:20 +#: front/src/components/manage/library/TagsTable.vue:11 +#: front/src/components/manage/library/TracksTable.vue:11 +#: front/src/components/manage/library/UploadsTable.vue:30 +#: front/src/components/manage/moderation/AccountsTable.vue:11 +#: front/src/components/manage/moderation/DomainsTable.vue:17 +#: front/src/components/manage/users/InvitationsTable.vue:9 +#: front/src/components/manage/users/UsersTable.vue:9 +#: front/src/views/admin/moderation/ReportsList.vue:34 +#: front/src/views/content/libraries/FilesTable.vue:21 +#: front/src/views/playlists/List.vue:17 +msgctxt "Content/Search/Dropdown.Label/Noun" +msgid "Ordering" +msgstr "Ordenar" + +#: front/src/components/library/Albums.vue:27 +#: src/components/library/Artists.vue:27 +#: front/src/components/manage/library/AlbumsTable.vue:19 +#: front/src/components/manage/library/ArtistsTable.vue:19 +#: front/src/components/manage/library/LibrariesTable.vue:28 +#: front/src/components/manage/library/TagsTable.vue:19 +#: front/src/components/manage/library/TracksTable.vue:19 +#: front/src/components/manage/library/UploadsTable.vue:38 +#: front/src/components/manage/moderation/AccountsTable.vue:19 +#: front/src/components/manage/moderation/DomainsTable.vue:25 +#: front/src/views/content/libraries/FilesTable.vue:29 +msgctxt "Content/Search/Dropdown.Label/Noun" +msgid "Ordering direction" +msgstr "Direcció d'ordre" + +#: front/src/components/mixins/Translations.vue:48 +#: front/src/components/mixins/Translations.vue:49 +msgctxt "Content/Moderation/Dropdown" +msgid "Other" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:143 +#: front/src/components/manage/users/InvitationsTable.vue:38 +#, fuzzy +msgctxt "*/*/*" +msgid "Owner" +msgstr "Propietari" + +#: front/src/components/PageNotFound.vue:33 +msgctxt "Head/*/Title" +msgid "Page Not Found" +msgstr "Pà gina no trobada" + +#: front/src/components/PageNotFound.vue:7 +msgctxt "Content/*/Title" +msgid "Page not found!" +msgstr "Pà gina no trobada!" + +#: front/src/components/Pagination.vue:39 +msgctxt "Content/*/Hidden text/Noun" +msgid "Pagination" +msgstr "Paginació" + +#: front/src/components/auth/LoginForm.vue:32 +#: src/components/auth/Settings.vue:291 +#: front/src/components/auth/SignupForm.vue:36 +#, fuzzy +msgctxt "*/*/*" +msgid "Password" +msgstr "Contrasenya" + +#: front/src/components/auth/SubsonicTokenForm.vue:100 +msgctxt "Content/Settings/Message" +msgid "Password updated" +msgstr "Contrasenya actualitzada" + +#: front/src/views/auth/PasswordResetConfirm.vue:28 +msgctxt "Content/Signup/Card.Title" +msgid "Password updated successfully" +msgstr "Contrasenya actualitzada correctament" + +#: front/src/components/audio/Player.vue:654 +msgctxt "Sidebar/Player/Icon.Tooltip/Verb" +msgid "Pause track" +msgstr "Pausa de la pista" + +#: front/src/components/ShortcutsModal.vue:96 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Pause/play the current track" +msgstr "Pausa/reproduir la pista actual" + +#: front/src/components/manage/moderation/InstancePolicyCard.vue:12 +msgctxt "Content/Moderation/Card.List item" +msgid "Paused" +msgstr "Pausa" + +#: front/src/components/library/FileUpload.vue:116 +#: front/src/components/manage/library/UploadsTable.vue:23 +#: front/src/components/mixins/Translations.vue:28 +#: front/src/views/content/libraries/FilesTable.vue:14 +#: front/src/components/mixins/Translations.vue:29 +msgctxt "Content/Library/*/Short" +msgid "Pending" +msgstr "Pendent" + +#: front/src/views/content/libraries/Detail.vue:37 +msgctxt "Content/Library/Table/Short" +msgid "Pending approval" +msgstr "Pendent d'aprovació" + +#: front/src/views/content/libraries/Quota.vue:22 +msgctxt "Content/Library/Label" +msgid "Pending files" +msgstr "Fitxers pendents" + +#: front/src/components/Sidebar.vue:232 +msgctxt "Sidebar/Notifications/Hidden text" +msgid "Pending follow requests" +msgstr "Sol·licituds de seguiment pendents" + +#: front/src/components/library/EditCard.vue:29 +#: front/src/components/manage/library/EditsCardList.vue:18 +msgctxt "Content/Admin/*/Noun" +msgid "Pending review" +msgstr "Verificació pendent" + +#: front/src/components/Sidebar.vue:233 +msgctxt "Sidebar/Moderation/Hidden text" +msgid "Pending review edits" +msgstr "Revisió de modificacions pendents" + +#: front/src/components/auth/Settings.vue:176 +#: front/src/components/manage/users/UsersTable.vue:42 +#: front/src/views/admin/moderation/AccountsDetail.vue:166 +msgctxt "Content/*/*/Noun" +msgid "Permissions" +msgstr "Permisos" + +#: front/src/components/audio/PlayButton.vue:9 +#: front/src/components/library/TrackBase.vue:24 +msgctxt "*/Queue/Button.Label/Short, Verb" +msgid "Play" +msgstr "Reproduir" + +#: front/src/components/audio/album/Card.vue:48 +#: front/src/components/library/AlbumBase.vue:21 +#: front/src/components/library/AlbumDetail.vue:11 +#: src/views/playlists/Detail.vue:24 +msgctxt "Content/Queue/Button.Label/Short, Verb" +msgid "Play all" +msgstr "Reproduir-ho tot" + +#: front/src/components/library/ArtistBase.vue:32 +msgctxt "Content/Artist/Button.Label/Verb" +msgid "Play all albums" +msgstr "Reproduir tots els à lbums" + +#: front/src/components/audio/PlayButton.vue:92 +msgctxt "*/Queue/Dropdown/Button/Title" +msgid "Play next" +msgstr "Reproduir el següent" + +#: front/src/components/ShortcutsModal.vue:120 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Play next track" +msgstr "Reproduir la següent pista" + +#: front/src/components/audio/PlayButton.vue:90 +msgctxt "*/Queue/Dropdown/Button/Title" +msgid "Play now" +msgstr "Reproduir ara" + +#: front/src/components/ShortcutsModal.vue:116 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Play previous track" +msgstr "Reprodueix la pista anterior" + +#: front/src/components/audio/PlayButton.vue:93 +msgctxt "*/Queue/Dropdown/Button/Title" +msgid "Play similar songs" +msgstr "Reproduir cançons semblants" + +#: front/src/components/Sidebar.vue:231 +msgctxt "Sidebar/Player/Hidden text" +msgid "Play this track" +msgstr "Reprodueix aquesta pista" + +#: front/src/components/audio/Player.vue:653 +msgctxt "Sidebar/Player/Icon.Tooltip/Verb" +msgid "Play track" +msgstr "Reprodueix la pista" + +#: front/src/components/mixins/Report.vue:66 src/views/playlists/Detail.vue:121 +#: front/src/components/mixins/Report.vue:67 +#, fuzzy +msgctxt "*/*/*" +msgid "Playlist" +msgstr "Llista de reproducció" + +#: front/src/views/playlists/Detail.vue:12 +msgctxt "Content/Playlist/Header.Subtitle" +msgid "Playlist containing %{ count } track, by %{ username }" +msgid_plural "Playlist containing %{ count } tracks, by %{ username }" +msgstr[0] "La llista de reproducció conté %{ count } cançó, de %{ username }" +msgstr[1] "La llista de reproducció conté %{ count } cançons, de %{ username }" + +#: front/src/components/playlists/Form.vue:9 +msgctxt "Content/Playlist/Message" +msgid "Playlist created" +msgstr "Llista de reproducció creada" + +#: front/src/components/playlists/Editor.vue:4 +msgctxt "Content/Playlist/Title" +msgid "Playlist editor" +msgstr "Editor de lla llista de reproducció" + +#: front/src/components/playlists/Form.vue:21 +msgctxt "Content/Playlist/Input.Label" +msgid "Playlist name" +msgstr "Nom de la llista de reproducció" + +#: front/src/components/playlists/Form.vue:6 +msgctxt "Content/Playlist/Message" +msgid "Playlist updated" +msgstr "Llista de reproducció actualitzada" + +#: front/src/components/playlists/Form.vue:25 +msgctxt "Content/Playlist/Dropdown.Label" +msgid "Playlist visibility" +msgstr "Visibilitat de la llista de reproducció" + +#: front/src/components/Sidebar.vue:71 src/components/library/Home.vue:16 +#: front/src/components/library/Library.vue:16 +#: front/src/components/mixins/Translations.vue:100 +#: src/views/admin/Settings.vue:83 +#: front/src/views/admin/library/AlbumDetail.vue:179 +#: front/src/views/admin/library/ArtistDetail.vue:167 +#: front/src/views/admin/library/TrackDetail.vue:231 +#: src/views/playlists/List.vue:106 +#: front/src/components/mixins/Translations.vue:101 +msgctxt "*/*/*" +msgid "Playlists" +msgstr "Llistes de reproducció" + +#: front/src/components/audio/EmbedWizard.vue:9 +msgctxt "Content/Embed/Message" +msgid "Please contact your admins and ask them to update the corresponding setting." +msgstr "" + +#: front/src/components/auth/Settings.vue:79 +msgctxt "Content/Settings/Error message.List item/Call to action" +msgid "Please double-check your password is correct" +msgstr "Si us plau verifica que la teva contrasenya és correcta" + +#: front/src/components/auth/LoginForm.vue:5 +msgctxt "Content/Login/Error message.List item/Call to action" +msgid "Please double-check your username/password couple is correct" +msgstr "Si us plau verifica que el teu nom d'usuari i la contrasenya són correctes" + +#: front/src/components/auth/Settings.vue:46 +msgctxt "Content/Settings/Paragraph" +msgid "PNG, GIF or JPG. At most 2MB. Will be downscaled to 400x400px." +msgstr "PNG, GIF o JPG. Mà xim de 2MB. Serà n reduïts a 400x400px." + +#: front/src/components/About.vue:72 +msgctxt "Content/About/Header/Name" +msgid "Pod configuration" +msgstr "" + +#: front/src/views/admin/library/TrackDetail.vue:143 src/edits.js:70 +msgctxt "*/*/*/Short, Noun" +msgid "Position" +msgstr "Posició" + +#: front/src/components/manage/moderation/InstancePolicyForm.vue:118 +msgctxt "Content/Moderation/Help text" +msgid "Prevent account or domain from triggering notifications, except from followers." +msgstr "Eviteu que el compte o el domini desencadenin notificacions, llevat dels seguidors." + +#: front/src/components/audio/EmbedWizard.vue:43 +msgctxt "Popup/Embed/Title/Noun" +msgid "Preview" +msgstr "Previsualització" + +#: front/src/components/audio/Player.vue:652 +msgctxt "Sidebar/Player/Icon.Tooltip" +msgid "Previous track" +msgstr "Pista anterior" + +#: front/src/components/mixins/Translations.vue:15 +#: front/src/components/mixins/Translations.vue:16 +msgctxt "Content/Settings/Dropdown/Short" +msgid "Private" +msgstr "Privat" + +#: front/src/views/content/remote/Card.vue:56 +msgctxt "Content/Library/Card.List item" +msgid "Problem during scanning" +msgstr "Problema durant l'anà lisi" + +#: front/src/components/library/FileUpload.vue:57 +msgctxt "Content/Library/Button.Label" +msgid "Proceed" +msgstr "Continuar" + +#: front/src/views/auth/EmailConfirm.vue:26 +#: front/src/views/auth/PasswordResetConfirm.vue:31 +msgctxt "Content/Signup/Link/Verb" +msgid "Proceed to login" +msgstr "Iniciar la sessió" + +#: front/src/components/library/FileUpload.vue:17 +msgctxt "Content/Library/Tab.Title/Short" +msgid "Processing" +msgstr "Processant" + +#: front/src/components/mixins/Translations.vue:80 +#: front/src/components/mixins/Translations.vue:81 +msgctxt "Content/OAuth Scopes/Label" +msgid "Profile" +msgstr "Perfil" + +#: front/src/components/auth/SignupForm.vue:5 +#, fuzzy +msgctxt "Content/Signup/Form/Paragraph" +msgid "Public registrations are not possible on this instance. You will need an invitation code to sign up." +msgstr "Les inscripcions estan tancades en aquesta instà ncia, necessites un codi d'inscripció per registrar-te." + +#: front/src/components/manage/moderation/AccountsTable.vue:188 +#: front/src/components/manage/moderation/DomainsTable.vue:186 +#: front/src/views/content/libraries/Quota.vue:36 +#: front/src/views/content/libraries/Quota.vue:39 +#: front/src/views/content/libraries/Quota.vue:62 +#: front/src/views/content/libraries/Quota.vue:65 +#: front/src/views/content/libraries/Quota.vue:88 +#: front/src/views/content/libraries/Quota.vue:91 +msgctxt "*/*/*/Verb" +msgid "Purge" +msgstr "Netejar" + +#: front/src/views/content/libraries/Quota.vue:89 +msgctxt "Popup/Library/Title" +msgid "Purge errored files?" +msgstr "Suprimir els fitxers erronis?" + +#: front/src/views/content/libraries/Quota.vue:37 +msgctxt "Popup/Library/Title" +msgid "Purge pending files?" +msgstr "Suprimir els fitxers pendents?" + +#: front/src/views/content/libraries/Quota.vue:63 +msgctxt "Popup/Library/Title" +msgid "Purge skipped files?" +msgstr "Suprimir els fitxers omesos?" + +#: front/src/components/Sidebar.vue:20 +msgctxt "Sidebar/Queue/Tab.Title/Noun" +msgid "Queue" +msgstr "Cua de reproducció" + +#: front/src/components/audio/Player.vue:329 +msgctxt "Content/Queue/Message" +msgid "Queue shuffled!" +msgstr "La cua ha estat barrejada!" + +#: front/src/views/radios/Detail.vue:80 +msgctxt "Head/Radio/Title" +msgid "Radio" +msgstr "Rà dio" + +#: front/src/components/library/radios/Builder.vue:235 +msgctxt "Head/Radio/Title" +msgid "Radio Builder" +msgstr "Editor de rà dio" + +#: front/src/components/library/radios/Builder.vue:15 +msgctxt "Content/Radio/Message" +msgid "Radio created" +msgstr "Rà dio creada" + +#: front/src/components/library/radios/Builder.vue:21 +msgctxt "Content/Radio/Input.Label/Noun" +msgid "Radio name" +msgstr "Nom de la rà dio" + +#: front/src/components/library/radios/Builder.vue:12 +msgctxt "Content/Radio/Message" +msgid "Radio updated" +msgstr "Rà dio actualitzada" + +#: front/src/components/library/Library.vue:13 +#: src/components/library/Radios.vue:142 +#: front/src/components/mixins/Translations.vue:104 +#: front/src/components/mixins/Translations.vue:105 +msgctxt "*/*/*" +msgid "Radios" +msgstr "Rà dios" + +#: front/src/components/auth/ApplicationForm.vue:151 +msgctxt "Content/OAuth Scopes/Label/Verb" +msgid "Read" +msgstr "Llegir" + +#: front/src/components/library/ImportStatusModal.vue:51 +msgctxt "Popup/Import/Table.Label/Value" +msgid "Read our documentation for this error" +msgstr "Llegir la documentació d'aquest error" + +#: front/src/components/auth/Authorize.vue:24 +msgctxt "Content/Auth/Label/Noun" +msgid "Read-only" +msgstr "Només llegir" + +#: front/src/components/auth/ApplicationForm.vue:152 +msgctxt "Content/OAuth Scopes/Help Text" +msgid "Read-only access to user data" +msgstr "Accés a llegir només les dades d'utilització" + +#: front/src/components/manage/moderation/InstancePolicyCard.vue:39 +#: front/src/components/manage/moderation/InstancePolicyForm.vue:25 +msgctxt "Content/Moderation/*/Noun" +msgid "Reason" +msgstr "Raó" + +#: front/src/views/admin/moderation/AccountsDetail.vue:252 +#: front/src/views/admin/moderation/DomainsDetail.vue:216 +msgctxt "Content/Moderation/Table.Label/Noun" +msgid "Received library follows" +msgstr "Seguidors de la biblioteca rebuts" + +#: front/src/components/manage/moderation/DomainsTable.vue:48 +#: front/src/components/mixins/Translations.vue:74 +#: front/src/components/mixins/Translations.vue:75 +msgctxt "Content/Moderation/*/Noun" +msgid "Received messages" +msgstr "Missatges rebuts" + +#: front/src/components/library/EditForm.vue:27 +msgctxt "Content/Library/Paragraph" +msgid "Recent edits" +msgstr "Modificacions recents" + +#: front/src/components/library/EditForm.vue:17 +msgctxt "Content/Library/Paragraph" +msgid "Recent edits awaiting review" +msgstr "Modificacions recents pendents de revisió" + +#: front/src/components/library/Home.vue:24 +msgctxt "Content/Home/Title" +msgid "Recently added" +msgstr "Afegit recentment" + +#: front/src/components/Home.vue:167 +#, fuzzy +msgctxt "Content/Home/Title" +msgid "Recently added albums" +msgstr "Afegit recentment" + +#: front/src/components/library/Home.vue:11 +msgctxt "Content/Home/Title" +msgid "Recently favorited" +msgstr "Afegit a preferits recentment" + +#: front/src/components/library/Home.vue:6 +msgctxt "Content/Home/Title" +msgid "Recently listened" +msgstr "Escoltats recentment" + +#: front/src/components/auth/ApplicationForm.vue:13 +msgctxt "Content/Applications/Input.Label/Noun" +msgid "Redirect URI" +msgstr "URI de redirecció" + +#: front/src/components/auth/Settings.vue:125 +#: src/components/auth/Settings.vue:170 +#: front/src/components/common/EmptyState.vue:16 +#: src/views/content/remote/Home.vue:15 +msgctxt "Content/*/Button.Label/Short, Verb" +msgid "Refresh" +msgstr "Recarregar" + +#: front/src/components/federation/FetchButton.vue:20 +msgctxt "Popup/*/Message.Title" +msgid "Refresh error" +msgstr "Error de recà rrega" + +#: front/src/views/admin/library/AlbumDetail.vue:56 +#: front/src/views/admin/library/ArtistDetail.vue:54 +#: front/src/views/admin/library/TrackDetail.vue:55 +msgctxt "Content/Moderation/Button/Verb" +msgid "Refresh from remote server" +msgstr "Actualitza des del servidor remot" + +#: front/src/views/admin/moderation/DomainsDetail.vue:164 +msgctxt "Content/Moderation/Button.Label/Verb" +msgid "Refresh node info" +msgstr "Actualitza la informació del node" + +#: front/src/components/federation/FetchButton.vue:79 +msgctxt "Popup/*/Message.Title" +msgid "Refresh pending" +msgstr "Actualització pendent" + +#: front/src/components/federation/FetchButton.vue:80 +msgctxt "Popup/*/Message.Content" +msgid "Refresh request wasn't proceed in time by our server. It will be processed later." +msgstr "La petició d'actualització no s'ha realitzat a temps pel servidor. Serà realitzada més tard." + +#: front/src/components/federation/FetchButton.vue:16 +msgctxt "Popup/*/Message.Title" +msgid "Refresh successful" +msgstr "Actualització realitzada" + +#: front/src/components/common/ActionTable.vue:275 +msgctxt "Content/*/Button.Tooltip/Verb" +msgid "Refresh table content" +msgstr "El contingut de la taula s'ha actualitzat" + +#: front/src/components/federation/FetchButton.vue:12 +msgctxt "Popup/*/Message.Title" +msgid "Refresh was skipped" +msgstr "S'ha omès l'actualització" + +#: front/src/components/federation/FetchButton.vue:7 +msgctxt "Popup/*/Title" +msgid "Refreshing object from remote…" +msgstr "Actualització de l'objecte des del servidor remot …" + +#: front/src/components/About.vue:86 +#, fuzzy +msgctxt "*/*/*" +msgid "Registrations" +msgstr "Administració" + +#: front/src/components/manage/users/UsersTable.vue:72 +msgctxt "Content/Admin/Table, User role" +msgid "Regular user" +msgstr "Usuari està ndard" + +#: front/src/components/library/EditCard.vue:87 +#: front/src/views/content/libraries/Detail.vue:51 +msgctxt "Content/Library/Button.Label" +msgid "Reject" +msgstr "Rebutjar" + +#: front/src/components/manage/moderation/InstancePolicyCard.vue:32 +#: front/src/components/manage/moderation/InstancePolicyForm.vue:123 +msgctxt "Content/Moderation/*/Verb" +msgid "Reject media" +msgstr "Rebutjar els fitxers multimèdia" + +#: front/src/components/library/EditCard.vue:33 +#: front/src/components/manage/library/EditsCardList.vue:24 +#: front/src/views/content/libraries/Detail.vue:43 +msgctxt "Content/Library/*/Short" +msgid "Rejected" +msgstr "Rebutjat" + +#: front/src/components/manage/library/AlbumsTable.vue:43 +#: front/src/components/mixins/Translations.vue:54 src/edits.js:43 +#: front/src/components/mixins/Translations.vue:55 +msgctxt "Content/*/*/Noun" +msgid "Release date" +msgstr "Data de publicació" + +#: front/src/components/library/FileUpload.vue:63 +msgctxt "Content/Library/Paragraph" +msgid "Remaining storage space" +msgstr "Espai d’emmagatzematge restant" + +#: front/src/views/Notifications.vue:18 src/views/Notifications.vue:52 +msgctxt "Content/Notifications/Label" +msgid "Remind me in:" +msgstr "" + +#: front/src/views/content/remote/Home.vue:6 +msgctxt "Content/Library/Title/Noun" +msgid "Remote libraries" +msgstr "Biblioteques remotes" + +#: front/src/views/content/remote/Home.vue:7 +msgctxt "Content/Library/Paragraph" +msgid "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." +msgstr "Les biblioteques remotes són propietat d'altres usuaris de la xarxa. Pots accedir-hi sempre que siguin públiques hi tinguis accés." + +#: front/src/components/library/radios/Filter.vue:59 +msgctxt "Content/Radio/Button.Label/Verb" +msgid "Remove" +msgstr "Retirar" + +#: front/src/components/auth/Settings.vue:58 +msgctxt "Content/Settings/Button.Label/Verb" +msgid "Remove avatar" +msgstr "Elimina l'avatar" + +#: front/src/components/library/ArtistDetail.vue:12 +msgctxt "Content/Moderation/Button.Label" +msgid "Remove filter" +msgstr "Suprimir vel filtre" + +#: front/src/components/manage/moderation/DomainsTable.vue:198 +#: front/src/views/admin/moderation/DomainsDetail.vue:39 +#, fuzzy +msgctxt "Content/Moderation/Action/Verb" +msgid "Remove from allow-list" +msgstr "Elimina dels preferits" + +#: front/src/components/favorites/TrackFavoriteIcon.vue:26 +msgctxt "Content/Track/Icon.Tooltip/Verb" +msgid "Remove from favorites" +msgstr "Elimina dels preferits" + +#: front/src/views/content/libraries/Quota.vue:38 +msgctxt "Popup/Library/Paragraph" +msgid "Removes uploaded but yet to be processed tracks completely, adding the corresponding data to your quota." +msgstr "Les pistes importades que encara no s’han processat completament pel servidor s’eliminaran completament. Es tornrà la quota corresponent." + +#: front/src/views/content/libraries/Quota.vue:64 +msgctxt "Popup/Library/Paragraph" +msgid "Removes uploaded tracks skipped during the import processes completely, adding the corresponding data to your quota." +msgstr "Les pistes carregades però ignorades durant la importació per diversos motius s’eliminaran completament. Us retornarà l’espai d’emmagatzematge corresponent." + +#: front/src/views/content/libraries/Quota.vue:90 +msgctxt "Popup/Library/Paragraph" +msgid "Removes uploaded tracks that could not be processed by the server completely, adding the corresponding data to your quota." +msgstr "Elimina les pistes carregades que el servidor no ha pogut processar completament, es retornarà l’espai d’emmagatzematge corresponent.." + +#: front/src/components/audio/PlayButton.vue:94 +#, fuzzy +msgctxt "*/Queue/Dropdown/Button/Title" +msgid "Replace current queue" +msgstr "Afegir a la cua de reproducció actual" + +#: front/src/components/mixins/Report.vue:6 src/components/mixins/Report.vue:7 +msgctxt "*/Moderation/*/Verb" +msgid "Report @%{ username }…" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:5 +msgctxt "Content/Moderation/Card/Short" +msgid "Report %{ id }" +msgstr "" + +#: front/src/components/moderation/ReportModal.vue:139 +#, fuzzy +msgctxt "*/Moderation/Message" +msgid "Report successfully submitted, thank you" +msgstr "L’edició s’ha enviat correctament." + +#: front/src/components/mixins/Report.vue:36 +#: src/components/mixins/Report.vue:37 +#, fuzzy +msgctxt "*/Moderation/*/Verb" +msgid "Report this album…" +msgstr "Editar aquest à lbum" + +#: front/src/components/mixins/Report.vue:50 +#: src/components/mixins/Report.vue:51 +#, fuzzy +msgctxt "*/Moderation/*/Verb" +msgid "Report this artist…" +msgstr "Editar l'artista" + +#: front/src/components/mixins/Report.vue:72 +#: src/components/mixins/Report.vue:73 +#, fuzzy +msgctxt "*/Moderation/*/Verb" +msgid "Report this library…" +msgstr "Suprimir la biblioteca?" + +#: front/src/components/mixins/Report.vue:61 +#: src/components/mixins/Report.vue:62 +#, fuzzy +msgctxt "*/Moderation/*/Verb" +msgid "Report this playlist…" +msgstr "Afegir a la llista de reproducció" + +#: front/src/components/mixins/Report.vue:23 +#: src/components/mixins/Report.vue:24 +#, fuzzy +msgctxt "*/Moderation/*/Verb" +msgid "Report this track…" +msgstr "Edita aquesta pista" + +#: front/src/components/audio/PlayButton.vue:95 +msgctxt "*/Moderation/*/Button/Label,Verb" +msgid "Report…" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:117 +msgctxt "Content/*/*/Short" +msgid "Reported object" +msgstr "" + +#: front/src/views/admin/moderation/Base.vue:5 +#: front/src/views/admin/moderation/ReportsList.vue:3 +#: front/src/views/admin/moderation/ReportsList.vue:208 +msgctxt "*/Moderation/*/Noun" +msgid "Reports" +msgstr "" + +#: front/src/components/auth/SubsonicTokenForm.vue:38 +#: front/src/components/auth/SubsonicTokenForm.vue:41 +msgctxt "*/Settings/Button.Label/Verb" +msgid "Request a new password" +msgstr "Demanar una nova contrasenya" + +#: front/src/components/auth/SubsonicTokenForm.vue:39 +msgctxt "Popup/Settings/Title" +msgid "Request a new Subsonic API password?" +msgstr "Demanar una nova contrasenya per l'API Subsonic?" + +#: front/src/components/auth/SubsonicTokenForm.vue:47 +msgctxt "Content/Settings/Button.Label/Verb" +msgid "Request a password" +msgstr "Demanar una contrasenya" + +#: front/src/components/federation/FetchButton.vue:64 +msgctxt "Popup/*/Loading.Title" +msgid "Requesting a fetch…" +msgstr "Sol·licita una cerca …" + +#: front/src/components/library/EditForm.vue:94 +#, fuzzy +msgctxt "Content/Library/Button.Label" +msgid "Reset to initial value" +msgstr "Reiniciar al valor inicial: %{ value}" + +#: front/src/components/auth/LoginForm.vue:34 +#: src/views/auth/PasswordReset.vue:4 front/src/views/auth/PasswordReset.vue:53 +msgctxt "*/Login/*/Verb" +msgid "Reset your password" +msgstr "Restabliu la contrasenya" + +#: front/src/components/manage/moderation/ReportCard.vue:83 +#, fuzzy +msgctxt "Content/*/*/Noun" +msgid "Resolution date" +msgstr "Data de creació" + +#: front/src/components/manage/moderation/ReportCard.vue:218 +msgctxt "Content/*/Button.Label/Verb" +msgid "Resolve" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:62 +#: front/src/views/admin/moderation/ReportsList.vue:20 +msgctxt "Content/*/*/Short" +msgid "Resolved" +msgstr "" + +#: front/src/views/content/libraries/FilesTable.vue:223 +msgctxt "Content/Library/Dropdown/Verb" +msgid "Restart import" +msgstr "Rellançar la importació" + +#: front/src/components/library/EditForm.vue:31 +msgctxt "Content/Library/Button.Label" +msgid "Restrict to unreviewed edits" +msgstr "Restringir a edicions no revisades" + +#: front/src/components/favorites/List.vue:39 +#: src/components/library/Albums.vue:34 +#: front/src/components/library/Artists.vue:34 +#: src/components/library/Radios.vue:52 front/src/views/playlists/List.vue:32 +msgctxt "Content/Search/Dropdown.Label/Noun" +msgid "Results per page" +msgstr "Resultats per pà gina" + +#: front/src/views/auth/EmailConfirm.vue:17 +msgctxt "Content/Signup/Link/Verb" +msgid "Return to login" +msgstr "Torna a la pà gina d'inici de sessió" + +#: front/src/components/library/ArtistDetail.vue:9 +msgctxt "Content/Moderation/Link" +msgid "Review my filters" +msgstr "Revisa els meus filtres" + +#: front/src/components/auth/Settings.vue:192 +msgctxt "*/*/*/Verb" +msgid "Revoke" +msgstr "Revocar" + +#: front/src/components/auth/Settings.vue:195 +msgctxt "*/Settings/Button.Label/Verb" +msgid "Revoke access" +msgstr "Revocar l'accés" + +#: front/src/components/auth/Settings.vue:193 +msgctxt "Popup/Settings/Title" +msgid "Revoke access for application \"%{ application }\"?" +msgstr "Revoca l'accés de les aplicacons \"%{ application }\"?" + +#: front/src/components/manage/moderation/InstancePolicyCard.vue:16 +msgctxt "Content/Moderation/Card.Title/Noun" +msgid "Rule" +msgstr "Regla" + +#: front/src/components/About.vue:28 src/components/About.vue:56 +#, fuzzy +msgctxt "Content/About/Header" +msgid "Rules" +msgstr "Regla" + +#: front/src/components/admin/SettingsGroup.vue:75 +#: front/src/components/library/radios/Builder.vue:34 +msgctxt "Content/*/Button.Label/Verb" +msgid "Save" +msgstr "Guardar" + +#: front/src/views/content/remote/Card.vue:203 +msgctxt "Content/Library/Message" +msgid "Scan launched" +msgstr "Anà lisi iniciat" + +#: front/src/views/content/remote/Card.vue:80 +msgctxt "Content/Library/Card.Button.Label/Verb" +msgid "Scan now" +msgstr "Analitzar ara" + +#: front/src/views/content/remote/Card.vue:48 +msgctxt "Content/Library/Card.List item" +msgid "Scan pending" +msgstr "Anà lisi pendent" + +#: front/src/views/content/remote/Card.vue:204 +msgctxt "Content/Library/Message" +msgid "Scan skipped (previous scan is too recent)" +msgstr "L’anà lisi s’ha omès (l’anà lisi anterior és massa recent)" + +#: front/src/views/content/remote/Card.vue:60 +msgctxt "Content/Library/Card.List item" +msgid "Scanned" +msgstr "Anà lisis realitzat" + +#: front/src/views/content/remote/Card.vue:64 +msgctxt "Content/Library/Card.List item" +msgid "Scanned with errors" +msgstr "Anà lisis amb errors" + +#: front/src/views/content/remote/Card.vue:52 +msgctxt "Content/Library/Card.List item" +msgid "Scanning… (%{ progress }%)" +msgstr "Analitzant … (%{ progress }%)" + +#: front/src/components/auth/ApplicationForm.vue:22 +#: front/src/components/auth/Settings.vue:226 +msgctxt "Content/*/*/Noun" +msgid "Scopes" +msgstr "Àmbits" + +#: front/src/components/library/Albums.vue:10 +#: src/components/library/Artists.vue:10 +#: front/src/components/library/Radios.vue:29 +#: front/src/components/manage/library/AlbumsTable.vue:5 +#: front/src/components/manage/library/ArtistsTable.vue:5 +#: front/src/components/manage/library/EditsCardList.vue:6 +#: front/src/components/manage/library/LibrariesTable.vue:5 +#: front/src/components/manage/library/TagsTable.vue:5 +#: front/src/components/manage/library/TracksTable.vue:5 +#: front/src/components/manage/library/UploadsTable.vue:5 +#: front/src/components/manage/moderation/AccountsTable.vue:5 +#: front/src/components/manage/moderation/DomainsTable.vue:5 +#: front/src/components/manage/users/InvitationsTable.vue:5 +#: front/src/components/manage/users/UsersTable.vue:5 +#: front/src/views/admin/moderation/ReportsList.vue:8 +#: front/src/views/content/libraries/FilesTable.vue:5 +#: src/views/playlists/List.vue:13 +msgctxt "Content/Search/Input.Label/Noun" +msgid "Search" +msgstr "Buscar" + +#: front/src/views/content/remote/ScanForm.vue:9 +msgctxt "Content/Library/Input.Label/Verb" +msgid "Search a remote library" +msgstr "Busca una biblioteca remota" + +#: front/src/components/manage/library/EditsCardList.vue:211 +#: front/src/views/admin/moderation/ReportsList.vue:207 +msgctxt "Content/Search/Input.Placeholder" +msgid "Search by account, summary, domain…" +msgstr "Cerca per compte, resum, domini …" + +#: front/src/components/manage/library/LibrariesTable.vue:191 +msgctxt "Content/Search/Input.Placeholder" +msgid "Search by domain, actor, name, description…" +msgstr "Busca per domini, nom, descripció, …" + +#: front/src/components/manage/library/UploadsTable.vue:241 +msgctxt "Content/Search/Input.Placeholder" +msgid "Search by domain, actor, name, reference, source…" +msgstr "Buscar per domini, nom d'usuari, referències, …" + +#: front/src/components/manage/library/ArtistsTable.vue:164 +msgctxt "Content/Search/Input.Placeholder" +msgid "Search by domain, name, MusicBrainz ID…" +msgstr "Buscar per domini, nom, MusicBrainz ID, …" + +#: front/src/components/manage/library/TracksTable.vue:174 +msgctxt "Content/Search/Input.Placeholder" +msgid "Search by domain, title, artist, album, MusicBrainz ID…" +msgstr "Buscar per domini, tÃtol, artista, à lbum, MusicBrainz ID …" + +#: front/src/components/manage/library/AlbumsTable.vue:174 +msgctxt "Content/Search/Input.Placeholder" +msgid "Search by domain, title, artist, MusicBrainz ID…" +msgstr "Buscar per domini, tÃtol, artista, MusicBrainz ID …" + +#: front/src/components/manage/moderation/AccountsTable.vue:171 +msgctxt "Content/Search/Input.Placeholder" +msgid "Search by domain, username, bio…" +msgstr "Cercar per domini, nom d'usuari, bio, .…" + +#: front/src/components/manage/library/TagsTable.vue:165 +#, fuzzy +msgctxt "Content/Search/Input.Placeholder" +msgid "Search by name" +msgstr "Cercar per nom …" + +#: front/src/components/manage/moderation/DomainsTable.vue:168 +msgctxt "Content/Search/Input.Placeholder" +msgid "Search by name…" +msgstr "Cercar per nom …" + +#: front/src/views/content/libraries/FilesTable.vue:208 +msgctxt "Content/Library/Input.Placeholder" +msgid "Search by title, artist, album…" +msgstr "Cercar per tÃtol, artista, à lbum …" + +#: front/src/components/manage/users/InvitationsTable.vue:153 +msgctxt "Content/Admin/Input.Placeholder/Verb" +msgid "Search by username, e-mail address, code…" +msgstr "Cercar per nom d'usuari, correu electrònic, codi, …" + +#: front/src/components/manage/users/UsersTable.vue:164 +msgctxt "Content/Search/Input.Placeholder" +msgid "Search by username, e-mail address, name…" +msgstr "Cercar per nom d'usuari, correu electrònic, nom, …" + +#: front/src/components/audio/SearchBar.vue:27 +msgctxt "Sidebar/Search/Input.Placeholder" +msgid "Search for artists, albums, tracks…" +msgstr "Cercar per artista, à lbum, pistes, …" + +#: front/src/components/audio/Search.vue:2 +msgctxt "Content/Search/Title" +msgid "Search for some music" +msgstr "Cercar música" + +#: front/src/components/library/TagsSelector.vue:6 +#, fuzzy +msgctxt "*/Dropdown/Placeholder/Verb" +msgid "Search for tags…" +msgstr "Cercar per nom …" + +#: front/src/components/library/AlbumBase.vue:66 +#: front/src/components/library/ArtistBase.vue:77 +#: front/src/components/library/TrackBase.vue:82 +#, fuzzy +msgctxt "Content/*/Button.Label/Verb" +msgid "Search on Discogs" +msgstr "Cercar música" + +#: front/src/components/library/AlbumBase.vue:58 +#: front/src/components/library/ArtistBase.vue:69 +#: front/src/components/library/TrackBase.vue:74 +msgctxt "Content/*/Button.Label/Verb" +msgid "Search on Wikipedia" +msgstr "Cercar a la Viquipèdia" + +#: front/src/components/library/Library.vue:35 +#: src/views/admin/library/Base.vue:35 +#: front/src/views/admin/moderation/Base.vue:44 +#: src/views/admin/users/Base.vue:21 front/src/views/content/Base.vue:19 +msgctxt "Menu/*/Hidden text" +msgid "Secondary menu" +msgstr "Menú secundari" + +#: front/src/views/admin/Settings.vue:15 +msgctxt "Content/Admin/Menu.Title" +msgid "Sections" +msgstr "Seccions" + +#: front/src/components/ShortcutsModal.vue:108 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek backwards 30s" +msgstr "" + +#: front/src/components/ShortcutsModal.vue:100 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek backwards 5s" +msgstr "" + +#: front/src/components/ShortcutsModal.vue:112 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek forwards 30s" +msgstr "" + +#: front/src/components/ShortcutsModal.vue:104 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek forwards 5s" +msgstr "" + +#: front/src/components/library/radios/Builder.vue:46 +msgctxt "Content/Radio/Dropdown.Placeholder/Verb" +msgid "Select a filter" +msgstr "Seleccionar un filtre" + +#: front/src/components/common/ActionTable.vue:79 +msgctxt "Content/*/Link/Verb" +msgid "Select all %{ total } elements" +msgid_plural "Select all %{ total } elements" +msgstr[0] "Selecciona l'element" +msgstr[1] "Selecciona tots els %{ total } elements" + +#: front/src/components/common/ActionTable.vue:88 +msgctxt "Content/*/Link/Verb" +msgid "Select only current page" +msgstr "Seleccionar només la pà gina actual" + +#: front/src/components/Home.vue:43 +msgctxt "Content/Home/Link" +msgid "Server rules" +msgstr "" + +#: front/src/components/Sidebar.vue:43 src/components/Sidebar.vue:112 +#: front/src/components/manage/users/UsersTable.vue:182 +#: front/src/views/admin/moderation/AccountsDetail.vue:526 +msgctxt "*/*/*/Noun" +msgid "Settings" +msgstr "Parà metres" + +#: front/src/components/auth/Settings.vue:10 +msgctxt "Content/Settings/Message" +msgid "Settings updated" +msgstr "Parà metres actualitzats" + +#: front/src/components/admin/SettingsGroup.vue:11 +msgctxt "Content/Settings/Paragraph" +msgid "Settings updated successfully." +msgstr "Parà metres actualitzats amb èxit." + +#: front/src/components/manage/users/InvitationForm.vue:27 +msgctxt "Content/Admin/Table.Label/Noun" +msgid "Share link" +msgstr "Compartir enllaç" + +#: front/src/views/content/libraries/Detail.vue:15 +msgctxt "Content/Library/Paragraph" +msgid "Share this link with other users so they can request access to your library." +msgstr "Comparteix aquest enllaç amb d'altres usuaris perquè puguin sol·licitar l'accés a la vostra biblioteca." + +#: front/src/views/content/libraries/Detail.vue:14 +#: front/src/views/content/remote/Card.vue:90 +msgctxt "Content/Library/Title" +msgid "Sharing link" +msgstr "Compartir enllaç" + +#: front/src/components/audio/EmbedWizard.vue:5 +msgctxt "Content/Embed/Message" +msgid "Sharing will not work because this pod doesn't allow anonymous users to access content." +msgstr "" + +#: front/src/components/About.vue:156 +msgctxt "*/*/*/Verb" +msgid "Show" +msgstr "" + +#: front/src/components/audio/album/Card.vue:38 +msgctxt "Content/Album/Card.Link/Verb" +msgid "Show %{ count } more track" +msgid_plural "Show %{ count } more tracks" +msgstr[0] "Mostra una cançó més" +msgstr[1] "Mostra %{ count } pista més" + +#: front/src/components/tags/List.vue:11 +#, fuzzy +msgctxt "Content/*/Button/Label/Verb" +msgid "Show 1 more tag" +msgid_plural "Show %{ count } more tags" +msgstr[0] "Mostra un à lbum més" +msgstr[1] "Mostra %{ count } à lbums més" + +#: front/src/components/library/EditForm.vue:21 +msgctxt "Content/Library/Button.Label" +msgid "Show all edits" +msgstr "Mostra totes les modificacions" + +#: front/src/components/ShortcutsModal.vue:60 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Show available keyboard shortcuts" +msgstr "Mostra les dreceres del teclat disponibles" + +#: front/src/components/common/ExpandableDiv.vue:7 +#, fuzzy +msgctxt "*/*/Button,Label" +msgid "Show less" +msgstr "Mostra totes les modificacions" + +#: front/src/components/common/ExpandableDiv.vue:8 +#, fuzzy +msgctxt "*/*/Button,Label" +msgid "Show more" +msgstr "Mostra un à lbum més" + +#: front/src/views/Notifications.vue:72 +msgctxt "Content/Notifications/Form.Label/Verb" +msgid "Show read notifications" +msgstr "Mostra les modificacions llegides" + +#: front/src/components/forms/PasswordInput.vue:42 +msgctxt "Content/Settings/Button.Tooltip/Verb" +msgid "Show/hide password" +msgstr "Mostra/amaga la contrasenya" + +#: front/src/components/manage/library/AlbumsTable.vue:93 +#: front/src/components/manage/library/ArtistsTable.vue:84 +#: front/src/components/manage/library/EditsCardList.vue:72 +#: front/src/components/manage/library/LibrariesTable.vue:110 +#: front/src/components/manage/library/TagsTable.vue:79 +#: front/src/components/manage/library/TracksTable.vue:95 +#: front/src/components/manage/library/UploadsTable.vue:144 +#: front/src/components/manage/moderation/AccountsTable.vue:88 +#: front/src/components/manage/moderation/DomainsTable.vue:85 +#: front/src/components/manage/users/InvitationsTable.vue:76 +#: front/src/components/manage/users/UsersTable.vue:88 +#: front/src/views/content/libraries/FilesTable.vue:117 +msgctxt "Content/*/Paragraph" +msgid "Showing results %{ start }-%{ end } on %{ total }" +msgstr "Mostra els resultats %{ start }-%{ end } de %{ total }" + +#: front/src/components/ShortcutsModal.vue:140 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Shuffle queue" +msgstr "Cua barrejada" + +#: front/src/components/audio/Player.vue:667 +msgctxt "Sidebar/Player/Icon.Tooltip/Verb" +msgid "Shuffle your queue" +msgstr "Barreja la teva cua" + +#: front/src/components/Home.vue:103 +#, fuzzy +msgctxt "*/Signup/Title" +msgid "Sign up" +msgstr "Inscripció" + +#: front/src/views/auth/Signup.vue:37 +msgctxt "*/Signup/Title" +msgid "Sign Up" +msgstr "Inscripció" + +#: front/src/components/Home.vue:107 +msgctxt "Content/Home/Paragraph" +msgid "Sign up now to keep a track of your favorites, create playlists, discover new content and much more!" +msgstr "" + +#: front/src/components/manage/users/UsersTable.vue:40 +msgctxt "Content/Admin/Table.Label/Short, Noun (Value is a date)" +msgid "Sign-up" +msgstr "Inscripció" + +#: front/src/components/mixins/Translations.vue:69 +#: front/src/views/admin/moderation/AccountsDetail.vue:198 +#: front/src/components/mixins/Translations.vue:70 +msgctxt "Content/Admin/Table.Label/Noun" +msgid "Sign-up date" +msgstr "Data d'inscripció" + +#: front/src/components/library/FileUpload.vue:94 +#: front/src/components/library/TrackDetail.vue:39 +#: front/src/components/manage/library/UploadsTable.vue:65 +#: front/src/components/mixins/Translations.vue:66 +#: front/src/views/admin/library/UploadDetail.vue:219 +#: front/src/views/content/libraries/FilesTable.vue:61 +#: front/src/components/mixins/Translations.vue:67 +msgctxt "Content/*/*/Noun" +msgid "Size" +msgstr "Mida" + +#: front/src/components/manage/library/UploadsTable.vue:24 +#: front/src/components/mixins/Translations.vue:24 +#: front/src/views/content/libraries/FilesTable.vue:15 +#: front/src/components/mixins/Translations.vue:25 +msgctxt "Content/Library/*" +msgid "Skipped" +msgstr "Omès" + +#: front/src/views/content/libraries/Quota.vue:49 +msgctxt "Content/Library/Label" +msgid "Skipped files" +msgstr "Arxius ignorats" + +#: front/src/views/admin/moderation/DomainsDetail.vue:126 +msgctxt "Content/Moderation/Table.Label" +msgid "Software" +msgstr "Programari" + +#: front/src/components/playlists/Editor.vue:21 +msgctxt "Content/Playlist/Paragraph" +msgid "Some tracks in your queue are already in this playlist:" +msgstr "Algunes pistes de la vostra cua ja es troben en aquesta llista de reproducció:" + +#: front/src/components/PageNotFound.vue:10 +msgctxt "Content/*/Paragraph" +msgid "Sorry, the page you asked for does not exist:" +msgstr "Ens sap greu, la pà gina que has demanat no existeix:" + +#: front/src/components/Footer.vue:57 +msgctxt "Footer/*/List item.Link" +msgid "Source code" +msgstr "Codi font" + +#: front/src/components/auth/Profile.vue:23 +#: front/src/components/manage/users/UsersTable.vue:71 +msgctxt "Content/Profile/User role" +msgid "Staff member" +msgstr "Membre de l'equip" + +#: front/src/components/audio/PlayButton.vue:27 +#: src/components/radios/Button.vue:4 +msgctxt "*/Queue/Button.Label/Short, Verb" +msgid "Start radio" +msgstr "Encendre la rà dio" + +#: front/src/components/About.vue:170 src/components/Home.vue:53 +#: front/src/views/admin/Settings.vue:87 +#, fuzzy +msgctxt "Content/Home/Header" +msgid "Statistics" +msgstr "EstadÃstiques" + +#: front/src/views/admin/moderation/AccountsDetail.vue:510 +msgctxt "Content/Moderation/Help text" +msgid "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this account" +msgstr "Les estadÃstiques es calculen a partir de l’activitat i el contingut coneguts de la vostra instà ncia i no reflecteixen l’activitat general d'aquest compte" + +#: front/src/views/admin/moderation/DomainsDetail.vue:418 +msgctxt "Content/Moderation/Help text" +msgid "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this domain" +msgstr "Les estadÃstiques es calculen a partir de l’activitat i el contingut coneguts de la vostra instà ncia i no reflecteixen l’activitat general d’aquest domini" + +#: front/src/views/admin/library/AlbumDetail.vue:346 +#: front/src/views/admin/library/ArtistDetail.vue:345 +#: front/src/views/admin/library/LibraryDetail.vue:356 +#: front/src/views/admin/library/TagDetail.vue:210 +#: front/src/views/admin/library/TrackDetail.vue:389 +#: front/src/views/admin/library/UploadDetail.vue:335 +msgctxt "Content/Moderation/Help text" +msgid "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" +msgstr "Les estadÃstiques es calculen a partir de l’activitat i el contingut coneguts de la vostra instà ncia i no reflecteixen l’activitat general d’aquest objecte" + +#: front/src/components/library/FileUpload.vue:95 +#: front/src/components/manage/library/EditsCardList.vue:12 +#: front/src/components/manage/moderation/ReportCard.vue:57 +#: front/src/components/manage/users/InvitationsTable.vue:17 +#: front/src/components/manage/users/InvitationsTable.vue:39 +#: front/src/components/manage/users/UsersTable.vue:43 +#: front/src/views/admin/moderation/DomainsDetail.vue:152 +#: front/src/views/admin/moderation/ReportsList.vue:14 +#: front/src/views/content/libraries/Detail.vue:28 +#, fuzzy +msgctxt "*/*/*" +msgid "Status" +msgstr "Estat" + +#: front/src/components/Sidebar.vue:178 src/components/radios/Button.vue:3 +msgctxt "*/Player/Button.Label/Short, Verb" +msgid "Stop radio" +msgstr "Parar la rà dio" + +#: front/src/components/SetInstanceModal.vue:23 +msgctxt "*/*/Button.Label/Verb" +msgid "Submit" +msgstr "Envia" + +#: front/src/components/library/EditForm.vue:110 +msgctxt "Content/Library/Button.Label/Verb" +msgid "Submit and apply edit" +msgstr "Envia i aplica la modificació" + +#: front/src/components/library/EditForm.vue:7 +msgctxt "Content/Library/Button.Label" +msgid "Submit another edit" +msgstr "Envia una altre modificació" + +#: front/src/components/moderation/ReportModal.vue:64 +#, fuzzy +msgctxt "Popup/*/Button.Label" +msgid "Submit report" +msgstr "Envia" + +#: front/src/components/library/EditForm.vue:111 +msgctxt "Content/Library/Button.Label/Verb" +msgid "Submit suggestion" +msgstr "Enviar suggerències" + +#: front/src/components/manage/moderation/ReportCard.vue:17 +#, fuzzy +msgctxt "Content/Moderation/*" +msgid "Submitted by" +msgstr "Envia" + +#: front/src/views/admin/Settings.vue:86 +msgctxt "Content/Admin/Menu" +msgid "Subsonic" +msgstr "Subsonic" + +#: front/src/components/auth/SubsonicTokenForm.vue:2 +msgctxt "Content/Settings/Title" +msgid "Subsonic API password" +msgstr "Contrasenya de l'API Subsonic" + +#: front/src/components/library/EditForm.vue:38 +msgctxt "Content/Library/Paragraph" +msgid "Suggest a change using the form below." +msgstr "Suggereix un canvi mitjançant el formulari següent." + +#: front/src/components/library/AlbumEdit.vue:5 +msgctxt "Content/*/Title" +msgid "Suggest an edit on this album" +msgstr "Suggereix un canvi en aquest à lbum" + +#: front/src/components/library/ArtistEdit.vue:5 +msgctxt "Content/*/Title" +msgid "Suggest an edit on this artist" +msgstr "Suggereix un canvi en aquest artista" + +#: front/src/components/library/TrackEdit.vue:5 +msgctxt "Content/*/Title" +msgid "Suggest an edit on this track" +msgstr "Suggereix una canvi en aquesta pista" + +#: front/src/components/SetInstanceModal.vue:31 +msgctxt "Popup/Instance/List.Label" +msgid "Suggested choices" +msgstr "Opcions suggerides" + +#: front/src/components/library/FileUpload.vue:3 +msgctxt "Content/Library/Tab.Title/Short" +msgid "Summary" +msgstr "Resum" + +#: front/src/components/library/EditForm.vue:99 +msgctxt "*/*/*" +msgid "Summary (optional)" +msgstr "Resum (opcional)" + +#: front/src/components/Footer.vue:47 +msgctxt "Footer/*/Listitem.Link" +msgid "Support forum" +msgstr "Fòrum d'ajuda" + +#: front/src/views/Notifications.vue:10 +msgctxt "Content/Notifications/Header" +msgid "Support this Funkwhale pod" +msgstr "" + +#: front/src/components/library/FileUpload.vue:85 +msgctxt "Content/Library/Paragraph" +msgid "Supported extensions: %{ extensions }" +msgstr "Suporta les extensions: %{ extensions }" + +#: front/src/components/playlists/Editor.vue:9 +msgctxt "Content/Playlist/Paragraph" +msgid "Syncing changes to server…" +msgstr "Sincronització dels canvis amb el servidor …" + +#: front/src/components/audio/SearchBar.vue:35 +msgctxt "*/*/*/Noun" +msgid "Tag" +msgstr "" + +#: front/src/views/admin/library/TagDetail.vue:61 +#, fuzzy +msgctxt "Content/Moderation/Title" +msgid "Tag data" +msgstr "Dades de la pista" + +#: front/src/components/library/Albums.vue:23 +#: src/components/library/Artists.vue:15 +#: front/src/views/admin/library/Base.vue:23 +#: src/views/admin/library/TagsList.vue:24 front/src/edits.js:24 +#: src/edits.js:50 src/edits.js:91 src/entities.js:120 +msgctxt "*/*/*/Noun" +msgid "Tags" +msgstr "" + +#: front/src/components/mixins/Translations.vue:44 +#: front/src/components/mixins/Translations.vue:45 +#, fuzzy +msgctxt "Content/Moderation/Dropdown" +msgid "Takedown request" +msgstr "Cancel·lar la petició de seguiment" + +#: front/src/components/About.vue:35 src/components/About.vue:61 +msgctxt "Content/About/Header" +msgid "Terms and privacy policy" +msgstr "" + +#: front/src/components/audio/EmbedWizard.vue:35 +#: front/src/components/common/CopyInput.vue:3 +msgctxt "Content/*/Paragraph" +msgid "Text copied to clipboard!" +msgstr "Text copiat al porta-retalls!" + +#: front/src/views/admin/library/AlbumDetail.vue:81 +msgctxt "Content/Moderation/Paragraph" +msgid "The album will be removed, as well as associated uploads, tracks, favorites and listening history. This action is irreversible." +msgstr "L’à lbum s’eliminarà , aixà com les cà rregues associades, les pistes, els preferits i l’historial d’escolta. Aquesta acció és irreversible." + +#: front/src/components/auth/Authorize.vue:39 +msgctxt "Content/Auth/Paragraph" +msgid "The application is also requesting the following unknown permissions:" +msgstr "L’aplicació també sol·licita els següents permisos desconeguts:" + +#: front/src/views/admin/library/ArtistDetail.vue:79 +msgctxt "Content/Moderation/Paragraph" +msgid "The artist will be removed, as well as associated uploads, tracks, albums, favorites and listening history. This action is irreversible." +msgstr "L’artista s’eliminarà , aixà com les cà rregues associades, les pistes, els à lbums, els preferits i l’historial d’escolta. Aquesta acció és irreversible." + +#: front/src/components/Footer.vue:61 +msgctxt "Footer/*/List item.Link" +msgid "The funkwhale logo was kindly designed and provided by Francis Gading." +msgstr "El logotip de Funkwhale ha sigut generosament dissenyat i cedit per Francis Gading." + +#: front/src/components/SetInstanceModal.vue:8 +msgctxt "Popup/Instance/Error message.List item" +msgid "The given address is not a Funkwhale server" +msgstr "L’adreça indicada no és un servidor Funkwhale" + +#: front/src/views/content/libraries/Form.vue:34 +msgctxt "Popup/Library/Paragraph" +msgid "The library and all its tracks will be deleted. This can not be undone." +msgstr "La biblioteca i totes les seves pistes seran suprimides. Aquesta acció és irreversible." + +#: front/src/views/admin/library/LibraryDetail.vue:61 +msgctxt "Content/Moderation/Paragraph" +msgid "The library will be removed, as well as associated uploads, and follows. This action is irreversible." +msgstr "La biblioteca serà suprimida, aixà com les cà rregues associades, i els seguidors. Aquesta acció és irreversible." + +#: front/src/components/library/ImportStatusModal.vue:140 +msgctxt "Popup/Import/Error.Label" +msgid "The metadata included in the file is invalid or some mandatory fields are missing." +msgstr "La metadada inclosa en el fitxer és invalida o falten alguns camps obligatoris." + +#: front/src/components/library/FileUpload.vue:38 +msgctxt "Content/Library/List item" +msgid "The music files you are uploading are tagged properly." +msgstr "L'arxiu de música que has carregat està ben etiquetat." + +#: front/src/components/audio/Player.vue:65 +msgctxt "Sidebar/Player/Error message.Paragraph" +msgid "The next track will play automatically in a few seconds…" +msgstr "La següent pista serà reproduïda automà ticament en pocs segons …" + +#: front/src/components/manage/moderation/NotesThread.vue:27 +#, fuzzy +msgctxt "Content/Moderation/Paragraph" +msgid "The note will be removed. This action is irreversible." +msgstr "La cà rrega s'eliminarà . Aquesta acció és irreversible." + +#: front/src/components/manage/moderation/ReportCard.vue:120 +msgctxt "Content/Moderation/Message" +msgid "The object associated with this report was deleted." +msgstr "" + +#: front/src/components/playlists/Form.vue:14 +msgctxt "Content/Playlist/Error message.Title" +msgid "The playlist could not be created" +msgstr "No s’ha pogut crear la llista de reproducció" + +#: front/src/components/federation/FetchButton.vue:37 +msgctxt "*/*/Error" +msgid "The remote server answered with HTTP %{ status }" +msgstr "El servidor remot ha contestat amb HTTP %{ status }" + +#: front/src/components/federation/FetchButton.vue:13 +msgctxt "Popup/*/Message.Content" +msgid "The remote server answered, but returned data was unsupported by Funkwhale." +msgstr "El servidor remot va respondre, però les dades retornades no van ser admeses per Funkwhale." + +#: front/src/components/federation/FetchButton.vue:44 +#, fuzzy +msgctxt "*/*/Error" +msgid "The remote server didn't respond quickly enough" +msgstr "El servidor remot no va respondre prou rà pidament" + +#: front/src/components/federation/FetchButton.vue:50 +#, fuzzy +msgctxt "*/*/Error" +msgid "The remote server returned invalid JSON or JSON-LD data" +msgstr "El servidor de retorn ha retornat dades invà lides de JSON o JSON-LD" + +#: front/src/components/manage/library/AlbumsTable.vue:189 +msgctxt "Popup/*/Paragraph" +msgid "The selected albums will be removed, as well as associated tracks, uploads, favorites and listening history. This action is irreversible." +msgstr "Els à lbums seleccionats s’eliminaran, aixà com les pistes associades, les cà rregues, els preferits i l’historial d’escolta. Aquesta acció és irreversible." + +#: front/src/components/manage/library/ArtistsTable.vue:179 +msgctxt "Popup/*/Paragraph" +msgid "The selected artist will be removed, as well as associated uploads, tracks, albums, favorites and listening history. This action is irreversible." +msgstr "L’artista seleccionat s’eliminarà , aixà com les cà rregues associades, les pistes, els à lbums, els preferits i l’historial d’escolta. Aquesta acció és irreversible." + +#: front/src/components/manage/library/LibrariesTable.vue:206 +msgctxt "Popup/*/Paragraph" +msgid "The selected library will be removed, as well as associated uploads and follows. This action is irreversible." +msgstr "La biblioteca seleccionada serà suprimida, aixà com les cà rregues associades i els seguidors." + +#: front/src/components/manage/library/TagsTable.vue:180 +#, fuzzy +msgctxt "Popup/*/Paragraph" +msgid "The selected tag will be removed and unlinked with existing content, if any. This action is irreversible." +msgstr "La cà rrega seleccionada s'eliminarà . Aquesta acció és irreversible." + +#: front/src/components/manage/library/TracksTable.vue:189 +msgctxt "Popup/*/Paragraph" +msgid "The selected tracks will be removed, as well as associated uploads, favorites and listening history. This action is irreversible." +msgstr "Les pistes seleccionades s’eliminaran, aixà com les cà rregues associades, els preferits i l’historial d’escolta. Aquesta acció és irreversible." + +#: front/src/components/manage/library/UploadsTable.vue:256 +msgctxt "Popup/*/Paragraph" +msgid "The selected upload will be removed. This action is irreversible." +msgstr "La cà rrega seleccionada s'eliminarà . Aquesta acció és irreversible." + +#: front/src/components/SetInstanceModal.vue:7 +msgctxt "Popup/Instance/Error message.List item" +msgid "The server might be down" +msgstr "El servidor pot estar inactiu" + +#: front/src/components/auth/SubsonicTokenForm.vue:4 +msgctxt "Content/Settings/Paragraph" +msgid "The Subsonic API is not available on this Funkwhale instance." +msgstr "L'API Subsonic no està disponible per aquesta instà ncia de Funkwahale." + +#: front/src/components/library/EditCard.vue:96 +msgctxt "Popup/Library/Paragraph" +msgid "The suggestion will be completely removed, this action is irreversible." +msgstr "El suggeriment s’eliminarà completament, aquesta acció és irreversible." + +#: front/src/views/admin/library/TagDetail.vue:44 +#, fuzzy +msgctxt "Content/Moderation/Paragraph" +msgid "The tag will be removed and unlinked from any existing entity. This action is irreversible." +msgstr "La pista s’eliminarà , aixà com les cà rregues associades, els preferits i l’historial d’escolta. Aquesta acció és irreversible." + +#: front/src/components/playlists/PlaylistModal.vue:34 +msgctxt "Popup/Playlist/Error message.Title" +msgid "The track can't be added to a playlist" +msgstr "La pista no es pot afegir a la llista de reproducció" + +#: front/src/components/audio/Player.vue:62 +msgctxt "Sidebar/Player/Error message.Title" +msgid "The track cannot be loaded" +msgstr "La pista no s'ha pogut carregar" + +#: front/src/views/admin/library/TrackDetail.vue:80 +msgctxt "Content/Moderation/Paragraph" +msgid "The track will be removed, as well as associated uploads, favorites and listening history. This action is irreversible." +msgstr "La pista s’eliminarà , aixà com les cà rregues associades, els preferits i l’historial d’escolta. Aquesta acció és irreversible." + +#: front/src/views/admin/library/UploadDetail.vue:68 +msgctxt "Content/Moderation/Paragraph" +msgid "The upload will be removed. This action is irreversible." +msgstr "La cà rrega s'eliminarà . Aquesta acció és irreversible." + +#: front/src/components/library/FileUpload.vue:42 +msgctxt "Content/Library/List item" +msgid "The uploaded music files are in OGG, Flac or MP3 format" +msgstr "Els fitxers de música carregats estan en format OGG, MP3 O Flac" + +#: front/src/views/content/Home.vue:4 +msgctxt "Content/Library/Paragraph" +msgid "There are various ways to grab new content and make it available here." +msgstr "Hi ha diferents maneres de recuperar nou contingut i posar-lo a disposició aquÃ." + +#: front/src/components/manage/moderation/InstancePolicyForm.vue:66 +msgctxt "Popup/Moderation/Paragraph" +msgid "This action is irreversible." +msgstr "Aquesta acció és irreversible." + +#: front/src/components/library/AlbumDetail.vue:29 +msgctxt "Content/Album/Paragraph" +msgid "This album is present in the following libraries:" +msgstr "Aquest à lbum es troba en les següents biblioteques:" + +#: front/src/components/library/ArtistDetail.vue:42 +msgctxt "Content/Artist/Paragraph" +msgid "This artist is present in the following libraries:" +msgstr "Aquest artista es troba a les següents biblioteques:" + +#: front/src/components/manage/moderation/DomainsTable.vue:169 +#, fuzzy +msgctxt "Content/Moderation/Popup" +msgid "This domain is present in your allow-list" +msgstr "Aquest artista es troba a les següents biblioteques:" + +#: front/src/views/admin/moderation/AccountsDetail.vue:84 +#: front/src/views/admin/moderation/DomainsDetail.vue:76 +msgctxt "Content/Moderation/Card.Title" +msgid "This domain is subject to specific moderation rules" +msgstr "Aquest domini està subjecta a normes de moderació especÃfiques" + +#: front/src/components/manage/moderation/InstancePolicyModal.vue:16 +#, fuzzy +msgctxt "Content/Moderation/Card.Title" +msgid "This entity is subject to specific moderation rules" +msgstr "Aquest domini està subjecta a normes de moderació especÃfiques" + +#: front/src/views/content/Home.vue:9 +msgctxt "Content/Library/Paragraph" +msgid "This instance offers up to %{quota} of storage space for every user." +msgstr "Aquesta instà ncia ofereix fins a %{quota} d'emmagatzematge per a cada usuari." + +#: front/src/components/auth/Settings.vue:300 +msgctxt "Popup/Settings/Paragraph" +msgid "This is irreversible and will permanently remove your data from our servers. You will we immediatly logged out." +msgstr "" + +#: front/src/components/auth/Settings.vue:165 +msgctxt "Content/Settings/Paragraph" +msgid "This is the list of applications that have access to your account data." +msgstr "Aquesta és la llista d'aplicacions que tenen accés a les dades del teu compte." + +#: front/src/components/auth/Settings.vue:218 +msgctxt "Content/Settings/Paragraph" +msgid "This is the list of applications that you have created." +msgstr "Aquesta és la llista d'aplicacions que has creat." + +#: front/src/components/auth/Profile.vue:16 +msgctxt "Content/Profile/Button.Paragraph" +msgid "This is you!" +msgstr "Ets tu!" + +#: front/src/views/content/libraries/Form.vue:73 +msgctxt "Content/Library/Input.Placeholder" +msgid "This library contains my personal music, I hope you like it." +msgstr "Aquesta biblioteca conté la meva música personal, desitjo que t'agradi." + +#: front/src/views/content/remote/Card.vue:169 +msgctxt "Content/Library/Card.Help text" +msgid "This library is private and your approval from its owner is needed to access its content" +msgstr "Aquesta biblioteca és privada i es necessita l'aprovació del seu propietari per tal d'accedir al seu contingut" + +#: front/src/views/content/remote/Card.vue:170 +msgctxt "Content/Library/Card.Help text" +msgid "This library is public and you can access its content freely" +msgstr "Aquesta biblioteca és pública i pots accedir lliurement al seu contingut" + +#: front/src/components/common/ActionTable.vue:47 +msgctxt "Modal/*/Paragraph" +msgid "This may affect a lot of elements or have irreversible consequences, please double check this is really what you want." +msgstr "Això pot afectar molts elements o tenir conseqüències irreversibles, comproveu que és realment el que voleu." + +#: front/src/components/library/AlbumEdit.vue:8 +#: front/src/components/library/ArtistEdit.vue:8 +#: front/src/components/library/TrackEdit.vue:8 +msgctxt "Content/*/Message" +msgid "This object is managed by another server, you cannot edit it." +msgstr "Aquest objecte és gestionat per un altre servidor, no el podeu editar." + +#: front/src/components/Home.vue:87 +msgctxt "Content/Home/Paragraph" +msgid "This pod runs Funkwhale, a community-driven project that lets you listen and share music and audio within a decentralized, open network." +msgstr "" + +#: front/src/components/library/FileUpload.vue:51 +msgctxt "Content/Library/Paragraph" +msgid "This reference will be used to group imported files together." +msgstr "Aquesta referència s’utilitzarà per agrupar els fitxers carregats." + +#: front/src/components/mixins/Translations.vue:33 +#: front/src/components/mixins/Translations.vue:34 +#, fuzzy +msgctxt "Content/Library/Help text" +msgid "This track could not be processed, please make sure it is tagged correctly" +msgstr "No s'ha pogut processar aquesta pista, assegurat que estigui correctament etiquetada" + +#: front/src/components/mixins/Translations.vue:29 +#: front/src/components/mixins/Translations.vue:30 +msgctxt "Content/Library/Help text" +msgid "This track has been uploaded, but hasn't been processed by the server yet" +msgstr "Aquesta pista s’ha carregat, però el servidor encara no l’ha processat" + +#: front/src/components/mixins/Translations.vue:25 +#: front/src/components/mixins/Translations.vue:26 +msgctxt "Content/Library/Help text" +msgid "This track is already present in one of your libraries" +msgstr "Aquesta pista ja hi és dins una de les teves biblioteques" + +#: front/src/components/audio/PlayButton.vue:103 +msgctxt "*/Queue/Button/Title" +msgid "This track is not available in any library you have access to" +msgstr "Aquesta pista no està disponible en cap la biblioteca on hi tens accés" + +#: front/src/components/library/TrackDetail.vue:82 +msgctxt "Content/Track/Paragraph" +msgid "This track is present in the following libraries:" +msgstr "Aquesta pista és present en una d'aquestes biblioteques:" + +#: front/src/views/playlists/Detail.vue:46 +msgctxt "Popup/Playlist/Paragraph" +msgid "This will completely delete this playlist and cannot be undone." +msgstr "Això eliminarà completament aquesta llista de reproducció i no es podrà desfer l'acció." + +#: front/src/views/radios/Detail.vue:27 +msgctxt "Popup/Radio/Paragraph" +msgid "This will completely delete this radio and cannot be undone." +msgstr "Això eliminarà completament aquesta rà dio i no es podrà desfer." + +#: front/src/components/auth/SubsonicTokenForm.vue:55 +msgctxt "Popup/Settings/Paragraph" +msgid "This will completely disable access to the Subsonic API using from account." +msgstr "Això desactivarà completament l’accés a l’API Subsonic des del teu compte." + +#: front/src/components/manage/moderation/ReportCard.vue:359 +msgctxt "Content/Moderation/Popup,Paragraph" +msgid "This will delete the object associated with this report and mark the report as resolved. The deletion is irreversible." +msgstr "" + +#: front/src/components/auth/SubsonicTokenForm.vue:40 +msgctxt "Popup/Settings/Paragraph" +msgid "This will log you out from existing devices that use the current password." +msgstr "Això us donarà accés als dispositius existents que utilitzin la contrasenya actual." + +#: front/src/components/auth/Settings.vue:253 +msgctxt "Popup/Settings/Paragraph" +msgid "This will permanently delete the application and all the associated tokens." +msgstr "Això suprimirà permanentment l’aplicació i tots els testimonis associats." + +#: front/src/components/auth/Settings.vue:194 +msgctxt "Popup/Settings/Paragraph" +msgid "This will prevent this application from accessing the service on your behalf." +msgstr "Això evitarà que aquesta aplicació accedeixi al servei en nom vostre." + +#: front/src/components/playlists/Editor.vue:54 +msgctxt "Popup/Playlist/Paragraph" +msgid "This will remove all tracks from this playlist and cannot be undone." +msgstr "Això eliminarà totes les pistes d'aquesta llista de reproducció i aquesta acció no es podrà desfer." + +#: front/src/components/audio/track/Table.vue:7 +#: front/src/components/manage/library/AlbumsTable.vue:39 +#: front/src/components/manage/library/TracksTable.vue:39 +#: front/src/views/admin/library/AlbumDetail.vue:105 +#: front/src/views/admin/library/TrackDetail.vue:104 +#: front/src/views/content/libraries/FilesTable.vue:55 src/edits.js:36 +#: front/src/edits.js:62 +msgctxt "*/*/*/Noun" +msgid "Title" +msgstr "TÃtol" + +#: front/src/components/SetInstanceModal.vue:16 +msgctxt "Popup/Instance/Paragraph" +msgid "To continue, please select the Funkwhale instance you want to connect to. Enter the address directly, or select one of the suggested choices." +msgstr "Per continuar, si us plau selecciona la instà ncia de Funkwahale on et vols conectar. Introdueix directamente l'adreça o selecciona una de les suggerides." + +#: front/src/components/ShortcutsModal.vue:148 +#, fuzzy +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Toggle favorite" +msgstr "1 favorit" + +#: front/src/components/ShortcutsModal.vue:132 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Toggle mute" +msgstr "" + +#: front/src/components/ShortcutsModal.vue:136 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Toggle queue looping" +msgstr "Canvia el bucle de la cua" + +#: front/src/views/admin/library/AlbumDetail.vue:238 +#: front/src/views/admin/library/ArtistDetail.vue:226 +#: front/src/views/admin/library/LibraryDetail.vue:219 +#: front/src/views/admin/library/TrackDetail.vue:290 +#: front/src/views/admin/moderation/AccountsDetail.vue:329 +#: front/src/views/admin/moderation/DomainsDetail.vue:262 +msgctxt "Content/Moderation/Table.Label" +msgid "Total size" +msgstr "Tamany total" + +#: front/src/views/content/libraries/Card.vue:68 +msgctxt "Content/Library/Card.Help text" +msgid "Total size of the files in this library" +msgstr "Mida total dels fitxers en aquesta biblioteca" + +#: front/src/views/admin/moderation/DomainsDetail.vue:142 +msgctxt "Content/*/*" +msgid "Total users" +msgstr "Usuaris totals" + +#: front/src/components/audio/SearchBar.vue:34 +#: front/src/components/library/TrackBase.vue:188 +#: front/src/components/library/TrackDetail.vue:128 +#: front/src/components/metadata/Search.vue:138 +#: src/components/mixins/Report.vue:28 +#: front/src/views/admin/library/UploadDetail.vue:199 +#: front/src/components/mixins/Report.vue:29 +msgctxt "*/*/*/Noun" +msgid "Track" +msgstr "Pista" + +#: front/src/components/library/EditCard.vue:13 +msgctxt "Content/Library/Card/Short" +msgid "Track #%{ id } - %{ name }" +msgstr "Pista #%{ id } - %{ name }" + +#: front/src/views/admin/library/TrackDetail.vue:97 +msgctxt "Content/Moderation/Title" +msgid "Track data" +msgstr "Dades de la pista" + +#: front/src/components/library/TrackDetail.vue:4 +msgctxt "Content/Track/Title/Noun" +msgid "Track information" +msgstr "Informació de la pista" + +#: front/src/components/mixins/Translations.vue:60 +#: front/src/components/mixins/Translations.vue:61 +msgctxt "Content/*/Dropdown/Noun" +msgid "Track name" +msgstr "Nom de la pista" + +#: front/src/components/library/AlbumDetail.vue:19 +#: front/src/components/library/TagDetail.vue:36 +#: front/src/components/manage/library/AlbumsTable.vue:42 +#: front/src/components/manage/library/ArtistsTable.vue:42 +#: front/src/components/manage/library/TagsTable.vue:44 +#: front/src/components/playlists/PlaylistModal.vue:47 +#: front/src/views/admin/library/AlbumDetail.vue:268 +#: front/src/views/admin/library/ArtistDetail.vue:266 +#: front/src/views/admin/library/Base.vue:14 +#: front/src/views/admin/library/LibraryDetail.vue:248 +#: front/src/views/admin/library/TagDetail.vue:143 +#: front/src/views/admin/library/TracksList.vue:24 +#: front/src/views/admin/moderation/AccountsDetail.vue:374 +#: front/src/views/admin/moderation/DomainsDetail.vue:311 +#: front/src/views/content/Base.vue:8 src/views/content/libraries/Detail.vue:8 +#: front/src/views/playlists/Detail.vue:76 src/views/radios/Detail.vue:34 +msgctxt "*/*/*" +msgid "Tracks" +msgstr "Pistes" + +#: front/src/components/library/ArtistDetail.vue:33 +msgctxt "Content/Artist/Title" +msgid "Tracks by this artist" +msgstr "Pistes d'aquest artista" + +#: front/src/components/library/radios/Filter.vue:44 +msgctxt "Popup/Radio/Title/Noun" +msgid "Tracks matching filter" +msgstr "Pistes coincidents amb el filtre" + +#: front/src/components/library/TrackDetail.vue:57 +#: front/src/components/manage/moderation/ReportCard.vue:134 +#: front/src/views/admin/library/UploadDetail.vue:250 +#: front/src/views/admin/moderation/AccountsDetail.vue:181 +msgctxt "Content/Track/Table.Label/Noun" +msgid "Type" +msgstr "Tipus" + +#: front/src/components/manage/moderation/AccountsTable.vue:44 +#: front/src/components/manage/moderation/DomainsTable.vue:50 +msgctxt "Content/Moderation/Table.Label/Short" +msgid "Under moderation rule" +msgstr "Sota la regla de moderació" + +#: front/src/components/ShortcutsModal.vue:68 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Unfocus searchbar" +msgstr "" + +#: front/src/views/content/remote/Card.vue:122 +#: src/views/content/remote/Card.vue:127 +msgctxt "*/Library/Button.Label/Verb" +msgid "Unfollow" +msgstr "Deixar de seguir" + +#: front/src/views/content/remote/Card.vue:123 +msgctxt "Popup/Library/Title" +msgid "Unfollow this library?" +msgstr "Vols deixar de seguir aquesta biblioteca?" + +#: front/src/components/federation/FetchButton.vue:54 +#: front/src/components/federation/FetchButton.vue:55 +#: front/src/components/library/ImportStatusModal.vue:144 +msgctxt "*/*/Error" +msgid "Unknown error" +msgstr "Error desconegut" + +#: front/src/components/audio/Player.vue:656 +msgctxt "Sidebar/Player/Icon.Tooltip/Verb" +msgid "Unmute" +msgstr "Activar el so" + +#: front/src/components/manage/moderation/ReportCard.vue:225 +msgctxt "Content/*/Button.Label" +msgid "Unresolve" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:67 +#: front/src/views/admin/moderation/ReportsList.vue:23 +msgctxt "Content/*/*/Short" +msgid "Unresolved" +msgstr "" + +#: front/src/components/manage/moderation/InstancePolicyForm.vue:57 +msgctxt "Content/Moderation/Card.Button.Label/Verb" +msgid "Update" +msgstr "Actualitzar" + +#: front/src/components/auth/ApplicationForm.vue:64 +msgctxt "Content/Applications/Button.Label/Verb" +msgid "Update application" +msgstr "Actualitza l'aplicació" + +#: front/src/components/auth/Settings.vue:50 +msgctxt "Content/Settings/Button.Label/Verb" +msgid "Update avatar" +msgstr "Actualitzar l'avatar" + +#: front/src/views/content/libraries/Form.vue:25 +msgctxt "Content/Library/Button.Label/Verb" +msgid "Update library" +msgstr "Actualitzar la biblioteca" + +#: front/src/components/playlists/Form.vue:33 +msgctxt "Content/Playlist/Button.Label/Verb" +msgid "Update playlist" +msgstr "Actualitzar la llista de reproducció" + +#: front/src/components/auth/Settings.vue:27 +msgctxt "Content/Settings/Button.Label/Verb" +msgid "Update settings" +msgstr "Actualitza els parà metres" + +#: front/src/views/auth/PasswordResetConfirm.vue:21 +msgctxt "Content/Signup/Button.Label" +msgid "Update your password" +msgstr "Actualitzar la teva contrasenya" + +#: front/src/views/content/libraries/Card.vue:45 +#: front/src/views/content/libraries/DetailArea.vue:24 +msgctxt "Content/Library/Card.Button.Label/Verb" +msgid "Upload" +msgstr "Pujar" + +#: front/src/components/auth/Settings.vue:45 +msgctxt "Content/Settings/Title/Verb" +msgid "Upload a new avatar" +msgstr "Carrega el nou avatar" + +#: front/src/views/content/Home.vue:6 +msgctxt "Content/Library/Title/Verb" +msgid "Upload audio content" +msgstr "Pujar continguts d'à udio" + +#: front/src/views/admin/library/UploadDetail.vue:85 +msgctxt "Content/Moderation/Title" +msgid "Upload data" +msgstr "Dada de pujada" + +#: front/src/views/content/libraries/FilesTable.vue:58 +msgctxt "*/*/*/Noun" +msgid "Upload date" +msgstr "Data de pujada" + +#: front/src/components/library/FileUpload.vue:258 +msgctxt "Content/Library/Help text" +msgid "Upload denied, ensure the file is not too big and that you have not reached your quota" +msgstr "Pujada denegada, assegurat que el fitxer no sigui massa gran i que no hagis acabat la teva quota" + +#: front/src/components/library/ImportStatusModal.vue:8 +msgctxt "Popup/Import/Message" +msgid "Upload is still pending and will soon be processed by the server." +msgstr "La cà rrega encara està pendent i aviat serà processada pel servidor." + +#: front/src/views/content/Home.vue:7 +msgctxt "Content/Library/Paragraph" +msgid "Upload music files (MP3, OGG, FLAC, etc.) from your personal library directly from your browser to enjoy them here." +msgstr "Carrega fitxers de música (MP3, OGG, FLAC, …) directament a la teva llibreria personal des del teu navegador per gaudir-ne aquÃ." + +#: front/src/components/library/FileUpload.vue:30 +msgctxt "Content/Library/Title/Verb" +msgid "Upload new tracks" +msgstr "Carregar noves pistes" + +#: front/src/components/About.vue:99 +#: front/src/views/admin/moderation/AccountsDetail.vue:309 +#, fuzzy +msgctxt "*/*/*" +msgid "Upload quota" +msgstr "Quota de pujada" + +#: front/src/components/library/FileUpload.vue:267 +msgctxt "Content/Library/Help text" +msgid "Upload timeout, please try again" +msgstr "S'ha esgotat el temps de pujada, si us plau torna a provar-ho" + +#: front/src/components/library/ImportStatusModal.vue:14 +msgctxt "Popup/Import/Message" +msgid "Upload was skipped because a similar one is already available in one of your libraries." +msgstr "S'ha omès la cà rrega, ja que una de semblant ja està disponible en una de les teves biblioteques." + +#: front/src/components/library/ImportStatusModal.vue:11 +msgctxt "Popup/Import/Message" +msgid "Upload was successfully processed by the server." +msgstr "La pujada ha sigut processada correctament pel servidor." + +#: front/src/components/library/FileUpload.vue:109 +msgctxt "Content/Library/Table" +msgid "Uploaded" +msgstr "Carregat" + +#: front/src/components/library/FileUpload.vue:5 +msgctxt "Content/Library/Tab.Title/Short" +msgid "Uploading" +msgstr "Carregant" + +#: front/src/components/library/FileUpload.vue:112 +msgctxt "Content/Library/Table" +msgid "Uploading…" +msgstr "Carregant …" + +#: front/src/components/manage/library/LibrariesTable.vue:52 +#: front/src/components/manage/moderation/AccountsTable.vue:41 +#: front/src/components/mixins/Translations.vue:75 +#: front/src/views/admin/library/AlbumDetail.vue:258 +#: front/src/views/admin/library/ArtistDetail.vue:246 +#: front/src/views/admin/library/Base.vue:20 +#: front/src/views/admin/library/LibraryDetail.vue:258 +#: front/src/views/admin/library/TrackDetail.vue:310 +#: front/src/views/admin/library/UploadsList.vue:24 +#: front/src/views/admin/moderation/AccountsDetail.vue:349 +#: front/src/views/admin/moderation/DomainsDetail.vue:281 +#: front/src/components/mixins/Translations.vue:76 +msgctxt "*/*/*" +msgid "Uploads" +msgstr "Pujades" + +#: front/src/components/auth/ApplicationForm.vue:16 +msgctxt "Content/Applications/Help Text" +msgid "Use \"urn:ietf:wg:oauth:2.0:oob\" as a redirect URI if your application is not served on the web." +msgstr "Utilitza \"urn:ietf:wg:oauth:2.0:oob\" com a URI de redirecció si la vostra aplicació no es serveix al web." + +#: front/src/components/Footer.vue:16 +msgctxt "Footer/*/List item.Link" +msgid "Use another instance" +msgstr "Utilitzar una altre instà ncia" + +#: front/src/components/Home.vue:146 +msgctxt "Content/Home/Link" +msgid "Use Funkwhale on other devices with our apps" +msgstr "" + +#: front/src/components/moderation/ReportModal.vue:44 +msgctxt "*/*/Field,Help" +msgid "Use this field to provide additional context to the moderator that will handle your report." +msgstr "" + +#: front/src/views/auth/PasswordReset.vue:12 +msgctxt "Content/Signup/Paragraph" +msgid "Use this form to request a password reset. We will send an email to the given address with instructions to reset your password." +msgstr "Utilitza aquest formulari per sol·licitar el restabliment de la contrasenya. Enviarem un correu electrònic a l’adreça indicada amb instruccions per restablir la teva contrasenya." + +#: front/src/components/moderation/ReportModal.vue:18 +msgctxt "*/Moderation/Popup,Paragraph" +msgid "Use this form to submit a report to our moderation team." +msgstr "" + +#: front/src/components/manage/moderation/InstancePolicyForm.vue:111 +msgctxt "Content/Moderation/Help text" +msgid "Use this setting to temporarily enable/disable the policy without completely removing it." +msgstr "Utilitzeu aquest parà metre per activar/desactivar temporalment la regla sense eliminar-la totalment." + +#: front/src/components/manage/users/InvitationsTable.vue:49 +msgctxt "Content/Admin/Table" +msgid "Used" +msgstr "Utilitzat" + +#: front/src/components/Home.vue:125 +msgctxt "Content/Home/Header" +msgid "Useful links" +msgstr "" + +#: front/src/views/content/libraries/Detail.vue:26 +msgctxt "Content/Library/Table.Label" +msgid "User" +msgstr "Usuari" + +#: front/src/components/Home.vue:154 +#, fuzzy +msgctxt "Content/Home/Link" +msgid "User guides" +msgstr "Biblioteques d'usuaris" + +#: front/src/views/admin/Settings.vue:88 +#, fuzzy +msgctxt "Content/Admin/Menu" +msgid "User Interface" +msgstr "Nom d'usuari" + +#: front/src/components/library/AlbumDetail.vue:26 +#: front/src/components/library/ArtistDetail.vue:39 +#: front/src/components/library/TrackDetail.vue:79 +msgctxt "Content/*/Title/Noun" +msgid "User libraries" +msgstr "Biblioteques d'usuaris" + +#: front/src/components/library/Radios.vue:20 +msgctxt "Content/Radio/Title" +msgid "User radios" +msgstr "Rà dios dels usuaris" + +#: front/src/components/auth/SignupForm.vue:15 +#: front/src/components/manage/users/UsersTable.vue:37 +#: front/src/components/mixins/Translations.vue:71 +#: front/src/views/admin/moderation/AccountsDetail.vue:114 +#: front/src/components/mixins/Translations.vue:72 +msgctxt "Content/*/*" +msgid "Username" +msgstr "Nom d'usuari" + +#: front/src/components/auth/LoginForm.vue:11 +msgctxt "Content/Login/Input.Label/Noun" +msgid "Username or email" +msgstr "Nom d'usuari o correu" + +#: front/src/components/Sidebar.vue:106 +#: front/src/components/manage/moderation/DomainsTable.vue:47 +#: front/src/components/mixins/Translations.vue:73 +#: src/views/admin/Settings.vue:81 front/src/views/admin/users/Base.vue:5 +#: src/views/admin/users/UsersList.vue:21 +#: front/src/components/mixins/Translations.vue:74 +msgctxt "*/*/*/Noun" +msgid "Users" +msgstr "Usuaris" + +#: front/src/components/Home.vue:110 +msgctxt "Content/Home/Paragraph" +msgid "Users on this pod also get %{ quota } of free storage to upload their own content!" +msgstr "" + +#: front/src/components/Footer.vue:29 +msgctxt "Footer/*/Title" +msgid "Using Funkwhale" +msgstr "Usar Funkwhale" + +#: front/src/components/Footer.vue:13 +msgctxt "Footer/*/List item" +msgid "Version %{version}" +msgstr "Versió %{version}" + +#: front/src/views/content/libraries/Quota.vue:29 +#: front/src/views/content/libraries/Quota.vue:56 +#: front/src/views/content/libraries/Quota.vue:82 +msgctxt "Content/Library/Link/Verb" +msgid "View files" +msgstr "Visualitza els fitxers" + +#: front/src/components/library/AlbumBase.vue:95 +#: front/src/components/library/ArtistBase.vue:107 +#: front/src/components/library/TrackBase.vue:111 +#: front/src/views/admin/library/AlbumDetail.vue:48 +#: front/src/views/admin/library/ArtistDetail.vue:46 +#: front/src/views/admin/library/LibraryDetail.vue:34 +#: front/src/views/admin/library/LibraryDetail.vue:45 +#: front/src/views/admin/library/TagDetail.vue:32 +#: front/src/views/admin/library/TrackDetail.vue:47 +#: front/src/views/admin/library/UploadDetail.vue:35 +#: front/src/views/admin/library/UploadDetail.vue:46 +#: front/src/views/admin/moderation/AccountsDetail.vue:37 +#: front/src/views/admin/moderation/AccountsDetail.vue:45 +#: front/src/views/admin/moderation/DomainsDetail.vue:30 +msgctxt "Content/Moderation/Link/Verb" +msgid "View in Django's admin" +msgstr "Visualitza amb l'administrador Django's" + +#: front/src/components/Home.vue:169 +#, fuzzy +msgctxt "Content/Home/Link" +msgid "View more…" +msgstr "Carrega'n més …" + +#: front/src/components/library/AlbumBase.vue:62 +#: front/src/components/library/ArtistBase.vue:73 +#: front/src/components/library/TrackBase.vue:78 +#: front/src/components/metadata/ArtistCard.vue:49 +#: front/src/components/metadata/ReleaseCard.vue:53 +msgctxt "Content/*/*/Clickable, Verb" +msgid "View on MusicBrainz" +msgstr "Visualitza a MusicBrainz" + +#: front/src/components/manage/moderation/ReportCard.vue:124 +msgctxt "Content/Moderation/Link" +msgid "View public page" +msgstr "" + +#: front/src/components/manage/library/LibrariesTable.vue:11 +#: front/src/components/manage/library/LibrariesTable.vue:51 +#: front/src/components/manage/library/UploadsTable.vue:11 +#: front/src/components/manage/library/UploadsTable.vue:63 +#: front/src/views/admin/library/LibraryDetail.vue:94 +#: front/src/views/admin/library/UploadDetail.vue:101 +#: front/src/views/content/libraries/Form.vue:18 +msgctxt "*/*/*" +msgid "Visibility" +msgstr "Visibilitat" + +#: front/src/components/Home.vue:91 +#, fuzzy +msgctxt "Content/Home/Link" +msgid "Visit funkwhale.audio" +msgstr "Usar Funkwhale" + +#: front/src/components/library/AlbumDetail.vue:4 +msgctxt "Content/Album/" +msgid "Volume %{ number }" +msgstr "Volum %{ number }" + +#: front/src/components/federation/FetchButton.vue:69 +msgctxt "Popup/*/Loading.Title" +msgid "Waiting for result…" +msgstr "Esperant el resultat …" + +#: front/src/components/auth/Settings.vue:285 +#, fuzzy +msgctxt "Content/Settings/Error message.Title" +msgid "We cannot delete your account" +msgstr "No es pot iniciar la sessió" + +#: front/src/components/auth/LoginForm.vue:3 +msgctxt "Content/Login/Error message.Title" +msgid "We cannot log you in" +msgstr "No es pot iniciar la sessió" + +#: front/src/components/auth/ApplicationForm.vue:3 +msgctxt "Content/*/Error message.Title" +msgid "We cannot save your changes" +msgstr "No es poden desar els teus canvis" + +#: front/src/views/Notifications.vue:39 +msgctxt "Content/Notifications/Paragraph" +msgid "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!" +msgstr "" + +#: front/src/components/library/FileUpload.vue:39 +msgctxt "Content/Library/Link" +msgid "We recommend using Picard for that purpose." +msgstr "Us recomanem que utilitzeu Picard per a aquest propòsit." + +#: front/src/components/moderation/ReportModal.vue:35 +msgctxt "*/*/Field,Help" +msgid "We'll use this email if we need to contact you regarding this report." +msgstr "" + +#: front/src/components/Home.vue:207 +msgctxt "Head/Home/Title" +msgid "Welcome" +msgstr "Benvinguts/des" + +#: front/src/components/Home.vue:5 +msgctxt "Content/Home/Header" +msgid "Welcome to %{ podName }!" +msgstr "" + +#: front/src/components/audio/EmbedWizard.vue:23 +msgctxt "Popup/Embed/Input.Label" +msgid "Widget height" +msgstr "Alçada del giny" + +#: front/src/components/audio/EmbedWizard.vue:16 +msgctxt "Popup/Embed/Input.Label" +msgid "Widget width" +msgstr "Amplada del giny" + +#: front/src/components/auth/ApplicationForm.vue:157 +msgctxt "Content/OAuth Scopes/Label/Verb" +msgid "Write" +msgstr "Escriure" + +#: front/src/components/auth/Authorize.vue:21 +msgctxt "Content/Auth/Label/Noun" +msgid "Write-only" +msgstr "Només d'escriptura" + +#: front/src/components/auth/ApplicationForm.vue:158 +msgctxt "Content/OAuth Scopes/Help Text" +msgid "Write-only access to user data" +msgstr "Accés només per escrit a les dades de l'usuari" + +#: front/src/components/Sidebar.vue:133 +#: front/src/components/manage/moderation/AccountsTable.vue:72 +#: front/src/components/manage/moderation/DomainsTable.vue:12 +#: front/src/components/manage/moderation/DomainsTable.vue:69 +#: front/src/views/admin/moderation/DomainsDetail.vue:109 +msgctxt "*/*/*" +msgid "Yes" +msgstr "SÃ" + +#: front/src/components/auth/Logout.vue:8 +msgctxt "Content/Login/Button.Label" +msgid "Yes, log me out!" +msgstr "SÃ, tanca la sessió!" + +#: front/src/views/content/libraries/Form.vue:19 +msgctxt "Content/Library/Paragraph" +msgid "You are able to share your library with other people, regardless of its visibility." +msgstr "Pots compartir la teva biblioteca amb altres persones, independentment de la seva visibilitat." + +#: front/src/components/library/FileUpload.vue:32 +msgctxt "Content/Library/Paragraph" +msgid "You are about to upload music to your library. Before proceeding, please ensure that:" +msgstr "Està s apunt de carregar música a la teva biblioteca. Abans de començar, assegurat de:" + +#: front/src/components/SetInstanceModal.vue:12 +msgctxt "Popup/Login/Paragraph" +msgid "You are currently connected to <a href=\"%{ url }\" target=\"_blank\">%{ hostname } <i class=\"external icon\"/></a>. If you continue, you will be disconnected from your current instance and all your local data will be deleted." +msgstr "Actualment està s connectat a <a href=\"%{ url }\" target=\"_blank\">%{ hostname } <i class=\"external icon\"/></a>. Si continueu, sereu desconnectats de la vostra instà ncia actual i s’eliminaran totes les vostres dades locals." + +#: front/src/components/library/ArtistDetail.vue:6 +msgctxt "Content/Artist/Paragraph" +msgid "You are currently hiding content related to this artist." +msgstr "Actualment, esteu ocultant contingut relacionat amb aquest artista." + +#: front/src/components/auth/Logout.vue:7 +msgctxt "Content/Login/Paragraph" +msgid "You are currently logged in as %{ username }" +msgstr "Actualment esteu connectat com a %{ username }" + +#: front/src/components/library/FileUpload.vue:35 +msgctxt "Content/Library/List item" +msgid "You are not uploading copyrighted content in a public library, otherwise you may be infringing the law" +msgstr "No pengis contingut amb drets d'autor en una biblioteca pública, en cas contrari, podries infringir la llei" + +#: front/src/components/SetInstanceModal.vue:98 +msgctxt "*/Instance/Message" +msgid "You are now using the Funkwhale instance at %{ url }" +msgstr "Ara utilitzeu la instà ncia de Funkwhale a %{ url }" + +#: front/src/views/content/Home.vue:17 +#, fuzzy +msgctxt "Content/Library/Paragraph" +msgid "You can 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." +msgstr "Pots seguir biblioteques d'altres usuaris per tenir accés a nova música. Les biblioteques públiques poden seguir-se immediatament, però seguir les biblioteques privades requereix l'aprovació del seu propietari." + +#: front/src/components/moderation/FilterModal.vue:31 +#, fuzzy +msgctxt "Popup/Moderation/Paragraph" +msgid "You can manage and update your filters any time from your account settings." +msgstr "Podeu gestionar i actualitzar els filtres en qualsevol moment des de la configuració del vostre compte." + +#: front/src/views/auth/EmailConfirm.vue:24 +msgctxt "Content/Signup/Paragraph" +msgid "You can now use the service without limitations." +msgstr "Ara podeu utilitzar el servei sense limitacions." + +#: front/src/components/auth/Settings.vue:278 +msgctxt "Content/Settings/Paragraph'" +msgid "You can permanently and irreversibly delete your account and all the associated data using the form below. You will be asked for confirmation." +msgstr "" + +#: front/src/components/library/radios/Builder.vue:7 +msgctxt "Content/Radio/Paragraph" +msgid "You can use this interface to build your own custom radio, which will play tracks according to your criteria." +msgstr "Podeu utilitzar aquesta interfÃcie per crear la vostra pròpia rà dio personalitzada, que reproduirà les pistes d’acord amb els vostres criteris." + +#: front/src/components/auth/SubsonicTokenForm.vue:7 +msgctxt "Content/Settings/Paragraph" +msgid "You can use those to enjoy your playlist and music in offline mode, on your smartphone or tablet, for instance." +msgstr "Pots utilitzar-lo per gaudir, per exemple, de la vostra llista de reproducció i de la música sense connexió, al telèfon intel·ligent o a la tauleta." + +#: front/src/components/auth/Settings.vue:202 +msgctxt "Content/Applications/Paragraph" +msgid "You don't have any application connected with your account." +msgstr "No teniu cap aplicació connectada amb el vostre compte." + +#: front/src/components/auth/Settings.vue:261 +msgctxt "Content/Applications/Paragraph" +msgid "You don't have any configured application yet." +msgstr "Encara no teniu cap aplicació configurada." + +#: front/src/views/admin/moderation/AccountsDetail.vue:75 +msgctxt "Content/Moderation/Card.Title" +msgid "You don't have any rule in place for this account." +msgstr "No teniu cap norma per a aquest compte." + +#: front/src/views/admin/moderation/DomainsDetail.vue:67 +msgctxt "Content/Moderation/Card.Title" +msgid "You don't have any rule in place for this domain." +msgstr "No teniu cap norma per a aquest domini." + +#: front/src/components/library/EditForm.vue:52 +msgctxt "Content/Library/Paragraph" +msgid "You don't have the permission to edit this object, but you can suggest changes. Once submitted, suggestions will be reviewed before approval." +msgstr "No teniu permÃs per editar aquest objecte, però podeu suggerir canvis. Un cop enviats, els suggeriments es revisaran abans de l'aprovació." + +#: front/src/components/Sidebar.vue:175 +msgctxt "Sidebar/Player/Title" +msgid "You have a radio playing" +msgstr "Està s escoltant la rà dio" + +#: front/src/components/audio/Player.vue:69 +msgctxt "Sidebar/Player/Error message.Paragraph" +msgid "You may have a connectivity issue." +msgstr "És possible que tingueu un problema de connectivitat." + +#: front/src/components/auth/Settings.vue:100 +msgctxt "Popup/Settings/List item" +msgid "You will be logged out from this session and have to log in with the new one" +msgstr "Es tancarà la sessió d’aquest compte i haurà s d’iniciar sessió amb la nou" + +#: front/src/components/auth/Authorize.vue:51 +msgctxt "Content/Auth/Paragraph" +msgid "You will be redirected to <strong>%{ url }</strong>" +msgstr "Es redirigirà a <strong>%{ url }</strong>" + +#: front/src/components/auth/Authorize.vue:49 +msgctxt "Content/Auth/Paragraph" +msgid "You will be shown a code to copy-paste in the application." +msgstr "Se us mostrarà un codi per copiar i enganxar a l’aplicació." + +#: front/src/components/auth/Settings.vue:71 +msgctxt "Content/Settings/Paragraph" +msgid "You will have to update your password on your clients that use this password." +msgstr "Haureu d’actualitzar la vostra contrasenya als vostres clients que utilitzin aquesta contrasenya." + +#: front/src/components/moderation/FilterModal.vue:20 +#, fuzzy +msgctxt "Popup/Moderation/Paragraph" +msgid "You will not see tracks, albums and user activity linked to this artist any more:" +msgstr "No veureu pistes, à lbums ni activitats relacionades amb aquest usuari:" + +#: front/src/components/auth/SignupForm.vue:9 +msgctxt "Content/Signup/Form/Paragraph" +msgid "Your account cannot be created." +msgstr "No es pot crear el vostre compte." + +#: front/src/components/auth/Settings.vue:281 +msgctxt "Content/Settings/Paragraph'" +msgid "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." +msgstr "" + +#: front/src/components/auth/Settings.vue:215 +msgctxt "Content/Settings/Title/Noun" +msgid "Your applications" +msgstr "Les vostres aplicacions" + +#: front/src/components/auth/Settings.vue:38 +msgctxt "Content/Settings/Error message.Title" +msgid "Your avatar cannot be saved" +msgstr "No s'ha pogut guardar el teu avatar" + +#: front/src/components/auth/Settings.vue:527 +msgctxt "*/Auth/Message" +msgid "Your deletion request was submitted, your account and content will be deleted shortly" +msgstr "" + +#: front/src/components/library/EditForm.vue:3 +msgctxt "Content/Library/Paragraph" +msgid "Your edit was successfully submitted." +msgstr "L’edició s’ha enviat correctament." + +#: front/src/components/favorites/List.vue:116 +msgctxt "Head/Favorites/Title" +msgid "Your Favorites" +msgstr "Els teus preferits" + +#: front/src/views/Notifications.vue:5 +#, fuzzy +msgctxt "Content/Notifications/Title" +msgid "Your messages" +msgstr "Missatges emesos" + +#: front/src/views/Notifications.vue:69 +msgctxt "Content/Notifications/Title" +msgid "Your notifications" +msgstr "Les vostres notificacions" + +#: front/src/components/auth/Settings.vue:76 +msgctxt "Content/Settings/Error message.Title" +msgid "Your password cannot be changed" +msgstr "La vostra contrasenya no es pot canviar" + +#: front/src/views/auth/PasswordResetConfirm.vue:29 +msgctxt "Content/Signup/Card.Paragraph" +msgid "Your password has been updated successfully." +msgstr "La vostra contrasenya s'ha actualitzat correctament." + +#: front/src/components/auth/Settings.vue:14 +#, fuzzy +msgctxt "Content/Settings/Error message.Title" +msgid "Your settings can't be updated" +msgstr "La vostra configuració no es pot actualitzar" + +#: front/src/components/auth/Settings.vue:101 +msgctxt "Popup/Settings/List item" +msgid "Your Subsonic password will be changed to a new, random one, logging you out from devices that used the old Subsonic password" +msgstr "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" + +#: front/src/entities.js:126 +#, fuzzy +msgctxt "*/*/*/Noun" +msgid "MusicBrainz ID" +msgstr "Obrir dins MusicBrainz" + +#: front/src/main.js:110 +msgctxt "*/Error/Paragraph" +msgid "You sent too many requests and have been rate limited, please try again in %{ delay }" +msgstr "" + +#: front/src/main.js:113 +msgctxt "*/Error/Paragraph" +msgid "You sent too many requests and have been rate limited, please try again later" +msgstr "" + +#: front/src/components/library/AlbumBase.vue:208 +msgctxt "Content/Album/Header.Title" +msgid "Album containing %{ count } track, by <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" +msgid_plural "Album containing %{ count } tracks, by <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" +msgstr[0] "L'à lbum conté una cançó de <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" +msgstr[1] "L'à lbum conté %{ count } cançons, de <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" + +#: front/src/components/audio/PlayButton.vue:246 +msgctxt "*/Queue/Message" +msgid "%{ count } track was added to your queue" +msgid_plural "%{ count } tracks were added to your queue" +msgstr[0] "%{ count } pista ha estat afegida a la teva cua" +msgstr[1] "%{ count } pistes han estat afegides a la teva cua" diff --git a/front/locales/cs/LC_MESSAGES/app.po b/front/locales/cs/LC_MESSAGES/app.po new file mode 100644 index 0000000000000000000000000000000000000000..c7ddd524237b61f1c69e3d1171d34a6c0c455e10 --- /dev/null +++ b/front/locales/cs/LC_MESSAGES/app.po @@ -0,0 +1,5584 @@ +# Czech translations for front package. +# Copyright (C) 2019 THE front'S COPYRIGHT HOLDER +# This file is distributed under the same license as the front package. +# Automatically generated, 2019. +# +msgid "" +msgstr "" +"Project-Id-Version: front 0.1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-10-01 15:15+0200\n" +"PO-Revision-Date: 2019-09-26 10:13+0000\n" +"Last-Translator: jiri-novacek <gfreshman@gmail.com>\n" +"Language-Team: none\n" +"Language: cs\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Weblate 3.7\n" + +#: front/src/components/playlists/PlaylistModal.vue:9 +msgctxt "Popup/Playlist/Paragraph" +msgid "\"%{ title }\", by %{ artist }" +msgstr "\"%{ title }\", od %{ artist }" + +#: front/src/components/Sidebar.vue:24 +msgctxt "Sidebar/Queue/Tab.Title" +msgid "(%{ index } of %{ length })" +msgstr "(%{ index } z %{ length })" + +#: front/src/components/Sidebar.vue:22 +msgctxt "Sidebar/Queue/Tab.Title" +msgid "(empty)" +msgstr "(prázdné)" + +#: front/src/components/auth/Authorize.vue:16 +msgctxt "Content/Auth/Title" +msgid "%{ app } wants to access your Funkwhale account" +msgstr "%{ app } chce pÅ™istupovat k vaÅ¡emu Funkwhale úÄtu" + +#: front/src/components/About.vue:173 src/components/Home.vue:56 +msgctxt "Content/Home/Stat" +msgid "%{ count } active user" +msgid_plural "%{ count } active users" +msgstr[0] "%{ count } aktivnà uživatel" +msgstr[1] "%{ count } aktivnà uživatelé" +msgstr[2] "%{ count } aktivnÃch uživatelů" + +#: front/src/components/About.vue:182 +msgctxt "Content/Home/Stat" +msgid "%{ count } albums" +msgid_plural "%{ count } albums" +msgstr[0] "%{ count } album" +msgstr[1] "%{ count } alba" +msgstr[2] "%{ count } alb" + +#: front/src/components/About.vue:152 +msgctxt "*/*/*" +msgid "%{ count } allowed domains" +msgid_plural "%{ count } allowed domains" +msgstr[0] "%{ count } povolená doména" +msgstr[1] "%{ count } povolené domény" +msgstr[2] "%{ count } povolených domén" + +#: front/src/components/About.vue:179 +msgctxt "Content/Home/Stat" +msgid "%{ count } artists" +msgid_plural "%{ count } artists" +msgstr[0] "%{ count } interpret" +msgstr[1] "%{ count } interpreti" +msgstr[2] "%{ count } interpretů" + +#: front/src/components/About.vue:176 src/components/Home.vue:59 +msgctxt "Content/Home/Stat" +msgid "%{ count } hour of music" +msgid_plural "%{ count } hours of music" +msgstr[0] "%{ count } hodina hudby" +msgstr[1] "%{ count } hodiny hudby" +msgstr[2] "%{ count } hodin hudby" + +#: front/src/components/About.vue:188 +msgctxt "Content/Home/Stat" +msgid "%{ count } listenings" +msgid_plural "%{ count } listenings" +msgstr[0] "%{ count } poslech" +msgstr[1] "%{ count } poslechy" +msgstr[2] "%{ count } poslechů" + +#: front/src/components/common/ActionTable.vue:68 +msgctxt "Content/*/Paragraph" +msgid "%{ count } on %{ total } selected" +msgid_plural "%{ count } on %{ total } selected" +msgstr[0] "%{ count } z %{ total } vybrán" +msgstr[1] "%{ count } z %{ total } vybrány" +msgstr[2] "%{ count } on %{ total } vybraných" + +#: front/src/components/Sidebar.vue:125 src/components/audio/album/Card.vue:52 +#: front/src/views/content/libraries/Card.vue:40 +#: src/views/content/remote/Card.vue:43 +msgctxt "*/*/*" +msgid "%{ count } track" +msgid_plural "%{ count } tracks" +msgstr[0] "%{ count } stopa" +msgstr[1] "%{ count } stopy" +msgstr[2] "%{ count } stop" + +#: front/src/components/library/ArtistBase.vue:13 +msgctxt "Content/Artist/Paragraph" +msgid "%{ count } track in %{ albumsCount } albums" +msgid_plural "%{ count } tracks in %{ albumsCount } albums" +msgstr[0] "%{ count } stopa v %{ albumsCount } albu" +msgstr[1] "%{ count } stopy v %{ albumsCount } albech" +msgstr[2] "%{ count } stop in %{ albumsCount } albech" + +#: front/src/components/library/radios/Builder.vue:81 +msgctxt "Content/Radio/Table.Paragraph/Short" +msgid "%{ count } track matching combined filters" +msgid_plural "%{ count } tracks matching combined filters" +msgstr[0] "%{ count } stopa odpovÃdá zadaným filtrům" +msgstr[1] "%{ count } stopy odpovÃdajà zadaným filtrům" +msgstr[2] "%{ count } stop odpovÃdá zadaným filtrům" + +#: front/src/components/About.vue:185 +msgctxt "Content/Home/Stat" +msgid "%{ count } tracks" +msgid_plural "%{ count } tracks" +msgstr[0] "%{ count } stopa" +msgstr[1] "%{ count } stopy" +msgstr[2] "%{ count } stop" + +#: front/src/components/playlists/Card.vue:28 +msgctxt "Content/*/Card/List item" +msgid "%{ count} track" +msgid_plural "%{ count } tracks" +msgstr[0] "%{ count} stopa" +msgstr[1] "%{ count } stopy" +msgstr[2] "%{ count } stop" + +#: front/src/views/content/libraries/Quota.vue:11 +msgctxt "Content/Library/Paragraph" +msgid "%{ current } used on %{ max } allowed" +msgstr "%{ current } využito z %{ max } povolených" + +#: front/src/components/common/Duration.vue:2 +msgctxt "Content/*/Paragraph" +msgid "%{ hours } h %{ minutes } min" +msgstr "%{ hours } h %{ minutes } min" + +#: front/src/components/common/Duration.vue:5 +msgctxt "Content/*/Paragraph" +msgid "%{ minutes } min" +msgstr "%{ minutes } min" + +#: front/src/components/notifications/NotificationRow.vue:40 +msgctxt "Content/Notifications/Paragraph" +msgid "%{ username } accepted your follow on library \"%{ library }\"" +msgstr "%{ username } schválil váš pÅ™Ãstup ke knihovnÄ› \"%{ library }\"" + +#: front/src/components/notifications/NotificationRow.vue:39 +msgctxt "Content/Notifications/Paragraph" +msgid "%{ username } followed your library \"%{ library }\"" +msgstr "%{ username } sleduje vaÅ¡i knihovnu \"%{ library }\"" + +#: front/src/components/notifications/NotificationRow.vue:41 +msgctxt "Content/Notifications/Paragraph" +msgid "%{ username } wants to follow your library \"%{ library }\"" +msgstr "%{ username } chce sledovat vaÅ¡i knihovnu \"%{ library }\"" + +#: front/src/components/auth/Profile.vue:46 +msgctxt "Head/Profile/Title" +msgid "%{ username }'s profile" +msgstr "Profil %{ username }" + +#: front/src/components/playlists/PlaylistModal.vue:21 +msgctxt "Popup/Playlist/Paragraph" +msgid "<strong>%{ track }</strong> is already in <strong>%{ playlist }</strong>." +msgstr "<strong>%{ track }</strong> se už nacházà v <strong>%{ playlist }</strong>." + +#: front/src/components/audio/artist/Card.vue:11 +msgctxt "Content/Artist/Card" +msgid "1 album" +msgid_plural "%{ count } albums" +msgstr[0] "1 album" +msgstr[1] "%{ count } alba" +msgstr[2] "%{ count } alb" + +#: front/src/components/favorites/List.vue:10 +msgctxt "Content/Favorites/Title" +msgid "1 favorite" +msgid_plural "%{ count } favorites" +msgstr[0] "1 oblÃbená" +msgstr[1] "%{ count } oblÃbené" +msgstr[2] "%{ count } oblÃbených" + +#: front/src/components/audio/artist/Card.vue:15 +msgctxt "Content/Artist/Card" +msgid "1 track" +msgid_plural "%{ count } tracks" +msgstr[0] "%{ count } stopa" +msgstr[1] "%{ count } stopy" +msgstr[2] "%{ count } stop" + +#: front/src/views/Notifications.vue:21 src/views/Notifications.vue:55 +msgctxt "*/*/*" +msgid "30 days" +msgstr "30 dnÃ" + +#: front/src/views/Notifications.vue:22 src/views/Notifications.vue:56 +msgctxt "*/*/*" +msgid "60 days" +msgstr "60 dnÃ" + +#: front/src/views/Notifications.vue:23 src/views/Notifications.vue:57 +msgctxt "*/*/*" +msgid "90 days" +msgstr "90 dnÃ" + +#: front/src/components/library/FileUpload.vue:264 +msgctxt "Content/Library/Help text" +msgid "A network error occurred while uploading this file" +msgstr "BÄ›hem nahrávánà tohoto souboru doÅ¡lo k chybÄ› sÃtÄ›" + +#: front/src/components/library/EditForm.vue:161 +msgctxt "*/*/Placeholder" +msgid "A short summary describing your changes." +msgstr "Krátké shrnutà popisujÃcà provedené zmÄ›ny." + +#: front/src/components/About.vue:5 +msgctxt "Content/Home/Header" +msgid "About %{ podName }" +msgstr "O %{ instance }" + +#: front/src/components/Footer.vue:6 +msgctxt "Footer/About/Title" +msgid "About %{instanceName}" +msgstr "O %{instanceName}" + +#: front/src/components/Footer.vue:53 src/components/Home.vue:85 +msgctxt "Footer/*/Title/Short" +msgid "About Funkwhale" +msgstr "O Funkwhale" + +#: front/src/components/Footer.vue:10 +msgctxt "Footer/About/List item.Link" +msgid "About page" +msgstr "O aplikaci" + +#: front/src/components/Home.vue:19 +msgctxt "Content/Home/Header" +msgid "About this Funkwhale pod" +msgstr "O tomto Funkwhale podu" + +#: front/src/components/About.vue:21 src/components/About.vue:51 +msgctxt "Content/About/Header" +msgid "About this pod" +msgstr "O této instanci" + +#: front/src/views/content/libraries/Detail.vue:48 +msgctxt "Content/Library/Button.Label" +msgid "Accept" +msgstr "Akceptovat" + +#: front/src/views/content/libraries/Detail.vue:40 +msgctxt "Content/Library/Table/Short" +msgid "Accepted" +msgstr "Akceptováno" + +#: front/src/components/auth/SubsonicTokenForm.vue:117 +msgctxt "Content/Settings/Message" +msgid "Access disabled" +msgstr "PÅ™Ãstup odepÅ™en" + +#: front/src/components/mixins/Translations.vue:85 +#: front/src/components/mixins/Translations.vue:86 +msgctxt "Content/OAuth Scopes/Paragraph" +msgid "Access to audio files, libraries, artists, albums and tracks" +msgstr "PÅ™Ãstup k hudebnÃm souborům, knihovnám, interpretům, albům a stopám" + +#: front/src/components/mixins/Translations.vue:109 +#: front/src/components/mixins/Translations.vue:110 +msgctxt "Content/OAuth Scopes/Paragraph" +msgid "Access to content filters" +msgstr "PÅ™Ãstup k filtrům obsahu" + +#: front/src/components/mixins/Translations.vue:117 +#: front/src/components/mixins/Translations.vue:118 +msgctxt "Content/OAuth Scopes/Paragraph" +msgid "Access to edits" +msgstr "PÅ™Ãstup k úpravám" + +#: front/src/components/mixins/Translations.vue:81 +#: front/src/components/mixins/Translations.vue:82 +msgctxt "Content/OAuth Scopes/Paragraph" +msgid "Access to email, username, and profile information" +msgstr "PÅ™Ãstup k emailu, uživatelskému jménu a informacÃm o profilu" + +#: front/src/components/mixins/Translations.vue:89 +#: front/src/components/mixins/Translations.vue:90 +msgctxt "Content/OAuth Scopes/Paragraph" +msgid "Access to favorites" +msgstr "PÅ™Ãstup k oblÃbeným" + +#: front/src/components/mixins/Translations.vue:97 +#: front/src/components/mixins/Translations.vue:98 +msgctxt "Content/OAuth Scopes/Paragraph" +msgid "Access to follows" +msgstr "PÅ™Ãstup ke sledovánÃ" + +#: front/src/components/mixins/Translations.vue:93 +#: front/src/components/mixins/Translations.vue:94 +msgctxt "Content/OAuth Scopes/Paragraph" +msgid "Access to listening history" +msgstr "PÅ™Ãstup k historii poslechu" + +#: front/src/components/mixins/Translations.vue:113 +#: front/src/components/mixins/Translations.vue:114 +msgctxt "Content/OAuth Scopes/Paragraph" +msgid "Access to notifications" +msgstr "PÅ™Ãstup k oznámenÃm" + +#: front/src/components/mixins/Translations.vue:101 +#: front/src/components/mixins/Translations.vue:102 +msgctxt "Content/OAuth Scopes/Paragraph" +msgid "Access to playlists" +msgstr "PÅ™Ãstup k playlistům" + +#: front/src/components/mixins/Translations.vue:105 +#: front/src/components/mixins/Translations.vue:106 +msgctxt "Content/OAuth Scopes/Paragraph" +msgid "Access to radios" +msgstr "PÅ™Ãstup k rádiÃm" + +#: front/src/components/manage/library/UploadsTable.vue:67 +#: front/src/components/mixins/Translations.vue:55 +#: front/src/views/admin/library/UploadDetail.vue:175 +#: front/src/components/mixins/Translations.vue:56 +msgctxt "Content/*/*/Noun" +msgid "Accessed date" +msgstr "Datum pÅ™Ãstupu" + +#: front/src/components/manage/library/LibrariesTable.vue:49 +#: front/src/components/manage/library/UploadsTable.vue:61 +#: front/src/components/manage/moderation/ReportCard.vue:156 +#: front/src/components/mixins/Report.vue:13 +#: front/src/views/admin/library/LibraryDetail.vue:113 +#: front/src/views/admin/library/UploadDetail.vue:111 +#: front/src/components/mixins/Report.vue:14 +msgctxt "*/*/*/Noun" +msgid "Account" +msgstr "ÚÄet" + +#: front/src/views/admin/moderation/AccountsDetail.vue:107 +msgctxt "Content/Moderation/Title" +msgid "Account data" +msgstr "Data úÄtu" + +#: front/src/components/auth/Settings.vue:5 +msgctxt "Content/Settings/Title" +msgid "Account settings" +msgstr "Nastavenà úÄtu" + +#: front/src/components/auth/Settings.vue:544 +msgctxt "Head/Settings/Title" +msgid "Account Settings" +msgstr "Nastavenà úÄtu" + +#: front/src/components/manage/users/UsersTable.vue:39 +msgctxt "Content/Admin/Table.Label/Short, Noun" +msgid "Account status" +msgstr "Stav úÄtu" + +#: front/src/views/auth/PasswordReset.vue:14 +msgctxt "Content/Signup/Input.Label" +msgid "Account's email" +msgstr "Emailová adresa úÄtu" + +#: front/src/views/admin/moderation/AccountsList.vue:3 +#: front/src/views/admin/moderation/AccountsList.vue:24 +#: front/src/views/admin/moderation/Base.vue:11 +msgctxt "*/Moderation/Title" +msgid "Accounts" +msgstr "ÚÄty" + +#: front/src/views/content/libraries/Detail.vue:29 +msgctxt "Content/Library/Table.Label" +msgid "Action" +msgstr "Akce" + +#: front/src/components/common/ActionTable.vue:101 +msgctxt "Content/*/Paragraph" +msgid "Action %{ action } was launched successfully on %{ count } element" +msgid_plural "Action %{ action } was launched successfully on %{ count } elements" +msgstr[0] "Akce %{ action } byla úspěšnÄ› zahájena pro %{ count } položku" +msgstr[1] "Akce %{ action } byla úspěšnÄ› zahájena pro %{ count } položky" +msgstr[2] "Akce %{ action } byla úspěšnÄ› zahájena pro %{ count } položek" + +#: front/src/components/common/ActionTable.vue:22 +#: front/src/components/library/radios/Builder.vue:65 +#: front/src/components/manage/moderation/ReportCard.vue:210 +msgctxt "Content/*/*/Noun" +msgid "Actions" +msgstr "Akce" + +#: front/src/components/manage/users/UsersTable.vue:54 +msgctxt "Content/Admin/Table" +msgid "Active" +msgstr "AktivnÃ" + +#: front/src/views/admin/library/AlbumDetail.vue:140 +#: front/src/views/admin/library/ArtistDetail.vue:128 +#: front/src/views/admin/library/LibraryDetail.vue:147 +#: front/src/views/admin/library/TagDetail.vue:83 +#: front/src/views/admin/library/TrackDetail.vue:192 +#: front/src/views/admin/library/UploadDetail.vue:160 +#: front/src/views/admin/moderation/AccountsDetail.vue:221 +#: front/src/views/admin/moderation/DomainsDetail.vue:173 +msgctxt "Content/Moderation/Title" +msgid "Activity" +msgstr "Aktivita" + +#: front/src/components/mixins/Translations.vue:7 +#: front/src/components/mixins/Translations.vue:8 +msgctxt "Content/Settings/Dropdown.Label/Noun" +msgid "Activity visibility" +msgstr "Viditelnost aktivity" + +#: front/src/views/admin/moderation/DomainsList.vue:22 +msgctxt "Content/Moderation/Button/Verb" +msgid "Add" +msgstr "PÅ™idat" + +#: front/src/views/admin/moderation/DomainsList.vue:13 +msgctxt "Content/Moderation/Form.Label/Verb" +msgid "Add a domain" +msgstr "PÅ™idat doménu" + +#: front/src/views/admin/moderation/AccountsDetail.vue:79 +msgctxt "Content/Moderation/Button/Verb" +msgid "Add a moderation policy" +msgstr "PÅ™idat zásadu moderovánÃ" + +#: front/src/components/manage/moderation/InstancePolicyForm.vue:4 +msgctxt "Content/Moderation/Card.Button.Label/Verb" +msgid "Add a new moderation rule" +msgstr "PÅ™idat nové pravidlo moderovánÃ" + +#: front/src/views/content/Home.vue:35 +msgctxt "Content/Library/Title/Verb" +msgid "Add and manage content" +msgstr "PÅ™idat a spravovat obsah" + +#: front/src/components/playlists/Editor.vue:28 +#: front/src/components/playlists/PlaylistModal.vue:31 +msgctxt "*/Playlist/Button.Label/Verb" +msgid "Add anyways" +msgstr "PÅ™esto pÅ™idat" + +#: front/src/components/Sidebar.vue:75 src/views/content/Base.vue:18 +msgctxt "*/Library/*/Verb" +msgid "Add content" +msgstr "PÅ™idat obsah" + +#: front/src/components/library/radios/Builder.vue:51 +msgctxt "Content/Radio/Button.Label/Verb" +msgid "Add filter" +msgstr "PÅ™idat filtr" + +#: front/src/components/library/radios/Builder.vue:41 +msgctxt "Content/Radio/Paragraph" +msgid "Add filters to customize your radio" +msgstr "PÅ™idat filtry pro úpravu rádia" + +#: front/src/components/manage/moderation/NoteForm.vue:12 +msgctxt "Content/Moderation/Button.Label/Verb" +msgid "Add note" +msgstr "PÅ™idat obsah" + +#: front/src/components/manage/moderation/DomainsTable.vue:191 +#: front/src/views/admin/moderation/DomainsDetail.vue:46 +#: front/src/views/admin/moderation/DomainsList.vue:18 +msgctxt "Content/Moderation/Action/Verb" +msgid "Add to allow-list" +msgstr "PÅ™idat do seznamu povolených" + +#: front/src/components/audio/PlayButton.vue:91 +msgctxt "*/Queue/Dropdown/Button/Title" +msgid "Add to current queue" +msgstr "PÅ™idat do souÄasné fronty" + +#: front/src/components/favorites/TrackFavoriteIcon.vue:4 +#: front/src/components/favorites/TrackFavoriteIcon.vue:28 +msgctxt "Content/Track/*/Verb" +msgid "Add to favorites" +msgstr "PÅ™idat do oblÃbených" + +#: front/src/components/playlists/TrackPlaylistIcon.vue:6 +#: front/src/components/playlists/TrackPlaylistIcon.vue:34 +msgctxt "Sidebar/Player/Icon.Tooltip/Verb" +msgid "Add to playlist…" +msgstr "PÅ™idat do playlistu…" + +#: front/src/components/audio/PlayButton.vue:15 +msgctxt "*/Queue/Dropdown/Button/Label/Short" +msgid "Add to queue" +msgstr "PÅ™idat do fronty" + +#: front/src/components/playlists/PlaylistModal.vue:142 +msgctxt "Popup/Playlist/Table.Button.Tooltip/Verb" +msgid "Add to this playlist" +msgstr "PÅ™idat do tohoto playlistu" + +#: front/src/components/playlists/PlaylistModal.vue:68 +msgctxt "Popup/Playlist/Table.Button.Label/Verb" +msgid "Add track" +msgstr "PÅ™idat stopu" + +#: front/src/components/manage/users/UsersTable.vue:70 +msgctxt "Content/Admin/Table.User role" +msgid "Admin" +msgstr "Administrátor" + +#: front/src/components/Sidebar.vue:79 +msgctxt "Sidebar/Admin/Title/Noun" +msgid "Administration" +msgstr "Administrace" + +#: front/src/components/audio/SearchBar.vue:33 +#: src/components/audio/track/Table.vue:9 +#: front/src/components/library/AlbumBase.vue:170 +#: front/src/components/library/ArtistBase.vue:212 +#: front/src/components/manage/library/TracksTable.vue:40 +#: front/src/components/metadata/Search.vue:134 +#: src/components/mixins/Report.vue:41 +#: front/src/views/admin/library/TrackDetail.vue:113 +#: front/src/views/content/libraries/FilesTable.vue:57 +#: front/src/components/mixins/Report.vue:42 +msgctxt "*/*/*" +msgid "Album" +msgstr "Album" + +#: front/src/views/admin/library/TrackDetail.vue:134 +msgctxt "*/*/*/Noun" +msgid "Album artist" +msgstr "Interpret alba" + +#: front/src/views/admin/library/AlbumDetail.vue:98 +msgctxt "Content/Moderation/Title" +msgid "Album data" +msgstr "Data alba" + +#: front/src/components/mixins/Translations.vue:61 +#: front/src/components/mixins/Translations.vue:62 +msgctxt "Content/*/Dropdown/Noun" +msgid "Album name" +msgstr "Název alba" + +#: front/src/components/audio/Search.vue:19 +#: src/components/library/Albums.vue:129 +#: front/src/components/library/Library.vue:7 +#: src/components/library/TagDetail.vue:28 +#: front/src/components/manage/library/ArtistsTable.vue:41 +#: front/src/components/manage/library/TagsTable.vue:43 +#: front/src/views/admin/library/AlbumsList.vue:24 +#: front/src/views/admin/library/ArtistDetail.vue:256 +#: front/src/views/admin/library/Base.vue:11 +#: front/src/views/admin/library/LibraryDetail.vue:238 +#: front/src/views/admin/library/TagDetail.vue:133 +#: front/src/views/admin/moderation/AccountsDetail.vue:366 +#: front/src/views/admin/moderation/DomainsDetail.vue:301 +msgctxt "*/*/*" +msgid "Albums" +msgstr "Alba" + +#: front/src/components/library/ArtistDetail.vue:21 +msgctxt "Content/Artist/Title" +msgid "Albums by this artist" +msgstr "Alba tohoto interpreta" + +#: front/src/components/manage/library/EditsCardList.vue:15 +#: front/src/components/manage/library/LibrariesTable.vue:13 +#: front/src/components/manage/library/UploadsTable.vue:13 +#: front/src/components/manage/library/UploadsTable.vue:22 +#: front/src/components/manage/moderation/DomainsTable.vue:11 +#: front/src/components/manage/users/InvitationsTable.vue:19 +#: front/src/components/moderation/ReportCategoryDropdown.vue:32 +#: front/src/views/admin/moderation/ReportsList.vue:17 +#: front/src/views/content/libraries/FilesTable.vue:13 +msgctxt "Content/*/Dropdown" +msgid "All" +msgstr "VÅ¡e" + +#: front/src/components/common/ActionTable.vue:59 +msgctxt "Content/*/Paragraph" +msgid "All %{ count } element selected" +msgid_plural "All %{ count } elements selected" +msgstr[0] "%{ count } položka vybrána" +msgstr[1] "VÅ¡echny %{ count } položky vybrány" +msgstr[2] "VÅ¡ech %{ count } položek vybráno" + +#: front/src/components/auth/Authorize.vue:107 +msgctxt "Head/Authorize/Title" +msgid "Allow application" +msgstr "Povolit aplikaci" + +#: front/src/components/About.vue:136 +msgctxt "*/*/*" +msgid "Allow-list" +msgstr "Seznam povolených" + +#: front/src/components/About.vue:149 +msgctxt "*/*/*" +msgid "Allowed domains" +msgstr "Povolené domény" + +#: front/src/components/library/ImportStatusModal.vue:17 +msgctxt "Popup/Import/Message" +msgid "An error occurred during upload processing. You will find more information below." +msgstr "DoÅ¡lo k chybÄ› pÅ™i zpracovánà nahrávaných dat. Podrobnosti naleznete nÞe." + +#: front/src/components/playlists/Editor.vue:13 +msgctxt "Content/Playlist/Error message.Title" +msgid "An error occurred while saving your changes" +msgstr "DoÅ¡lo k chybÄ› pÅ™i ukládánà zmÄ›n" + +#: front/src/components/federation/FetchButton.vue:21 +msgctxt "Popup/*/Message.Content" +msgid "An error occurred while trying to refresh data:" +msgstr "DoÅ¡lo k chybÄ› pÅ™i pokusu o aktualizaci dat:" + +#: front/src/components/federation/FetchButton.vue:41 +msgctxt "*/*/Error" +msgid "An HTTP error occurred while contacting the remote server" +msgstr "DoÅ¡lo k chybÄ› HTTP pÅ™i pokusu kontaktovat vzdálený server" + +#: front/src/components/library/ImportStatusModal.vue:145 +msgctxt "Popup/Import/Error.Label" +msgid "An unknown error occurred" +msgstr "DoÅ¡lo k neznámé chybÄ›" + +#: front/src/components/About.vue:123 +msgctxt "*/*/*" +msgid "Anonymous access" +msgstr "Anonymnà pÅ™Ãstup" + +#: front/src/components/moderation/ReportModal.vue:54 +msgctxt "Popup/Moderation/Error message" +msgid "Anonymous reports are disabled, please sign-in to submit a report." +msgstr "Anonymnà hlášenà jsou vypnuta, pro odeslánà hlášenà se prosÃm pÅ™ihlaste." + +#: front/src/components/auth/Settings.vue:175 +#: src/components/auth/Settings.vue:225 +msgctxt "*/*/*/Noun" +msgid "Application" +msgstr "Aplikace" + +#: front/src/components/auth/ApplicationEdit.vue:12 +msgctxt "Content/Applications/Title" +msgid "Application details" +msgstr "Podrobnosti aplikace" + +#: front/src/components/auth/ApplicationEdit.vue:21 +msgctxt "Content/Applications/Label" +msgid "Application ID" +msgstr "ID aplikace" + +#: front/src/components/auth/ApplicationEdit.vue:16 +msgctxt "Content/Application/Paragraph/" +msgid "Application ID and secret are really sensitive values and must be treated like passwords. Do not share those with anyone else." +msgstr "ID aplikace a tajný klÃÄ jsou citlivé údaje a musà se s nimi zacházet jako s hesly. NesdÄ›lujte je dalÅ¡Ãm osobám." + +#: front/src/components/auth/ApplicationEdit.vue:25 +msgctxt "Content/Applications/Label" +msgid "Application secret" +msgstr "Tajný klÃÄ aplikace" + +#: front/src/components/library/EditCard.vue:81 +#: front/src/components/notifications/NotificationRow.vue:66 +msgctxt "Content/*/Button.Label/Verb" +msgid "Approve" +msgstr "Schválit" + +#: front/src/components/library/EditCard.vue:25 +#: front/src/components/manage/library/EditsCardList.vue:21 +msgctxt "Content/*/*/Short" +msgid "Approved" +msgstr "Schváleno" + +#: front/src/components/library/EditCard.vue:21 +msgctxt "Content/Library/Card/Short" +msgid "Approved and applied" +msgstr "Schváleno a aplikováno" + +#: front/src/components/auth/Logout.vue:5 +msgctxt "Content/Login/Title" +msgid "Are you sure you want to log out?" +msgstr "Opravdu se chcete odhlásit?" + +#: front/src/components/audio/SearchBar.vue:32 +#: src/components/audio/track/Table.vue:8 +#: front/src/components/manage/library/AlbumsTable.vue:40 +#: front/src/components/manage/library/TracksTable.vue:41 +#: front/src/components/metadata/Search.vue:130 +#: src/components/mixins/Report.vue:55 +#: front/src/views/admin/library/AlbumDetail.vue:114 +#: front/src/views/admin/library/TrackDetail.vue:124 +#: front/src/views/content/libraries/FilesTable.vue:56 src/entities.js:12 +#: front/src/components/mixins/Report.vue:56 +msgctxt "*/*/*/Noun" +msgid "Artist" +msgstr "Interpret" + +#: front/src/views/admin/library/ArtistDetail.vue:96 +msgctxt "Content/Moderation/Title" +msgid "Artist data" +msgstr "Data interpreta" + +#: front/src/components/mixins/Translations.vue:62 +#: front/src/components/mixins/Translations.vue:63 +msgctxt "Content/*/Dropdown/Noun" +msgid "Artist name" +msgstr "Jméno interpreta" + +#: front/src/components/audio/Search.vue:65 +msgctxt "*/Search/Input.Placeholder" +msgid "Artist, album, track…" +msgstr "Interpret, album, stopa…" + +#: front/src/components/audio/Search.vue:10 +#: src/components/library/Artists.vue:117 +#: front/src/components/library/Library.vue:10 +#: front/src/components/library/TagDetail.vue:19 +#: front/src/components/manage/library/TagsTable.vue:42 +#: front/src/views/admin/library/ArtistsList.vue:24 +#: front/src/views/admin/library/Base.vue:8 +#: front/src/views/admin/library/LibraryDetail.vue:228 +#: front/src/views/admin/library/TagDetail.vue:123 +#: front/src/views/admin/moderation/AccountsDetail.vue:358 +#: front/src/views/admin/moderation/DomainsDetail.vue:291 +msgctxt "*/*/*/Noun" +msgid "Artists" +msgstr "Interpreti" + +#: front/src/components/favorites/List.vue:34 +#: src/components/library/Albums.vue:29 +#: front/src/components/library/Artists.vue:29 +#: src/components/library/Radios.vue:44 +#: front/src/components/manage/library/AlbumsTable.vue:21 +#: front/src/components/manage/library/ArtistsTable.vue:21 +#: front/src/components/manage/library/EditsCardList.vue:39 +#: front/src/components/manage/library/LibrariesTable.vue:30 +#: front/src/components/manage/library/TagsTable.vue:21 +#: front/src/components/manage/library/TracksTable.vue:21 +#: front/src/components/manage/library/UploadsTable.vue:40 +#: front/src/components/manage/moderation/AccountsTable.vue:21 +#: front/src/components/manage/moderation/DomainsTable.vue:27 +#: front/src/components/manage/users/UsersTable.vue:19 +#: front/src/views/admin/moderation/ReportsList.vue:44 +#: front/src/views/content/libraries/FilesTable.vue:31 +#: front/src/views/playlists/List.vue:27 +msgctxt "Content/Search/Dropdown" +msgid "Ascending" +msgstr "VzestupnÄ›" + +#: front/src/views/auth/PasswordReset.vue:28 +msgctxt "Content/Signup/Button.Label/Verb" +msgid "Ask for a password reset" +msgstr "Požádat o resetovánà hesla" + +#: front/src/components/manage/moderation/ReportCard.vue:72 +msgctxt "Content/Moderation/*" +msgid "Assigned to" +msgstr "PÅ™iÅ™azeno k" + +#: front/src/views/admin/library/AlbumDetail.vue:214 +#: front/src/views/admin/library/ArtistDetail.vue:202 +#: front/src/views/admin/library/LibraryDetail.vue:195 +#: front/src/views/admin/library/TagDetail.vue:113 +#: front/src/views/admin/library/TrackDetail.vue:266 +#: front/src/views/admin/library/UploadDetail.vue:191 +#: front/src/views/admin/moderation/AccountsDetail.vue:285 +#: front/src/views/admin/moderation/DomainsDetail.vue:239 +msgctxt "Content/Moderation/Title" +msgid "Audio content" +msgstr "Obsah audia" + +#: front/src/components/ShortcutsModal.vue:92 +msgctxt "Popup/Keyboard shortcuts/Title" +msgid "Audio player shortcuts" +msgstr "Klávesové zkratky pÅ™ehrávaÄe" + +#: front/src/components/auth/Authorize.vue:47 +msgctxt "Content/Signup/Button.Label/Verb" +msgid "Authorize %{ app }" +msgstr "Autorizovat %{ app }" + +#: front/src/components/auth/Authorize.vue:4 +msgctxt "Content/Auth/Title/Verb" +msgid "Authorize third-party app" +msgstr "Autorizovat aplikaci tÅ™età strany" + +#: front/src/components/auth/Settings.vue:162 +msgctxt "Content/Settings/Title/Noun" +msgid "Authorized apps" +msgstr "Autorizované aplikace" + +#: front/src/components/playlists/PlaylistModal.vue:40 +msgctxt "Popup/Playlist/Title" +msgid "Available playlists" +msgstr "Dostupné playlisty" + +#: front/src/components/auth/Settings.vue:34 +msgctxt "Content/Settings/Title" +msgid "Avatar" +msgstr "Avatar" + +#: front/src/views/auth/PasswordReset.vue:25 +#: front/src/views/auth/PasswordResetConfirm.vue:18 +msgctxt "Content/Signup/Link" +msgid "Back to login" +msgstr "ZpÄ›t na pÅ™ihlášenÃ" + +#: front/src/components/auth/ApplicationEdit.vue:9 +#: front/src/components/auth/ApplicationNew.vue:5 +msgctxt "Content/Applications/Link" +msgid "Back to settings" +msgstr "ZpÄ›t k nastavenÃ" + +#: front/src/components/library/TrackDetail.vue:48 +#: front/src/components/mixins/Translations.vue:67 +#: front/src/views/admin/library/UploadDetail.vue:227 +#: front/src/components/mixins/Translations.vue:68 +msgctxt "Content/Track/*/Noun" +msgid "Bitrate" +msgstr "Datový tok" + +#: front/src/components/manage/moderation/InstancePolicyCard.vue:19 +#: front/src/components/manage/moderation/InstancePolicyForm.vue:34 +msgctxt "Content/Moderation/*/Verb" +msgid "Block everything" +msgstr "Blokovat vÅ¡e" + +#: front/src/components/manage/moderation/InstancePolicyForm.vue:112 +msgctxt "Content/Moderation/Help text" +msgid "Block everything from this account or domain. This will prevent any interaction with the entity, and purge related content (uploads, libraries, follows, etc.)" +msgstr "Blokovat vÅ¡e z tohoto úÄtu nebo domény. Zabránà veÅ¡keré interakci a vymaže souvisejÃcà obsah (nahraná data, knihovny, sledovánÃ, atd.)" + +#: front/src/components/Sidebar.vue:18 src/components/library/Library.vue:4 +msgctxt "*/Library/*/Verb" +msgid "Browse" +msgstr "Procházet" + +#: front/src/components/Sidebar.vue:65 +msgctxt "Sidebar/Library/List item.Link/Verb" +msgid "Browse library" +msgstr "Procházet knihovnu" + +#: front/src/components/Home.vue:132 +msgctxt "Content/Home/Link" +msgid "Browse public content" +msgstr "Procházet veÅ™ejnÄ› dostupný obsah" + +#: front/src/components/library/Albums.vue:4 +msgctxt "Content/Album/Title" +msgid "Browsing albums" +msgstr "Procházenà alb" + +#: front/src/components/library/Artists.vue:4 +msgctxt "Content/Artist/Title" +msgid "Browsing artists" +msgstr "Procházenà interpretů" + +#: front/src/views/playlists/List.vue:3 +msgctxt "Content/Playlist/Title" +msgid "Browsing playlists" +msgstr "Procházenà playlistů" + +#: front/src/components/library/Radios.vue:4 +msgctxt "Content/Radio/Title" +msgid "Browsing radios" +msgstr "Procházenà rádiÃ" + +#: front/src/components/library/radios/Builder.vue:5 +msgctxt "Content/Radio/Title" +msgid "Builder" +msgstr "Výroba rádia" + +#: front/src/components/audio/album/Card.vue:13 +msgctxt "Content/Album/Card" +msgid "By %{ artist }" +msgstr "Od %{ artist }" + +#: front/src/views/content/remote/Card.vue:125 +msgctxt "Popup/Library/Paragraph" +msgid "By unfollowing this library, you loose access to its content." +msgstr "UkonÄenÃm sledovánà této knihovny ztratÃte pÅ™Ãstup k jejÃmu obsahu." + +#: front/src/views/admin/library/AlbumDetail.vue:230 +#: front/src/views/admin/library/ArtistDetail.vue:218 +#: front/src/views/admin/library/LibraryDetail.vue:211 +#: front/src/views/admin/library/TrackDetail.vue:282 +#: front/src/views/admin/library/UploadDetail.vue:208 +#: front/src/views/admin/moderation/AccountsDetail.vue:301 +#: front/src/views/admin/moderation/DomainsDetail.vue:254 +msgctxt "Content/Moderation/Table.Label/Noun" +msgid "Cached size" +msgstr "Velikost v cache" + +#: front/src/components/SetInstanceModal.vue:37 +#: front/src/components/common/DangerousButton.vue:17 +#: front/src/components/library/AlbumBase.vue:37 +#: front/src/components/library/ArtistBase.vue:48 +#: front/src/components/library/EditForm.vue:107 +#: front/src/components/library/TrackBase.vue:53 +#: front/src/components/library/radios/Filter.vue:53 +#: front/src/components/manage/moderation/InstancePolicyForm.vue:54 +#: front/src/components/moderation/FilterModal.vue:39 +#: front/src/components/moderation/ReportModal.vue:59 +#: front/src/components/playlists/PlaylistModal.vue:26 +#: front/src/components/playlists/PlaylistModal.vue:77 +#: front/src/views/playlists/Detail.vue:62 +msgctxt "*/*/Button.Label/Verb" +msgid "Cancel" +msgstr "ZruÅ¡it" + +#: front/src/views/content/remote/Card.vue:110 +msgctxt "Content/Library/Card.Paragraph" +msgid "Cancel follow request" +msgstr "ZruÅ¡it požadavek o sledovánÃ" + +#: front/src/components/library/radios/Builder.vue:64 +msgctxt "Content/Radio/Table.Label/Noun (Value is a number of Tracks)" +msgid "Candidates" +msgstr "Kandidáti" + +#: front/src/components/library/FileUpload.vue:261 +msgctxt "Content/Library/Help text" +msgid "Cannot upload this file, ensure it is not too big" +msgstr "Nelze nahrát tento soubor, zkontrolujte zda nenà pÅ™ÃliÅ¡ velký" + +#: front/src/components/manage/moderation/ReportCard.vue:30 +#: front/src/components/mixins/Translations.vue:42 +#: front/src/components/moderation/ReportCategoryDropdown.vue:2 +#: front/src/components/mixins/Translations.vue:43 +msgctxt "*/*/*" +msgid "Category" +msgstr "Kategorie" + +#: front/src/components/Footer.vue:21 +msgctxt "Footer/Settings/Dropdown.Label/Short, Verb" +msgid "Change language" +msgstr "ZmÄ›nit jazyk" + +#: front/src/components/auth/Settings.vue:68 +msgctxt "Content/Settings/Title/Verb" +msgid "Change my password" +msgstr "ZmÄ›nit mé heslo" + +#: front/src/components/auth/Settings.vue:95 +msgctxt "Content/Settings/Button.Label" +msgid "Change password" +msgstr "ZmÄ›nit heslo" + +#: front/src/components/Footer.vue:37 +msgctxt "Footer/Settings/Dropdown.Label/Short, Verb" +msgid "Change theme" +msgstr "ZmÄ›nit schéma" + +#: front/src/views/auth/PasswordResetConfirm.vue:62 +msgctxt "*/Signup/Title" +msgid "Change your password" +msgstr "Změňte své heslo" + +#: front/src/components/auth/Settings.vue:96 +msgctxt "Popup/Settings/Title" +msgid "Change your password?" +msgstr "ZmÄ›nit vaÅ¡e heslo?" + +#: front/src/components/playlists/Editor.vue:31 +msgctxt "Content/Playlist/Paragraph" +msgid "Changes synced with server" +msgstr "ZmÄ›ny synchronizovány se serverem" + +#: front/src/components/auth/Settings.vue:71 +msgctxt "Content/Settings/Paragraph'" +msgid "Changing your password will also change your Subsonic API password if you have requested one." +msgstr "ZmÄ›na vaÅ¡eho hesla vyvolá také zmÄ›nu hesla pro Subsonic API, pokud je použÃváno." + +#: front/src/components/auth/Settings.vue:98 +msgctxt "Popup/Settings/Paragraph" +msgid "Changing your password will have the following consequences:" +msgstr "ZmÄ›na vaÅ¡eho hesla bude mÃt následujÃcà důsledky:" + +#: front/src/components/Footer.vue:48 +msgctxt "Footer/*/List item.Link" +msgid "Chat room" +msgstr "Diskuznà mÃstnost" + +#: front/src/components/auth/ApplicationForm.vue:24 +msgctxt "Content/Applications/Paragraph/" +msgid "Checking the parent \"Read\" or \"Write\" scopes implies access to all the corresponding children scopes." +msgstr "Povolenà Ätenà nebo zápisu na pÅ™edkovi implikuje totéž pro vÅ¡echny jeho potomky." + +#: front/src/components/SetInstanceModal.vue:2 +msgctxt "Popup/Instance/Title" +msgid "Choose your instance" +msgstr "Zvolte svou instanci" + +#: front/src/components/library/EditForm.vue:75 +#: front/src/components/library/EditForm.vue:88 +#: front/src/components/manage/users/InvitationForm.vue:37 +msgctxt "Content/Library/Button.Label" +msgid "Clear" +msgstr "VyÄistit" + +#: front/src/components/playlists/Editor.vue:50 +#: front/src/components/playlists/Editor.vue:55 +msgctxt "*/Playlist/Button.Label/Verb" +msgid "Clear playlist" +msgstr "VyÄistit playlist" + +#: front/src/components/ShortcutsModal.vue:144 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Clear queue" +msgstr "Vymazat frontu" + +#: front/src/components/audio/Player.vue:668 +msgctxt "Sidebar/Player/Icon.Tooltip/Verb" +msgid "Clear your queue" +msgstr "VyÄistit frontu" + +#: front/src/components/mixins/Translations.vue:21 +#: front/src/components/mixins/Translations.vue:22 +msgctxt "Content/Library/Link.Title" +msgid "Click to display more information about the import process for this upload" +msgstr "KliknÄ›te pro zobrazenà vÃce informacà o procesu importovánÃ" + +#: front/src/components/library/FileUpload.vue:82 +msgctxt "Content/Library/Paragraph/Call to action" +msgid "Click to select files to upload or drag and drop files or directories" +msgstr "KliknÄ›te pro výbÄ›r souborů nebo myÅ¡Ã pÅ™etáhnÄ›te soubory Äi složky k nahránÃ" + +#: front/src/components/ShortcutsModal.vue:38 +#: front/src/components/federation/FetchButton.vue:85 +#: front/src/components/library/ImportStatusModal.vue:79 +#: front/src/components/manage/moderation/InstancePolicyModal.vue:34 +msgctxt "*/*/Button.Label/Verb" +msgid "Close" +msgstr "ZavÅ™Ãt" + +#: front/src/components/federation/FetchButton.vue:88 +msgctxt "*/*/Button.Label/Verb" +msgid "Close and reload page" +msgstr "ZavÅ™Ãt a obnovit stránku" + +#: front/src/components/About.vue:94 +msgctxt "*/*/*/State of registrations" +msgid "Closed" +msgstr "UzavÅ™eno" + +#: front/src/components/manage/users/InvitationForm.vue:26 +#: front/src/components/manage/users/InvitationsTable.vue:42 +msgctxt "Content/Admin/Table.Label/Noun" +msgid "Code" +msgstr "Kód" + +#: front/src/components/audio/album/Card.vue:41 +#: front/src/components/common/CollapseLink.vue:3 +msgctxt "*/*/Button,Label" +msgid "Collapse" +msgstr "Sbalit" + +#: front/src/components/library/radios/Builder.vue:63 +msgctxt "Content/Radio/Table.Label/Verb (Value is a List of Parameters)" +msgid "Config" +msgstr "NastavenÃ" + +#: front/src/components/common/DangerousButton.vue:21 +msgctxt "Modal/*/Button.Label/Short, Verb" +msgid "Confirm" +msgstr "Potvrdit" + +#: front/src/views/auth/EmailConfirm.vue:51 +msgctxt "Head/Signup/Title" +msgid "Confirm your e-mail address" +msgstr "PotvrÄte svou emailovou adresu" + +#: front/src/views/auth/EmailConfirm.vue:13 +msgctxt "Content/Signup/Form.Label" +msgid "Confirmation code" +msgstr "Potvrzovacà kód" + +#: front/src/components/About.vue:67 src/components/Home.vue:65 +msgctxt "Content/Home/Header/Name" +msgid "Contact" +msgstr "Kontakt" + +#: front/src/components/moderation/FilterModal.vue:90 +msgctxt "*/Moderation/Message" +msgid "Content filter successfully added" +msgstr "Filtr obsahu úspěšnÄ› pÅ™idán" + +#: front/src/components/auth/Settings.vue:116 +#: front/src/components/mixins/Translations.vue:108 +#: front/src/components/mixins/Translations.vue:109 +msgctxt "Content/Settings/Title/Noun" +msgid "Content filters" +msgstr "Filtry obsahu" + +#: front/src/components/auth/Settings.vue:119 +msgctxt "Content/Settings/Paragraph" +msgid "Content filters help you hide content you don't want to see on the service." +msgstr "Filtry obsahu vám pomáhajà skrýt obsah který ve službÄ› nechcete vidÄ›t." + +#: front/src/components/common/ActionTable.vue:8 +msgctxt "Content/*/Button.Help text.Paragraph" +msgid "Content have been updated, click refresh to see up-to-date content" +msgstr "Obsah byl aktualizován, kliknÄ›te na obnovit pro zobrazenà aktuálnÃho obsahu" + +#: front/src/components/About.vue:46 +msgctxt "Content/About/Header" +msgid "Contents" +msgstr "Obsah" + +#: front/src/components/Footer.vue:56 +msgctxt "Footer/*/List item.Link" +msgid "Contribute" +msgstr "PÅ™ispÄ›jte" + +#: front/src/components/audio/EmbedWizard.vue:29 +#: front/src/components/common/CopyInput.vue:8 +#: front/src/components/forms/PasswordInput.vue:43 +msgctxt "*/*/Button.Label/Short, Verb" +msgid "Copy" +msgstr "KopÃrovat" + +#: front/src/components/playlists/Editor.vue:194 +msgctxt "Content/Playlist/Button.Tooltip/Verb" +msgid "Copy queued tracks to playlist" +msgstr "KopÃrovat stopy ve frontÄ› do playlistu" + +#: front/src/components/auth/Authorize.vue:55 +msgctxt "Content/Auth/Paragraph" +msgid "Copy-paste the following code in the application:" +msgstr "ZkopÃrujte a vložte následujÃcà kód do aplikace:" + +#: front/src/components/audio/EmbedWizard.vue:31 +msgctxt "Popup/Embed/Paragraph" +msgid "Copy/paste this code in your website HTML" +msgstr "ZkopÃrujte a vložte tento kód do HTML kódu webové stránky" + +#: front/src/components/library/TrackDetail.vue:10 +#: front/src/views/admin/library/TrackDetail.vue:159 src/edits.js:77 +msgctxt "Content/Track/*/Noun" +msgid "Copyright" +msgstr "Copyright" + +#: front/src/views/auth/EmailConfirm.vue:7 +msgctxt "Content/Signup/Paragraph" +msgid "Could not confirm your e-mail address" +msgstr "Nepovedlo se ověřit vaÅ¡Ã emailovou adresu" + +#: front/src/views/content/remote/ScanForm.vue:3 +msgctxt "Content/Library/Error message.Title" +msgid "Could not fetch remote library" +msgstr "NepodaÅ™ilo se zÃskat vzdálenou knihovnu" + +#: front/src/components/manage/moderation/InstancePolicyForm.vue:58 +msgctxt "Content/Moderation/Card.Button.Label/Verb" +msgid "Create" +msgstr "VytvoÅ™it" + +#: front/src/views/auth/Signup.vue:4 +msgctxt "Content/Signup/Title" +msgid "Create a funkwhale account" +msgstr "VytvoÅ™it úÄet Funkwhale" + +#: front/src/components/auth/ApplicationNew.vue:8 +#: front/src/components/auth/ApplicationNew.vue:41 +#: front/src/components/auth/Settings.vue:220 +msgctxt "Content/Settings/Button.Label" +msgid "Create a new application" +msgstr "VytvoÅ™it novou aplikaci" + +#: front/src/views/content/libraries/Home.vue:14 +msgctxt "Content/Library/Link/Verb" +msgid "Create a new library" +msgstr "VytvoÅ™it novou knihovnu" + +#: front/src/components/playlists/Form.vue:2 +msgctxt "Popup/Playlist/Title/Verb" +msgid "Create a new playlist" +msgstr "VytvoÅ™it nový playlist" + +#: front/src/components/Sidebar.vue:57 src/components/auth/LoginForm.vue:15 +msgctxt "*/Signup/Link/Verb" +msgid "Create an account" +msgstr "VytvoÅ™it úÄet" + +#: front/src/components/auth/ApplicationForm.vue:65 +msgctxt "Content/Applications/Button.Label/Verb" +msgid "Create application" +msgstr "VytvoÅ™it aplikaci" + +#: front/src/views/content/libraries/Form.vue:26 +msgctxt "Content/Library/Button.Label/Verb" +msgid "Create library" +msgstr "VytvoÅ™it knihovnu" + +#: front/src/components/auth/SignupForm.vue:49 +msgctxt "Content/Signup/Button.Label" +msgid "Create my account" +msgstr "VytvoÅ™it můj úÄet" + +#: front/src/components/auth/Settings.vue:264 +msgctxt "Content/Applications/Paragraph" +msgid "Create one to integrate Funkwhale with third-party applications." +msgstr "VytvoÅ™te nÄ›jakou pro spojenà Funkwhale s aplikacemi tÅ™età strany." + +#: front/src/components/playlists/Form.vue:34 +msgctxt "Content/Playlist/Button.Label/Verb" +msgid "Create playlist" +msgstr "VytvoÅ™it playlist" + +#: front/src/components/library/Radios.vue:23 +msgctxt "Content/Radio/Button.Label/Verb" +msgid "Create your own radio" +msgstr "VytvoÅ™it mé vlastnà rádio" + +#: front/src/components/auth/Settings.vue:134 +#: src/components/auth/Settings.vue:227 +#: front/src/components/manage/library/AlbumsTable.vue:44 +#: front/src/components/manage/library/ArtistsTable.vue:43 +#: front/src/components/manage/library/LibrariesTable.vue:54 +#: front/src/components/manage/library/TagsTable.vue:45 +#: front/src/components/manage/library/TracksTable.vue:44 +#: front/src/components/manage/library/UploadsTable.vue:66 +#: front/src/components/manage/moderation/ReportCard.vue:43 +#: front/src/components/manage/users/InvitationsTable.vue:40 +#: front/src/components/mixins/Translations.vue:53 +#: front/src/components/mixins/Translations.vue:54 +msgctxt "Content/*/*/Noun" +msgid "Creation date" +msgstr "Datum vytvoÅ™enÃ" + +#: front/src/components/auth/Settings.vue:54 +msgctxt "Content/Settings/Title/Noun" +msgid "Current avatar" +msgstr "SouÄasný avatar" + +#: front/src/components/admin/SettingsGroup.vue:67 +msgctxt "Content/Settings/Title/Noun" +msgid "Current image" +msgstr "Aktuálnà obrázek" + +#: front/src/views/content/libraries/DetailArea.vue:4 +msgctxt "Content/Library/Title" +msgid "Current library" +msgstr "Aktuálnà knihovna" + +#: front/src/components/playlists/PlaylistModal.vue:8 +msgctxt "Popup/Playlist/Title" +msgid "Current track" +msgstr "Aktuálnà stopa" + +#: front/src/views/content/libraries/Quota.vue:2 +msgctxt "Content/Library/Title" +msgid "Current usage" +msgstr "Aktuálnà využitÃ" + +#: front/src/components/Footer.vue:94 +msgctxt "Footer/Settings/Dropdown.Label/Theme name" +msgid "Dark" +msgstr "Tmavé" + +#: front/src/components/federation/FetchButton.vue:53 +msgctxt "*/*/Error" +msgid "Data returned by the remote server had invalid or missing attributes" +msgstr "Data zÃskaná ze vzdáleného serveru majà neplatné nebo chybÄ›jÃcà atributy" + +#: front/src/components/federation/FetchButton.vue:17 +msgctxt "Popup/*/Message.Content" +msgid "Data was refreshed successfully from remote server." +msgstr "Data byla úspěšnÄ› aktualizována ze vzdáleného serveru." + +#: front/src/views/content/libraries/Detail.vue:27 +msgctxt "Content/Library/Table.Label" +msgid "Date" +msgstr "Datum" + +#: front/src/components/library/ImportStatusModal.vue:64 +msgctxt "Popup/Import/Table.Label/Noun" +msgid "Debug information" +msgstr "Informace pro vývojáře" + +#: front/src/components/ShortcutsModal.vue:128 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Decrease volume" +msgstr "SnÞit hlasitost" + +#: front/src/components/auth/Settings.vue:150 +#: src/components/auth/Settings.vue:251 +#: front/src/components/library/EditCard.vue:93 +#: front/src/components/library/EditCard.vue:98 +#: front/src/components/manage/library/AlbumsTable.vue:188 +#: front/src/components/manage/library/ArtistsTable.vue:178 +#: front/src/components/manage/library/LibrariesTable.vue:205 +#: front/src/components/manage/library/TagsTable.vue:179 +#: front/src/components/manage/library/TracksTable.vue:188 +#: front/src/components/manage/library/UploadsTable.vue:255 +#: front/src/components/manage/moderation/InstancePolicyForm.vue:61 +#: front/src/components/manage/moderation/NotesThread.vue:24 +#: front/src/components/manage/moderation/NotesThread.vue:29 +#: front/src/components/manage/moderation/ReportCard.vue:360 +#: front/src/components/manage/users/InvitationsTable.vue:167 +#: front/src/views/admin/library/AlbumDetail.vue:78 +#: front/src/views/admin/library/AlbumDetail.vue:83 +#: front/src/views/admin/library/ArtistDetail.vue:76 +#: front/src/views/admin/library/ArtistDetail.vue:81 +#: front/src/views/admin/library/LibraryDetail.vue:58 +#: front/src/views/admin/library/LibraryDetail.vue:63 +#: front/src/views/admin/library/TagDetail.vue:41 +#: front/src/views/admin/library/TagDetail.vue:46 +#: front/src/views/admin/library/TrackDetail.vue:77 +#: front/src/views/admin/library/TrackDetail.vue:82 +#: front/src/views/admin/library/UploadDetail.vue:65 +#: front/src/views/admin/library/UploadDetail.vue:70 +#: front/src/views/content/libraries/FilesTable.vue:222 +#: front/src/views/content/libraries/Form.vue:29 +#: src/views/playlists/Detail.vue:42 +msgctxt "*/*/*/Verb" +msgid "Delete" +msgstr "Odstranit" + +#: front/src/components/auth/Settings.vue:254 +msgctxt "*/Settings/Button.Label/Verb" +msgid "Delete application" +msgstr "Odstranit aplikaci" + +#: front/src/components/auth/Settings.vue:252 +msgctxt "Popup/Settings/Title" +msgid "Delete application \"%{ application }\"?" +msgstr "Odstranit aplikaci \"%{ application }\"?" + +#: front/src/views/content/libraries/Form.vue:39 +msgctxt "Popup/Library/Button.Label/Verb" +msgid "Delete library" +msgstr "Odstranit knihovnu" + +#: front/src/components/manage/moderation/InstancePolicyForm.vue:69 +msgctxt "Popup/Moderation/Button.Label/Verb" +msgid "Delete moderation rule" +msgstr "Odstranit pravidlo moderovánÃ" + +#: front/src/components/auth/Settings.vue:274 +#: src/components/auth/Settings.vue:302 +#, fuzzy +msgctxt "*/*/Button.Label" +msgid "Delete my account" +msgstr "Smazat můj úÄet" + +#: front/src/components/auth/Settings.vue:297 +msgctxt "*/*/Button.Label" +msgid "Delete my account…" +msgstr "Smazat můj úÄet…" + +#: front/src/views/playlists/Detail.vue:47 +msgctxt "Popup/Playlist/Button.Label/Verb" +msgid "Delete playlist" +msgstr "Odstranit playlist" + +#: front/src/views/radios/Detail.vue:28 +msgctxt "Popup/Radio/Button.Label/Verb" +msgid "Delete radio" +msgstr "Odstranit rádio" + +#: front/src/components/manage/moderation/ReportCard.vue:357 +msgctxt "Content/Moderation/Button/Verb" +msgid "Delete reported object" +msgstr "Smazat nahlášený objekt" + +#: front/src/components/manage/moderation/ReportCard.vue:358 +msgctxt "Content/Moderation/Popup/Header" +msgid "Delete reported object?" +msgstr "Smazat nahlášený objekt?" + +#: front/src/views/admin/library/AlbumDetail.vue:79 +#: front/src/views/admin/library/TrackDetail.vue:78 +msgctxt "Popup/Library/Title" +msgid "Delete this album?" +msgstr "Odstranit toto album?" + +#: front/src/views/admin/library/ArtistDetail.vue:77 +msgctxt "Popup/Library/Title" +msgid "Delete this artist?" +msgstr "Odstranit tohoto interpreta?" + +#: front/src/views/admin/library/LibraryDetail.vue:59 +#: front/src/views/content/libraries/Form.vue:31 +msgctxt "Popup/Library/Title" +msgid "Delete this library?" +msgstr "Odstranit tuto knihovnu?" + +#: front/src/components/manage/moderation/InstancePolicyForm.vue:63 +msgctxt "Popup/Moderation/Title" +msgid "Delete this moderation rule?" +msgstr "Odstranit toto pravidlo moderace?" + +#: front/src/components/manage/moderation/NotesThread.vue:25 +msgctxt "Popup/Moderation/Title" +msgid "Delete this note?" +msgstr "Odstranit tuto poznámku?" + +#: front/src/components/library/EditCard.vue:94 +msgctxt "Popup/Library/Title" +msgid "Delete this suggestion?" +msgstr "Odstranit toto doporuÄenÃ?" + +#: front/src/views/admin/library/TagDetail.vue:42 +msgctxt "Popup/Library/Title" +msgid "Delete this tag?" +msgstr "Odstranit tento tag?" + +#: front/src/views/admin/library/UploadDetail.vue:66 +msgctxt "Popup/Library/Title" +msgid "Delete this upload?" +msgstr "Odstranit tyto nahrané soubory?" + +#: front/src/components/favorites/List.vue:35 +#: src/components/library/Albums.vue:30 +#: front/src/components/library/Artists.vue:30 +#: src/components/library/Radios.vue:47 +#: front/src/components/manage/library/AlbumsTable.vue:22 +#: front/src/components/manage/library/ArtistsTable.vue:22 +#: front/src/components/manage/library/EditsCardList.vue:40 +#: front/src/components/manage/library/LibrariesTable.vue:31 +#: front/src/components/manage/library/TagsTable.vue:22 +#: front/src/components/manage/library/TracksTable.vue:22 +#: front/src/components/manage/library/UploadsTable.vue:41 +#: front/src/components/manage/moderation/AccountsTable.vue:22 +#: front/src/components/manage/moderation/DomainsTable.vue:28 +#: front/src/components/manage/users/UsersTable.vue:20 +#: front/src/views/admin/moderation/ReportsList.vue:45 +#: front/src/views/content/libraries/FilesTable.vue:32 +#: front/src/views/playlists/List.vue:28 +msgctxt "Content/Search/Dropdown" +msgid "Descending" +msgstr "SestupnÄ›" + +#: front/src/components/manage/moderation/NoteForm.vue:37 +msgctxt "Content/Moderation/Placeholder" +msgid "Describe what actions have been taken, or any other related updates…" +msgstr "PopiÅ¡te jaká opatÅ™enà byla podniknuta, pÅ™ÃpadnÄ› jiné souvisejÃcà aktivity…" + +#: front/src/components/library/radios/Builder.vue:25 +#: front/src/views/admin/library/LibraryDetail.vue:132 +#: front/src/views/content/libraries/Form.vue:14 +msgctxt "*/*/*/Noun" +msgid "Description" +msgstr "Popis" + +#: front/src/views/content/libraries/Card.vue:48 +#: src/views/content/remote/Card.vue:67 +msgctxt "Content/Library/Card.Button.Label/Noun" +msgid "Details" +msgstr "Podrobnosti" + +#: front/src/views/admin/moderation/AccountsDetail.vue:511 +msgctxt "Content/Moderation/Help text" +msgid "Determine how much content the user can upload. Leave empty to use the default value of the instance." +msgstr "UrÄete kolik obsahu může uživatel nahrát. Ponechte prázdné pro použità výchozà hodnoty této instance." + +#: front/src/components/mixins/Translations.vue:8 +#: front/src/components/mixins/Translations.vue:9 +msgctxt "Content/Settings/Dropdown.Help text" +msgid "Determine the visibility level of your activity" +msgstr "UrÄete stupeň viditelnosti vaÅ¡Ã aktivity" + +#: front/src/components/auth/Settings.vue:104 +#: front/src/components/auth/SubsonicTokenForm.vue:56 +msgctxt "Popup/Settings/Button.Label" +msgid "Disable access" +msgstr "Odebrat pÅ™Ãstup" + +#: front/src/components/auth/SubsonicTokenForm.vue:53 +msgctxt "Content/Settings/Button.Label/Verb" +msgid "Disable Subsonic access" +msgstr "ZruÅ¡it pÅ™Ãstup k Subsonic" + +#: front/src/components/auth/SubsonicTokenForm.vue:54 +msgctxt "Popup/Settings/Title" +msgid "Disable Subsonic API access?" +msgstr "Vypnout Subsonic API?" + +#: front/src/components/About.vue:118 src/components/About.vue:131 +#: front/src/components/About.vue:144 +#: front/src/components/manage/moderation/InstancePolicyForm.vue:18 +#: front/src/views/admin/moderation/AccountsDetail.vue:157 +#: front/src/views/admin/moderation/AccountsDetail.vue:161 +msgctxt "*/*/*/State of feature" +msgid "Disabled" +msgstr "Vypnuto" + +#: front/src/views/admin/library/TrackDetail.vue:151 +msgctxt "*/*/*/Noun" +msgid "Disc number" +msgstr "ÄŒÃslo disku" + +#: front/src/components/Home.vue:157 +msgctxt "Content/Home/Link" +msgid "Discover everything you need to know about Funkwhale and its features" +msgstr "ZjistÄ›te vÅ¡e co chcete vÄ›dÄ›t o Funkwhale a jeho možnostech" + +#: front/src/components/auth/SubsonicTokenForm.vue:13 +msgctxt "Content/Settings/Link" +msgid "Discover how to use Funkwhale from other apps" +msgstr "Objevte jak využÃvat Funkwhale z jiných aplikacÃ" + +#: front/src/views/Notifications.vue:45 +msgctxt "Content/Notifications/Button.Label/Verb" +msgid "Discover other ways to help" +msgstr "Objevte dalÅ¡Ã způsoby, jak můžete projektu pomoct" + +#: front/src/views/admin/moderation/AccountsDetail.vue:132 +msgctxt "'Content/*/*/Noun'" +msgid "Display name" +msgstr "Zobrazované jméno" + +#: front/src/components/library/radios/Builder.vue:30 +msgctxt "Content/Radio/Checkbox.Label/Verb" +msgid "Display publicly" +msgstr "Zobrazit veÅ™ejnÄ›" + +#: front/src/components/manage/moderation/InstancePolicyForm.vue:122 +msgctxt "Content/Moderation/Help text" +msgid "Do not download any media file (audio, album cover, account avatar…) from this account or domain. This will purge existing content as well." +msgstr "Nestahovat žádné mediálnà soubory (audio, obaly, avatar…) z tohoto úÄtu nebo domény. ExistujÃcà obsah bude také smazán." + +#: front/src/views/Notifications.vue:36 +msgctxt "Content/Notifications/Header" +msgid "Do you like Funkwhale?" +msgstr "LÃbà se vám Funkwhale?" + +#: front/src/components/playlists/Editor.vue:51 +msgctxt "Popup/Playlist/Title" +msgid "Do you want to clear the playlist \"%{ playlist }\"?" +msgstr "PÅ™ejete si vyprázdnit playlist \"%{ playlist }\"?" + +#: front/src/components/common/DangerousButton.vue:7 +msgctxt "Modal/*/Title" +msgid "Do you want to confirm this action?" +msgstr "PÅ™ejete si potvrdit tuto akci?" + +#: front/src/views/playlists/Detail.vue:43 +msgctxt "Popup/Playlist/Title/Call to action" +msgid "Do you want to delete the playlist \"%{ playlist }\"?" +msgstr "PÅ™ejete si odstranit playlist \"%{ playlist }\"?" + +#: front/src/views/radios/Detail.vue:26 +msgctxt "Popup/Radio/Title" +msgid "Do you want to delete the radio \"%{ radio }\"?" +msgstr "PÅ™ejete si odstranit rádio \"%{ radio }\"?" + +#: front/src/components/auth/Settings.vue:298 +msgctxt "Popup/Settings/Title" +msgid "Do you want to delete your account?" +msgstr "PÅ™ejete si smazat váš úÄet?" + +#: front/src/components/moderation/FilterModal.vue:3 +msgctxt "Popup/Moderation/Title/Verb" +msgid "Do you want to hide content from artist \"%{ name }\"?" +msgstr "PÅ™ejete si skrýt obsah od interpreta \"%{ name }\"?" + +#: front/src/components/common/ActionTable.vue:37 +msgctxt "Modal/*/Title" +msgid "Do you want to launch %{ action } on %{ count } element?" +msgid_plural "Do you want to launch %{ action } on %{ count } elements?" +msgstr[0] "PÅ™ejete si provést operaci %{ action } na %{ count } položce?" +msgstr[1] "PÅ™ejete si provést operaci %{ action } na %{ count } položkách?" +msgstr[2] "PÅ™ejete si provést operaci %{ action } na %{ count } položkách?" + +#: front/src/components/moderation/ReportModal.vue:3 +msgctxt "Popup/Moderation/Title/Verb" +msgid "Do you want to report this object?" +msgstr "PÅ™ejete si nahlásit tento objekt?" + +#: front/src/components/Sidebar.vue:122 +msgctxt "Sidebar/Queue/Message" +msgid "Do you want to restore your previous queue?" +msgstr "PÅ™ejete si obnovit vaÅ¡i pÅ™edchozà frontu?" + +#: front/src/components/Footer.vue:31 +msgctxt "Footer/*/List item.Link/Short, Noun" +msgid "Documentation" +msgstr "Dokumentace" + +#: front/src/components/manage/library/AlbumsTable.vue:41 +#: front/src/components/manage/library/ArtistsTable.vue:40 +#: front/src/components/manage/library/LibrariesTable.vue:50 +#: front/src/components/manage/library/TracksTable.vue:42 +#: front/src/components/manage/library/UploadsTable.vue:62 +#: front/src/components/manage/moderation/AccountsTable.vue:40 +#: front/src/components/manage/moderation/ReportCard.vue:169 +#: front/src/components/manage/moderation/ReportCard.vue:179 +#: front/src/components/mixins/Translations.vue:72 +#: front/src/views/admin/library/AlbumDetail.vue:124 +#: front/src/views/admin/library/ArtistDetail.vue:112 +#: front/src/views/admin/library/LibraryDetail.vue:123 +#: front/src/views/admin/library/TrackDetail.vue:176 +#: front/src/views/admin/library/UploadDetail.vue:121 +#: front/src/views/admin/moderation/AccountsDetail.vue:123 +#: front/src/components/mixins/Translations.vue:73 +msgctxt "Content/Moderation/*/Noun" +msgid "Domain" +msgstr "Doména" + +#: front/src/views/admin/moderation/Base.vue:8 +#: front/src/views/admin/moderation/DomainsList.vue:3 +#: front/src/views/admin/moderation/DomainsList.vue:54 +msgctxt "*/Moderation/*/Noun" +msgid "Domains" +msgstr "Domény" + +#: front/src/views/Notifications.vue:42 +msgctxt "Content/Notifications/Button.Label/Verb" +msgid "Donate" +msgstr "PÅ™ispÄ›jte" + +#: front/src/components/library/TrackBase.vue:37 +#: front/src/views/admin/library/UploadDetail.vue:58 +msgctxt "Content/Track/Link/Verb" +msgid "Download" +msgstr "Stáhnout" + +#: front/src/components/playlists/Editor.vue:59 +msgctxt "Content/Playlist/Paragraph/Call to action" +msgid "Drag and drop rows to reorder tracks in the playlist" +msgstr "PÅ™etáhnÄ›te myšà řádky pro zmÄ›nu poÅ™adà stop v playlistu" + +#: front/src/components/audio/track/Table.vue:10 +#: front/src/components/library/TrackDetail.vue:30 +#: front/src/components/mixins/Translations.vue:68 +#: front/src/views/admin/library/UploadDetail.vue:238 +#: front/src/views/content/libraries/FilesTable.vue:60 +#: front/src/components/mixins/Translations.vue:69 +msgctxt "Content/*/*" +msgid "Duration" +msgstr "Délka" + +#: front/src/views/auth/EmailConfirm.vue:23 +msgctxt "Content/Signup/Message" +msgid "E-mail address confirmed" +msgstr "Emailová adresa potvrzena" + +#: front/src/components/auth/Settings.vue:246 +#: src/components/library/AlbumBase.vue:73 +#: front/src/components/library/ArtistBase.vue:84 +#: front/src/components/library/TrackBase.vue:89 +#: front/src/components/manage/moderation/InstancePolicyCard.vue:45 +#: front/src/components/radios/Card.vue:23 +#: src/views/admin/library/AlbumDetail.vue:71 +#: front/src/views/admin/library/ArtistDetail.vue:69 +#: front/src/views/admin/library/TrackDetail.vue:70 +#: front/src/views/content/libraries/Detail.vue:9 +#: src/views/playlists/Detail.vue:31 +msgctxt "Content/*/Button.Label/Verb" +msgid "Edit" +msgstr "Upravit" + +#: front/src/components/auth/ApplicationEdit.vue:30 +#: front/src/components/auth/ApplicationEdit.vue:75 +msgctxt "Content/Applications/Title" +msgid "Edit application" +msgstr "Upravit aplikaci" + +#: front/src/components/manage/moderation/InstancePolicyForm.vue:3 +msgctxt "Content/Moderation/Card.Title/Verb" +msgid "Edit moderation rule" +msgstr "Upravit pravidlo moderace" + +#: front/src/components/library/AlbumEdit.vue:4 +msgctxt "Content/*/Title" +msgid "Edit this album" +msgstr "Upravit toto album" + +#: front/src/components/library/ArtistEdit.vue:4 +msgctxt "Content/*/Title" +msgid "Edit this artist" +msgstr "Upravit tohoto interpreta" + +#: front/src/components/library/TrackEdit.vue:4 +msgctxt "Content/*/Title" +msgid "Edit this track" +msgstr "Upravit tuto stopu" + +#: front/src/components/mixins/Translations.vue:116 +#: front/src/views/admin/library/AlbumDetail.vue:198 +#: front/src/views/admin/library/ArtistDetail.vue:186 +#: front/src/views/admin/library/Base.vue:5 +#: src/views/admin/library/EditsList.vue:24 +#: front/src/views/admin/library/TrackDetail.vue:250 +#: front/src/components/mixins/Translations.vue:117 +msgctxt "*/Admin/*/Noun" +msgid "Edits" +msgstr "Úpravy" + +#: front/src/components/auth/SignupForm.vue:26 +#: front/src/components/manage/users/UsersTable.vue:38 +#: front/src/components/moderation/ReportModal.vue:31 +msgctxt "Content/*/*/Noun" +msgid "Email" +msgstr "Email" + +#: front/src/views/admin/moderation/AccountsDetail.vue:140 +msgctxt "Content/*/*" +msgid "Email address" +msgstr "Emailová adresa" + +#: front/src/components/library/AlbumBase.vue:54 +#: front/src/components/library/ArtistBase.vue:65 +#: front/src/components/library/TrackBase.vue:70 +#: src/views/playlists/Detail.vue:38 +msgctxt "Content/*/Button.Label/Verb" +msgid "Embed" +msgstr "Vložit" + +#: front/src/components/audio/EmbedWizard.vue:30 +msgctxt "Popup/Embed/Input.Label/Noun" +msgid "Embed code" +msgstr "Kód pro vloženÃ" + +#: front/src/components/library/AlbumBase.vue:27 +msgctxt "Popup/Album/Title/Verb" +msgid "Embed this album on your website" +msgstr "Vložit toto album do webové stránky" + +#: front/src/components/library/ArtistBase.vue:38 +msgctxt "Popup/Artist/Title/Verb" +msgid "Embed this artist work on your website" +msgstr "Vložit dÃla tohoto interpreta do webové stránky" + +#: front/src/views/playlists/Detail.vue:52 +msgctxt "Popup/Album/Title/Verb" +msgid "Embed this playlist on your website" +msgstr "Vložit tento playlist do webové stránky" + +#: front/src/components/library/TrackBase.vue:43 +msgctxt "Popup/Track/Title" +msgid "Embed this track on your website" +msgstr "Vložit tuto stopu do webové stránky" + +#: front/src/views/admin/moderation/AccountsDetail.vue:260 +#: front/src/views/admin/moderation/DomainsDetail.vue:224 +msgctxt "Content/Moderation/Table.Label/Noun" +msgid "Emitted library follows" +msgstr "Vydaná sledovánà knihovny" + +#: front/src/views/admin/moderation/AccountsDetail.vue:244 +#: front/src/views/admin/moderation/DomainsDetail.vue:208 +msgctxt "Content/Moderation/Table.Label/Noun" +msgid "Emitted messages" +msgstr "Vydané zprávy" + +#: front/src/components/About.vue:114 src/components/About.vue:127 +#: front/src/components/About.vue:140 +#: front/src/components/manage/moderation/InstancePolicyCard.vue:8 +#: front/src/components/manage/moderation/InstancePolicyForm.vue:17 +#: front/src/views/admin/moderation/AccountsDetail.vue:156 +#: front/src/views/admin/moderation/AccountsDetail.vue:160 +msgctxt "*/*/*/State of feature" +msgid "Enabled" +msgstr "Zapnuto" + +#: front/src/views/playlists/Detail.vue:30 +msgctxt "Content/Playlist/Button.Label/Verb" +msgid "End edition" +msgstr "UkonÄit úpravu" + +#: front/src/views/content/remote/ScanForm.vue:50 +msgctxt "Content/Library/Input.Placeholder" +msgid "Enter a library URL" +msgstr "Zadejte URL knihovny" + +#: front/src/components/library/Radios.vue:141 +msgctxt "Content/Search/Input.Placeholder" +msgid "Enter a radio name…" +msgstr "Zadejte název rádia…" + +#: front/src/components/library/Albums.vue:128 +msgctxt "Content/Search/Input.Placeholder" +msgid "Enter album title…" +msgstr "Zadejte název alba…" + +#: front/src/components/library/Artists.vue:116 +msgctxt "Content/Search/Input.Placeholder" +msgid "Enter artist name…" +msgstr "Zadejte jméno interpreta…" + +#: front/src/views/playlists/List.vue:107 +msgctxt "Content/Playlist/Placeholder/Call to action" +msgid "Enter playlist name…" +msgstr "Zadejte název playlistu…" + +#: front/src/views/auth/PasswordReset.vue:54 +msgctxt "Content/Signup/Input.Placeholder" +msgid "Enter the email address linked to your account" +msgstr "Zadejte emailovou adresu spojenou s vaÅ¡Ãm úÄtem" + +#: front/src/components/auth/SignupForm.vue:96 +msgctxt "Content/Signup/Form/Placeholder" +msgid "Enter your email" +msgstr "Zadejte emailovou adresu" + +#: front/src/components/auth/SignupForm.vue:91 +#: src/components/auth/SignupForm.vue:93 +msgctxt "Content/Signup/Form/Placeholder" +msgid "Enter your invitation code (case insensitive)" +msgstr "Zadejte kód pozvánky (pozor na velikost pÃsmen)" + +#: front/src/components/metadata/Search.vue:114 +msgctxt "Content/Library/Input.Placeholder/Verb" +msgid "Enter your search query…" +msgstr "Zadejte vyhledávacà řetÄ›zec…" + +#: front/src/components/auth/SignupForm.vue:95 +msgctxt "Content/Signup/Form/Placeholder" +msgid "Enter your username" +msgstr "Zadejte vaÅ¡e uživatelské jméno" + +#: front/src/components/auth/LoginForm.vue:81 +msgctxt "Content/Login/Input.Placeholder" +msgid "Enter your username or email" +msgstr "Zadejte vaÅ¡e uživatelské jméno nebo email" + +#: front/src/components/auth/SubsonicTokenForm.vue:19 +#: front/src/views/content/libraries/Form.vue:4 +msgctxt "Content/*/Error message.Title" +msgid "Error" +msgstr "Chyba" + +#: front/src/components/federation/FetchButton.vue:34 +#: front/src/components/library/ImportStatusModal.vue:32 +msgctxt "Popup/Import/Table.Label/Noun" +msgid "Error detail" +msgstr "Detail chyby" + +#: front/src/views/admin/Settings.vue:89 +msgctxt "Content/Admin/Menu" +msgid "Error reporting" +msgstr "Hlášenà chyb" + +#: front/src/components/federation/FetchButton.vue:26 +#: front/src/components/library/ImportStatusModal.vue:24 +msgctxt "Popup/Import/Table.Label/Noun" +msgid "Error type" +msgstr "Typ chyby" + +#: front/src/components/common/ActionTable.vue:94 +msgctxt "Content/*/Error message/Header" +msgid "Error while applying action" +msgstr "Chyba pÅ™i provádÄ›nà operace" + +#: front/src/views/auth/PasswordReset.vue:7 +msgctxt "Content/Signup/Card.Title" +msgid "Error while asking for a password reset" +msgstr "Chyba pÅ™i žádosti o reset hesla" + +#: front/src/components/auth/Authorize.vue:6 +msgctxt "Popup/Moderation/Error message" +msgid "Error while authorizing application" +msgstr "Chyba pÅ™i autorizaci aplikace" + +#: front/src/views/auth/PasswordResetConfirm.vue:7 +msgctxt "Content/Signup/Card.Title" +msgid "Error while changing your password" +msgstr "Chyba pÅ™i zmÄ›nÄ› hesla" + +#: front/src/views/admin/moderation/DomainsList.vue:6 +msgctxt "Content/Moderation/Message.Title" +msgid "Error while creating domain" +msgstr "Chyba pÅ™i vytvářenà domény" + +#: front/src/components/moderation/FilterModal.vue:13 +msgctxt "Popup/Moderation/Error message" +msgid "Error while creating filter" +msgstr "Chyba pÅ™i vytvářenà filtru" + +#: front/src/components/manage/users/InvitationForm.vue:4 +msgctxt "Content/Admin/Error message.Title" +msgid "Error while creating invitation" +msgstr "Chyba pÅ™i vytvářenà pozvánky" + +#: front/src/components/manage/moderation/InstancePolicyForm.vue:7 +msgctxt "Content/Moderation/Error message.Title" +msgid "Error while creating rule" +msgstr "Chyba pÅ™i vytvářenà pravidla" + +#: front/src/components/auth/Authorize.vue:7 +msgctxt "Popup/Moderation/Error message" +msgid "Error while fetching application data" +msgstr "Chyba pÅ™i zÃskávánà dat aplikace" + +#: front/src/views/admin/moderation/DomainsDetail.vue:155 +msgctxt "Content/Moderation/Table" +msgid "Error while fetching node info" +msgstr "Chyba pÅ™i zÃskávánà dat uzlu" + +#: front/src/components/admin/SettingsGroup.vue:5 +#: front/src/components/federation/FetchButton.vue:73 +msgctxt "Content/*/Error message.Title" +msgid "Error while saving settings" +msgstr "Chyba pÅ™i ukládánà nastavenÃ" + +#: front/src/components/library/EditForm.vue:46 +msgctxt "Content/Library/Error message.Title" +msgid "Error while submitting edit" +msgstr "Chyba pÅ™i odesÃlánà zmÄ›n" + +#: front/src/components/manage/moderation/NoteForm.vue:3 +msgctxt "Content/Moderation/Error message.Title" +msgid "Error while submitting note" +msgstr "Chyba pÅ™i odesÃlánà poznámky" + +#: front/src/components/moderation/ReportModal.vue:11 +msgctxt "Popup/Moderation/Error message" +msgid "Error while submitting report" +msgstr "Chyba pÅ™i odesÃlánà hlášenÃ" + +#: front/src/components/mixins/Translations.vue:32 +#: front/src/components/mixins/Translations.vue:33 +msgctxt "Content/Library/Table/Short" +msgid "Errored" +msgstr "SkonÄilo chybou" + +#: front/src/views/content/libraries/Quota.vue:75 +msgctxt "Content/Library/Label" +msgid "Errored files" +msgstr "Soubory s chybou" + +#: front/src/components/mixins/Translations.vue:17 +#: front/src/components/mixins/Translations.vue:18 +msgctxt "Content/Settings/Dropdown/Short" +msgid "Everyone" +msgstr "VÅ¡ichni" + +#: front/src/components/mixins/Translations.vue:11 +#: front/src/components/mixins/Translations.vue:12 +msgctxt "Content/Settings/Dropdown" +msgid "Everyone on this instance" +msgstr "VÅ¡ichni z této instance" + +#: front/src/components/mixins/Translations.vue:12 +#: front/src/components/mixins/Translations.vue:13 +msgctxt "Content/Settings/Dropdown" +msgid "Everyone, across all instances" +msgstr "VÅ¡ichni, napÅ™ÃÄ vÅ¡emi instancemi" + +#: front/src/components/library/radios/Builder.vue:62 +msgctxt "Content/Radio/Table.Label/Verb" +msgid "Exclude" +msgstr "VylouÄit" + +#: front/src/components/common/CollapseLink.vue:2 +msgctxt "*/*/Button,Label" +msgid "Expand" +msgstr "Rozbalit" + +#: front/src/components/manage/users/InvitationsTable.vue:41 +#: front/src/components/mixins/Translations.vue:59 +#: front/src/components/mixins/Translations.vue:60 +msgctxt "Content/Admin/Table.Label/Noun" +msgid "Expiration date" +msgstr "Datum vyprÅ¡enÃ" + +#: front/src/components/manage/users/InvitationsTable.vue:50 +msgctxt "Content/Admin/Table" +msgid "Expired" +msgstr "VyprÅ¡el" + +#: front/src/components/manage/users/InvitationsTable.vue:21 +msgctxt "Content/Admin/Dropdown/Adjective" +msgid "Expired/used" +msgstr "VyprÅ¡el/použit" + +#: front/src/components/manage/moderation/InstancePolicyForm.vue:110 +msgctxt "Content/Moderation/Help text" +msgid "Explain why you're applying this policy. Depending on your instance configuration, this will help you remember why you acted on this account or domain, and may be displayed publicly to help users understand what moderation rules are in place." +msgstr "VysvÄ›tlete proÄ aplikujte tuto zásadu. Bude to informace pro vás a v závislosti na nastavenà instance může být viditelná veÅ™ejnÄ›, aby se uživatelé seznámili s pravidly moderace." + +#: front/src/components/manage/library/UploadsTable.vue:25 +#: front/src/views/content/libraries/FilesTable.vue:16 +msgctxt "Content/Library/Dropdown" +msgid "Failed" +msgstr "Neúspěšné" + +#: front/src/views/content/remote/Card.vue:75 +msgctxt "Content/Library/Card.List item/Noun" +msgid "Failed tracks:" +msgstr "Neúspěšné stopy:" + +#: front/src/views/admin/library/AlbumDetail.vue:171 +#: front/src/views/admin/library/ArtistDetail.vue:159 +#: front/src/views/admin/library/TrackDetail.vue:223 +msgctxt "*/*/*" +msgid "Favorited tracks" +msgstr "OblÃbené stopy" + +#: front/src/components/Sidebar.vue:66 +#: src/components/mixins/Translations.vue:88 +#: front/src/components/mixins/Translations.vue:89 +msgctxt "Sidebar/Favorites/List item.Link/Noun" +msgid "Favorites" +msgstr "OblÃbené" + +#: front/src/components/About.vue:110 src/views/admin/Settings.vue:84 +msgctxt "*/*/*" +msgid "Federation" +msgstr "Federace" + +#: front/src/components/library/TrackDetail.vue:66 +msgctxt "Content/*/*/Noun" +msgid "Federation ID" +msgstr "ID Federace" + +#: front/src/components/library/EditCard.vue:45 +msgctxt "Content/Library/Card.Table.Header/Short" +msgid "Field" +msgstr "Pole" + +#: front/src/components/library/FileUpload.vue:93 +msgctxt "Content/Library/Table.Label" +msgid "Filename" +msgstr "Název souboru" + +#: front/src/components/library/radios/Builder.vue:61 +msgctxt "Content/Radio/Table.Label/Noun" +msgid "Filter name" +msgstr "Název filtru" + +#: front/src/components/Home.vue:118 +msgctxt "Content/Home/Link" +msgid "Find another pod" +msgstr "Hledat dalÅ¡Ã pody" + +#: front/src/components/manage/library/UploadsTable.vue:26 +#: front/src/components/mixins/Translations.vue:36 +#: front/src/views/content/libraries/FilesTable.vue:17 +#: front/src/components/mixins/Translations.vue:37 +msgctxt "Content/Library/*" +msgid "Finished" +msgstr "DokonÄeno" + +#: front/src/components/manage/moderation/AccountsTable.vue:42 +#: front/src/components/manage/moderation/DomainsTable.vue:49 +#: front/src/views/admin/library/AlbumDetail.vue:155 +#: front/src/views/admin/library/ArtistDetail.vue:143 +#: front/src/views/admin/library/LibraryDetail.vue:162 +#: front/src/views/admin/library/TagDetail.vue:98 +#: front/src/views/admin/library/TrackDetail.vue:207 +#: front/src/views/admin/library/UploadDetail.vue:167 +#: front/src/views/admin/moderation/AccountsDetail.vue:236 +#: front/src/views/admin/moderation/DomainsDetail.vue:188 +msgctxt "Content/Moderation/Table.Label/Short (Value is a date)" +msgid "First seen" +msgstr "PrvnÄ› vidÄ›no" + +#: front/src/components/mixins/Translations.vue:56 +#: front/src/components/mixins/Translations.vue:57 +msgctxt "Content/Moderation/Dropdown/Noun" +msgid "First seen date" +msgstr "PrvnÄ› vidÄ›no dne" + +#: front/src/components/ShortcutsModal.vue:64 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Focus searchbar" +msgstr "PÅ™ejÃt do vyhledávacÃho pole" + +#: front/src/views/content/remote/Card.vue:100 +msgctxt "Content/Library/Card.Button.Label/Verb" +msgid "Follow" +msgstr "Sledovat" + +#: front/src/views/content/Home.vue:16 +msgctxt "Content/Library/Title/Verb" +msgid "Follow remote libraries" +msgstr "Sledovat vzdálené knihovny" + +#: front/src/views/content/remote/Card.vue:105 +msgctxt "Content/Library/Card.Paragraph" +msgid "Follow request pending approval" +msgstr "Žádost o sledovánà Äeká na schválenÃ" + +#: front/src/components/manage/library/LibrariesTable.vue:53 +#: front/src/components/mixins/Translations.vue:76 +#: front/src/views/admin/library/LibraryDetail.vue:170 +#: front/src/views/content/libraries/Detail.vue:7 +#: front/src/components/mixins/Translations.vue:77 +msgctxt "Content/Federation/*/Noun" +msgid "Followers" +msgstr "SledujÃcÃ" + +#: front/src/views/content/remote/Card.vue:116 +msgctxt "Content/Library/Card.Paragraph" +msgid "Following" +msgstr "Sleduje" + +#: front/src/components/mixins/Translations.vue:96 +#: front/src/components/mixins/Translations.vue:97 +msgctxt "Content/OAuth Scopes/Label" +msgid "Follows" +msgstr "Sleduje" + +#: front/src/components/library/TrackBase.vue:245 +msgctxt "Content/Track/Paragraph" +msgid "From album <a class=\"internal\" href=\"%{ albumUrl }\">%{ album }</a> by <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" +msgstr "Z alba <a class=\"internal\" href=\"%{ albumUrl }\">%{ album }</a> od <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" + +#: front/src/components/auth/Authorize.vue:28 +msgctxt "Content/Auth/Label/Noun" +msgid "Full access" +msgstr "Plný pÅ™Ãstup" + +#: front/src/components/auth/SubsonicTokenForm.vue:7 +msgctxt "Content/Settings/Paragraph'" +msgid "Funkwhale is compatible with other music players that support the Subsonic API." +msgstr "Funkwhale je kompatibilnà s pÅ™ehrávaÄi které podporujà Subsonic API." + +#: front/src/components/Home.vue:88 +msgctxt "Content/Home/Paragraph" +msgid "Funkwhale is free and developped by a friendly community of volunteers." +msgstr "Funkwhale je free software vyvÃjený přátelskou komunitou dobrovolnÃků." + +#: front/src/components/About.vue:78 +msgctxt "*/*/*" +msgid "Funkwhale version" +msgstr "Verze Funkwhale" + +#: front/src/components/ShortcutsModal.vue:56 +msgctxt "Popup/Keyboard shortcuts/Title" +msgid "General shortcuts" +msgstr "Obecné klávesové zkratky" + +#: front/src/components/manage/users/InvitationForm.vue:16 +msgctxt "Content/Admin/Button.Label/Verb" +msgid "Get a new invitation" +msgstr "ZÃskat novou pozvánku" + +#: front/src/views/content/Home.vue:12 src/views/content/Home.vue:19 +msgctxt "Content/Library/Button.Label/Verb" +msgid "Get started" +msgstr "ZaÄÃnáme" + +#: front/src/components/Footer.vue:45 +#: src/components/library/ImportStatusModal.vue:45 +msgctxt "Footer/*/Link" +msgid "Getting help" +msgstr "ZÃskat pomoc" + +#: front/src/components/common/ActionTable.vue:35 +#: front/src/components/common/ActionTable.vue:56 +msgctxt "Content/*/Button.Label/Short, Verb" +msgid "Go" +msgstr "PokraÄovat" + +#: front/src/components/PageNotFound.vue:14 +msgctxt "Content/*/Button.Label/Verb" +msgid "Go to home page" +msgstr "PÅ™ejÃt na domovskou stránku" + +#: front/src/views/Notifications.vue:27 src/views/Notifications.vue:61 +msgctxt "Content/Notifications/Button.Label" +msgid "Got it!" +msgstr "Chápu!" + +#: front/src/components/auth/Settings.vue:128 +msgctxt "Content/Settings/Title" +msgid "Hidden artists" +msgstr "Skrytà interpreti" + +#: front/src/components/About.vue:155 +msgctxt "*/*/*/Verb" +msgid "Hide" +msgstr "Skrýt" + +#: front/src/components/manage/moderation/InstancePolicyForm.vue:114 +msgctxt "Content/Moderation/Help text" +msgid "Hide account or domain content, except from followers." +msgstr "Skrýt obsah úÄtu nebo domény (neplatà pro sledujÃcÃ)." + +#: front/src/components/moderation/FilterModal.vue:40 +msgctxt "Popup/*/Button.Label" +msgid "Hide content" +msgstr "Skrýt obsah" + +#: front/src/components/audio/PlayButton.vue:31 +msgctxt "*/Queue/Dropdown/Button/Label/Short" +msgid "Hide content from this artist" +msgstr "Skrýt obsah od tohoto interpreta" + +#: front/src/components/audio/Player.vue:669 +msgctxt "Sidebar/Player/Icon.Tooltip/Verb" +msgid "Hide content from this artist…" +msgstr "Skrýt obsah od tohoto interpreta…" + +#: front/src/components/library/Home.vue:65 +msgctxt "Head/Home/Title" +msgid "Home" +msgstr "Domů" + +#: front/src/components/auth/SubsonicTokenForm.vue:10 +msgctxt "Content/Settings/Paragraph" +msgid "However, accessing Funkwhale from those clients require a separate password you can set below." +msgstr "PÅ™istupovat k Funkwhale z tÄ›chto klientů ale vyžaduje samostatné heslo, které můžete nastavit nÞe." + +#: front/src/views/auth/PasswordResetConfirm.vue:24 +msgctxt "Content/Signup/Paragraph" +msgid "If the email address provided in the previous step is valid and linked to a user account, you should receive an email with reset instructions in the next couple of minutes." +msgstr "Pokud je emailová adresa zadaná v pÅ™edchozÃm kroku validnà a náležà k uživatelskému úÄtu, obdržÃte bÄ›hem nÄ›kolika minut email s pokyny pro reset hesla." + +#: front/src/components/auth/Settings.vue:205 +msgctxt "Content/Applications/Paragraph" +msgid "If you authorize third-party applications to access your data, those applications will be listed here." +msgstr "Zde jsou vypsány aplikace tÅ™etÃch stran, kterým byl udÄ›len pÅ™Ãstup k vaÅ¡im datům." + +#: front/src/components/mixins/Translations.vue:46 +#: front/src/components/mixins/Translations.vue:47 +msgctxt "Content/Moderation/Dropdown" +msgid "Illegal content" +msgstr "Nelegálnà obsah" + +#: front/src/components/library/ImportStatusModal.vue:3 +msgctxt "Popup/Import/Title" +msgid "Import detail" +msgstr "Detaily importu" + +#: front/src/components/library/FileUpload.vue:50 +msgctxt "Content/Library/Input.Label/Noun" +msgid "Import reference" +msgstr "Odkaz importu" + +#: front/src/components/manage/library/UploadsTable.vue:20 +#: front/src/components/manage/library/UploadsTable.vue:64 +#: front/src/views/admin/library/UploadDetail.vue:131 +#: front/src/views/content/libraries/FilesTable.vue:11 +#: front/src/views/content/libraries/FilesTable.vue:59 +msgctxt "Content/*/*/Noun" +msgid "Import status" +msgstr "Stav importu" + +#: front/src/components/mixins/Translations.vue:37 +#: front/src/components/mixins/Translations.vue:38 +msgctxt "Content/Library/Help text" +msgid "Imported" +msgstr "Importováno" + +#: front/src/components/federation/FetchButton.vue:47 +msgctxt "*/*/Error" +msgid "Impossible to connect to the remote server" +msgstr "Ke vzdáleném serveru se nelze pÅ™ipojit" + +#: front/src/components/moderation/FilterModal.vue:26 +msgctxt "Popup/Moderation/List item" +msgid "In \"Recently added\" widget" +msgstr "Ve widgetu \"Poslednà pÅ™idané\"" + +#: front/src/components/moderation/FilterModal.vue:27 +msgctxt "Popup/Moderation/List item" +msgid "In artists and album listings" +msgstr "Ve výpisu interpretů a alb" + +#: front/src/components/favorites/TrackFavoriteIcon.vue:3 +msgctxt "Content/Track/Button.Message" +msgid "In favorites" +msgstr "V oblÃbených" + +#: front/src/components/moderation/FilterModal.vue:25 +msgctxt "Popup/Moderation/List item" +msgid "In other users favorites and listening history" +msgstr "V oblÃbených a historii poslechu jiných uživatelů" + +#: front/src/components/moderation/FilterModal.vue:28 +msgctxt "Popup/Moderation/List item" +msgid "In radio suggestions" +msgstr "V návrzÃch rádia" + +#: front/src/components/manage/users/UsersTable.vue:55 +msgctxt "Content/Admin/Table" +msgid "Inactive" +msgstr "NeaktivnÃ" + +#: front/src/components/ShortcutsModal.vue:124 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Increase volume" +msgstr "Zvýšit hlasitost" + +#: front/src/components/playlists/Editor.vue:41 +msgctxt "Content/Playlist/Button.Label/Verb" +msgid "Insert from queue (%{ count } track)" +msgid_plural "Insert from queue (%{ count } tracks)" +msgstr[0] "Vložit z fronty (%{ count } stopa)" +msgstr[1] "Vložit z fronty (%{ count } stopy)" +msgstr[2] "Vložit z fronty (%{ count } stop)" + +#: front/src/components/mixins/Translations.vue:16 +#: front/src/components/mixins/Translations.vue:17 +msgctxt "Content/Settings/Dropdown/Short" +msgid "Instance" +msgstr "Instance" + +#: front/src/views/admin/moderation/DomainsDetail.vue:99 +msgctxt "Content/Moderation/Title" +msgid "Instance data" +msgstr "Data instance" + +#: front/src/views/admin/Settings.vue:80 +msgctxt "Content/Admin/Menu" +msgid "Instance information" +msgstr "Informace o instanci" + +#: front/src/components/library/Radios.vue:9 +msgctxt "Content/Radio/Title" +msgid "Instance radios" +msgstr "Rádia instance" + +#: front/src/views/admin/Settings.vue:75 +msgctxt "Head/Admin/Title" +msgid "Instance settings" +msgstr "Nastavenà instance" + +#: front/src/components/SetInstanceModal.vue:19 +msgctxt "Popup/Instance/Input.Label/Noun" +msgid "Instance URL" +msgstr "URL instance" + +#: front/src/components/manage/moderation/ReportCard.vue:92 +#: front/src/components/manage/moderation/ReportCard.vue:203 +msgctxt "Content/*/*/Noun" +msgid "Internal notes" +msgstr "Internà poznámka" + +#: front/src/components/library/FileUpload.vue:268 +msgctxt "Content/Library/Help text" +msgid "Invalid file type, ensure you are uploading an audio file. Supported file extensions are %{ extensions }" +msgstr "Neplatný typ souboru. UjistÄ›te se, že nahrávate zvukový soubor. Podporovány jsou soubory typu %{ extensions }" + +#: front/src/components/library/ImportStatusModal.vue:139 +#: front/src/components/mixins/Translations.vue:45 +#: front/src/components/mixins/Translations.vue:46 +msgctxt "Popup/Import/Error.Label" +msgid "Invalid metadata" +msgstr "Neplatná metadata" + +#: front/src/components/auth/SignupForm.vue:40 +#: front/src/components/manage/users/InvitationForm.vue:11 +msgctxt "Content/*/Input.Label" +msgid "Invitation code" +msgstr "Kód pozvánky" + +#: front/src/views/admin/users/Base.vue:8 +#: front/src/views/admin/users/InvitationsList.vue:24 +msgctxt "*/Admin/*/Noun" +msgid "Invitations" +msgstr "Pozvánky" + +#: front/src/components/manage/moderation/DomainsTable.vue:9 +#: front/src/views/admin/moderation/DomainsDetail.vue:106 +msgctxt "Content/Moderation/*/Adjective" +msgid "Is present on allow-list" +msgstr "Nacházà se na seznamu povolených" + +#: front/src/components/Footer.vue:49 +msgctxt "Footer/*/List item.Link" +msgid "Issue tracker" +msgstr "Databáze problémů" + +#: front/src/components/SetInstanceModal.vue:5 +msgctxt "Popup/Instance/Error message.Title" +msgid "It is not possible to connect to the given URL" +msgstr "Na zadanou adresu URL se nelze pÅ™ipojit" + +#: front/src/components/mixins/Translations.vue:65 +#: front/src/components/mixins/Translations.vue:66 +msgctxt "*/*/*/Noun" +msgid "Items" +msgstr "Položky" + +#: front/src/components/Footer.vue:33 src/components/ShortcutsModal.vue:3 +msgctxt "*/*/*/Noun" +msgid "Keyboard shortcuts" +msgstr "Klávesové zkratky" + +#: front/src/views/admin/moderation/DomainsDetail.vue:198 +msgctxt "Content/Moderation/Table.Label.Link" +msgid "Known accounts" +msgstr "Známé úÄty" + +#: front/src/views/content/remote/Home.vue:14 +msgctxt "Content/Library/Title" +msgid "Known libraries" +msgstr "Známé knihovny" + +#: front/src/components/manage/users/UsersTable.vue:41 +#: front/src/components/mixins/Translations.vue:70 +#: front/src/views/admin/moderation/AccountsDetail.vue:206 +#: front/src/components/mixins/Translations.vue:71 +msgctxt "Content/Profile/Table.Label/Short, Noun (Value is a date)" +msgid "Last activity" +msgstr "Poslednà aktivita" + +#: front/src/views/admin/moderation/AccountsDetail.vue:189 +#: front/src/views/admin/moderation/DomainsDetail.vue:115 +msgctxt "Content/*/Table.Label" +msgid "Last checked" +msgstr "Naposledy kontrolováno" + +#: front/src/components/playlists/PlaylistModal.vue:46 +msgctxt "Popup/Playlist/Table.Label/Short" +msgid "Last modification" +msgstr "Poslednà zmÄ›na" + +#: front/src/components/manage/moderation/AccountsTable.vue:43 +msgctxt "Content/Moderation/Table.Label/Noun" +msgid "Last seen" +msgstr "Naposledy vidÄ›no" + +#: front/src/components/mixins/Translations.vue:57 +#: front/src/components/mixins/Translations.vue:58 +msgctxt "Content/Moderation/Dropdown/Noun" +msgid "Last seen date" +msgstr "Naposledy vidÄ›no dne" + +#: front/src/views/content/remote/Card.vue:73 +msgctxt "Content/Library/Card.List item/Noun" +msgid "Last update:" +msgstr "Poslednà aktualizace:" + +#: front/src/components/common/ActionTable.vue:49 +msgctxt "Modal/*/Button.Label/Short, Verb" +msgid "Launch" +msgstr "Spustit" + +#: front/src/components/Home.vue:35 +msgctxt "Content/Home/Link" +msgid "Learn more" +msgstr "DozvÄ›dÄ›t se vÃce" + +#: front/src/components/manage/users/InvitationForm.vue:58 +msgctxt "Content/Admin/Input.Placeholder" +msgid "Leave empty for a random code" +msgstr "Ponechte prázdné pro náhodný kód" + +#: front/src/components/audio/EmbedWizard.vue:17 +msgctxt "Popup/Embed/Paragraph" +msgid "Leave empty for a responsive widget" +msgstr "Ponechte prázdné pro responzivnà widget" + +#: front/src/components/mixins/Translations.vue:64 +#: front/src/components/mixins/Translations.vue:65 +msgctxt "*/*/*/Noun" +msgid "Length" +msgstr "Délka" + +#: front/src/views/admin/library/AlbumDetail.vue:248 +#: front/src/views/admin/library/ArtistDetail.vue:236 +#: front/src/views/admin/library/Base.vue:17 +#: front/src/views/admin/library/LibrariesList.vue:24 +#: front/src/views/admin/library/TrackDetail.vue:300 +#: front/src/views/admin/moderation/AccountsDetail.vue:339 +#: front/src/views/admin/moderation/DomainsDetail.vue:271 +#: front/src/views/content/Base.vue:5 +msgctxt "*/*/*/Noun" +msgid "Libraries" +msgstr "Knihovny" + +#: front/src/components/mixins/Translations.vue:84 +#: front/src/components/mixins/Translations.vue:85 +msgctxt "Content/OAuth Scopes/Label" +msgid "Libraries and uploads" +msgstr "Knihovny a nahrané soubory" + +#: front/src/views/content/libraries/Form.vue:2 +msgctxt "Content/Library/Paragraph" +msgid "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." +msgstr "Knihovny vám pomáhajà organizovat a sdÃlet vaÅ¡e sbÃrky hudby. Můžete nahrát svou vlastnà hudebnà kolekci na Funkwhale a sdÃlet se svými přáteli a rodinou." + +#: front/src/components/Sidebar.vue:85 +#: front/src/components/manage/library/UploadsTable.vue:60 +#: front/src/components/manage/users/UsersTable.vue:174 +#: front/src/components/mixins/Report.vue:77 +#: front/src/views/admin/library/UploadDetail.vue:144 +#: front/src/views/admin/moderation/AccountsDetail.vue:518 src/entities.js:132 +#: front/src/components/mixins/Report.vue:78 +#, fuzzy +msgctxt "*/*/*/Noun" +msgid "Library" +msgstr "Knihovna" + +#: front/src/views/content/libraries/Form.vue:103 +msgctxt "Content/Library/Message" +msgid "Library created" +msgstr "Knihovna vytvoÅ™ena" + +#: front/src/views/admin/library/LibraryDetail.vue:78 +msgctxt "Content/Moderation/Title" +msgid "Library data" +msgstr "Data knihovny" + +#: front/src/views/content/libraries/Form.vue:123 +msgctxt "Content/Library/Message" +msgid "Library deleted" +msgstr "Knihovna odstranÄ›na" + +#: front/src/views/admin/library/EditsList.vue:4 +msgctxt "Content/Admin/Title/Noun" +msgid "Library edits" +msgstr "Úpravy knihovny" + +#: front/src/views/content/libraries/Form.vue:100 +msgctxt "Content/Library/Message" +msgid "Library updated" +msgstr "Knihovna aktualizována" + +#: front/src/components/library/TrackDetail.vue:19 +#: front/src/components/manage/library/TracksTable.vue:43 +#: front/src/views/admin/library/TrackDetail.vue:165 src/edits.js:84 +#: front/src/entities.js:115 +msgctxt "Content/*/*/Noun" +msgid "License" +msgstr "Licence" + +#: front/src/components/Footer.vue:90 +msgctxt "Footer/Settings/Dropdown.Label/Theme name" +msgid "Light" +msgstr "SvÄ›tlé" + +#: front/src/views/admin/library/AlbumDetail.vue:188 +#: front/src/views/admin/library/ArtistDetail.vue:176 +#: front/src/views/admin/library/LibraryDetail.vue:179 +#: front/src/views/admin/library/TrackDetail.vue:240 +#: front/src/views/admin/moderation/AccountsDetail.vue:269 +msgctxt "Content/Moderation/Table.Label/Noun" +msgid "Linked reports" +msgstr "Odkazy na hlášenÃ" + +#: front/src/components/Home.vue:135 +msgctxt "Content/Home/Link" +msgid "Listen to public albums and playlists shared on this pod" +msgstr "Poslouchat veÅ™ejnÄ› dostupná alba a playlisty sdÃlené na tomto podu" + +#: front/src/components/mixins/Translations.vue:92 +#: front/src/views/admin/library/AlbumDetail.vue:163 +#: front/src/views/admin/library/ArtistDetail.vue:151 +#: front/src/views/admin/library/TrackDetail.vue:215 +#: front/src/components/mixins/Translations.vue:93 +msgctxt "*/*/*/Noun" +msgid "Listenings" +msgstr "Poslechy" + +#: front/src/components/audio/track/Table.vue:25 +#: front/src/components/library/ArtistDetail.vue:28 +msgctxt "Content/*/Button.Label" +msgid "Load more…" +msgstr "NaÄÃst dalÅ¡Ã…" + +#: front/src/views/content/libraries/Detail.vue:21 +msgctxt "Content/Library/Paragraph" +msgid "Loading followers…" +msgstr "NaÄÃtánà sledujÃcÃch…" + +#: front/src/views/content/libraries/Home.vue:3 +msgctxt "Content/Library/Paragraph" +msgid "Loading Libraries…" +msgstr "NaÄÃtánà knihoven…" + +#: front/src/views/content/libraries/Detail.vue:3 +#: front/src/views/content/libraries/Upload.vue:3 +msgctxt "Content/Library/Paragraph" +msgid "Loading library data…" +msgstr "NaÄÃtánà dat knihovny…" + +#: front/src/views/Notifications.vue:84 +msgctxt "Content/Notifications/Paragraph" +msgid "Loading notifications…" +msgstr "NaÄÃtánà upozornÄ›nÃ…" + +#: front/src/views/content/remote/Home.vue:3 +msgctxt "Content/Library/Paragraph" +msgid "Loading remote libraries…" +msgstr "NaÄÃtánà vzdálených knihoven…" + +#: front/src/views/content/libraries/Quota.vue:4 +msgctxt "Content/Library/Paragraph" +msgid "Loading usage data…" +msgstr "NaÄÃtánà informacà o využitÃ…" + +#: front/src/components/favorites/List.vue:5 +msgctxt "Content/Favorites/Message" +msgid "Loading your favorites…" +msgstr "NaÄÃtánà vaÅ¡ich oblÃbených…" + +#: front/src/components/manage/library/AlbumsTable.vue:65 +#: front/src/components/manage/library/ArtistsTable.vue:58 +#: front/src/components/manage/library/LibrariesTable.vue:75 +#: front/src/components/manage/library/TracksTable.vue:71 +#: front/src/components/manage/library/UploadsTable.vue:99 +#: front/src/components/manage/moderation/ReportCard.vue:173 +#: front/src/views/admin/library/AlbumDetail.vue:19 +#: front/src/views/admin/library/ArtistDetail.vue:18 +#: front/src/views/admin/library/LibraryDetail.vue:18 +#: front/src/views/admin/library/TrackDetail.vue:18 +#: front/src/views/admin/library/UploadDetail.vue:19 +msgctxt "Content/Moderation/*/Short, Noun" +msgid "Local" +msgstr "MÃstnÃ" + +#: front/src/components/manage/moderation/AccountsTable.vue:59 +#: front/src/views/admin/moderation/AccountsDetail.vue:18 +msgctxt "Content/Moderation/*/Short, Noun" +msgid "Local account" +msgstr "MÃstnà úÄet" + +#: front/src/components/Home.vue:96 src/views/auth/Login.vue:29 +msgctxt "Head/Login/Title" +msgid "Log In" +msgstr "PÅ™ihlásit se" + +#: front/src/views/auth/Login.vue:4 +msgctxt "Content/Login/Title/Verb" +msgid "Log in to your Funkwhale account" +msgstr "PÅ™ihlásit k vaÅ¡emu Funkwhale úÄtu" + +#: front/src/components/auth/Logout.vue:20 +msgctxt "Head/Login/Title" +msgid "Log Out" +msgstr "Odhlásit se" + +#: front/src/components/Sidebar.vue:38 +msgctxt "Sidebar/Profile/List item.Link" +msgid "Logged in as %{ username }" +msgstr "PÅ™ihlášen jako %{ username }" + +#: front/src/components/Sidebar.vue:54 src/components/auth/LoginForm.vue:41 +msgctxt "*/Login/*/Verb" +msgid "Login" +msgstr "PÅ™ihlášenÃ" + +#: front/src/views/admin/moderation/AccountsDetail.vue:148 +msgctxt "Content/*/*/Noun" +msgid "Login status" +msgstr "Stav pÅ™ihlášenÃ" + +#: front/src/components/Sidebar.vue:52 +msgctxt "Sidebar/Login/List item.Link/Verb" +msgid "Logout" +msgstr "OdhlášenÃ" + +#: front/src/views/content/libraries/Home.vue:9 +msgctxt "Content/Library/Paragraph" +msgid "Looks like you don't have a library, it's time to create one." +msgstr "Zdá se že nemáte žádnou knihovnu, je na Äase nÄ›jakou vytvoÅ™it." + +#: front/src/components/audio/Player.vue:658 +#: src/components/audio/Player.vue:659 +msgctxt "Sidebar/Player/Icon.Tooltip" +msgid "Looping disabled. Click to switch to single-track looping." +msgstr "Opakovánà vypnuto. KliknÄ›te pro opakovánà jedné stopy." + +#: front/src/components/audio/Player.vue:661 +#: src/components/audio/Player.vue:662 +msgctxt "Sidebar/Player/Icon.Tooltip" +msgid "Looping on a single track. Click to switch to whole queue looping." +msgstr "Opakovánà jedné stopy. KliknÄ›te pro opakovánà celé fronty." + +#: front/src/components/audio/Player.vue:664 +#: src/components/audio/Player.vue:665 +msgctxt "Sidebar/Player/Icon.Tooltip" +msgid "Looping on whole queue. Click to disable looping." +msgstr "Opakovánà celé fronty. KliknÄ›te pro vypnutà opakovánÃ." + +#: front/src/components/Sidebar.vue:230 +msgctxt "Sidebar/*/Hidden text" +msgid "Main menu" +msgstr "Hlavnà menu" + +#: front/src/views/admin/library/Base.vue:34 +msgctxt "Head/Admin/Title" +msgid "Manage library" +msgstr "Spravovat knihovnu" + +#: front/src/components/manage/moderation/InstancePolicyModal.vue:8 +msgctxt "Popup/Moderation/Title/Verb" +msgid "Manage moderation rules for %{ obj }" +msgstr "Spravovat pravidla moderovánà pro %{ obj }" + +#: front/src/components/playlists/PlaylistModal.vue:3 +msgctxt "Popup/Playlist/Title/Verb" +msgid "Manage playlists" +msgstr "Spravovat playlisty" + +#: front/src/views/admin/users/Base.vue:20 +msgctxt "Head/Admin/Title" +msgid "Manage users" +msgstr "Spravovat uživatele" + +#: front/src/views/playlists/List.vue:8 +msgctxt "Content/Playlist/Button.Label/Verb" +msgid "Manage your playlists" +msgstr "Spravovat vaÅ¡e playlisty" + +#: front/src/views/Notifications.vue:79 +msgctxt "Content/Notifications/Button.Label/Verb" +msgid "Mark all as read" +msgstr "OznaÄit vÅ¡e jako pÅ™eÄtené" + +#: front/src/components/notifications/NotificationRow.vue:46 +msgctxt "Content/Notifications/Button.Tooltip/Verb" +msgid "Mark as read" +msgstr "OznaÄit jako pÅ™eÄtené" + +#: front/src/components/notifications/NotificationRow.vue:47 +msgctxt "Content/Notifications/Button.Tooltip/Verb" +msgid "Mark as unread" +msgstr "OznaÄit jako nepÅ™eÄtené" + +#: front/src/views/admin/moderation/AccountsDetail.vue:321 +msgctxt "Content/*/*/Unit" +msgid "MB" +msgstr "MB" + +#: front/src/components/audio/Player.vue:651 +msgctxt "Sidebar/Player/Hidden text" +msgid "Media player" +msgstr "Hudebnà pÅ™ehrávaÄ" + +#: front/src/components/auth/Profile.vue:12 +msgctxt "Content/Profile/Paragraph" +msgid "Member since %{ date }" +msgstr "ÄŒlenem od %{ date }" + +#: front/src/components/manage/moderation/ReportCard.vue:109 +#: front/src/components/moderation/ReportModal.vue:41 +msgctxt "*/*/Field.Label/Noun" +msgid "Message" +msgstr "Zpráva" + +#: front/src/components/Footer.vue:32 +msgctxt "Footer/*/List item.Link" +msgid "Mobile and desktop apps" +msgstr "Aplikace pro mobily a desktop" + +#: front/src/components/Home.vue:143 +msgctxt "Content/Home/Link" +msgid "Mobile apps" +msgstr "Aplikace pro mobily" + +#: front/src/components/Sidebar.vue:96 +#: src/components/manage/users/UsersTable.vue:178 +#: front/src/views/admin/Settings.vue:85 +#: front/src/views/admin/moderation/AccountsDetail.vue:522 +#: front/src/views/admin/moderation/Base.vue:43 +msgctxt "*/Moderation/*" +msgid "Moderation" +msgstr "ModerovánÃ" + +#: front/src/views/admin/moderation/AccountsDetail.vue:78 +#: front/src/views/admin/moderation/DomainsDetail.vue:70 +msgctxt "Content/Moderation/Card.Paragraph" +msgid "Moderation policies help you control how your instance interact with a given domain or account." +msgstr "Zásady moderovánà vám pomáhajà řÃdit interakci mezi vaÅ¡Ã instancà a danou doménou nebo úÄtem." + +#: front/src/components/manage/moderation/InstancePolicyModal.vue:4 +msgctxt "Content/Moderation/Button.Label" +msgid "Moderation rules…" +msgstr "Pravidla moderace…" + +#: front/src/components/library/EditCard.vue:5 +msgctxt "Content/Library/Card/Short" +msgid "Modification %{ id }" +msgstr "Úprava %{ id }" + +#: front/src/components/mixins/Translations.vue:58 +#: front/src/components/mixins/Translations.vue:59 +msgctxt "Content/Playlist/Dropdown/Noun" +msgid "Modification date" +msgstr "Datum úpravy" + +#: front/src/components/audio/PlayButton.vue:100 +#: front/src/components/library/AlbumBase.vue:43 +#: front/src/components/library/ArtistBase.vue:54 +#: front/src/components/library/TrackBase.vue:59 +msgctxt "*/*/Button.Label/Noun" +msgid "More…" +msgstr "DalÅ¡Ã…" + +#: front/src/components/Sidebar.vue:63 src/views/admin/Settings.vue:82 +msgctxt "*/*/*/Noun" +msgid "Music" +msgstr "Hudba" + +#: front/src/components/audio/Player.vue:657 +msgctxt "Sidebar/Player/Icon.Tooltip/Verb" +msgid "Mute" +msgstr "ZtiÅ¡it" + +#: front/src/components/manage/moderation/InstancePolicyCard.vue:24 +#: front/src/components/manage/moderation/InstancePolicyForm.vue:115 +msgctxt "Content/Moderation/*/Verb" +msgid "Mute activity" +msgstr "ZtiÅ¡it aktivitu" + +#: front/src/components/manage/moderation/InstancePolicyCard.vue:28 +#: front/src/components/manage/moderation/InstancePolicyForm.vue:119 +msgctxt "Content/Moderation/*/Verb" +msgid "Mute notifications" +msgstr "ZtiÅ¡it oznámenÃ" + +#: front/src/components/Sidebar.vue:34 +msgctxt "Sidebar/Profile/Title" +msgid "My account" +msgstr "Můj úÄet" + +#: front/src/components/library/radios/Builder.vue:238 +msgctxt "Content/Radio/Input.Placeholder" +msgid "My awesome description" +msgstr "Můj úžasný popis" + +#: front/src/views/content/libraries/Form.vue:72 +msgctxt "Content/Library/Input.Placeholder" +msgid "My awesome library" +msgstr "Moje úžasná knihovna" + +#: front/src/components/playlists/Form.vue:76 +msgctxt "Content/Playlist/Input.Placeholder" +msgid "My awesome playlist" +msgstr "Můj úžasný playlist" + +#: front/src/components/library/radios/Builder.vue:237 +msgctxt "Content/Radio/Input.Placeholder" +msgid "My awesome radio" +msgstr "Moje úžasné rádio" + +#: front/src/views/content/libraries/Home.vue:6 +msgctxt "Content/Library/Title" +msgid "My libraries" +msgstr "Moje knihovny" + +#: front/src/components/About.vue:105 src/components/audio/track/Row.vue:40 +#: front/src/components/library/EditCard.vue:60 +#: front/src/components/library/EditForm.vue:70 +#: front/src/components/library/TrackDetail.vue:34 +#: front/src/components/library/TrackDetail.vue:43 +#: front/src/components/library/TrackDetail.vue:52 +#: front/src/components/library/TrackDetail.vue:61 +#: front/src/components/manage/library/AlbumsTable.vue:73 +#: front/src/components/manage/library/TracksTable.vue:76 +#: front/src/components/manage/library/UploadsTable.vue:121 +#: front/src/components/manage/library/UploadsTable.vue:128 +#: front/src/components/manage/moderation/ReportCard.vue:78 +#: front/src/components/manage/moderation/ReportCard.vue:87 +#: front/src/components/manage/moderation/ReportCard.vue:193 +#: front/src/components/manage/users/UsersTable.vue:62 +#: front/src/views/admin/library/UploadDetail.vue:179 +#: front/src/views/admin/library/UploadDetail.vue:214 +#: front/src/views/admin/library/UploadDetail.vue:233 +#: front/src/views/admin/library/UploadDetail.vue:244 +#: front/src/views/admin/library/UploadDetail.vue:257 +#: front/src/views/admin/moderation/AccountsDetail.vue:193 +#: front/src/views/admin/moderation/DomainsDetail.vue:119 +#: front/src/views/content/libraries/FilesTable.vue:95 +#: front/src/views/content/libraries/FilesTable.vue:101 +msgctxt "*/*/*" +msgid "N/A" +msgstr "N/A" + +#: front/src/components/auth/ApplicationForm.vue:9 +#: front/src/components/auth/Settings.vue:133 +#: front/src/components/manage/library/ArtistsTable.vue:39 +#: front/src/components/manage/library/LibrariesTable.vue:48 +#: front/src/components/manage/library/TagsTable.vue:41 +#: front/src/components/manage/library/UploadsTable.vue:59 +#: front/src/components/manage/moderation/AccountsTable.vue:39 +#: front/src/components/manage/moderation/DomainsTable.vue:46 +#: front/src/components/mixins/Translations.vue:63 +#: front/src/components/playlists/PlaylistModal.vue:45 +#: front/src/views/admin/library/ArtistDetail.vue:103 +#: front/src/views/admin/library/LibraryDetail.vue:85 +#: front/src/views/admin/library/TagDetail.vue:68 +#: front/src/views/admin/library/UploadDetail.vue:92 +#: front/src/views/admin/moderation/DomainsDetail.vue:134 +#: front/src/views/content/libraries/Form.vue:10 src/edits.js:17 +#: front/src/components/mixins/Translations.vue:64 +msgctxt "*/*/*/Noun" +msgid "Name" +msgstr "Název" + +#: front/src/views/Notifications.vue:24 src/views/Notifications.vue:58 +msgctxt "*/*/*" +msgid "Never" +msgstr "Nikdy" + +#: front/src/components/auth/Settings.vue:88 +#: front/src/views/auth/PasswordResetConfirm.vue:14 +msgctxt "Content/Settings/Input.Label" +msgid "New password" +msgstr "Nové heslo" + +#: front/src/components/Sidebar.vue:177 +msgctxt "Sidebar/Player/Paragraph" +msgid "New tracks will be appended here automatically." +msgstr "Nové stopy se sem pÅ™idajà automaticky." + +#: front/src/components/library/EditCard.vue:47 +msgctxt "Content/Library/Card.Table.Header/Short" +msgid "New value" +msgstr "Nová hodnota" + +#: front/src/components/audio/Player.vue:655 +msgctxt "Sidebar/Player/Icon.Tooltip" +msgid "Next track" +msgstr "DalÅ¡Ã stopa" + +#: front/src/components/Sidebar.vue:134 +#: front/src/components/manage/moderation/DomainsTable.vue:13 +#: front/src/views/admin/moderation/DomainsDetail.vue:110 +msgctxt "*/*/*" +msgid "No" +msgstr "Ne" + +#: front/src/components/audio/Search.vue:25 +msgctxt "Content/Search/Paragraph" +msgid "No album matched your query" +msgstr "Žádné album neodpovÃdá zadánÃ" + +#: front/src/components/audio/Search.vue:16 +msgctxt "Content/Search/Paragraph" +msgid "No artist matched your query" +msgstr "Žádný interpret neodpovÃdá zadánÃ" + +#: front/src/components/library/TrackDetail.vue:14 +msgctxt "Content/Track/Table.Paragraph" +msgid "No copyright information available for this track" +msgstr "Tato stopa neobsahuje informaci o autorských právech" + +#: front/src/components/About.vue:25 src/components/Home.vue:25 +msgctxt "Content/Home/Paragraph" +msgid "No description available." +msgstr "Popis nenà dostupný." + +#: front/src/components/library/TrackDetail.vue:25 +msgctxt "Content/Track/Table.Paragraph" +msgid "No licensing information for this track" +msgstr "Tato stopa neobsahuje informaci o licenci" + +#: front/src/components/federation/LibraryWidget.vue:6 +msgctxt "Content/Federation/Paragraph" +msgid "No matching library." +msgstr "Žádná odpovÃdajÃcà knihovna." + +#: front/src/views/Notifications.vue:93 +msgctxt "Content/Notifications/Paragraph" +msgid "No notification to show." +msgstr "Žádná oznámenà ke zobrazenÃ." + +#: front/src/components/common/EmptyState.vue:7 +msgctxt "Content/*/Paragraph" +msgid "No results were found." +msgstr "Žádné výsledky nebyly nalezeny." + +#: front/src/components/About.vue:32 +msgctxt "Content/Home/Paragraph" +msgid "No rules available." +msgstr "Nejsou dostupná žádná pravidla." + +#: front/src/components/About.vue:39 +msgctxt "Content/Home/Paragraph" +msgid "No terms available." +msgstr "Bez podmÃnek užitÃ." + +#: front/src/components/mixins/Translations.vue:10 +#: front/src/components/mixins/Translations.vue:11 +msgctxt "Content/Settings/Dropdown" +msgid "Nobody except me" +msgstr "Nikdo kromÄ› mÄ›" + +#: front/src/views/content/libraries/Detail.vue:57 +msgctxt "Content/Library/Paragraph" +msgid "Nobody is following this library" +msgstr "Nikdo nesleduje tuto knihovnu" + +#: front/src/components/manage/users/InvitationsTable.vue:51 +msgctxt "Content/Admin/Table" +msgid "Not used" +msgstr "Nevyužito" + +#: front/src/components/Sidebar.vue:46 +#: src/components/mixins/Translations.vue:112 +#: front/src/views/Notifications.vue:151 +#: src/components/mixins/Translations.vue:113 +msgctxt "*/Notifications/*" +msgid "Notifications" +msgstr "OznámenÃ" + +#: front/src/components/mixins/Translations.vue:47 +#: front/src/components/mixins/Translations.vue:48 +msgctxt "Content/Moderation/Dropdown" +msgid "Offensive content" +msgstr "Urážlivý obsah" + +#: front/src/components/Footer.vue:55 +msgctxt "Footer/*/List item.Link" +msgid "Official website" +msgstr "Oficiálnà web" + +#: front/src/components/auth/Settings.vue:83 +msgctxt "Content/Settings/Input.Label" +msgid "Old password" +msgstr "Staré heslo" + +#: front/src/components/library/EditCard.vue:46 +msgctxt "Content/Library/Card.Table.Header/Short" +msgid "Old value" +msgstr "Původnà hodnota" + +#: front/src/components/About.vue:90 +msgctxt "*/*/*/State of registrations" +msgid "Open" +msgstr "OtevÅ™Ãt" + +#: front/src/components/manage/users/InvitationsTable.vue:20 +msgctxt "Content/Admin/Dropdown/Adjective" +msgid "Open" +msgstr "OtevÅ™Ãt" + +#: front/src/components/library/ImportStatusModal.vue:56 +msgctxt "Popup/Import/Table.Label/Value" +msgid "Open a support thread (include the debug information below in your message)" +msgstr "Založit vlákno na podpoÅ™e (vložit informace pro ladÄ›nà do zprávy)" + +#: front/src/components/library/AlbumBase.vue:87 +#: front/src/components/library/ArtistBase.vue:99 +#: front/src/components/library/TagDetail.vue:11 +#: front/src/components/library/TrackBase.vue:103 +#: front/src/components/manage/moderation/ReportCard.vue:128 +msgctxt "Content/Moderation/Link" +msgid "Open in moderation interface" +msgstr "OtevÅ™Ãt v rozhranà pro moderaci" + +#: front/src/views/admin/library/AlbumDetail.vue:37 +#: front/src/views/admin/library/ArtistDetail.vue:35 +#: front/src/views/admin/library/TagDetail.vue:21 +#: front/src/views/admin/library/TrackDetail.vue:36 +msgctxt "Content/Moderation/Link/Verb" +msgid "Open local profile" +msgstr "OtevÅ™Ãt mÃstnà profil" + +#: front/src/views/admin/library/AlbumDetail.vue:52 +#: front/src/views/admin/library/ArtistDetail.vue:50 +#: front/src/views/admin/library/TrackDetail.vue:51 +msgctxt "Content/Moderation/Link/Verb" +msgid "Open on MusicBrainz" +msgstr "OtevÅ™Ãt na MusicBrainz" + +#: front/src/views/admin/moderation/AccountsDetail.vue:23 +msgctxt "Content/Moderation/Link/Verb" +msgid "Open profile" +msgstr "OtevÅ™Ãt profil" + +#: front/src/views/admin/library/AlbumDetail.vue:60 +#: front/src/views/admin/library/ArtistDetail.vue:58 +#: front/src/views/admin/library/LibraryDetail.vue:49 +#: front/src/views/admin/library/TrackDetail.vue:59 +#: front/src/views/admin/library/UploadDetail.vue:50 +#: front/src/views/admin/moderation/AccountsDetail.vue:52 +msgctxt "Content/Moderation/Link/Verb" +msgid "Open remote profile" +msgstr "OtevÅ™Ãt vzdálený profil" + +#: front/src/views/admin/moderation/DomainsDetail.vue:16 +msgctxt "Content/Moderation/Link/Verb" +msgid "Open website" +msgstr "OtevÅ™Ãt web" + +#: front/src/components/manage/moderation/InstancePolicyForm.vue:40 +msgctxt "Content/Moderation/Card.Title" +msgid "Or customize your rule" +msgstr "Nebo upravte vaÅ¡e pravidlo" + +#: front/src/components/favorites/List.vue:32 +#: src/components/library/Radios.vue:41 +#: front/src/components/manage/library/EditsCardList.vue:37 +#: front/src/components/manage/users/UsersTable.vue:17 +#: front/src/views/admin/moderation/ReportsList.vue:42 +#: front/src/views/playlists/List.vue:25 +msgctxt "Content/Search/Dropdown.Label/Noun" +msgid "Order" +msgstr "PoÅ™adÃ" + +#: front/src/components/favorites/List.vue:24 +#: src/components/library/Albums.vue:15 +#: front/src/components/library/Artists.vue:19 +#: src/components/library/Radios.vue:33 +#: front/src/components/manage/library/AlbumsTable.vue:11 +#: front/src/components/manage/library/ArtistsTable.vue:11 +#: front/src/components/manage/library/EditsCardList.vue:29 +#: front/src/components/manage/library/LibrariesTable.vue:20 +#: front/src/components/manage/library/TagsTable.vue:11 +#: front/src/components/manage/library/TracksTable.vue:11 +#: front/src/components/manage/library/UploadsTable.vue:30 +#: front/src/components/manage/moderation/AccountsTable.vue:11 +#: front/src/components/manage/moderation/DomainsTable.vue:17 +#: front/src/components/manage/users/InvitationsTable.vue:9 +#: front/src/components/manage/users/UsersTable.vue:9 +#: front/src/views/admin/moderation/ReportsList.vue:34 +#: front/src/views/content/libraries/FilesTable.vue:21 +#: front/src/views/playlists/List.vue:17 +msgctxt "Content/Search/Dropdown.Label/Noun" +msgid "Ordering" +msgstr "ŘazenÃ" + +#: front/src/components/library/Albums.vue:27 +#: src/components/library/Artists.vue:27 +#: front/src/components/manage/library/AlbumsTable.vue:19 +#: front/src/components/manage/library/ArtistsTable.vue:19 +#: front/src/components/manage/library/LibrariesTable.vue:28 +#: front/src/components/manage/library/TagsTable.vue:19 +#: front/src/components/manage/library/TracksTable.vue:19 +#: front/src/components/manage/library/UploadsTable.vue:38 +#: front/src/components/manage/moderation/AccountsTable.vue:19 +#: front/src/components/manage/moderation/DomainsTable.vue:25 +#: front/src/views/content/libraries/FilesTable.vue:29 +msgctxt "Content/Search/Dropdown.Label/Noun" +msgid "Ordering direction" +msgstr "SmÄ›r Å™azenÃ" + +#: front/src/components/mixins/Translations.vue:48 +#: front/src/components/mixins/Translations.vue:49 +msgctxt "Content/Moderation/Dropdown" +msgid "Other" +msgstr "OstatnÃ" + +#: front/src/components/manage/moderation/ReportCard.vue:143 +#: front/src/components/manage/users/InvitationsTable.vue:38 +msgctxt "*/*/*" +msgid "Owner" +msgstr "VlastnÃk" + +#: front/src/components/PageNotFound.vue:33 +msgctxt "Head/*/Title" +msgid "Page Not Found" +msgstr "Stránka nenalezena" + +#: front/src/components/PageNotFound.vue:7 +msgctxt "Content/*/Title" +msgid "Page not found!" +msgstr "Stránka nenalezena!" + +#: front/src/components/Pagination.vue:39 +msgctxt "Content/*/Hidden text/Noun" +msgid "Pagination" +msgstr "StránkovánÃ" + +#: front/src/components/auth/LoginForm.vue:32 +#: src/components/auth/Settings.vue:291 +#: front/src/components/auth/SignupForm.vue:36 +msgctxt "*/*/*" +msgid "Password" +msgstr "Heslo" + +#: front/src/components/auth/SubsonicTokenForm.vue:100 +msgctxt "Content/Settings/Message" +msgid "Password updated" +msgstr "Heslo zmÄ›nÄ›no" + +#: front/src/views/auth/PasswordResetConfirm.vue:28 +msgctxt "Content/Signup/Card.Title" +msgid "Password updated successfully" +msgstr "Heslo úspěšnÄ› zmÄ›nÄ›no" + +#: front/src/components/audio/Player.vue:654 +msgctxt "Sidebar/Player/Icon.Tooltip/Verb" +msgid "Pause track" +msgstr "Pozastavit stopu" + +#: front/src/components/ShortcutsModal.vue:96 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Pause/play the current track" +msgstr "Pozastavit/spustit aktuálnà stopu" + +#: front/src/components/manage/moderation/InstancePolicyCard.vue:12 +msgctxt "Content/Moderation/Card.List item" +msgid "Paused" +msgstr "Pozastaveno" + +#: front/src/components/library/FileUpload.vue:116 +#: front/src/components/manage/library/UploadsTable.vue:23 +#: front/src/components/mixins/Translations.vue:28 +#: front/src/views/content/libraries/FilesTable.vue:14 +#: front/src/components/mixins/Translations.vue:29 +msgctxt "Content/Library/*/Short" +msgid "Pending" +msgstr "ÄŒeká" + +#: front/src/views/content/libraries/Detail.vue:37 +msgctxt "Content/Library/Table/Short" +msgid "Pending approval" +msgstr "ÄŒeká na schválenÃ" + +#: front/src/views/content/libraries/Quota.vue:22 +msgctxt "Content/Library/Label" +msgid "Pending files" +msgstr "ÄŒekajÃcà soubory" + +#: front/src/components/Sidebar.vue:232 +msgctxt "Sidebar/Notifications/Hidden text" +msgid "Pending follow requests" +msgstr "ÄŒekajÃcà žádosti o sledovánÃ" + +#: front/src/components/library/EditCard.vue:29 +#: front/src/components/manage/library/EditsCardList.vue:18 +msgctxt "Content/Admin/*/Noun" +msgid "Pending review" +msgstr "ÄŒekajÃcà na kontrolu" + +#: front/src/components/Sidebar.vue:233 +msgctxt "Sidebar/Moderation/Hidden text" +msgid "Pending review edits" +msgstr "Úpravy ÄekajÃcà na kontrolu" + +#: front/src/components/auth/Settings.vue:176 +#: front/src/components/manage/users/UsersTable.vue:42 +#: front/src/views/admin/moderation/AccountsDetail.vue:166 +msgctxt "Content/*/*/Noun" +msgid "Permissions" +msgstr "OprávnÄ›nÃ" + +#: front/src/components/audio/PlayButton.vue:9 +#: front/src/components/library/TrackBase.vue:24 +msgctxt "*/Queue/Button.Label/Short, Verb" +msgid "Play" +msgstr "PÅ™ehrát" + +#: front/src/components/audio/album/Card.vue:48 +#: front/src/components/library/AlbumBase.vue:21 +#: front/src/components/library/AlbumDetail.vue:11 +#: src/views/playlists/Detail.vue:24 +msgctxt "Content/Queue/Button.Label/Short, Verb" +msgid "Play all" +msgstr "PÅ™ehrát vÅ¡e" + +#: front/src/components/library/ArtistBase.vue:32 +msgctxt "Content/Artist/Button.Label/Verb" +msgid "Play all albums" +msgstr "PÅ™ehrát vÅ¡echna alba" + +#: front/src/components/audio/PlayButton.vue:92 +msgctxt "*/Queue/Dropdown/Button/Title" +msgid "Play next" +msgstr "PÅ™ehrát následujÃcÃ" + +#: front/src/components/ShortcutsModal.vue:120 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Play next track" +msgstr "PÅ™ehrát následujÃcà stopu" + +#: front/src/components/audio/PlayButton.vue:90 +msgctxt "*/Queue/Dropdown/Button/Title" +msgid "Play now" +msgstr "PÅ™ehrát teÄ" + +#: front/src/components/ShortcutsModal.vue:116 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Play previous track" +msgstr "PÅ™ehrát pÅ™edchozà stopu" + +#: front/src/components/audio/PlayButton.vue:93 +msgctxt "*/Queue/Dropdown/Button/Title" +msgid "Play similar songs" +msgstr "Hrát podobnou hudbu" + +#: front/src/components/Sidebar.vue:231 +msgctxt "Sidebar/Player/Hidden text" +msgid "Play this track" +msgstr "PÅ™ehrát tuto stopu" + +#: front/src/components/audio/Player.vue:653 +msgctxt "Sidebar/Player/Icon.Tooltip/Verb" +msgid "Play track" +msgstr "PÅ™ehrát stopu" + +#: front/src/components/mixins/Report.vue:66 src/views/playlists/Detail.vue:121 +#: front/src/components/mixins/Report.vue:67 +msgctxt "*/*/*" +msgid "Playlist" +msgstr "Playlist" + +#: front/src/views/playlists/Detail.vue:12 +msgctxt "Content/Playlist/Header.Subtitle" +msgid "Playlist containing %{ count } track, by %{ username }" +msgid_plural "Playlist containing %{ count } tracks, by %{ username }" +msgstr[0] "Playlist obsahujÃcà %{ count } stopu, od %{ username }" +msgstr[1] "Playlist obsahujÃcà %{ count } stopy, od %{ username }" +msgstr[2] "Playlist obsahujÃcà %{ count } stop, od %{ username }" + +#: front/src/components/playlists/Form.vue:9 +msgctxt "Content/Playlist/Message" +msgid "Playlist created" +msgstr "Playlist vytvoÅ™en" + +#: front/src/components/playlists/Editor.vue:4 +msgctxt "Content/Playlist/Title" +msgid "Playlist editor" +msgstr "Editor playlistu" + +#: front/src/components/playlists/Form.vue:21 +msgctxt "Content/Playlist/Input.Label" +msgid "Playlist name" +msgstr "Název playlistu" + +#: front/src/components/playlists/Form.vue:6 +msgctxt "Content/Playlist/Message" +msgid "Playlist updated" +msgstr "Playlist aktualizován" + +#: front/src/components/playlists/Form.vue:25 +msgctxt "Content/Playlist/Dropdown.Label" +msgid "Playlist visibility" +msgstr "Viditelnost playlistu" + +#: front/src/components/Sidebar.vue:71 src/components/library/Home.vue:16 +#: front/src/components/library/Library.vue:16 +#: front/src/components/mixins/Translations.vue:100 +#: src/views/admin/Settings.vue:83 +#: front/src/views/admin/library/AlbumDetail.vue:179 +#: front/src/views/admin/library/ArtistDetail.vue:167 +#: front/src/views/admin/library/TrackDetail.vue:231 +#: src/views/playlists/List.vue:106 +#: front/src/components/mixins/Translations.vue:101 +msgctxt "*/*/*" +msgid "Playlists" +msgstr "Playlisty" + +#: front/src/components/audio/EmbedWizard.vue:9 +msgctxt "Content/Embed/Message" +msgid "Please contact your admins and ask them to update the corresponding setting." +msgstr "" + +#: front/src/components/auth/Settings.vue:79 +msgctxt "Content/Settings/Error message.List item/Call to action" +msgid "Please double-check your password is correct" +msgstr "ProsÃm ujistÄ›te se, že jste zadali správné heslo" + +#: front/src/components/auth/LoginForm.vue:5 +msgctxt "Content/Login/Error message.List item/Call to action" +msgid "Please double-check your username/password couple is correct" +msgstr "ProsÃm ujistÄ›te se, že zadané uživatelské jméno a heslo je správné" + +#: front/src/components/auth/Settings.vue:46 +msgctxt "Content/Settings/Paragraph" +msgid "PNG, GIF or JPG. At most 2MB. Will be downscaled to 400x400px." +msgstr "PNG, GIF nebo JPG. MaximálnÄ› 2MB. Bude zmenÅ¡en na 400x400px." + +#: front/src/components/About.vue:72 +msgctxt "Content/About/Header/Name" +msgid "Pod configuration" +msgstr "Konfigurace podu" + +#: front/src/views/admin/library/TrackDetail.vue:143 src/edits.js:70 +msgctxt "*/*/*/Short, Noun" +msgid "Position" +msgstr "Pozice" + +#: front/src/components/manage/moderation/InstancePolicyForm.vue:118 +msgctxt "Content/Moderation/Help text" +msgid "Prevent account or domain from triggering notifications, except from followers." +msgstr "Zabránit úÄtu nebo doménÄ› vyvolat oznámenà (neplatà pro sledujÃcÃ)." + +#: front/src/components/audio/EmbedWizard.vue:43 +msgctxt "Popup/Embed/Title/Noun" +msgid "Preview" +msgstr "Náhled" + +#: front/src/components/audio/Player.vue:652 +msgctxt "Sidebar/Player/Icon.Tooltip" +msgid "Previous track" +msgstr "PÅ™edchozà stopa" + +#: front/src/components/mixins/Translations.vue:15 +#: front/src/components/mixins/Translations.vue:16 +msgctxt "Content/Settings/Dropdown/Short" +msgid "Private" +msgstr "Soukromé" + +#: front/src/views/content/remote/Card.vue:56 +msgctxt "Content/Library/Card.List item" +msgid "Problem during scanning" +msgstr "BÄ›hem skenovánà se vyskytl problém" + +#: front/src/components/library/FileUpload.vue:57 +msgctxt "Content/Library/Button.Label" +msgid "Proceed" +msgstr "PokraÄovat" + +#: front/src/views/auth/EmailConfirm.vue:26 +#: front/src/views/auth/PasswordResetConfirm.vue:31 +msgctxt "Content/Signup/Link/Verb" +msgid "Proceed to login" +msgstr "PokraÄovat k pÅ™ihlášenÃ" + +#: front/src/components/library/FileUpload.vue:17 +msgctxt "Content/Library/Tab.Title/Short" +msgid "Processing" +msgstr "ZpracovánÃ" + +#: front/src/components/mixins/Translations.vue:80 +#: front/src/components/mixins/Translations.vue:81 +msgctxt "Content/OAuth Scopes/Label" +msgid "Profile" +msgstr "Profil" + +#: front/src/components/auth/SignupForm.vue:5 +msgctxt "Content/Signup/Form/Paragraph" +msgid "Public registrations are not possible on this instance. You will need an invitation code to sign up." +msgstr "Registrace nenà na této instanci povolena. Pro založenà úÄtu budete potÅ™ebovat pozvánku." + +#: front/src/components/manage/moderation/AccountsTable.vue:188 +#: front/src/components/manage/moderation/DomainsTable.vue:186 +#: front/src/views/content/libraries/Quota.vue:36 +#: front/src/views/content/libraries/Quota.vue:39 +#: front/src/views/content/libraries/Quota.vue:62 +#: front/src/views/content/libraries/Quota.vue:65 +#: front/src/views/content/libraries/Quota.vue:88 +#: front/src/views/content/libraries/Quota.vue:91 +msgctxt "*/*/*/Verb" +msgid "Purge" +msgstr "VyÄistit" + +#: front/src/views/content/libraries/Quota.vue:89 +msgctxt "Popup/Library/Title" +msgid "Purge errored files?" +msgstr "VyÄistit soubory s chybou?" + +#: front/src/views/content/libraries/Quota.vue:37 +msgctxt "Popup/Library/Title" +msgid "Purge pending files?" +msgstr "VyÄistit ÄekajÃcà soubory?" + +#: front/src/views/content/libraries/Quota.vue:63 +msgctxt "Popup/Library/Title" +msgid "Purge skipped files?" +msgstr "VyÄistit vynechané soubory?" + +#: front/src/components/Sidebar.vue:20 +msgctxt "Sidebar/Queue/Tab.Title/Noun" +msgid "Queue" +msgstr "Fronta" + +#: front/src/components/audio/Player.vue:329 +msgctxt "Content/Queue/Message" +msgid "Queue shuffled!" +msgstr "Fronta zamÃchána!" + +#: front/src/views/radios/Detail.vue:80 +msgctxt "Head/Radio/Title" +msgid "Radio" +msgstr "Rádio" + +#: front/src/components/library/radios/Builder.vue:235 +msgctxt "Head/Radio/Title" +msgid "Radio Builder" +msgstr "Výroba rádia" + +#: front/src/components/library/radios/Builder.vue:15 +msgctxt "Content/Radio/Message" +msgid "Radio created" +msgstr "Rádio vytvoÅ™eno" + +#: front/src/components/library/radios/Builder.vue:21 +msgctxt "Content/Radio/Input.Label/Noun" +msgid "Radio name" +msgstr "Název rádia" + +#: front/src/components/library/radios/Builder.vue:12 +msgctxt "Content/Radio/Message" +msgid "Radio updated" +msgstr "Rádio aktualizováno" + +#: front/src/components/library/Library.vue:13 +#: src/components/library/Radios.vue:142 +#: front/src/components/mixins/Translations.vue:104 +#: front/src/components/mixins/Translations.vue:105 +msgctxt "*/*/*" +msgid "Radios" +msgstr "Rádia" + +#: front/src/components/auth/ApplicationForm.vue:151 +msgctxt "Content/OAuth Scopes/Label/Verb" +msgid "Read" +msgstr "ÄŒÃst" + +#: front/src/components/library/ImportStatusModal.vue:51 +msgctxt "Popup/Import/Table.Label/Value" +msgid "Read our documentation for this error" +msgstr "PÅ™eÄÃst dokumentaci k této chybÄ›" + +#: front/src/components/auth/Authorize.vue:24 +msgctxt "Content/Auth/Label/Noun" +msgid "Read-only" +msgstr "Pouze ke ÄtenÃ" + +#: front/src/components/auth/ApplicationForm.vue:152 +msgctxt "Content/OAuth Scopes/Help Text" +msgid "Read-only access to user data" +msgstr "PÅ™Ãstup k uživatelským datům pouze ke ÄtenÃ" + +#: front/src/components/manage/moderation/InstancePolicyCard.vue:39 +#: front/src/components/manage/moderation/InstancePolicyForm.vue:25 +msgctxt "Content/Moderation/*/Noun" +msgid "Reason" +msgstr "Důvod" + +#: front/src/views/admin/moderation/AccountsDetail.vue:252 +#: front/src/views/admin/moderation/DomainsDetail.vue:216 +msgctxt "Content/Moderation/Table.Label/Noun" +msgid "Received library follows" +msgstr "PÅ™ijatá sledovánà knihovny" + +#: front/src/components/manage/moderation/DomainsTable.vue:48 +#: front/src/components/mixins/Translations.vue:74 +#: front/src/components/mixins/Translations.vue:75 +msgctxt "Content/Moderation/*/Noun" +msgid "Received messages" +msgstr "PÅ™ijaté zprávy" + +#: front/src/components/library/EditForm.vue:27 +msgctxt "Content/Library/Paragraph" +msgid "Recent edits" +msgstr "PÅ™ijaté úpravy" + +#: front/src/components/library/EditForm.vue:17 +msgctxt "Content/Library/Paragraph" +msgid "Recent edits awaiting review" +msgstr "Poslednà úpravy ÄekajÃcà na kontrolu" + +#: front/src/components/library/Home.vue:24 +msgctxt "Content/Home/Title" +msgid "Recently added" +msgstr "Poslednà pÅ™idané" + +#: front/src/components/Home.vue:167 +msgctxt "Content/Home/Title" +msgid "Recently added albums" +msgstr "Nedávno pÅ™idaná alba" + +#: front/src/components/library/Home.vue:11 +msgctxt "Content/Home/Title" +msgid "Recently favorited" +msgstr "Poslednà oblÃbené" + +#: front/src/components/library/Home.vue:6 +msgctxt "Content/Home/Title" +msgid "Recently listened" +msgstr "Poslednà poslechnuté" + +#: front/src/components/auth/ApplicationForm.vue:13 +msgctxt "Content/Applications/Input.Label/Noun" +msgid "Redirect URI" +msgstr "Adresa pÅ™esmÄ›rovánÃ" + +#: front/src/components/auth/Settings.vue:125 +#: src/components/auth/Settings.vue:170 +#: front/src/components/common/EmptyState.vue:16 +#: src/views/content/remote/Home.vue:15 +msgctxt "Content/*/Button.Label/Short, Verb" +msgid "Refresh" +msgstr "Obnovit" + +#: front/src/components/federation/FetchButton.vue:20 +msgctxt "Popup/*/Message.Title" +msgid "Refresh error" +msgstr "Chyba obnovenÃ" + +#: front/src/views/admin/library/AlbumDetail.vue:56 +#: front/src/views/admin/library/ArtistDetail.vue:54 +#: front/src/views/admin/library/TrackDetail.vue:55 +msgctxt "Content/Moderation/Button/Verb" +msgid "Refresh from remote server" +msgstr "Obnovit ze vzdáleného serveru" + +#: front/src/views/admin/moderation/DomainsDetail.vue:164 +msgctxt "Content/Moderation/Button.Label/Verb" +msgid "Refresh node info" +msgstr "Obnovit informace o uzlu" + +#: front/src/components/federation/FetchButton.vue:79 +msgctxt "Popup/*/Message.Title" +msgid "Refresh pending" +msgstr "Obnovit ÄekajÃcÃ" + +#: front/src/components/federation/FetchButton.vue:80 +msgctxt "Popup/*/Message.Content" +msgid "Refresh request wasn't proceed in time by our server. It will be processed later." +msgstr "Požadavek o obnovenà nebyl serverem zpracován ve vymezeném Äase. Bude zpracován pozdÄ›ji." + +#: front/src/components/federation/FetchButton.vue:16 +msgctxt "Popup/*/Message.Title" +msgid "Refresh successful" +msgstr "Obnovenà úspěšné" + +#: front/src/components/common/ActionTable.vue:275 +msgctxt "Content/*/Button.Tooltip/Verb" +msgid "Refresh table content" +msgstr "Obnovit obsah tabulky" + +#: front/src/components/federation/FetchButton.vue:12 +msgctxt "Popup/*/Message.Title" +msgid "Refresh was skipped" +msgstr "Obnovenà bylo pÅ™eskoÄeno" + +#: front/src/components/federation/FetchButton.vue:7 +msgctxt "Popup/*/Title" +msgid "Refreshing object from remote…" +msgstr "Obnova objektu ze vzdáleného serveru…" + +#: front/src/components/About.vue:86 +msgctxt "*/*/*" +msgid "Registrations" +msgstr "Registrace" + +#: front/src/components/manage/users/UsersTable.vue:72 +msgctxt "Content/Admin/Table, User role" +msgid "Regular user" +msgstr "Běžný uživatel" + +#: front/src/components/library/EditCard.vue:87 +#: front/src/views/content/libraries/Detail.vue:51 +msgctxt "Content/Library/Button.Label" +msgid "Reject" +msgstr "OdmÃtnout" + +#: front/src/components/manage/moderation/InstancePolicyCard.vue:32 +#: front/src/components/manage/moderation/InstancePolicyForm.vue:123 +msgctxt "Content/Moderation/*/Verb" +msgid "Reject media" +msgstr "OdmÃtnout mediálnà soubory" + +#: front/src/components/library/EditCard.vue:33 +#: front/src/components/manage/library/EditsCardList.vue:24 +#: front/src/views/content/libraries/Detail.vue:43 +msgctxt "Content/Library/*/Short" +msgid "Rejected" +msgstr "OdmÃtnuto" + +#: front/src/components/manage/library/AlbumsTable.vue:43 +#: front/src/components/mixins/Translations.vue:54 src/edits.js:43 +#: front/src/components/mixins/Translations.vue:55 +msgctxt "Content/*/*/Noun" +msgid "Release date" +msgstr "Datum vydánÃ" + +#: front/src/components/library/FileUpload.vue:63 +msgctxt "Content/Library/Paragraph" +msgid "Remaining storage space" +msgstr "ZbývajÃcà prostor úložiÅ¡tÄ›" + +#: front/src/views/Notifications.vue:18 src/views/Notifications.vue:52 +msgctxt "Content/Notifications/Label" +msgid "Remind me in:" +msgstr "PÅ™ipomenout za:" + +#: front/src/views/content/remote/Home.vue:6 +msgctxt "Content/Library/Title/Noun" +msgid "Remote libraries" +msgstr "Vzdálené knihovny" + +#: front/src/views/content/remote/Home.vue:7 +msgctxt "Content/Library/Paragraph" +msgid "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." +msgstr "Vzdálené knihovny jsou vlastnÄ›ny ostatnÃmi uživateli na sÃti. Můžete k nim pÅ™istupovat pokud jsou veÅ™ejné, nebo pokud je vám udÄ›len pÅ™Ãstup." + +#: front/src/components/library/radios/Filter.vue:59 +msgctxt "Content/Radio/Button.Label/Verb" +msgid "Remove" +msgstr "Odstranit" + +#: front/src/components/auth/Settings.vue:58 +msgctxt "Content/Settings/Button.Label/Verb" +msgid "Remove avatar" +msgstr "Odstranit avatar" + +#: front/src/components/library/ArtistDetail.vue:12 +msgctxt "Content/Moderation/Button.Label" +msgid "Remove filter" +msgstr "Odstranit filtr" + +#: front/src/components/manage/moderation/DomainsTable.vue:198 +#: front/src/views/admin/moderation/DomainsDetail.vue:39 +msgctxt "Content/Moderation/Action/Verb" +msgid "Remove from allow-list" +msgstr "Odebrat ze seznamu povolených" + +#: front/src/components/favorites/TrackFavoriteIcon.vue:26 +msgctxt "Content/Track/Icon.Tooltip/Verb" +msgid "Remove from favorites" +msgstr "Odebrat z oblÃbených" + +#: front/src/views/content/libraries/Quota.vue:38 +msgctxt "Popup/Library/Paragraph" +msgid "Removes uploaded but yet to be processed tracks completely, adding the corresponding data to your quota." +msgstr "Uvolnà mÃsto vymazánÃm nahraných ale zatÃm nezpracovaných stop." + +#: front/src/views/content/libraries/Quota.vue:64 +msgctxt "Popup/Library/Paragraph" +msgid "Removes uploaded tracks skipped during the import processes completely, adding the corresponding data to your quota." +msgstr "Uvolnà mÃsto vymazánÃm nahraných stop, které byly pÅ™eskoÄeny bÄ›hem importu." + +#: front/src/views/content/libraries/Quota.vue:90 +msgctxt "Popup/Library/Paragraph" +msgid "Removes uploaded tracks that could not be processed by the server completely, adding the corresponding data to your quota." +msgstr "Uvolnà mÃsto vymazánÃm nahraných stop, které nemohly být zpracovány serverem." + +#: front/src/components/audio/PlayButton.vue:94 +msgctxt "*/Queue/Dropdown/Button/Title" +msgid "Replace current queue" +msgstr "Nahradit stávajÃcà frontu" + +#: front/src/components/mixins/Report.vue:6 src/components/mixins/Report.vue:7 +msgctxt "*/Moderation/*/Verb" +msgid "Report @%{ username }…" +msgstr "Ohlásit @%{ username }…" + +#: front/src/components/manage/moderation/ReportCard.vue:5 +msgctxt "Content/Moderation/Card/Short" +msgid "Report %{ id }" +msgstr "Ohlásit %{ id }" + +#: front/src/components/moderation/ReportModal.vue:139 +msgctxt "*/Moderation/Message" +msgid "Report successfully submitted, thank you" +msgstr "Hlášenà úspěšnÄ› odesláno, dÄ›kujeme" + +#: front/src/components/mixins/Report.vue:36 +#: src/components/mixins/Report.vue:37 +msgctxt "*/Moderation/*/Verb" +msgid "Report this album…" +msgstr "Nahlásit toto album…" + +#: front/src/components/mixins/Report.vue:50 +#: src/components/mixins/Report.vue:51 +msgctxt "*/Moderation/*/Verb" +msgid "Report this artist…" +msgstr "Nahlásit tohoto interpreta…" + +#: front/src/components/mixins/Report.vue:72 +#: src/components/mixins/Report.vue:73 +msgctxt "*/Moderation/*/Verb" +msgid "Report this library…" +msgstr "Nahlásit tuto knihovnu…" + +#: front/src/components/mixins/Report.vue:61 +#: src/components/mixins/Report.vue:62 +msgctxt "*/Moderation/*/Verb" +msgid "Report this playlist…" +msgstr "Nahlásit tento playlist…" + +#: front/src/components/mixins/Report.vue:23 +#: src/components/mixins/Report.vue:24 +msgctxt "*/Moderation/*/Verb" +msgid "Report this track…" +msgstr "Nahlásit tuto stopu…" + +#: front/src/components/audio/PlayButton.vue:95 +msgctxt "*/Moderation/*/Button/Label,Verb" +msgid "Report…" +msgstr "Ohlásit…" + +#: front/src/components/manage/moderation/ReportCard.vue:117 +msgctxt "Content/*/*/Short" +msgid "Reported object" +msgstr "Ohlášený objekt" + +#: front/src/views/admin/moderation/Base.vue:5 +#: front/src/views/admin/moderation/ReportsList.vue:3 +#: front/src/views/admin/moderation/ReportsList.vue:208 +msgctxt "*/Moderation/*/Noun" +msgid "Reports" +msgstr "HlášenÃ" + +#: front/src/components/auth/SubsonicTokenForm.vue:38 +#: front/src/components/auth/SubsonicTokenForm.vue:41 +msgctxt "*/Settings/Button.Label/Verb" +msgid "Request a new password" +msgstr "Požádat o nové heslo" + +#: front/src/components/auth/SubsonicTokenForm.vue:39 +msgctxt "Popup/Settings/Title" +msgid "Request a new Subsonic API password?" +msgstr "Požádat o nové heslo k Subsonic API?" + +#: front/src/components/auth/SubsonicTokenForm.vue:47 +msgctxt "Content/Settings/Button.Label/Verb" +msgid "Request a password" +msgstr "Požádat o heslo" + +#: front/src/components/federation/FetchButton.vue:64 +msgctxt "Popup/*/Loading.Title" +msgid "Requesting a fetch…" +msgstr "PosÃlám požadavek o staženÃ…" + +#: front/src/components/library/EditForm.vue:94 +msgctxt "Content/Library/Button.Label" +msgid "Reset to initial value" +msgstr "Resetovat na výchozà hodnotu" + +#: front/src/components/auth/LoginForm.vue:34 +#: src/views/auth/PasswordReset.vue:4 front/src/views/auth/PasswordReset.vue:53 +msgctxt "*/Login/*/Verb" +msgid "Reset your password" +msgstr "Resetovat heslo" + +#: front/src/components/manage/moderation/ReportCard.vue:83 +msgctxt "Content/*/*/Noun" +msgid "Resolution date" +msgstr "Datum vyÅ™eÅ¡enÃ" + +#: front/src/components/manage/moderation/ReportCard.vue:218 +msgctxt "Content/*/Button.Label/Verb" +msgid "Resolve" +msgstr "VyÅ™eÅ¡it" + +#: front/src/components/manage/moderation/ReportCard.vue:62 +#: front/src/views/admin/moderation/ReportsList.vue:20 +msgctxt "Content/*/*/Short" +msgid "Resolved" +msgstr "VyÅ™eÅ¡eno" + +#: front/src/views/content/libraries/FilesTable.vue:223 +msgctxt "Content/Library/Dropdown/Verb" +msgid "Restart import" +msgstr "Znovu spustit import" + +#: front/src/components/library/EditForm.vue:31 +msgctxt "Content/Library/Button.Label" +msgid "Restrict to unreviewed edits" +msgstr "Omezit na úpravy bez revize" + +#: front/src/components/favorites/List.vue:39 +#: src/components/library/Albums.vue:34 +#: front/src/components/library/Artists.vue:34 +#: src/components/library/Radios.vue:52 front/src/views/playlists/List.vue:32 +msgctxt "Content/Search/Dropdown.Label/Noun" +msgid "Results per page" +msgstr "Výsledků na stránku" + +#: front/src/views/auth/EmailConfirm.vue:17 +msgctxt "Content/Signup/Link/Verb" +msgid "Return to login" +msgstr "Návrat k pÅ™ihlášenÃ" + +#: front/src/components/library/ArtistDetail.vue:9 +msgctxt "Content/Moderation/Link" +msgid "Review my filters" +msgstr "PÅ™ehled filtrů" + +#: front/src/components/auth/Settings.vue:192 +msgctxt "*/*/*/Verb" +msgid "Revoke" +msgstr "Odvolat" + +#: front/src/components/auth/Settings.vue:195 +msgctxt "*/Settings/Button.Label/Verb" +msgid "Revoke access" +msgstr "Odvolat pÅ™Ãstupová práva" + +#: front/src/components/auth/Settings.vue:193 +msgctxt "Popup/Settings/Title" +msgid "Revoke access for application \"%{ application }\"?" +msgstr "Odvolat pÅ™Ãstup pro aplikaci \"%{ application }\"?" + +#: front/src/components/manage/moderation/InstancePolicyCard.vue:16 +msgctxt "Content/Moderation/Card.Title/Noun" +msgid "Rule" +msgstr "Pravidlo" + +#: front/src/components/About.vue:28 src/components/About.vue:56 +msgctxt "Content/About/Header" +msgid "Rules" +msgstr "Pravidla" + +#: front/src/components/admin/SettingsGroup.vue:75 +#: front/src/components/library/radios/Builder.vue:34 +msgctxt "Content/*/Button.Label/Verb" +msgid "Save" +msgstr "Uložit" + +#: front/src/views/content/remote/Card.vue:203 +msgctxt "Content/Library/Message" +msgid "Scan launched" +msgstr "Skenovánà zahájeno" + +#: front/src/views/content/remote/Card.vue:80 +msgctxt "Content/Library/Card.Button.Label/Verb" +msgid "Scan now" +msgstr "Skenuj teÄ" + +#: front/src/views/content/remote/Card.vue:48 +msgctxt "Content/Library/Card.List item" +msgid "Scan pending" +msgstr "ÄŒeká na sken" + +#: front/src/views/content/remote/Card.vue:204 +msgctxt "Content/Library/Message" +msgid "Scan skipped (previous scan is too recent)" +msgstr "Skenovánà vynecháno (pÅ™ÃliÅ¡ brzy po pÅ™edchozÃm skenu)" + +#: front/src/views/content/remote/Card.vue:60 +msgctxt "Content/Library/Card.List item" +msgid "Scanned" +msgstr "Skenováno" + +#: front/src/views/content/remote/Card.vue:64 +msgctxt "Content/Library/Card.List item" +msgid "Scanned with errors" +msgstr "Skenováno s chybami" + +#: front/src/views/content/remote/Card.vue:52 +msgctxt "Content/Library/Card.List item" +msgid "Scanning… (%{ progress }%)" +msgstr "Skenuji… (%{ progress }%)" + +#: front/src/components/auth/ApplicationForm.vue:22 +#: front/src/components/auth/Settings.vue:226 +msgctxt "Content/*/*/Noun" +msgid "Scopes" +msgstr "Pohledy" + +#: front/src/components/library/Albums.vue:10 +#: src/components/library/Artists.vue:10 +#: front/src/components/library/Radios.vue:29 +#: front/src/components/manage/library/AlbumsTable.vue:5 +#: front/src/components/manage/library/ArtistsTable.vue:5 +#: front/src/components/manage/library/EditsCardList.vue:6 +#: front/src/components/manage/library/LibrariesTable.vue:5 +#: front/src/components/manage/library/TagsTable.vue:5 +#: front/src/components/manage/library/TracksTable.vue:5 +#: front/src/components/manage/library/UploadsTable.vue:5 +#: front/src/components/manage/moderation/AccountsTable.vue:5 +#: front/src/components/manage/moderation/DomainsTable.vue:5 +#: front/src/components/manage/users/InvitationsTable.vue:5 +#: front/src/components/manage/users/UsersTable.vue:5 +#: front/src/views/admin/moderation/ReportsList.vue:8 +#: front/src/views/content/libraries/FilesTable.vue:5 +#: src/views/playlists/List.vue:13 +msgctxt "Content/Search/Input.Label/Noun" +msgid "Search" +msgstr "Hledat" + +#: front/src/views/content/remote/ScanForm.vue:9 +msgctxt "Content/Library/Input.Label/Verb" +msgid "Search a remote library" +msgstr "Hledat ve vzdálené knihovnÄ›" + +#: front/src/components/manage/library/EditsCardList.vue:211 +#: front/src/views/admin/moderation/ReportsList.vue:207 +msgctxt "Content/Search/Input.Placeholder" +msgid "Search by account, summary, domain…" +msgstr "Hledat dle úÄtu, shrnutÃ, domény…" + +#: front/src/components/manage/library/LibrariesTable.vue:191 +msgctxt "Content/Search/Input.Placeholder" +msgid "Search by domain, actor, name, description…" +msgstr "Hledat dle domény, názvu, popisu…" + +#: front/src/components/manage/library/UploadsTable.vue:241 +msgctxt "Content/Search/Input.Placeholder" +msgid "Search by domain, actor, name, reference, source…" +msgstr "Hledat dle domény, názvu, odkazu, zdroje…" + +#: front/src/components/manage/library/ArtistsTable.vue:164 +msgctxt "Content/Search/Input.Placeholder" +msgid "Search by domain, name, MusicBrainz ID…" +msgstr "Hledat dle domény, názvu, MusicBrainz ID…" + +#: front/src/components/manage/library/TracksTable.vue:174 +msgctxt "Content/Search/Input.Placeholder" +msgid "Search by domain, title, artist, album, MusicBrainz ID…" +msgstr "Hledat dle domény, názvu, interpreta, alba, MusicBrainz ID…" + +#: front/src/components/manage/library/AlbumsTable.vue:174 +msgctxt "Content/Search/Input.Placeholder" +msgid "Search by domain, title, artist, MusicBrainz ID…" +msgstr "Hledat dle domény, názvu, interpreta, MusicBrainz ID…" + +#: front/src/components/manage/moderation/AccountsTable.vue:171 +msgctxt "Content/Search/Input.Placeholder" +msgid "Search by domain, username, bio…" +msgstr "Hledat dle domény, uživatele, biografie…" + +#: front/src/components/manage/library/TagsTable.vue:165 +msgctxt "Content/Search/Input.Placeholder" +msgid "Search by name" +msgstr "Hledat dle názvu" + +#: front/src/components/manage/moderation/DomainsTable.vue:168 +msgctxt "Content/Search/Input.Placeholder" +msgid "Search by name…" +msgstr "Hledat dle názvu…" + +#: front/src/views/content/libraries/FilesTable.vue:208 +msgctxt "Content/Library/Input.Placeholder" +msgid "Search by title, artist, album…" +msgstr "Hledat dle názvu, interpreta, alba…" + +#: front/src/components/manage/users/InvitationsTable.vue:153 +msgctxt "Content/Admin/Input.Placeholder/Verb" +msgid "Search by username, e-mail address, code…" +msgstr "Hledat dle uživatele, emailové adresy, kódu…" + +#: front/src/components/manage/users/UsersTable.vue:164 +msgctxt "Content/Search/Input.Placeholder" +msgid "Search by username, e-mail address, name…" +msgstr "Hledat dle uživatele, emailové adresy, názvu…" + +#: front/src/components/audio/SearchBar.vue:27 +msgctxt "Sidebar/Search/Input.Placeholder" +msgid "Search for artists, albums, tracks…" +msgstr "Hledat interprety, alba, stopy…" + +#: front/src/components/audio/Search.vue:2 +msgctxt "Content/Search/Title" +msgid "Search for some music" +msgstr "Hledat trochu muziky" + +#: front/src/components/library/TagsSelector.vue:6 +msgctxt "*/Dropdown/Placeholder/Verb" +msgid "Search for tags…" +msgstr "Hledat dle tagu…" + +#: front/src/components/library/AlbumBase.vue:66 +#: front/src/components/library/ArtistBase.vue:77 +#: front/src/components/library/TrackBase.vue:82 +msgctxt "Content/*/Button.Label/Verb" +msgid "Search on Discogs" +msgstr "Hledat na Discogs" + +#: front/src/components/library/AlbumBase.vue:58 +#: front/src/components/library/ArtistBase.vue:69 +#: front/src/components/library/TrackBase.vue:74 +msgctxt "Content/*/Button.Label/Verb" +msgid "Search on Wikipedia" +msgstr "Hledat na Wikipedii" + +#: front/src/components/library/Library.vue:35 +#: src/views/admin/library/Base.vue:35 +#: front/src/views/admin/moderation/Base.vue:44 +#: src/views/admin/users/Base.vue:21 front/src/views/content/Base.vue:19 +msgctxt "Menu/*/Hidden text" +msgid "Secondary menu" +msgstr "Podmenu" + +#: front/src/views/admin/Settings.vue:15 +msgctxt "Content/Admin/Menu.Title" +msgid "Sections" +msgstr "Sekce" + +#: front/src/components/ShortcutsModal.vue:108 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek backwards 30s" +msgstr "Posunout zpÄ›t o 30s" + +#: front/src/components/ShortcutsModal.vue:100 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek backwards 5s" +msgstr "Posunout zpÄ›t o 5s" + +#: front/src/components/ShortcutsModal.vue:112 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek forwards 30s" +msgstr "Posunout dopÅ™edu o 30s" + +#: front/src/components/ShortcutsModal.vue:104 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek forwards 5s" +msgstr "Posunout dopÅ™edu o 5s" + +#: front/src/components/library/radios/Builder.vue:46 +msgctxt "Content/Radio/Dropdown.Placeholder/Verb" +msgid "Select a filter" +msgstr "Vybrat filtr" + +#: front/src/components/common/ActionTable.vue:79 +msgctxt "Content/*/Link/Verb" +msgid "Select all %{ total } elements" +msgid_plural "Select all %{ total } elements" +msgstr[0] "Vybrat %{ total } prvek" +msgstr[1] "Vybrat vÅ¡echny %{ total } prvky" +msgstr[2] "Vybrat vÅ¡ech %{ total } prvků" + +#: front/src/components/common/ActionTable.vue:88 +msgctxt "Content/*/Link/Verb" +msgid "Select only current page" +msgstr "Vybrat pouze aktuálnà stránku" + +#: front/src/components/Home.vue:43 +msgctxt "Content/Home/Link" +msgid "Server rules" +msgstr "Pravidla serveru" + +#: front/src/components/Sidebar.vue:43 src/components/Sidebar.vue:112 +#: front/src/components/manage/users/UsersTable.vue:182 +#: front/src/views/admin/moderation/AccountsDetail.vue:526 +msgctxt "*/*/*/Noun" +msgid "Settings" +msgstr "NastavenÃ" + +#: front/src/components/auth/Settings.vue:10 +msgctxt "Content/Settings/Message" +msgid "Settings updated" +msgstr "Nastavenà aktualizováno" + +#: front/src/components/admin/SettingsGroup.vue:11 +msgctxt "Content/Settings/Paragraph" +msgid "Settings updated successfully." +msgstr "Nastavenà úspěšnÄ› aktualizováno." + +#: front/src/components/manage/users/InvitationForm.vue:27 +msgctxt "Content/Admin/Table.Label/Noun" +msgid "Share link" +msgstr "Odkaz pro sdÃlenÃ" + +#: front/src/views/content/libraries/Detail.vue:15 +msgctxt "Content/Library/Paragraph" +msgid "Share this link with other users so they can request access to your library." +msgstr "SdÃlejte tento odkaz s ostatnÃmi, aby mohli požádat o pÅ™Ãstup k vaÅ¡Ã knihovnÄ›." + +#: front/src/views/content/libraries/Detail.vue:14 +#: front/src/views/content/remote/Card.vue:90 +msgctxt "Content/Library/Title" +msgid "Sharing link" +msgstr "Odkaz pro sdÃlenÃ" + +#: front/src/components/audio/EmbedWizard.vue:5 +msgctxt "Content/Embed/Message" +msgid "Sharing will not work because this pod doesn't allow anonymous users to access content." +msgstr "" + +#: front/src/components/About.vue:156 +msgctxt "*/*/*/Verb" +msgid "Show" +msgstr "Zobrazit" + +#: front/src/components/audio/album/Card.vue:38 +msgctxt "Content/Album/Card.Link/Verb" +msgid "Show %{ count } more track" +msgid_plural "Show %{ count } more tracks" +msgstr[0] "Zobrazit %{ count } dalÅ¡Ã stopu" +msgstr[1] "Zobrazit %{ count } dalÅ¡Ã stopy" +msgstr[2] "Zobrazit %{ count } dalÅ¡Ãch stop" + +#: front/src/components/tags/List.vue:11 +msgctxt "Content/*/Button/Label/Verb" +msgid "Show 1 more tag" +msgid_plural "Show %{ count } more tags" +msgstr[0] "Zobrazit 1 dalÅ¡Ã tag" +msgstr[1] "Zobrazit %{ count } dalÅ¡Ã tagy" +msgstr[2] "Zobrazit %{ count } dalÅ¡Ãch tagů" + +#: front/src/components/library/EditForm.vue:21 +msgctxt "Content/Library/Button.Label" +msgid "Show all edits" +msgstr "Zobrazit vÅ¡echny úpravy" + +#: front/src/components/ShortcutsModal.vue:60 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Show available keyboard shortcuts" +msgstr "Zobrazit dostupné klávesové zkratky" + +#: front/src/components/common/ExpandableDiv.vue:7 +msgctxt "*/*/Button,Label" +msgid "Show less" +msgstr "Zobrazit ménÄ›" + +#: front/src/components/common/ExpandableDiv.vue:8 +msgctxt "*/*/Button,Label" +msgid "Show more" +msgstr "Zobrazit vÃce" + +#: front/src/views/Notifications.vue:72 +msgctxt "Content/Notifications/Form.Label/Verb" +msgid "Show read notifications" +msgstr "Zobrazit pÅ™eÄtená oznámenÃ" + +#: front/src/components/forms/PasswordInput.vue:42 +msgctxt "Content/Settings/Button.Tooltip/Verb" +msgid "Show/hide password" +msgstr "Zobrazit/skrýt heslo" + +#: front/src/components/manage/library/AlbumsTable.vue:93 +#: front/src/components/manage/library/ArtistsTable.vue:84 +#: front/src/components/manage/library/EditsCardList.vue:72 +#: front/src/components/manage/library/LibrariesTable.vue:110 +#: front/src/components/manage/library/TagsTable.vue:79 +#: front/src/components/manage/library/TracksTable.vue:95 +#: front/src/components/manage/library/UploadsTable.vue:144 +#: front/src/components/manage/moderation/AccountsTable.vue:88 +#: front/src/components/manage/moderation/DomainsTable.vue:85 +#: front/src/components/manage/users/InvitationsTable.vue:76 +#: front/src/components/manage/users/UsersTable.vue:88 +#: front/src/views/content/libraries/FilesTable.vue:117 +msgctxt "Content/*/Paragraph" +msgid "Showing results %{ start }-%{ end } on %{ total }" +msgstr "Zobrazeny výsledky %{ start }-%{ end } z %{ total }" + +#: front/src/components/ShortcutsModal.vue:140 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Shuffle queue" +msgstr "ZamÃchat frontu" + +#: front/src/components/audio/Player.vue:667 +msgctxt "Sidebar/Player/Icon.Tooltip/Verb" +msgid "Shuffle your queue" +msgstr "ZamÃchejte svou frontu" + +#: front/src/components/Home.vue:103 +msgctxt "*/Signup/Title" +msgid "Sign up" +msgstr "Zaregistrovat se" + +#: front/src/views/auth/Signup.vue:37 +msgctxt "*/Signup/Title" +msgid "Sign Up" +msgstr "Zaregistrovat se" + +#: front/src/components/Home.vue:107 +msgctxt "Content/Home/Paragraph" +msgid "Sign up now to keep a track of your favorites, create playlists, discover new content and much more!" +msgstr "Zaregistrujte se abyste mohli vytvářet vlastnà playlisty, sledovat oblÃbené položky, objevovat nový obsah a mnoho dalÅ¡Ãho!" + +#: front/src/components/manage/users/UsersTable.vue:40 +msgctxt "Content/Admin/Table.Label/Short, Noun (Value is a date)" +msgid "Sign-up" +msgstr "Registrace" + +#: front/src/components/mixins/Translations.vue:69 +#: front/src/views/admin/moderation/AccountsDetail.vue:198 +#: front/src/components/mixins/Translations.vue:70 +msgctxt "Content/Admin/Table.Label/Noun" +msgid "Sign-up date" +msgstr "Datum registrace" + +#: front/src/components/library/FileUpload.vue:94 +#: front/src/components/library/TrackDetail.vue:39 +#: front/src/components/manage/library/UploadsTable.vue:65 +#: front/src/components/mixins/Translations.vue:66 +#: front/src/views/admin/library/UploadDetail.vue:219 +#: front/src/views/content/libraries/FilesTable.vue:61 +#: front/src/components/mixins/Translations.vue:67 +msgctxt "Content/*/*/Noun" +msgid "Size" +msgstr "Velikost" + +#: front/src/components/manage/library/UploadsTable.vue:24 +#: front/src/components/mixins/Translations.vue:24 +#: front/src/views/content/libraries/FilesTable.vue:15 +#: front/src/components/mixins/Translations.vue:25 +msgctxt "Content/Library/*" +msgid "Skipped" +msgstr "Vynecháno" + +#: front/src/views/content/libraries/Quota.vue:49 +msgctxt "Content/Library/Label" +msgid "Skipped files" +msgstr "Vynechané soubory" + +#: front/src/views/admin/moderation/DomainsDetail.vue:126 +msgctxt "Content/Moderation/Table.Label" +msgid "Software" +msgstr "Software" + +#: front/src/components/playlists/Editor.vue:21 +msgctxt "Content/Playlist/Paragraph" +msgid "Some tracks in your queue are already in this playlist:" +msgstr "NÄ›které stopy ve frontÄ› se v tomto playlistu již nacházejÃ:" + +#: front/src/components/PageNotFound.vue:10 +msgctxt "Content/*/Paragraph" +msgid "Sorry, the page you asked for does not exist:" +msgstr "Stránka, kterou požadujete, bohužel neexistuje:" + +#: front/src/components/Footer.vue:57 +msgctxt "Footer/*/List item.Link" +msgid "Source code" +msgstr "Zdrojový kód" + +#: front/src/components/auth/Profile.vue:23 +#: front/src/components/manage/users/UsersTable.vue:71 +msgctxt "Content/Profile/User role" +msgid "Staff member" +msgstr "ÄŒlen teamu" + +#: front/src/components/audio/PlayButton.vue:27 +#: src/components/radios/Button.vue:4 +msgctxt "*/Queue/Button.Label/Short, Verb" +msgid "Start radio" +msgstr "Spustit radio" + +#: front/src/components/About.vue:170 src/components/Home.vue:53 +#: front/src/views/admin/Settings.vue:87 +msgctxt "Content/Home/Header" +msgid "Statistics" +msgstr "Statistiky" + +#: front/src/views/admin/moderation/AccountsDetail.vue:510 +msgctxt "Content/Moderation/Help text" +msgid "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this account" +msgstr "Statistiky jsou generovány na základÄ› aktivity a obsahu na vaÅ¡Ã instanci. Nereflektujà obecnou aktivitu tohoto úÄtu." + +#: front/src/views/admin/moderation/DomainsDetail.vue:418 +msgctxt "Content/Moderation/Help text" +msgid "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this domain" +msgstr "Statistiky jsou generovány na základÄ› aktivity a obsahu na vaÅ¡Ã instanci. Nereflektujà obecnou aktivitu této domény." + +#: front/src/views/admin/library/AlbumDetail.vue:346 +#: front/src/views/admin/library/ArtistDetail.vue:345 +#: front/src/views/admin/library/LibraryDetail.vue:356 +#: front/src/views/admin/library/TagDetail.vue:210 +#: front/src/views/admin/library/TrackDetail.vue:389 +#: front/src/views/admin/library/UploadDetail.vue:335 +msgctxt "Content/Moderation/Help text" +msgid "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" +msgstr "Statistiky jsou generovány na základÄ› aktivity a obsahu na vaÅ¡Ã instanci. Nereflektujà obecnou aktivitu tohoto objektu." + +#: front/src/components/library/FileUpload.vue:95 +#: front/src/components/manage/library/EditsCardList.vue:12 +#: front/src/components/manage/moderation/ReportCard.vue:57 +#: front/src/components/manage/users/InvitationsTable.vue:17 +#: front/src/components/manage/users/InvitationsTable.vue:39 +#: front/src/components/manage/users/UsersTable.vue:43 +#: front/src/views/admin/moderation/DomainsDetail.vue:152 +#: front/src/views/admin/moderation/ReportsList.vue:14 +#: front/src/views/content/libraries/Detail.vue:28 +msgctxt "*/*/*" +msgid "Status" +msgstr "Stav" + +#: front/src/components/Sidebar.vue:178 src/components/radios/Button.vue:3 +msgctxt "*/Player/Button.Label/Short, Verb" +msgid "Stop radio" +msgstr "Zastavit rádio" + +#: front/src/components/SetInstanceModal.vue:23 +msgctxt "*/*/Button.Label/Verb" +msgid "Submit" +msgstr "Odeslat" + +#: front/src/components/library/EditForm.vue:110 +msgctxt "Content/Library/Button.Label/Verb" +msgid "Submit and apply edit" +msgstr "Odeslat a aplikovat úpravu" + +#: front/src/components/library/EditForm.vue:7 +msgctxt "Content/Library/Button.Label" +msgid "Submit another edit" +msgstr "Odeslat dalšà úpravu" + +#: front/src/components/moderation/ReportModal.vue:64 +msgctxt "Popup/*/Button.Label" +msgid "Submit report" +msgstr "Odeslat hlášenÃ" + +#: front/src/components/library/EditForm.vue:111 +msgctxt "Content/Library/Button.Label/Verb" +msgid "Submit suggestion" +msgstr "Odeslat návrh" + +#: front/src/components/manage/moderation/ReportCard.vue:17 +msgctxt "Content/Moderation/*" +msgid "Submitted by" +msgstr "Odeslal" + +#: front/src/views/admin/Settings.vue:86 +msgctxt "Content/Admin/Menu" +msgid "Subsonic" +msgstr "Subsonic" + +#: front/src/components/auth/SubsonicTokenForm.vue:2 +msgctxt "Content/Settings/Title" +msgid "Subsonic API password" +msgstr "Heslo k Subsonic API" + +#: front/src/components/library/EditForm.vue:38 +msgctxt "Content/Library/Paragraph" +msgid "Suggest a change using the form below." +msgstr "NavrhnÄ›te zmÄ›nu prostÅ™ednictvÃm formuláře nÞe." + +#: front/src/components/library/AlbumEdit.vue:5 +msgctxt "Content/*/Title" +msgid "Suggest an edit on this album" +msgstr "NavrhnÄ›te úpravu u tohoto alba" + +#: front/src/components/library/ArtistEdit.vue:5 +msgctxt "Content/*/Title" +msgid "Suggest an edit on this artist" +msgstr "NavrhnÄ›te úpravu u tohoto interpreta" + +#: front/src/components/library/TrackEdit.vue:5 +msgctxt "Content/*/Title" +msgid "Suggest an edit on this track" +msgstr "NavrhnÄ›te úpravu u této stopy" + +#: front/src/components/SetInstanceModal.vue:31 +msgctxt "Popup/Instance/List.Label" +msgid "Suggested choices" +msgstr "Navržené volby" + +#: front/src/components/library/FileUpload.vue:3 +msgctxt "Content/Library/Tab.Title/Short" +msgid "Summary" +msgstr "ShrnutÃ" + +#: front/src/components/library/EditForm.vue:99 +msgctxt "*/*/*" +msgid "Summary (optional)" +msgstr "Shrnutà (volitelné)" + +#: front/src/components/Footer.vue:47 +msgctxt "Footer/*/Listitem.Link" +msgid "Support forum" +msgstr "Fórum podpory" + +#: front/src/views/Notifications.vue:10 +msgctxt "Content/Notifications/Header" +msgid "Support this Funkwhale pod" +msgstr "PodpoÅ™te tento Funkwhale pod" + +#: front/src/components/library/FileUpload.vue:85 +msgctxt "Content/Library/Paragraph" +msgid "Supported extensions: %{ extensions }" +msgstr "Podporované pÅ™Ãpony: %{ extensions }" + +#: front/src/components/playlists/Editor.vue:9 +msgctxt "Content/Playlist/Paragraph" +msgid "Syncing changes to server…" +msgstr "Synchronizace zmÄ›n na server…" + +#: front/src/components/audio/SearchBar.vue:35 +msgctxt "*/*/*/Noun" +msgid "Tag" +msgstr "Tag" + +#: front/src/views/admin/library/TagDetail.vue:61 +msgctxt "Content/Moderation/Title" +msgid "Tag data" +msgstr "Tagy" + +#: front/src/components/library/Albums.vue:23 +#: src/components/library/Artists.vue:15 +#: front/src/views/admin/library/Base.vue:23 +#: src/views/admin/library/TagsList.vue:24 front/src/edits.js:24 +#: src/edits.js:50 src/edits.js:91 src/entities.js:120 +msgctxt "*/*/*/Noun" +msgid "Tags" +msgstr "Tagy" + +#: front/src/components/mixins/Translations.vue:44 +#: front/src/components/mixins/Translations.vue:45 +msgctxt "Content/Moderation/Dropdown" +msgid "Takedown request" +msgstr "Požadavek o odstranÄ›nÃ" + +#: front/src/components/About.vue:35 src/components/About.vue:61 +msgctxt "Content/About/Header" +msgid "Terms and privacy policy" +msgstr "PodmÃnky a zásady ochrany osobnÃch údajů" + +#: front/src/components/audio/EmbedWizard.vue:35 +#: front/src/components/common/CopyInput.vue:3 +msgctxt "Content/*/Paragraph" +msgid "Text copied to clipboard!" +msgstr "Text vložen do schránky!" + +#: front/src/views/admin/library/AlbumDetail.vue:81 +msgctxt "Content/Moderation/Paragraph" +msgid "The album will be removed, as well as associated uploads, tracks, favorites and listening history. This action is irreversible." +msgstr "Album bude odstranÄ›no, spoleÄnÄ› se souvisejÃcÃmi nahranými soubory, stopami, oblÃbenými položkami a historià poslechu. Tato akce je nevratná." + +#: front/src/components/auth/Authorize.vue:39 +msgctxt "Content/Auth/Paragraph" +msgid "The application is also requesting the following unknown permissions:" +msgstr "Aplikace dále požaduje následujÃcà neznámá oprávnÄ›nÃ:" + +#: front/src/views/admin/library/ArtistDetail.vue:79 +msgctxt "Content/Moderation/Paragraph" +msgid "The artist will be removed, as well as associated uploads, tracks, albums, favorites and listening history. This action is irreversible." +msgstr "Interpret bude odstranÄ›n, spoleÄnÄ› se souvisejÃcÃmi nahranými soubory, stopami, alby, oblÃbenými položkami a historià poslechu. Tato akce je nevratná." + +#: front/src/components/Footer.vue:61 +msgctxt "Footer/*/List item.Link" +msgid "The funkwhale logo was kindly designed and provided by Francis Gading." +msgstr "Logo Funkwhale vytvoÅ™il a poskytl Francis Gading." + +#: front/src/components/SetInstanceModal.vue:8 +msgctxt "Popup/Instance/Error message.List item" +msgid "The given address is not a Funkwhale server" +msgstr "Na zadané adrese neběžà žádný Funkwhale server" + +#: front/src/views/content/libraries/Form.vue:34 +msgctxt "Popup/Library/Paragraph" +msgid "The library and all its tracks will be deleted. This can not be undone." +msgstr "Knihovna a veÅ¡kerý jejà obsah budou odstranÄ›ny. Tato akce je nevratná." + +#: front/src/views/admin/library/LibraryDetail.vue:61 +msgctxt "Content/Moderation/Paragraph" +msgid "The library will be removed, as well as associated uploads, and follows. This action is irreversible." +msgstr "Knihovna bude odstranÄ›na, spoleÄnÄ› se souvisejÃcÃmi nahranými soubory a sledovánÃmi. Tato akce je nevratná." + +#: front/src/components/library/ImportStatusModal.vue:140 +msgctxt "Popup/Import/Error.Label" +msgid "The metadata included in the file is invalid or some mandatory fields are missing." +msgstr "Metadata v souboru jsou neplatná, nebo nÄ›které povinné položky chybÃ." + +#: front/src/components/library/FileUpload.vue:38 +msgctxt "Content/Library/List item" +msgid "The music files you are uploading are tagged properly." +msgstr "Nahrávané hudebnà soubory jsou otagovány korektnÄ›." + +#: front/src/components/audio/Player.vue:65 +msgctxt "Sidebar/Player/Error message.Paragraph" +msgid "The next track will play automatically in a few seconds…" +msgstr "DalÅ¡Ã stopa se automaticky spustà za nÄ›kolik sekund…" + +#: front/src/components/manage/moderation/NotesThread.vue:27 +msgctxt "Content/Moderation/Paragraph" +msgid "The note will be removed. This action is irreversible." +msgstr "Poznámka bude ostranÄ›na. Tato akce je nevratná." + +#: front/src/components/manage/moderation/ReportCard.vue:120 +msgctxt "Content/Moderation/Message" +msgid "The object associated with this report was deleted." +msgstr "Objekt náležÃcà k tomuto hlášenà byl odstranÄ›n." + +#: front/src/components/playlists/Form.vue:14 +msgctxt "Content/Playlist/Error message.Title" +msgid "The playlist could not be created" +msgstr "Playlist nemůže být vytvoÅ™en" + +#: front/src/components/federation/FetchButton.vue:37 +msgctxt "*/*/Error" +msgid "The remote server answered with HTTP %{ status }" +msgstr "Vzdálený server vrátil odpovÄ›Ä HTTP %{ status }" + +#: front/src/components/federation/FetchButton.vue:13 +msgctxt "Popup/*/Message.Content" +msgid "The remote server answered, but returned data was unsupported by Funkwhale." +msgstr "Vzdálený server odpovÄ›dÄ›l, ale vrácená data nejsou podporována Funkwhale." + +#: front/src/components/federation/FetchButton.vue:44 +msgctxt "*/*/Error" +msgid "The remote server didn't respond quickly enough" +msgstr "Vzdálený server neodpovÄ›dÄ›l dostateÄnÄ› rychle" + +#: front/src/components/federation/FetchButton.vue:50 +msgctxt "*/*/Error" +msgid "The remote server returned invalid JSON or JSON-LD data" +msgstr "Vzdálený server vrátil neplatná JSON nebo JSON-LD data" + +#: front/src/components/manage/library/AlbumsTable.vue:189 +msgctxt "Popup/*/Paragraph" +msgid "The selected albums will be removed, as well as associated tracks, uploads, favorites and listening history. This action is irreversible." +msgstr "Vybraná alba budou odstranÄ›na, spoleÄnÄ› se souvisejÃcÃmi nahranými soubory, stopami, oblÃbenými položkami a historià poslechu. Tato akce je nevratná." + +#: front/src/components/manage/library/ArtistsTable.vue:179 +msgctxt "Popup/*/Paragraph" +msgid "The selected artist will be removed, as well as associated uploads, tracks, albums, favorites and listening history. This action is irreversible." +msgstr "Vybraný interpret bude odstranÄ›n, spoleÄnÄ› se souvisejÃcÃmi nahranými soubory, stopami, alby, oblÃbenými položkami a historià poslechu. Tato akce je nevratná." + +#: front/src/components/manage/library/LibrariesTable.vue:206 +msgctxt "Popup/*/Paragraph" +msgid "The selected library will be removed, as well as associated uploads and follows. This action is irreversible." +msgstr "Vybraná knihovna bude odstranÄ›na, spoleÄnÄ› se souvisejÃcÃmi nahranými soubory a sledovánÃmi. Tato akce je nevratná." + +#: front/src/components/manage/library/TagsTable.vue:180 +msgctxt "Popup/*/Paragraph" +msgid "The selected tag will be removed and unlinked with existing content, if any. This action is irreversible." +msgstr "Zvolený tag bude odstranÄ›n vÄetnÄ› vÅ¡ech pÅ™Ãpadných vazeb na existujÃcà obsah. Tato akce je nevratná." + +#: front/src/components/manage/library/TracksTable.vue:189 +msgctxt "Popup/*/Paragraph" +msgid "The selected tracks will be removed, as well as associated uploads, favorites and listening history. This action is irreversible." +msgstr "Vybrané stopy budou odstranÄ›ny, spoleÄnÄ› se souvisejÃcÃmi nahranými soubory, oblÃbenými položkami a historià poslechu. Tato akce je nevratná." + +#: front/src/components/manage/library/UploadsTable.vue:256 +msgctxt "Popup/*/Paragraph" +msgid "The selected upload will be removed. This action is irreversible." +msgstr "Vybrané nahrané soubory budou odstranÄ›ny. Tato akce je nevratná." + +#: front/src/components/SetInstanceModal.vue:7 +msgctxt "Popup/Instance/Error message.List item" +msgid "The server might be down" +msgstr "Server je možná vypnutý" + +#: front/src/components/auth/SubsonicTokenForm.vue:4 +msgctxt "Content/Settings/Paragraph" +msgid "The Subsonic API is not available on this Funkwhale instance." +msgstr "Subsonic API nenà na této instanci dostupné." + +#: front/src/components/library/EditCard.vue:96 +msgctxt "Popup/Library/Paragraph" +msgid "The suggestion will be completely removed, this action is irreversible." +msgstr "DoporuÄenà bude kompletnÄ› odstranÄ›no, tato akce je nevratná." + +#: front/src/views/admin/library/TagDetail.vue:44 +msgctxt "Content/Moderation/Paragraph" +msgid "The tag will be removed and unlinked from any existing entity. This action is irreversible." +msgstr "Tag bude odstranÄ›n vÄetnÄ› vÅ¡ech vazeb na existujÃcà položky. Tato akce je nevratná." + +#: front/src/components/playlists/PlaylistModal.vue:34 +msgctxt "Popup/Playlist/Error message.Title" +msgid "The track can't be added to a playlist" +msgstr "Stopu nelze pÅ™idat do playlistu" + +#: front/src/components/audio/Player.vue:62 +msgctxt "Sidebar/Player/Error message.Title" +msgid "The track cannot be loaded" +msgstr "Stopu nelze naÄÃst" + +#: front/src/views/admin/library/TrackDetail.vue:80 +msgctxt "Content/Moderation/Paragraph" +msgid "The track will be removed, as well as associated uploads, favorites and listening history. This action is irreversible." +msgstr "Stopa bude odstranÄ›na, spoleÄnÄ› se vÅ¡emi souvisejÃcÃmi nahranými soubory, oblÃbenými a historià poslechů. Tato akce je nevratná." + +#: front/src/views/admin/library/UploadDetail.vue:68 +msgctxt "Content/Moderation/Paragraph" +msgid "The upload will be removed. This action is irreversible." +msgstr "Nahraný soubor bude odstranÄ›n. Tato akce je nevratná." + +#: front/src/components/library/FileUpload.vue:42 +msgctxt "Content/Library/List item" +msgid "The uploaded music files are in OGG, Flac or MP3 format" +msgstr "Nahrané soubory jsou ve formátu OGG, Flac nebo MP3" + +#: front/src/views/content/Home.vue:4 +msgctxt "Content/Library/Paragraph" +msgid "There are various ways to grab new content and make it available here." +msgstr "Jsou různé cesty jak zÃskat nový obsah a zpÅ™Ãstupnit ho zde." + +#: front/src/components/manage/moderation/InstancePolicyForm.vue:66 +msgctxt "Popup/Moderation/Paragraph" +msgid "This action is irreversible." +msgstr "Tato akce je nevratná." + +#: front/src/components/library/AlbumDetail.vue:29 +msgctxt "Content/Album/Paragraph" +msgid "This album is present in the following libraries:" +msgstr "Toto album se vyskytuje v následujÃcÃch knihovnách:" + +#: front/src/components/library/ArtistDetail.vue:42 +msgctxt "Content/Artist/Paragraph" +msgid "This artist is present in the following libraries:" +msgstr "Tento interpret se vyskytuje v následujÃcÃch knihovnách:" + +#: front/src/components/manage/moderation/DomainsTable.vue:169 +msgctxt "Content/Moderation/Popup" +msgid "This domain is present in your allow-list" +msgstr "Tato doména se vyskytuje na vaÅ¡em seznamu povolených" + +#: front/src/views/admin/moderation/AccountsDetail.vue:84 +#: front/src/views/admin/moderation/DomainsDetail.vue:76 +msgctxt "Content/Moderation/Card.Title" +msgid "This domain is subject to specific moderation rules" +msgstr "Na tuto doménu jsou aplikována specifická pravidla moderace" + +#: front/src/components/manage/moderation/InstancePolicyModal.vue:16 +msgctxt "Content/Moderation/Card.Title" +msgid "This entity is subject to specific moderation rules" +msgstr "Na tuto entitu jsou aplikována specifická pravidla moderace" + +#: front/src/views/content/Home.vue:9 +msgctxt "Content/Library/Paragraph" +msgid "This instance offers up to %{quota} of storage space for every user." +msgstr "Tato instance nabÃzà každému uživateli až %{quota} diskového prostoru." + +#: front/src/components/auth/Settings.vue:300 +msgctxt "Popup/Settings/Paragraph" +msgid "This is irreversible and will permanently remove your data from our servers. You will we immediatly logged out." +msgstr "Tato akce je nevratná a trvale odstranà vÅ¡echna vaÅ¡e data ze serveru. Budete okamžitÄ› odhlášen." + +#: front/src/components/auth/Settings.vue:165 +msgctxt "Content/Settings/Paragraph" +msgid "This is the list of applications that have access to your account data." +msgstr "Tento seznam obsahuje vÅ¡echny aplikace které majà pÅ™Ãstup k datům vaÅ¡eho úÄtu." + +#: front/src/components/auth/Settings.vue:218 +msgctxt "Content/Settings/Paragraph" +msgid "This is the list of applications that you have created." +msgstr "Tento seznam obsahuje vÅ¡echny aplikace které jste vytvoÅ™ili." + +#: front/src/components/auth/Profile.vue:16 +msgctxt "Content/Profile/Button.Paragraph" +msgid "This is you!" +msgstr "To jste vy!" + +#: front/src/views/content/libraries/Form.vue:73 +msgctxt "Content/Library/Input.Placeholder" +msgid "This library contains my personal music, I hope you like it." +msgstr "Tato knihovna obsahuje mou hudbu, doufám že se vám lÃbÃ." + +#: front/src/views/content/remote/Card.vue:169 +msgctxt "Content/Library/Card.Help text" +msgid "This library is private and your approval from its owner is needed to access its content" +msgstr "Tato knihovna je soukromá a pro pÅ™Ãstup k nà je nutný souhlas vlastnÃka" + +#: front/src/views/content/remote/Card.vue:170 +msgctxt "Content/Library/Card.Help text" +msgid "This library is public and you can access its content freely" +msgstr "Tato knihovna je veÅ™ejná a jejà obsah je volnÄ› pÅ™Ãstupný" + +#: front/src/components/common/ActionTable.vue:47 +msgctxt "Modal/*/Paragraph" +msgid "This may affect a lot of elements or have irreversible consequences, please double check this is really what you want." +msgstr "Tato akce může ovlivnit mnoho prvků nebo může mÃt nevratné následky - prosÃm ujistÄ›te se, že si to opravdu pÅ™ejete." + +#: front/src/components/library/AlbumEdit.vue:8 +#: front/src/components/library/ArtistEdit.vue:8 +#: front/src/components/library/TrackEdit.vue:8 +msgctxt "Content/*/Message" +msgid "This object is managed by another server, you cannot edit it." +msgstr "Tento objekt je spravován jiným serverem, nemůžete ho upravovat." + +#: front/src/components/Home.vue:87 +msgctxt "Content/Home/Paragraph" +msgid "This pod runs Funkwhale, a community-driven project that lets you listen and share music and audio within a decentralized, open network." +msgstr "Tento \"pod\" provozuje Funkwhale - projekt podporovaný komunitou, umožňujÃcà poslouchat a sdÃlet hudbu v rámci otevÅ™ené, decentralizované sÃtÄ›." + +#: front/src/components/library/FileUpload.vue:51 +msgctxt "Content/Library/Paragraph" +msgid "This reference will be used to group imported files together." +msgstr "Tento odkaz bude použit pro seskupenà importovaných souborů." + +#: front/src/components/mixins/Translations.vue:33 +#: front/src/components/mixins/Translations.vue:34 +msgctxt "Content/Library/Help text" +msgid "This track could not be processed, please make sure it is tagged correctly" +msgstr "Tato stopa nemůže být zpracována, prosÃm zajistÄ›te jejà korektnà otagovánÃ" + +#: front/src/components/mixins/Translations.vue:29 +#: front/src/components/mixins/Translations.vue:30 +msgctxt "Content/Library/Help text" +msgid "This track has been uploaded, but hasn't been processed by the server yet" +msgstr "Tato stopa byla nahrána a Äeká na zpracovánà serverem" + +#: front/src/components/mixins/Translations.vue:25 +#: front/src/components/mixins/Translations.vue:26 +msgctxt "Content/Library/Help text" +msgid "This track is already present in one of your libraries" +msgstr "Tato stopa se již nacházà v nÄ›které z vaÅ¡ich knihoven" + +#: front/src/components/audio/PlayButton.vue:103 +msgctxt "*/Queue/Button/Title" +msgid "This track is not available in any library you have access to" +msgstr "Tato stopa nenà dostupná v žádné vám pÅ™Ãstupné knihovnÄ›" + +#: front/src/components/library/TrackDetail.vue:82 +msgctxt "Content/Track/Paragraph" +msgid "This track is present in the following libraries:" +msgstr "Tato stopa se nacházà v následujÃcÃch knihovnách:" + +#: front/src/views/playlists/Detail.vue:46 +msgctxt "Popup/Playlist/Paragraph" +msgid "This will completely delete this playlist and cannot be undone." +msgstr "KompletnÄ› a nevratnÄ› smaže tento playlist." + +#: front/src/views/radios/Detail.vue:27 +msgctxt "Popup/Radio/Paragraph" +msgid "This will completely delete this radio and cannot be undone." +msgstr "KompletnÄ› a nevratnÄ› smaže toto rádio." + +#: front/src/components/auth/SubsonicTokenForm.vue:55 +msgctxt "Popup/Settings/Paragraph" +msgid "This will completely disable access to the Subsonic API using from account." +msgstr "KompletnÄ› zakáže pÅ™Ãstup k Subsonic API pro tento úÄet." + +#: front/src/components/manage/moderation/ReportCard.vue:359 +msgctxt "Content/Moderation/Popup,Paragraph" +msgid "This will delete the object associated with this report and mark the report as resolved. The deletion is irreversible." +msgstr "Objekt souvisejÃcà s tÃmto hlášenÃm bude odstranÄ›n a hlášenà bude oznaÄeno jako vyÅ™eÅ¡ené. OdstranÄ›nà je nevratné." + +#: front/src/components/auth/SubsonicTokenForm.vue:40 +msgctxt "Popup/Settings/Paragraph" +msgid "This will log you out from existing devices that use the current password." +msgstr "Toto vás odhlásà z existujÃcÃch zaÅ™ÃzenÃ, které použÃvajà souÄasné heslo." + +#: front/src/components/auth/Settings.vue:253 +msgctxt "Popup/Settings/Paragraph" +msgid "This will permanently delete the application and all the associated tokens." +msgstr "KompletnÄ› odstranà aplikaci a vÅ¡echny pÅ™idružené tokeny." + +#: front/src/components/auth/Settings.vue:194 +msgctxt "Popup/Settings/Paragraph" +msgid "This will prevent this application from accessing the service on your behalf." +msgstr "Zabránà této aplikaci v pÅ™Ãstupu ke službÄ› pod vaÅ¡Ãm úÄtem." + +#: front/src/components/playlists/Editor.vue:54 +msgctxt "Popup/Playlist/Paragraph" +msgid "This will remove all tracks from this playlist and cannot be undone." +msgstr "Odstranà nevratnÄ› vÅ¡echny stopy z tohoto playlistu." + +#: front/src/components/audio/track/Table.vue:7 +#: front/src/components/manage/library/AlbumsTable.vue:39 +#: front/src/components/manage/library/TracksTable.vue:39 +#: front/src/views/admin/library/AlbumDetail.vue:105 +#: front/src/views/admin/library/TrackDetail.vue:104 +#: front/src/views/content/libraries/FilesTable.vue:55 src/edits.js:36 +#: front/src/edits.js:62 +msgctxt "*/*/*/Noun" +msgid "Title" +msgstr "Název" + +#: front/src/components/SetInstanceModal.vue:16 +msgctxt "Popup/Instance/Paragraph" +msgid "To continue, please select the Funkwhale instance you want to connect to. Enter the address directly, or select one of the suggested choices." +msgstr "Pro pokraÄovánà prosÃm zvolte Funkwhale instanci ke které se chcete pÅ™ipojit. Zadejte adresu pÅ™Ãmo, nebo vyberte jednu z nabÃzených možnostÃ." + +#: front/src/components/ShortcutsModal.vue:148 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Toggle favorite" +msgstr "PÅ™epnout pÅ™Ãznak OblÃbené" + +#: front/src/components/ShortcutsModal.vue:132 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Toggle mute" +msgstr "PÅ™epnout ztlumenÃ" + +#: front/src/components/ShortcutsModal.vue:136 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Toggle queue looping" +msgstr "PÅ™epnout opakovánà fronty" + +#: front/src/views/admin/library/AlbumDetail.vue:238 +#: front/src/views/admin/library/ArtistDetail.vue:226 +#: front/src/views/admin/library/LibraryDetail.vue:219 +#: front/src/views/admin/library/TrackDetail.vue:290 +#: front/src/views/admin/moderation/AccountsDetail.vue:329 +#: front/src/views/admin/moderation/DomainsDetail.vue:262 +msgctxt "Content/Moderation/Table.Label" +msgid "Total size" +msgstr "Celková velikost" + +#: front/src/views/content/libraries/Card.vue:68 +msgctxt "Content/Library/Card.Help text" +msgid "Total size of the files in this library" +msgstr "Celková velikost souborů v této knihovnÄ›" + +#: front/src/views/admin/moderation/DomainsDetail.vue:142 +msgctxt "Content/*/*" +msgid "Total users" +msgstr "Celkem uživatelů" + +#: front/src/components/audio/SearchBar.vue:34 +#: front/src/components/library/TrackBase.vue:188 +#: front/src/components/library/TrackDetail.vue:128 +#: front/src/components/metadata/Search.vue:138 +#: src/components/mixins/Report.vue:28 +#: front/src/views/admin/library/UploadDetail.vue:199 +#: front/src/components/mixins/Report.vue:29 +msgctxt "*/*/*/Noun" +msgid "Track" +msgstr "Stopa" + +#: front/src/components/library/EditCard.vue:13 +msgctxt "Content/Library/Card/Short" +msgid "Track #%{ id } - %{ name }" +msgstr "Stopa #%{ id } - %{ name }" + +#: front/src/views/admin/library/TrackDetail.vue:97 +msgctxt "Content/Moderation/Title" +msgid "Track data" +msgstr "Data stopy" + +#: front/src/components/library/TrackDetail.vue:4 +msgctxt "Content/Track/Title/Noun" +msgid "Track information" +msgstr "Informace stopy" + +#: front/src/components/mixins/Translations.vue:60 +#: front/src/components/mixins/Translations.vue:61 +msgctxt "Content/*/Dropdown/Noun" +msgid "Track name" +msgstr "Název stopy" + +#: front/src/components/library/AlbumDetail.vue:19 +#: front/src/components/library/TagDetail.vue:36 +#: front/src/components/manage/library/AlbumsTable.vue:42 +#: front/src/components/manage/library/ArtistsTable.vue:42 +#: front/src/components/manage/library/TagsTable.vue:44 +#: front/src/components/playlists/PlaylistModal.vue:47 +#: front/src/views/admin/library/AlbumDetail.vue:268 +#: front/src/views/admin/library/ArtistDetail.vue:266 +#: front/src/views/admin/library/Base.vue:14 +#: front/src/views/admin/library/LibraryDetail.vue:248 +#: front/src/views/admin/library/TagDetail.vue:143 +#: front/src/views/admin/library/TracksList.vue:24 +#: front/src/views/admin/moderation/AccountsDetail.vue:374 +#: front/src/views/admin/moderation/DomainsDetail.vue:311 +#: front/src/views/content/Base.vue:8 src/views/content/libraries/Detail.vue:8 +#: front/src/views/playlists/Detail.vue:76 src/views/radios/Detail.vue:34 +msgctxt "*/*/*" +msgid "Tracks" +msgstr "Stopy" + +#: front/src/components/library/ArtistDetail.vue:33 +msgctxt "Content/Artist/Title" +msgid "Tracks by this artist" +msgstr "Stopy od tohoto interpreta" + +#: front/src/components/library/radios/Filter.vue:44 +msgctxt "Popup/Radio/Title/Noun" +msgid "Tracks matching filter" +msgstr "Stopy které odpovÃdajà filtru" + +#: front/src/components/library/TrackDetail.vue:57 +#: front/src/components/manage/moderation/ReportCard.vue:134 +#: front/src/views/admin/library/UploadDetail.vue:250 +#: front/src/views/admin/moderation/AccountsDetail.vue:181 +msgctxt "Content/Track/Table.Label/Noun" +msgid "Type" +msgstr "Typ" + +#: front/src/components/manage/moderation/AccountsTable.vue:44 +#: front/src/components/manage/moderation/DomainsTable.vue:50 +msgctxt "Content/Moderation/Table.Label/Short" +msgid "Under moderation rule" +msgstr "Pod moderaÄnÃm pravidlem" + +#: front/src/components/ShortcutsModal.vue:68 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Unfocus searchbar" +msgstr "Opustit vyhledávacà pole" + +#: front/src/views/content/remote/Card.vue:122 +#: src/views/content/remote/Card.vue:127 +msgctxt "*/Library/Button.Label/Verb" +msgid "Unfollow" +msgstr "PÅ™estat sledovat" + +#: front/src/views/content/remote/Card.vue:123 +msgctxt "Popup/Library/Title" +msgid "Unfollow this library?" +msgstr "PÅ™estat sledovat tuto knihovnu?" + +#: front/src/components/federation/FetchButton.vue:54 +#: front/src/components/federation/FetchButton.vue:55 +#: front/src/components/library/ImportStatusModal.vue:144 +msgctxt "*/*/Error" +msgid "Unknown error" +msgstr "Neznámá chyba" + +#: front/src/components/audio/Player.vue:656 +msgctxt "Sidebar/Player/Icon.Tooltip/Verb" +msgid "Unmute" +msgstr "ZruÅ¡it ztiÅ¡enÃ" + +#: front/src/components/manage/moderation/ReportCard.vue:225 +msgctxt "Content/*/Button.Label" +msgid "Unresolve" +msgstr "Nenà vyÅ™eÅ¡eno" + +#: front/src/components/manage/moderation/ReportCard.vue:67 +#: front/src/views/admin/moderation/ReportsList.vue:23 +msgctxt "Content/*/*/Short" +msgid "Unresolved" +msgstr "NevyÅ™eÅ¡eno" + +#: front/src/components/manage/moderation/InstancePolicyForm.vue:57 +msgctxt "Content/Moderation/Card.Button.Label/Verb" +msgid "Update" +msgstr "Aktualizovat" + +#: front/src/components/auth/ApplicationForm.vue:64 +msgctxt "Content/Applications/Button.Label/Verb" +msgid "Update application" +msgstr "Aktualizovat aplikaci" + +#: front/src/components/auth/Settings.vue:50 +msgctxt "Content/Settings/Button.Label/Verb" +msgid "Update avatar" +msgstr "Aktualizovat avatara" + +#: front/src/views/content/libraries/Form.vue:25 +msgctxt "Content/Library/Button.Label/Verb" +msgid "Update library" +msgstr "Aktualizovat knihovnu" + +#: front/src/components/playlists/Form.vue:33 +msgctxt "Content/Playlist/Button.Label/Verb" +msgid "Update playlist" +msgstr "Aktualizovat playlist" + +#: front/src/components/auth/Settings.vue:27 +msgctxt "Content/Settings/Button.Label/Verb" +msgid "Update settings" +msgstr "Aktualizovat nastavenÃ" + +#: front/src/views/auth/PasswordResetConfirm.vue:21 +msgctxt "Content/Signup/Button.Label" +msgid "Update your password" +msgstr "Aktualizovat vaÅ¡e heslo" + +#: front/src/views/content/libraries/Card.vue:45 +#: front/src/views/content/libraries/DetailArea.vue:24 +msgctxt "Content/Library/Card.Button.Label/Verb" +msgid "Upload" +msgstr "Nahrát" + +#: front/src/components/auth/Settings.vue:45 +msgctxt "Content/Settings/Title/Verb" +msgid "Upload a new avatar" +msgstr "Nahrát nového avatara" + +#: front/src/views/content/Home.vue:6 +msgctxt "Content/Library/Title/Verb" +msgid "Upload audio content" +msgstr "Nahrát nový hudebnà obsah" + +#: front/src/views/admin/library/UploadDetail.vue:85 +msgctxt "Content/Moderation/Title" +msgid "Upload data" +msgstr "Nahrát data" + +#: front/src/views/content/libraries/FilesTable.vue:58 +msgctxt "*/*/*/Noun" +msgid "Upload date" +msgstr "Datum nahránÃ" + +#: front/src/components/library/FileUpload.vue:258 +msgctxt "Content/Library/Help text" +msgid "Upload denied, ensure the file is not too big and that you have not reached your quota" +msgstr "Nahránà zamÃtnuto, zkontrolujte zda soubor nenà pÅ™ÃliÅ¡ velký a že nedoÅ¡lo k vyÄerpánà povolené kapacity" + +#: front/src/components/library/ImportStatusModal.vue:8 +msgctxt "Popup/Import/Message" +msgid "Upload is still pending and will soon be processed by the server." +msgstr "Nahrávánà je ve frontÄ› a bude brzy serverem zpracováno." + +#: front/src/views/content/Home.vue:7 +msgctxt "Content/Library/Paragraph" +msgid "Upload music files (MP3, OGG, FLAC, etc.) from your personal library directly from your browser to enjoy them here." +msgstr "Nahrajte hudebnà soubory (MP3, OGG, FLAC a dalÅ¡Ã) z vaÅ¡Ã osobnà sbÃrky pÅ™Ãmo ze svého prohlÞeÄe a mÄ›jte je tu k dispozici." + +#: front/src/components/library/FileUpload.vue:30 +msgctxt "Content/Library/Title/Verb" +msgid "Upload new tracks" +msgstr "Nahrát nové stopy" + +#: front/src/components/About.vue:99 +#: front/src/views/admin/moderation/AccountsDetail.vue:309 +msgctxt "*/*/*" +msgid "Upload quota" +msgstr "Vyhrazený prostor pro nahrávánÃ" + +#: front/src/components/library/FileUpload.vue:267 +msgctxt "Content/Library/Help text" +msgid "Upload timeout, please try again" +msgstr "VyprÅ¡el Äas nahrávánÃ, zkuste to prosÃm znovu" + +#: front/src/components/library/ImportStatusModal.vue:14 +msgctxt "Popup/Import/Message" +msgid "Upload was skipped because a similar one is already available in one of your libraries." +msgstr "Nahrávánà bylo pÅ™eskoÄeno, protože podobný soubor se již nacházà v jedné z vaÅ¡ich knihoven." + +#: front/src/components/library/ImportStatusModal.vue:11 +msgctxt "Popup/Import/Message" +msgid "Upload was successfully processed by the server." +msgstr "Nahrávánà bylo serverem úspěšnÄ› zpracováno." + +#: front/src/components/library/FileUpload.vue:109 +msgctxt "Content/Library/Table" +msgid "Uploaded" +msgstr "Nahráno" + +#: front/src/components/library/FileUpload.vue:5 +msgctxt "Content/Library/Tab.Title/Short" +msgid "Uploading" +msgstr "NahrávánÃ" + +#: front/src/components/library/FileUpload.vue:112 +msgctxt "Content/Library/Table" +msgid "Uploading…" +msgstr "NahrávánÃ…" + +#: front/src/components/manage/library/LibrariesTable.vue:52 +#: front/src/components/manage/moderation/AccountsTable.vue:41 +#: front/src/components/mixins/Translations.vue:75 +#: front/src/views/admin/library/AlbumDetail.vue:258 +#: front/src/views/admin/library/ArtistDetail.vue:246 +#: front/src/views/admin/library/Base.vue:20 +#: front/src/views/admin/library/LibraryDetail.vue:258 +#: front/src/views/admin/library/TrackDetail.vue:310 +#: front/src/views/admin/library/UploadsList.vue:24 +#: front/src/views/admin/moderation/AccountsDetail.vue:349 +#: front/src/views/admin/moderation/DomainsDetail.vue:281 +#: front/src/components/mixins/Translations.vue:76 +msgctxt "*/*/*" +msgid "Uploads" +msgstr "Nahrané soubory" + +#: front/src/components/auth/ApplicationForm.vue:16 +msgctxt "Content/Applications/Help Text" +msgid "Use \"urn:ietf:wg:oauth:2.0:oob\" as a redirect URI if your application is not served on the web." +msgstr "Použijte \"urn:ietf:wg:oauth:2.0:oob\" jako URI pro pÅ™esmÄ›rovánÃ, pokud vaÅ¡e aplikace nenà pÅ™Ãstupná na webu." + +#: front/src/components/Footer.vue:16 +msgctxt "Footer/*/List item.Link" +msgid "Use another instance" +msgstr "PoužÃt jinou instanci" + +#: front/src/components/Home.vue:146 +msgctxt "Content/Home/Link" +msgid "Use Funkwhale on other devices with our apps" +msgstr "PoužÃvejte Funkwhale na dalÅ¡Ãch zaÅ™ÃzenÃch s naÅ¡imi aplikacemi" + +#: front/src/components/moderation/ReportModal.vue:44 +msgctxt "*/*/Field,Help" +msgid "Use this field to provide additional context to the moderator that will handle your report." +msgstr "Použijte toto pole pro poskytnutà doplňujÃcÃch informacà pro moderátora, který bude zpracovávat vaÅ¡e hlášenÃ." + +#: front/src/views/auth/PasswordReset.vue:12 +msgctxt "Content/Signup/Paragraph" +msgid "Use this form to request a password reset. We will send an email to the given address with instructions to reset your password." +msgstr "Použijte tento formulář pro žádost o reset hesla. Na zadanou adresu bude odeslán email s instrukcemi pro zmÄ›nu vaÅ¡eho hesla." + +#: front/src/components/moderation/ReportModal.vue:18 +msgctxt "*/Moderation/Popup,Paragraph" +msgid "Use this form to submit a report to our moderation team." +msgstr "Použijte tento formulář pro odeslánà hlášenà naÅ¡emu týmu moderátorů." + +#: front/src/components/manage/moderation/InstancePolicyForm.vue:111 +msgctxt "Content/Moderation/Help text" +msgid "Use this setting to temporarily enable/disable the policy without completely removing it." +msgstr "Použijte tuto volbu pro doÄasnou (de)aktivaci zásady, bez jejÃho odstranÄ›nÃ." + +#: front/src/components/manage/users/InvitationsTable.vue:49 +msgctxt "Content/Admin/Table" +msgid "Used" +msgstr "Využito" + +#: front/src/components/Home.vue:125 +msgctxt "Content/Home/Header" +msgid "Useful links" +msgstr "UžiteÄné odkazy" + +#: front/src/views/content/libraries/Detail.vue:26 +msgctxt "Content/Library/Table.Label" +msgid "User" +msgstr "Uživatel" + +#: front/src/components/Home.vue:154 +msgctxt "Content/Home/Link" +msgid "User guides" +msgstr "Uživatelské pÅ™ÃruÄky" + +#: front/src/views/admin/Settings.vue:88 +msgctxt "Content/Admin/Menu" +msgid "User Interface" +msgstr "Uživatelské rozhranÃ" + +#: front/src/components/library/AlbumDetail.vue:26 +#: front/src/components/library/ArtistDetail.vue:39 +#: front/src/components/library/TrackDetail.vue:79 +msgctxt "Content/*/Title/Noun" +msgid "User libraries" +msgstr "Knihovny uživatele" + +#: front/src/components/library/Radios.vue:20 +msgctxt "Content/Radio/Title" +msgid "User radios" +msgstr "Rádia uživatele" + +#: front/src/components/auth/SignupForm.vue:15 +#: front/src/components/manage/users/UsersTable.vue:37 +#: front/src/components/mixins/Translations.vue:71 +#: front/src/views/admin/moderation/AccountsDetail.vue:114 +#: front/src/components/mixins/Translations.vue:72 +msgctxt "Content/*/*" +msgid "Username" +msgstr "Uživatelské jméno" + +#: front/src/components/auth/LoginForm.vue:11 +msgctxt "Content/Login/Input.Label/Noun" +msgid "Username or email" +msgstr "Uživatelské jméno nebo email" + +#: front/src/components/Sidebar.vue:106 +#: front/src/components/manage/moderation/DomainsTable.vue:47 +#: front/src/components/mixins/Translations.vue:73 +#: src/views/admin/Settings.vue:81 front/src/views/admin/users/Base.vue:5 +#: src/views/admin/users/UsersList.vue:21 +#: front/src/components/mixins/Translations.vue:74 +msgctxt "*/*/*/Noun" +msgid "Users" +msgstr "Uživatelé" + +#: front/src/components/Home.vue:110 +msgctxt "Content/Home/Paragraph" +msgid "Users on this pod also get %{ quota } of free storage to upload their own content!" +msgstr "Uživatelé tohoto podu majà také k dispozici %{ quota } volného prostoru pro nahránà vlastnÃho obsahu!" + +#: front/src/components/Footer.vue:29 +msgctxt "Footer/*/Title" +msgid "Using Funkwhale" +msgstr "Použità Funkwhale" + +#: front/src/components/Footer.vue:13 +msgctxt "Footer/*/List item" +msgid "Version %{version}" +msgstr "Verze %{version}" + +#: front/src/views/content/libraries/Quota.vue:29 +#: front/src/views/content/libraries/Quota.vue:56 +#: front/src/views/content/libraries/Quota.vue:82 +msgctxt "Content/Library/Link/Verb" +msgid "View files" +msgstr "Zobrazit soubory" + +#: front/src/components/library/AlbumBase.vue:95 +#: front/src/components/library/ArtistBase.vue:107 +#: front/src/components/library/TrackBase.vue:111 +#: front/src/views/admin/library/AlbumDetail.vue:48 +#: front/src/views/admin/library/ArtistDetail.vue:46 +#: front/src/views/admin/library/LibraryDetail.vue:34 +#: front/src/views/admin/library/LibraryDetail.vue:45 +#: front/src/views/admin/library/TagDetail.vue:32 +#: front/src/views/admin/library/TrackDetail.vue:47 +#: front/src/views/admin/library/UploadDetail.vue:35 +#: front/src/views/admin/library/UploadDetail.vue:46 +#: front/src/views/admin/moderation/AccountsDetail.vue:37 +#: front/src/views/admin/moderation/AccountsDetail.vue:45 +#: front/src/views/admin/moderation/DomainsDetail.vue:30 +msgctxt "Content/Moderation/Link/Verb" +msgid "View in Django's admin" +msgstr "Zobrazit v administraci Django" + +#: front/src/components/Home.vue:169 +msgctxt "Content/Home/Link" +msgid "View more…" +msgstr "Zobrazit dalÅ¡Ã…" + +#: front/src/components/library/AlbumBase.vue:62 +#: front/src/components/library/ArtistBase.vue:73 +#: front/src/components/library/TrackBase.vue:78 +#: front/src/components/metadata/ArtistCard.vue:49 +#: front/src/components/metadata/ReleaseCard.vue:53 +msgctxt "Content/*/*/Clickable, Verb" +msgid "View on MusicBrainz" +msgstr "Zobrazit na MusicBrainz" + +#: front/src/components/manage/moderation/ReportCard.vue:124 +msgctxt "Content/Moderation/Link" +msgid "View public page" +msgstr "Zobrazit veÅ™ejnou stránku" + +#: front/src/components/manage/library/LibrariesTable.vue:11 +#: front/src/components/manage/library/LibrariesTable.vue:51 +#: front/src/components/manage/library/UploadsTable.vue:11 +#: front/src/components/manage/library/UploadsTable.vue:63 +#: front/src/views/admin/library/LibraryDetail.vue:94 +#: front/src/views/admin/library/UploadDetail.vue:101 +#: front/src/views/content/libraries/Form.vue:18 +msgctxt "*/*/*" +msgid "Visibility" +msgstr "Viditelnost" + +#: front/src/components/Home.vue:91 +msgctxt "Content/Home/Link" +msgid "Visit funkwhale.audio" +msgstr "NavÅ¡tÃvit funkwhale.audio" + +#: front/src/components/library/AlbumDetail.vue:4 +msgctxt "Content/Album/" +msgid "Volume %{ number }" +msgstr "Hlasitost %{ number }" + +#: front/src/components/federation/FetchButton.vue:69 +msgctxt "Popup/*/Loading.Title" +msgid "Waiting for result…" +msgstr "ÄŒekánà na výsledek…" + +#: front/src/components/auth/Settings.vue:285 +msgctxt "Content/Settings/Error message.Title" +msgid "We cannot delete your account" +msgstr "Nemůžeme smazat váš úÄet" + +#: front/src/components/auth/LoginForm.vue:3 +msgctxt "Content/Login/Error message.Title" +msgid "We cannot log you in" +msgstr "Nemůžeme vás pÅ™ihlásit" + +#: front/src/components/auth/ApplicationForm.vue:3 +msgctxt "Content/*/Error message.Title" +msgid "We cannot save your changes" +msgstr "Nemůžeme uložit vaÅ¡e zmÄ›ny" + +#: front/src/views/Notifications.vue:39 +msgctxt "Content/Notifications/Paragraph" +msgid "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!" +msgstr "VÅ¡imli jsme si že se zde již nÄ›jaký Äas nacházÃte. Pokud je pro vás Funkwhale pÅ™Ãnosný, pomozte nám ho prosÃm dále vylepÅ¡ovat!" + +#: front/src/components/library/FileUpload.vue:39 +msgctxt "Content/Library/Link" +msgid "We recommend using Picard for that purpose." +msgstr "DoporuÄujeme pro tyto úÄely použÃt MusicBrainz Picard." + +#: front/src/components/moderation/ReportModal.vue:35 +msgctxt "*/*/Field,Help" +msgid "We'll use this email if we need to contact you regarding this report." +msgstr "Použijeme uvedený email v pÅ™ÃpadÄ› potÅ™eby vás kontaktovat ohlednÄ› tohoto hlášenÃ." + +#: front/src/components/Home.vue:207 +msgctxt "Head/Home/Title" +msgid "Welcome" +msgstr "VÃtejte" + +#: front/src/components/Home.vue:5 +msgctxt "Content/Home/Header" +msgid "Welcome to %{ podName }!" +msgstr "VÃtejte na %{ podName }!" + +#: front/src/components/audio/EmbedWizard.vue:23 +msgctxt "Popup/Embed/Input.Label" +msgid "Widget height" +msgstr "Výška widgetu" + +#: front/src/components/audio/EmbedWizard.vue:16 +msgctxt "Popup/Embed/Input.Label" +msgid "Widget width" +msgstr "Å ÃÅ™ka widgetu" + +#: front/src/components/auth/ApplicationForm.vue:157 +msgctxt "Content/OAuth Scopes/Label/Verb" +msgid "Write" +msgstr "Zapsat" + +#: front/src/components/auth/Authorize.vue:21 +msgctxt "Content/Auth/Label/Noun" +msgid "Write-only" +msgstr "Pouze pro zápis" + +#: front/src/components/auth/ApplicationForm.vue:158 +msgctxt "Content/OAuth Scopes/Help Text" +msgid "Write-only access to user data" +msgstr "PÅ™Ãstup k uživatelským datům pouze pro zápis" + +#: front/src/components/Sidebar.vue:133 +#: front/src/components/manage/moderation/AccountsTable.vue:72 +#: front/src/components/manage/moderation/DomainsTable.vue:12 +#: front/src/components/manage/moderation/DomainsTable.vue:69 +#: front/src/views/admin/moderation/DomainsDetail.vue:109 +msgctxt "*/*/*" +msgid "Yes" +msgstr "Ano" + +#: front/src/components/auth/Logout.vue:8 +msgctxt "Content/Login/Button.Label" +msgid "Yes, log me out!" +msgstr "Ano, odhlaste mÄ›!" + +#: front/src/views/content/libraries/Form.vue:19 +msgctxt "Content/Library/Paragraph" +msgid "You are able to share your library with other people, regardless of its visibility." +msgstr "Můžete sdÃlet svou knihovnu s jinými lidmi, bez ohledu na jejà viditelnost." + +#: front/src/components/library/FileUpload.vue:32 +msgctxt "Content/Library/Paragraph" +msgid "You are about to upload music to your library. Before proceeding, please ensure that:" +msgstr "Chystáte se nahrát hudbu do své knihovny. PÅ™ed zahájenÃm prosÃm zajistÄ›te, že:" + +#: front/src/components/SetInstanceModal.vue:12 +msgctxt "Popup/Login/Paragraph" +msgid "You are currently connected to <a href=\"%{ url }\" target=\"_blank\">%{ hostname } <i class=\"external icon\"/></a>. If you continue, you will be disconnected from your current instance and all your local data will be deleted." +msgstr "MomentálnÄ› jste pÅ™ipojen k <a href=\"%{ url }\" target=\"_blank\">%{ hostname } <i class=\"external icon\"/></a>. Pokud budete pokraÄovat budete odpojeni z vaÅ¡Ã souÄasné instance a vÅ¡echna vaÅ¡e mÃstnà data budou odstranÄ›na." + +#: front/src/components/library/ArtistDetail.vue:6 +msgctxt "Content/Artist/Paragraph" +msgid "You are currently hiding content related to this artist." +msgstr "NÄ›který obsah souvisejÃcà s tÃmto interpretem je nastaven jako skrytý." + +#: front/src/components/auth/Logout.vue:7 +msgctxt "Content/Login/Paragraph" +msgid "You are currently logged in as %{ username }" +msgstr "Jste pÅ™ihlášen jako %{ username }" + +#: front/src/components/library/FileUpload.vue:35 +msgctxt "Content/Library/List item" +msgid "You are not uploading copyrighted content in a public library, otherwise you may be infringing the law" +msgstr "Nenahrávejte obsah chránÄ›ný copyrightem do veÅ™ejné knihovny, mohlo by dojÃt k poruÅ¡enà zákona" + +#: front/src/components/SetInstanceModal.vue:98 +msgctxt "*/Instance/Message" +msgid "You are now using the Funkwhale instance at %{ url }" +msgstr "PrávÄ› využÃváte Funkwhale instanci na adrese %{ url }" + +#: front/src/views/content/Home.vue:17 +msgctxt "Content/Library/Paragraph" +msgid "You can 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." +msgstr "Můžete sledovat knihovny jiných uživatelů pro zÃskánà pÅ™Ãstupu k nové hudbÄ›. VeÅ™ejné knihovny můžete zaÄÃt sledovat okamžitÄ›, privátnà knihovny vyžadujà schválenà vlastnÃka." + +#: front/src/components/moderation/FilterModal.vue:31 +msgctxt "Popup/Moderation/Paragraph" +msgid "You can manage and update your filters any time from your account settings." +msgstr "Můžete spravovat a aktualizovat své filtry kdykoliv v nastavenà vaÅ¡eho úÄtu." + +#: front/src/views/auth/EmailConfirm.vue:24 +msgctxt "Content/Signup/Paragraph" +msgid "You can now use the service without limitations." +msgstr "Nynà můžete službu využÃvat bez omezenÃ." + +#: front/src/components/auth/Settings.vue:278 +msgctxt "Content/Settings/Paragraph'" +msgid "You can permanently and irreversibly delete your account and all the associated data using the form below. You will be asked for confirmation." +msgstr "Můžete natrvalo a nevratnÄ› smazat svůj úÄet a vÅ¡echna souvisejÃcà data pomocà formuláře nÞe. Budete požádáni o dalÅ¡Ã potvrzenà akce." + +#: front/src/components/library/radios/Builder.vue:7 +msgctxt "Content/Radio/Paragraph" +msgid "You can use this interface to build your own custom radio, which will play tracks according to your criteria." +msgstr "Můžete použÃt toto rozhranà k výrobÄ› vlastnÃho rádia, které bude hrát hudbu dle vaÅ¡ich kritériÃ." + +#: front/src/components/auth/SubsonicTokenForm.vue:7 +msgctxt "Content/Settings/Paragraph" +msgid "You can use those to enjoy your playlist and music in offline mode, on your smartphone or tablet, for instance." +msgstr "Můžete je použÃt k poslechu oblÃbené hudby v offline režimu, napÅ™Ãklad na telefonu nebo tabletu." + +#: front/src/components/auth/Settings.vue:202 +msgctxt "Content/Applications/Paragraph" +msgid "You don't have any application connected with your account." +msgstr "K vaÅ¡emu úÄtu nejsou pÅ™ipojeny žádné aplikace." + +#: front/src/components/auth/Settings.vue:261 +msgctxt "Content/Applications/Paragraph" +msgid "You don't have any configured application yet." +msgstr "ZatÃm nemáte nastaveny žádné aplikace." + +#: front/src/views/admin/moderation/AccountsDetail.vue:75 +msgctxt "Content/Moderation/Card.Title" +msgid "You don't have any rule in place for this account." +msgstr "Pro tento úÄet nemáte aplikována žádná pravidla." + +#: front/src/views/admin/moderation/DomainsDetail.vue:67 +msgctxt "Content/Moderation/Card.Title" +msgid "You don't have any rule in place for this domain." +msgstr "Pro tuto doménu nemáte aplikována žádná pravidla." + +#: front/src/components/library/EditForm.vue:52 +msgctxt "Content/Library/Paragraph" +msgid "You don't have the permission to edit this object, but you can suggest changes. Once submitted, suggestions will be reviewed before approval." +msgstr "Nemáte oprávnÄ›nà upravovat tento objekt, ale můžete navrhnout jeho zmÄ›nu. Návrh na zmÄ›nu bude po odeslánà zkontrolován a pÅ™ÃpadnÄ› schválen." + +#: front/src/components/Sidebar.vue:175 +msgctxt "Sidebar/Player/Title" +msgid "You have a radio playing" +msgstr "Hraje vám rádio" + +#: front/src/components/audio/Player.vue:69 +msgctxt "Sidebar/Player/Error message.Paragraph" +msgid "You may have a connectivity issue." +msgstr "Možná máte problémy s pÅ™ipojenÃm." + +#: front/src/components/auth/Settings.vue:100 +msgctxt "Popup/Settings/List item" +msgid "You will be logged out from this session and have to log in with the new one" +msgstr "Budete odhlášeni z tohoto sezenà a musÃte se pÅ™ihlásit znovu" + +#: front/src/components/auth/Authorize.vue:51 +msgctxt "Content/Auth/Paragraph" +msgid "You will be redirected to <strong>%{ url }</strong>" +msgstr "Budete pÅ™esmÄ›rováni na <strong>%{ url }</strong>" + +#: front/src/components/auth/Authorize.vue:49 +msgctxt "Content/Auth/Paragraph" +msgid "You will be shown a code to copy-paste in the application." +msgstr "Zobrazà se vám kód pro vloženà do aplikace." + +#: front/src/components/auth/Settings.vue:71 +msgctxt "Content/Settings/Paragraph" +msgid "You will have to update your password on your clients that use this password." +msgstr "Budete muset aktualizovat heslo na vÅ¡ech klientech kde je použÃváno." + +#: front/src/components/moderation/FilterModal.vue:20 +msgctxt "Popup/Moderation/Paragraph" +msgid "You will not see tracks, albums and user activity linked to this artist any more:" +msgstr "NeuvidÃte stopy, alba a uživatelskou aktivitu spojenou s tÃmto interpretem:" + +#: front/src/components/auth/SignupForm.vue:9 +msgctxt "Content/Signup/Form/Paragraph" +msgid "Your account cannot be created." +msgstr "Váš úÄet nemůže být vytvoÅ™en." + +#: front/src/components/auth/Settings.vue:281 +msgctxt "Content/Settings/Paragraph'" +msgid "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." +msgstr "Váš úÄet bude ze serveru smazán bÄ›hem nÄ›kolika minut. Akce bude pÅ™edána také ostatnÃm serverům které mohou mÃt kopie nÄ›kterých vaÅ¡ich dat, tak aby pÅ™ÃpadnÄ› doÅ¡lo k jejich odstranÄ›nÃ. MÄ›jte prosÃm na vÄ›domÃ, že nÄ›které z tÄ›chto serverů mohou být nedostupné nebo mohou nevyhovÄ›t tomuto požadavku." + +#: front/src/components/auth/Settings.vue:215 +msgctxt "Content/Settings/Title/Noun" +msgid "Your applications" +msgstr "VaÅ¡e aplikace" + +#: front/src/components/auth/Settings.vue:38 +msgctxt "Content/Settings/Error message.Title" +msgid "Your avatar cannot be saved" +msgstr "Váš avatar nemůže být uložen" + +#: front/src/components/auth/Settings.vue:527 +msgctxt "*/Auth/Message" +msgid "Your deletion request was submitted, your account and content will be deleted shortly" +msgstr "Požadavek o smazánà byl odeslán, váš úÄet a obsah bude zanedlouho vymazán" + +#: front/src/components/library/EditForm.vue:3 +msgctxt "Content/Library/Paragraph" +msgid "Your edit was successfully submitted." +msgstr "VaÅ¡e úprava byla úspěšnÄ› odeslána." + +#: front/src/components/favorites/List.vue:116 +msgctxt "Head/Favorites/Title" +msgid "Your Favorites" +msgstr "VaÅ¡e OblÃbené" + +#: front/src/views/Notifications.vue:5 +msgctxt "Content/Notifications/Title" +msgid "Your messages" +msgstr "VaÅ¡e zprávy" + +#: front/src/views/Notifications.vue:69 +msgctxt "Content/Notifications/Title" +msgid "Your notifications" +msgstr "VaÅ¡e oznámenÃ" + +#: front/src/components/auth/Settings.vue:76 +msgctxt "Content/Settings/Error message.Title" +msgid "Your password cannot be changed" +msgstr "VaÅ¡e heslo nemůže být zmÄ›nÄ›no" + +#: front/src/views/auth/PasswordResetConfirm.vue:29 +msgctxt "Content/Signup/Card.Paragraph" +msgid "Your password has been updated successfully." +msgstr "VaÅ¡e heslo bylo úspěšnÄ› zmÄ›nÄ›no." + +#: front/src/components/auth/Settings.vue:14 +msgctxt "Content/Settings/Error message.Title" +msgid "Your settings can't be updated" +msgstr "VaÅ¡e nastavenà nemůže být aktualizováno" + +#: front/src/components/auth/Settings.vue:101 +msgctxt "Popup/Settings/List item" +msgid "Your Subsonic password will be changed to a new, random one, logging you out from devices that used the old Subsonic password" +msgstr "VaÅ¡e Subsonic heslo bude zmÄ›nÄ›no na nové, náhodnÄ› vygenerované. VÅ¡echna zaÅ™Ãzenà využÃvajÃcà původnà heslo se odhlásÃ." + +#: front/src/entities.js:126 +msgctxt "*/*/*/Noun" +msgid "MusicBrainz ID" +msgstr "MusicBrainz ID" + +#: front/src/main.js:110 +msgctxt "*/Error/Paragraph" +msgid "You sent too many requests and have been rate limited, please try again in %{ delay }" +msgstr "PÅ™ekroÄili jste limit poÄtu požadavků, zkuste to prosÃm znovu za %{ delay }" + +#: front/src/main.js:113 +msgctxt "*/Error/Paragraph" +msgid "You sent too many requests and have been rate limited, please try again later" +msgstr "PÅ™ekroÄili jste limit poÄtu požadavků, zkuste to prosÃm znovu pozdÄ›ji" + +#: front/src/components/library/AlbumBase.vue:208 +msgctxt "Content/Album/Header.Title" +msgid "Album containing %{ count } track, by <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" +msgid_plural "Album containing %{ count } tracks, by <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" +msgstr[0] "Album obsahuje %{ count } stopu, od <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" +msgstr[1] "Album obsahuje %{ count } stopy, od <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" +msgstr[2] "Album obsahuje %{ count } stop, od <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" + +#: front/src/components/audio/PlayButton.vue:246 +msgctxt "*/Queue/Message" +msgid "%{ count } track was added to your queue" +msgid_plural "%{ count } tracks were added to your queue" +msgstr[0] "%{ count } stopa byla pÅ™idána do fronty" +msgstr[1] "%{ count } stopy byly pÅ™idány do fronty" +msgstr[2] "%{ count } stop bylo pÅ™idáno do fronty" diff --git a/front/locales/de/LC_MESSAGES/app.po b/front/locales/de/LC_MESSAGES/app.po index c6f1a8611c4d03227c965e65e254b899bae18719..caeb4d80846e36fc09782e834a5731812c6a590d 100644 --- a/front/locales/de/LC_MESSAGES/app.po +++ b/front/locales/de/LC_MESSAGES/app.po @@ -7,16 +7,16 @@ msgid "" msgstr "" "Project-Id-Version: front 1.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-05-16 10:35+0200\n" -"PO-Revision-Date: 2019-05-14 07:46+0000\n" -"Last-Translator: Thomas Brockmöller <tho.b.j@gmx.de>\n" +"POT-Creation-Date: 2019-10-01 15:15+0200\n" +"PO-Revision-Date: 2019-08-25 13:34+0000\n" +"Last-Translator: Tobias Reisinger <tobias@serguzim.me>\n" "Language-Team: none\n" "Language: de\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 3.2.2\n" +"X-Generator: Weblate 3.7\n" #: front/src/components/playlists/PlaylistModal.vue:9 msgctxt "Popup/Playlist/Paragraph" @@ -38,6 +38,53 @@ msgctxt "Content/Auth/Title" msgid "%{ app } wants to access your Funkwhale account" msgstr "Melde Dich bei Deinem Funkwhale-Konto an" +#: front/src/components/About.vue:173 src/components/Home.vue:56 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } active user" +msgid_plural "%{ count } active users" +msgstr[0] "%{ count } Titel" +msgstr[1] "%{ count } Titel" + +#: front/src/components/About.vue:182 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } albums" +msgid_plural "%{ count } albums" +msgstr[0] "%{ count } Titel" +msgstr[1] "%{ count } Titel" + +#: front/src/components/About.vue:152 +msgctxt "*/*/*" +msgid "%{ count } allowed domains" +msgid_plural "%{ count } allowed domains" +msgstr[0] "" +msgstr[1] "" + +#: front/src/components/About.vue:179 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } artists" +msgid_plural "%{ count } artists" +msgstr[0] "%{ count } Titel" +msgstr[1] "%{ count } Titel" + +#: front/src/components/About.vue:176 src/components/Home.vue:59 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } hour of music" +msgid_plural "%{ count } hours of music" +msgstr[0] "%{ count } Titel" +msgstr[1] "%{ count } Titel" + +#: front/src/components/About.vue:188 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } listenings" +msgid_plural "%{ count } listenings" +msgstr[0] "%{ count } Titel" +msgstr[1] "%{ count } Titel" + #: front/src/components/common/ActionTable.vue:68 msgctxt "Content/*/Paragraph" msgid "%{ count } on %{ total } selected" @@ -45,9 +92,9 @@ msgid_plural "%{ count } on %{ total } selected" msgstr[0] "%{ count } von %{ total } ausgewählt" msgstr[1] "%{ count } von %{ total } ausgewählt" -#: front/src/components/Sidebar.vue:121 src/components/audio/album/Card.vue:52 +#: front/src/components/Sidebar.vue:125 src/components/audio/album/Card.vue:52 #: front/src/views/content/libraries/Card.vue:40 -#: src/views/content/remote/Card.vue:30 +#: src/views/content/remote/Card.vue:43 msgctxt "*/*/*" msgid "%{ count } track" msgid_plural "%{ count } tracks" @@ -68,7 +115,15 @@ msgid_plural "%{ count } tracks matching combined filters" msgstr[0] "%{ count } Track entspricht den ausgewählten Filtern" msgstr[1] "%{ count } Tracks entsprechen den ausgewählten Filtern" -#: front/src/components/playlists/Card.vue:18 +#: front/src/components/About.vue:185 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } tracks" +msgid_plural "%{ count } tracks" +msgstr[0] "%{ count } Titel" +msgstr[1] "%{ count } Titel" + +#: front/src/components/playlists/Card.vue:28 msgctxt "Content/*/Card/List item" msgid "%{ count} track" msgid_plural "%{ count } tracks" @@ -93,9 +148,7 @@ msgstr "%{ minutes } min" #: front/src/components/notifications/NotificationRow.vue:40 msgctxt "Content/Notifications/Paragraph" msgid "%{ username } accepted your follow on library \"%{ library }\"" -msgstr "" -"Die Abonnieren-Anfrage zur Meditahek \"%{ library }\" wurde von %{ username " -"} bestätigt" +msgstr "Die Abonnieren-Anfrage zur Meditahek \"%{ library }\" wurde von %{ username } bestätigt" #: front/src/components/notifications/NotificationRow.vue:39 msgctxt "Content/Notifications/Paragraph" @@ -114,13 +167,10 @@ msgstr "Profil von %{ username }" #: front/src/components/playlists/PlaylistModal.vue:21 msgctxt "Popup/Playlist/Paragraph" -msgid "" -"<strong>%{ track }</strong> is already in <strong>%{ playlist }</strong>." -msgstr "" -"<strong>%{ track }</strong> befindet sich bereits in <strong>%{ playlist " -"}</strong>." +msgid "<strong>%{ track }</strong> is already in <strong>%{ playlist }</strong>." +msgstr "<strong>%{ track }</strong> befindet sich bereits in <strong>%{ playlist }</strong>." -#: front/src/components/audio/artist/Card.vue:41 +#: front/src/components/audio/artist/Card.vue:11 msgctxt "Content/Artist/Card" msgid "1 album" msgid_plural "%{ count } albums" @@ -134,24 +184,44 @@ msgid_plural "%{ count } favorites" msgstr[0] "1 Favorit" msgstr[1] "%{ count } Favoriten" -#: front/src/components/Home.vue:64 -msgctxt "Content/Home/Title" -msgid "A clean library" -msgstr "Eine übersichtliche Mediathek" +#: front/src/components/audio/artist/Card.vue:15 +#, fuzzy +msgctxt "Content/Artist/Card" +msgid "1 track" +msgid_plural "%{ count } tracks" +msgstr[0] "Titel hinzufügen" +msgstr[1] "Titel hinzufügen" + +#: front/src/views/Notifications.vue:21 src/views/Notifications.vue:55 +msgctxt "*/*/*" +msgid "30 days" +msgstr "" + +#: front/src/views/Notifications.vue:22 src/views/Notifications.vue:56 +msgctxt "*/*/*" +msgid "60 days" +msgstr "" + +#: front/src/views/Notifications.vue:23 src/views/Notifications.vue:57 +msgctxt "*/*/*" +msgid "90 days" +msgstr "" #: front/src/components/library/FileUpload.vue:264 +#, fuzzy msgctxt "Content/Library/Help text" -msgid "A network error occured while uploading this file" +msgid "A network error occurred while uploading this file" msgstr "Beim Hochladen ist ein Netzwerkfehler aufgetreten" -#: front/src/components/library/EditForm.vue:145 +#: front/src/components/library/EditForm.vue:161 msgctxt "*/*/Placeholder" msgid "A short summary describing your changes." msgstr "Kurze Beschreibung der Änderungen." #: front/src/components/About.vue:5 -msgctxt "Content/About/Title/Short, Noun" -msgid "About %{ instance }" +#, fuzzy +msgctxt "Content/Home/Header" +msgid "About %{ podName }" msgstr "Ãœber %{ instance }" #: front/src/components/Footer.vue:6 @@ -159,7 +229,7 @@ msgctxt "Footer/About/Title" msgid "About %{instanceName}" msgstr "Ãœber %{ instanceName }" -#: front/src/components/Footer.vue:45 +#: front/src/components/Footer.vue:53 src/components/Home.vue:85 msgctxt "Footer/*/Title/Short" msgid "About Funkwhale" msgstr "Ãœber Funkwhale" @@ -169,9 +239,16 @@ msgctxt "Footer/About/List item.Link" msgid "About page" msgstr "Mehr erfahren" -#: front/src/components/About.vue:8 src/components/About.vue:67 -msgctxt "Content/About/Title" -msgid "About this instance" +#: front/src/components/Home.vue:19 +#, fuzzy +msgctxt "Content/Home/Header" +msgid "About this Funkwhale pod" +msgstr "Ãœber Funkwhale" + +#: front/src/components/About.vue:21 src/components/About.vue:51 +#, fuzzy +msgctxt "Content/About/Header" +msgid "About this pod" msgstr "Ãœber diese Instanz" #: front/src/views/content/libraries/Detail.vue:48 @@ -184,96 +261,87 @@ msgctxt "Content/Library/Table/Short" msgid "Accepted" msgstr "Akzeptiert" -#: front/src/components/auth/SubsonicTokenForm.vue:110 +#: front/src/components/auth/SubsonicTokenForm.vue:117 msgctxt "Content/Settings/Message" msgid "Access disabled" msgstr "Zugriff deaktiviert" -#: front/src/components/mixins/Translations.vue:73 -#: front/src/components/mixins/Translations.vue:74 +#: front/src/components/mixins/Translations.vue:85 +#: front/src/components/mixins/Translations.vue:86 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to audio files, libraries, artists, albums and tracks" msgstr "Zugriff auf Audio Dateien, Bibliotheken, Künstler, Alben und Lieder" -#: front/src/components/mixins/Translations.vue:97 -#: front/src/components/mixins/Translations.vue:98 +#: front/src/components/mixins/Translations.vue:109 +#: front/src/components/mixins/Translations.vue:110 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to content filters" msgstr "Filter auswählen" -#: front/src/components/mixins/Translations.vue:105 -#: front/src/components/mixins/Translations.vue:106 +#: front/src/components/mixins/Translations.vue:117 +#: front/src/components/mixins/Translations.vue:118 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to edits" msgstr "Zugriff deaktiviert" -#: front/src/components/mixins/Translations.vue:69 -#: front/src/components/mixins/Translations.vue:70 +#: front/src/components/mixins/Translations.vue:81 +#: front/src/components/mixins/Translations.vue:82 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to email, username, and profile information" msgstr "Zugriff auf E-Mail Adresse, Benutzernamen und Profilinformationen" -#: front/src/components/mixins/Translations.vue:77 -#: front/src/components/mixins/Translations.vue:78 +#: front/src/components/mixins/Translations.vue:89 +#: front/src/components/mixins/Translations.vue:90 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to favorites" msgstr "Zu deinen Favoriten hinzufügen" -#: front/src/components/mixins/Translations.vue:85 -#: front/src/components/mixins/Translations.vue:86 +#: front/src/components/mixins/Translations.vue:97 +#: front/src/components/mixins/Translations.vue:98 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to follows" msgstr "" -#: front/src/components/mixins/Translations.vue:81 -#: front/src/components/mixins/Translations.vue:82 +#: front/src/components/mixins/Translations.vue:93 +#: front/src/components/mixins/Translations.vue:94 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to listening history" msgstr "In den Favoriten- oder Abspiellisten anderer Nutzer" -#: front/src/components/mixins/Translations.vue:101 -#: front/src/components/mixins/Translations.vue:102 +#: front/src/components/mixins/Translations.vue:113 +#: front/src/components/mixins/Translations.vue:114 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to notifications" msgstr "Zugriff zu Benachrichtigungen" -#: front/src/components/mixins/Translations.vue:89 -#: front/src/components/mixins/Translations.vue:90 +#: front/src/components/mixins/Translations.vue:101 +#: front/src/components/mixins/Translations.vue:102 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to playlists" msgstr "Zu einer Wiedergabeliste hinzufügen…" -#: front/src/components/mixins/Translations.vue:93 -#: front/src/components/mixins/Translations.vue:94 +#: front/src/components/mixins/Translations.vue:105 +#: front/src/components/mixins/Translations.vue:106 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to radios" msgstr "Zugang zu den Radios" -#: front/src/components/Home.vue:101 -msgctxt "Content/Home/List item" -msgid "" -"Access your music from a clean interface that focuses on what really matters" -msgstr "" -"Greife auf Deine Musik mit einer übersichtlichen Oberfläche zu, die sich auf" -" das beschränkt, was wirklich wichtig ist" - #: front/src/components/manage/library/UploadsTable.vue:67 -#: front/src/components/mixins/Translations.vue:45 +#: front/src/components/mixins/Translations.vue:55 #: front/src/views/admin/library/UploadDetail.vue:175 -#: front/src/components/mixins/Translations.vue:46 +#: front/src/components/mixins/Translations.vue:56 msgctxt "Content/*/*/Noun" msgid "Accessed date" msgstr "Zugriffsdatum" -#: front/src/views/admin/library/LibraryDetail.vue:104 -#: front/src/views/admin/library/UploadDetail.vue:111 -msgctxt "*/*/*/Noun" -msgid "Account" -msgstr "Konto" - #: front/src/components/manage/library/LibrariesTable.vue:49 #: front/src/components/manage/library/UploadsTable.vue:61 -msgctxt "*/*/*" +#: front/src/components/manage/moderation/ReportCard.vue:156 +#: front/src/components/mixins/Report.vue:13 +#: front/src/views/admin/library/LibraryDetail.vue:113 +#: front/src/views/admin/library/UploadDetail.vue:111 +#: front/src/components/mixins/Report.vue:14 +msgctxt "*/*/*/Noun" msgid "Account" msgstr "Konto" @@ -287,7 +355,7 @@ msgctxt "Content/Settings/Title" msgid "Account settings" msgstr "Kontoeinstellungen" -#: front/src/components/auth/Settings.vue:479 +#: front/src/components/auth/Settings.vue:544 msgctxt "Head/Settings/Title" msgid "Account Settings" msgstr "Kontoeinstellungen" @@ -304,7 +372,7 @@ msgstr "Konto-E-Mail-Adresse" #: front/src/views/admin/moderation/AccountsList.vue:3 #: front/src/views/admin/moderation/AccountsList.vue:24 -#: front/src/views/admin/moderation/Base.vue:8 +#: front/src/views/admin/moderation/Base.vue:11 msgctxt "*/Moderation/Title" msgid "Accounts" msgstr "Konto" @@ -317,31 +385,30 @@ msgstr "Aktion" #: front/src/components/common/ActionTable.vue:101 msgctxt "Content/*/Paragraph" msgid "Action %{ action } was launched successfully on %{ count } element" -msgid_plural "" -"Action %{ action } was launched successfully on %{ count } elements" -msgstr[0] "" -"Die Aktion %{ action } wurde erfolgreich für %{ count } Element gestartet" -msgstr[1] "" -"Die Aktion %{ action } wurde erfolgreich für %{ count } Elemente gestartet" +msgid_plural "Action %{ action } was launched successfully on %{ count } elements" +msgstr[0] "Die Aktion %{ action } wurde erfolgreich für %{ count } Element gestartet" +msgstr[1] "Die Aktion %{ action } wurde erfolgreich für %{ count } Elemente gestartet" #: front/src/components/common/ActionTable.vue:22 #: front/src/components/library/radios/Builder.vue:65 +#: front/src/components/manage/moderation/ReportCard.vue:210 msgctxt "Content/*/*/Noun" msgid "Actions" msgstr "Aktionen" -#: front/src/components/manage/users/UsersTable.vue:53 +#: front/src/components/manage/users/UsersTable.vue:54 msgctxt "Content/Admin/Table" msgid "Active" msgstr "Aktiv" -#: front/src/views/admin/library/AlbumDetail.vue:134 -#: front/src/views/admin/library/ArtistDetail.vue:123 -#: front/src/views/admin/library/LibraryDetail.vue:138 -#: front/src/views/admin/library/TrackDetail.vue:186 +#: front/src/views/admin/library/AlbumDetail.vue:140 +#: front/src/views/admin/library/ArtistDetail.vue:128 +#: front/src/views/admin/library/LibraryDetail.vue:147 +#: front/src/views/admin/library/TagDetail.vue:83 +#: front/src/views/admin/library/TrackDetail.vue:192 #: front/src/views/admin/library/UploadDetail.vue:160 -#: front/src/views/admin/moderation/AccountsDetail.vue:220 -#: front/src/views/admin/moderation/DomainsDetail.vue:136 +#: front/src/views/admin/moderation/AccountsDetail.vue:221 +#: front/src/views/admin/moderation/DomainsDetail.vue:173 msgctxt "Content/Moderation/Title" msgid "Activity" msgstr "Aktivität" @@ -352,7 +419,7 @@ msgctxt "Content/Settings/Dropdown.Label/Noun" msgid "Activity visibility" msgstr "Sichtbarkeit der Aktivitäten" -#: front/src/views/admin/moderation/DomainsList.vue:18 +#: front/src/views/admin/moderation/DomainsList.vue:22 msgctxt "Content/Moderation/Button/Verb" msgid "Add" msgstr "Hinzufügen" @@ -398,7 +465,21 @@ msgctxt "Content/Radio/Paragraph" msgid "Add filters to customize your radio" msgstr "Füge Filter hinzu, um dein Radio zu personalisieren" -#: front/src/components/audio/PlayButton.vue:75 +#: front/src/components/manage/moderation/NoteForm.vue:12 +#, fuzzy +msgctxt "Content/Moderation/Button.Label/Verb" +msgid "Add note" +msgstr "Inhalte hinzufügen" + +#: front/src/components/manage/moderation/DomainsTable.vue:191 +#: front/src/views/admin/moderation/DomainsDetail.vue:46 +#: front/src/views/admin/moderation/DomainsList.vue:18 +#, fuzzy +msgctxt "Content/Moderation/Action/Verb" +msgid "Add to allow-list" +msgstr "Zu einer Wiedergabeliste hinzufügen…" + +#: front/src/components/audio/PlayButton.vue:91 msgctxt "*/Queue/Dropdown/Button/Title" msgid "Add to current queue" msgstr "Zur Warteschlange hinzufügen" @@ -430,7 +511,7 @@ msgctxt "Popup/Playlist/Table.Button.Label/Verb" msgid "Add track" msgstr "Titel hinzufügen" -#: front/src/components/manage/users/UsersTable.vue:69 +#: front/src/components/manage/users/UsersTable.vue:70 msgctxt "Content/Admin/Table.User role" msgid "Admin" msgstr "Admin" @@ -440,49 +521,49 @@ msgctxt "Sidebar/Admin/Title/Noun" msgid "Administration" msgstr "Verwaltung" -#: front/src/views/admin/library/TrackDetail.vue:107 -msgctxt "*/*/*/Noun" -msgid "Album" -msgstr "Album" - -#: front/src/components/audio/SearchBar.vue:26 +#: front/src/components/audio/SearchBar.vue:33 #: src/components/audio/track/Table.vue:9 -#: front/src/components/library/AlbumBase.vue:152 -#: front/src/components/library/ArtistBase.vue:194 +#: front/src/components/library/AlbumBase.vue:170 +#: front/src/components/library/ArtistBase.vue:212 #: front/src/components/manage/library/TracksTable.vue:40 #: front/src/components/metadata/Search.vue:134 +#: src/components/mixins/Report.vue:41 +#: front/src/views/admin/library/TrackDetail.vue:113 #: front/src/views/content/libraries/FilesTable.vue:57 +#: front/src/components/mixins/Report.vue:42 msgctxt "*/*/*" msgid "Album" msgstr "Album" -#: front/src/views/admin/library/TrackDetail.vue:128 +#: front/src/views/admin/library/TrackDetail.vue:134 msgctxt "*/*/*/Noun" msgid "Album artist" msgstr "Alben von diesem/-r Künstler/in" -#: front/src/views/admin/library/AlbumDetail.vue:92 +#: front/src/views/admin/library/AlbumDetail.vue:98 msgctxt "Content/Moderation/Title" msgid "Album data" msgstr "Albumname" -#: front/src/components/mixins/Translations.vue:51 -#: front/src/components/mixins/Translations.vue:52 +#: front/src/components/mixins/Translations.vue:61 +#: front/src/components/mixins/Translations.vue:62 msgctxt "Content/*/Dropdown/Noun" msgid "Album name" msgstr "Albumname" #: front/src/components/audio/Search.vue:19 -#: src/components/instance/Stats.vue:48 -#: front/src/components/library/Albums.vue:120 -#: src/components/library/Library.vue:7 +#: src/components/library/Albums.vue:129 +#: front/src/components/library/Library.vue:7 +#: src/components/library/TagDetail.vue:28 #: front/src/components/manage/library/ArtistsTable.vue:41 +#: front/src/components/manage/library/TagsTable.vue:43 #: front/src/views/admin/library/AlbumsList.vue:24 -#: front/src/views/admin/library/ArtistDetail.vue:241 +#: front/src/views/admin/library/ArtistDetail.vue:256 #: front/src/views/admin/library/Base.vue:11 -#: front/src/views/admin/library/LibraryDetail.vue:219 -#: front/src/views/admin/moderation/AccountsDetail.vue:354 -#: front/src/views/admin/moderation/DomainsDetail.vue:264 +#: front/src/views/admin/library/LibraryDetail.vue:238 +#: front/src/views/admin/library/TagDetail.vue:133 +#: front/src/views/admin/moderation/AccountsDetail.vue:366 +#: front/src/views/admin/moderation/DomainsDetail.vue:301 msgctxt "*/*/*" msgid "Albums" msgstr "Alben" @@ -496,7 +577,10 @@ msgstr "Alben von diesem/-r Künstler/in" #: front/src/components/manage/library/LibrariesTable.vue:13 #: front/src/components/manage/library/UploadsTable.vue:13 #: front/src/components/manage/library/UploadsTable.vue:22 +#: front/src/components/manage/moderation/DomainsTable.vue:11 #: front/src/components/manage/users/InvitationsTable.vue:19 +#: front/src/components/moderation/ReportCategoryDropdown.vue:32 +#: front/src/views/admin/moderation/ReportsList.vue:17 #: front/src/views/content/libraries/FilesTable.vue:13 msgctxt "Content/*/Dropdown" msgid "All" @@ -514,44 +598,57 @@ msgctxt "Head/Authorize/Title" msgid "Allow application" msgstr "Anwendung zulassen" +#: front/src/components/About.vue:136 +msgctxt "*/*/*" +msgid "Allow-list" +msgstr "" + +#: front/src/components/About.vue:149 +#, fuzzy +msgctxt "*/*/*" +msgid "Allowed domains" +msgstr "Domain hinzufügen" + #: front/src/components/library/ImportStatusModal.vue:17 +#, fuzzy msgctxt "Popup/Import/Message" -msgid "" -"An error occured during upload processing. You will find more information " -"below." -msgstr "" -"Ein Fehler ist während des Uploads aufgetreten. Weitere Informationen " -"befinden sich unten." +msgid "An error occurred during upload processing. You will find more information below." +msgstr "Ein Fehler ist während des Uploads aufgetreten. Weitere Informationen befinden sich unten." #: front/src/components/playlists/Editor.vue:13 +#, fuzzy msgctxt "Content/Playlist/Error message.Title" -msgid "An error occured while saving your changes" +msgid "An error occurred while saving your changes" msgstr "Beim Speichern Deiner Änderungen ist ein Fehler aufgetreten" #: front/src/components/federation/FetchButton.vue:21 +#, fuzzy msgctxt "Popup/*/Message.Content" -msgid "An error occured while trying to refresh data:" +msgid "An error occurred while trying to refresh data:" msgstr "Beim Speichern Deiner Änderungen ist ein Fehler aufgetreten" #: front/src/components/federation/FetchButton.vue:41 +#, fuzzy msgctxt "*/*/Error" -msgid "An HTTP error occured while contacting the remote server" +msgid "An HTTP error occurred while contacting the remote server" msgstr "Ein HTTP Fehler ist beim Verbinden zum Remove Server aufgetreten" -#: front/src/components/auth/Login.vue:10 -msgctxt "Content/Login/Error message/List item" -msgid "" -"An unknown error happend, this can mean the server is down or cannot be " -"reached" -msgstr "" -"Ein unbekannter Fehler ist aufgetreten. Eventuell ist der Server " -"ausgeschaltet oder er kann nicht erreicht werden" - #: front/src/components/library/ImportStatusModal.vue:145 +#, fuzzy msgctxt "Popup/Import/Error.Label" -msgid "An unkwown error occured" +msgid "An unknown error occurred" msgstr "Ein unbekannten Fehler ist aufgetreten" +#: front/src/components/About.vue:123 +msgctxt "*/*/*" +msgid "Anonymous access" +msgstr "" + +#: front/src/components/moderation/ReportModal.vue:54 +msgctxt "Popup/Moderation/Error message" +msgid "Anonymous reports are disabled, please sign-in to submit a report." +msgstr "" + #: front/src/components/auth/Settings.vue:175 #: src/components/auth/Settings.vue:225 msgctxt "*/*/*/Noun" @@ -570,9 +667,7 @@ msgstr "Anwendungs-ID" #: front/src/components/auth/ApplicationEdit.vue:16 msgctxt "Content/Application/Paragraph/" -msgid "" -"Application ID and secret are really sensitive values and must be treated " -"like passwords. Do not share those with anyone else." +msgid "Application ID and secret are really sensitive values and must be treated like passwords. Do not share those with anyone else." msgstr "" #: front/src/components/auth/ApplicationEdit.vue:25 @@ -602,29 +697,27 @@ msgctxt "Content/Login/Title" msgid "Are you sure you want to log out?" msgstr "Möchtest du dich wirklich abmelden?" +#: front/src/components/audio/SearchBar.vue:32 +#: src/components/audio/track/Table.vue:8 #: front/src/components/manage/library/AlbumsTable.vue:40 #: front/src/components/manage/library/TracksTable.vue:41 -msgctxt "*/*/*" -msgid "Artist" -msgstr "Künstler·in" - -#: front/src/components/audio/SearchBar.vue:25 -#: src/components/audio/track/Table.vue:8 #: front/src/components/metadata/Search.vue:130 -#: front/src/views/admin/library/AlbumDetail.vue:108 -#: front/src/views/admin/library/TrackDetail.vue:118 -#: front/src/views/content/libraries/FilesTable.vue:56 +#: src/components/mixins/Report.vue:55 +#: front/src/views/admin/library/AlbumDetail.vue:114 +#: front/src/views/admin/library/TrackDetail.vue:124 +#: front/src/views/content/libraries/FilesTable.vue:56 src/entities.js:12 +#: front/src/components/mixins/Report.vue:56 msgctxt "*/*/*/Noun" msgid "Artist" msgstr "Künstler·in" -#: front/src/views/admin/library/ArtistDetail.vue:91 +#: front/src/views/admin/library/ArtistDetail.vue:96 msgctxt "Content/Moderation/Title" msgid "Artist data" msgstr "Künstlername" -#: front/src/components/mixins/Translations.vue:52 -#: front/src/components/mixins/Translations.vue:53 +#: front/src/components/mixins/Translations.vue:62 +#: front/src/components/mixins/Translations.vue:63 msgctxt "Content/*/Dropdown/Noun" msgid "Artist name" msgstr "Künstlername" @@ -634,36 +727,36 @@ msgctxt "*/Search/Input.Placeholder" msgid "Artist, album, track…" msgstr "Künstler·in, Album, Titel…" +#: front/src/components/audio/Search.vue:10 +#: src/components/library/Artists.vue:117 +#: front/src/components/library/Library.vue:10 +#: front/src/components/library/TagDetail.vue:19 +#: front/src/components/manage/library/TagsTable.vue:42 #: front/src/views/admin/library/ArtistsList.vue:24 #: front/src/views/admin/library/Base.vue:8 -#: front/src/views/admin/library/LibraryDetail.vue:209 -msgctxt "*/*/*" -msgid "Artists" -msgstr "Künstler·innen" - -#: front/src/components/audio/Search.vue:10 -#: src/components/instance/Stats.vue:42 -#: front/src/components/library/Artists.vue:117 -#: src/components/library/Library.vue:10 -#: front/src/views/admin/moderation/AccountsDetail.vue:346 -#: front/src/views/admin/moderation/DomainsDetail.vue:254 +#: front/src/views/admin/library/LibraryDetail.vue:228 +#: front/src/views/admin/library/TagDetail.vue:123 +#: front/src/views/admin/moderation/AccountsDetail.vue:358 +#: front/src/views/admin/moderation/DomainsDetail.vue:291 msgctxt "*/*/*/Noun" msgid "Artists" msgstr "Künstler·innen" #: front/src/components/favorites/List.vue:34 -#: src/components/library/Albums.vue:25 -#: front/src/components/library/Artists.vue:25 +#: src/components/library/Albums.vue:29 +#: front/src/components/library/Artists.vue:29 #: src/components/library/Radios.vue:44 #: front/src/components/manage/library/AlbumsTable.vue:21 #: front/src/components/manage/library/ArtistsTable.vue:21 #: front/src/components/manage/library/EditsCardList.vue:39 #: front/src/components/manage/library/LibrariesTable.vue:30 +#: front/src/components/manage/library/TagsTable.vue:21 #: front/src/components/manage/library/TracksTable.vue:21 #: front/src/components/manage/library/UploadsTable.vue:40 #: front/src/components/manage/moderation/AccountsTable.vue:21 -#: front/src/components/manage/moderation/DomainsTable.vue:19 +#: front/src/components/manage/moderation/DomainsTable.vue:27 #: front/src/components/manage/users/UsersTable.vue:19 +#: front/src/views/admin/moderation/ReportsList.vue:44 #: front/src/views/content/libraries/FilesTable.vue:31 #: front/src/views/playlists/List.vue:27 msgctxt "Content/Search/Dropdown" @@ -675,18 +768,24 @@ msgctxt "Content/Signup/Button.Label/Verb" msgid "Ask for a password reset" msgstr "Zurücksetzen des Kennworts beantragen" -#: front/src/views/admin/library/AlbumDetail.vue:198 -#: front/src/views/admin/library/ArtistDetail.vue:187 -#: front/src/views/admin/library/LibraryDetail.vue:176 -#: front/src/views/admin/library/TrackDetail.vue:250 +#: front/src/components/manage/moderation/ReportCard.vue:72 +msgctxt "Content/Moderation/*" +msgid "Assigned to" +msgstr "" + +#: front/src/views/admin/library/AlbumDetail.vue:214 +#: front/src/views/admin/library/ArtistDetail.vue:202 +#: front/src/views/admin/library/LibraryDetail.vue:195 +#: front/src/views/admin/library/TagDetail.vue:113 +#: front/src/views/admin/library/TrackDetail.vue:266 #: front/src/views/admin/library/UploadDetail.vue:191 -#: front/src/views/admin/moderation/AccountsDetail.vue:274 -#: front/src/views/admin/moderation/DomainsDetail.vue:202 +#: front/src/views/admin/moderation/AccountsDetail.vue:285 +#: front/src/views/admin/moderation/DomainsDetail.vue:239 msgctxt "Content/Moderation/Title" msgid "Audio content" msgstr "Audio-Inhalt" -#: front/src/components/ShortcutsModal.vue:55 +#: front/src/components/ShortcutsModal.vue:92 msgctxt "Popup/Keyboard shortcuts/Title" msgid "Audio player shortcuts" msgstr "Audio-Player-Tastenkombinationen" @@ -729,9 +828,9 @@ msgid "Back to settings" msgstr "Einstellungen aktualisieren" #: front/src/components/library/TrackDetail.vue:48 -#: front/src/components/mixins/Translations.vue:55 +#: front/src/components/mixins/Translations.vue:67 #: front/src/views/admin/library/UploadDetail.vue:227 -#: front/src/components/mixins/Translations.vue:56 +#: front/src/components/mixins/Translations.vue:68 msgctxt "Content/Track/*/Noun" msgid "Bitrate" msgstr "Bitrate" @@ -744,14 +843,8 @@ msgstr "Alles blockieren" #: front/src/components/manage/moderation/InstancePolicyForm.vue:112 msgctxt "Content/Moderation/Help text" -msgid "" -"Block everything from this account or domain. This will prevent any " -"interaction with the entity, and purge related content (uploads, libraries, " -"follows, etc.)" -msgstr "" -"Alles von diesem Konto oder dieser Domain blockieren. Das unterbindet " -"jedwede Interaktion mit dieser Instanz, und alle zugehörigen Inhalte (Titel," -" Mediatheken, Abonnements, usw.) werden gelöscht" +msgid "Block everything from this account or domain. This will prevent any interaction with the entity, and purge related content (uploads, libraries, follows, etc.)" +msgstr "Alles von diesem Konto oder dieser Domain blockieren. Das unterbindet jedwede Interaktion mit dieser Instanz, und alle zugehörigen Inhalte (Titel, Mediatheken, Abonnements, usw.) werden gelöscht" #: front/src/components/Sidebar.vue:18 src/components/library/Library.vue:4 msgctxt "*/Library/*/Verb" @@ -763,6 +856,12 @@ msgctxt "Sidebar/Library/List item.Link/Verb" msgid "Browse library" msgstr "Die Mediathek durchsuchen" +#: front/src/components/Home.vue:132 +#, fuzzy +msgctxt "Content/Home/Link" +msgid "Browse public content" +msgstr "Tabelleninhalt aktualisieren" + #: front/src/components/library/Albums.vue:4 msgctxt "Content/Album/Title" msgid "Browsing albums" @@ -793,40 +892,40 @@ msgctxt "Content/Album/Card" msgid "By %{ artist }" msgstr "Von %{ artist }" -#: front/src/views/content/remote/Card.vue:112 +#: front/src/views/content/remote/Card.vue:125 msgctxt "Popup/Library/Paragraph" msgid "By unfollowing this library, you loose access to its content." -msgstr "" -"Wenn du diese Mediathek nicht mehr folgst, verlierst du den Zugriff auf alle" -" ihre Inhalte." +msgstr "Wenn du diese Mediathek nicht mehr folgst, verlierst du den Zugriff auf alle ihre Inhalte." -#: front/src/views/admin/library/AlbumDetail.vue:214 -#: front/src/views/admin/library/ArtistDetail.vue:203 -#: front/src/views/admin/library/LibraryDetail.vue:192 -#: front/src/views/admin/library/TrackDetail.vue:266 +#: front/src/views/admin/library/AlbumDetail.vue:230 +#: front/src/views/admin/library/ArtistDetail.vue:218 +#: front/src/views/admin/library/LibraryDetail.vue:211 +#: front/src/views/admin/library/TrackDetail.vue:282 #: front/src/views/admin/library/UploadDetail.vue:208 -#: front/src/views/admin/moderation/AccountsDetail.vue:290 -#: front/src/views/admin/moderation/DomainsDetail.vue:217 +#: front/src/views/admin/moderation/AccountsDetail.vue:301 +#: front/src/views/admin/moderation/DomainsDetail.vue:254 msgctxt "Content/Moderation/Table.Label/Noun" msgid "Cached size" msgstr "Cache-Größe" #: front/src/components/SetInstanceModal.vue:37 #: front/src/components/common/DangerousButton.vue:17 -#: front/src/components/library/AlbumBase.vue:36 -#: front/src/components/library/ArtistBase.vue:47 -#: front/src/components/library/EditForm.vue:95 -#: front/src/components/library/TrackBase.vue:55 +#: front/src/components/library/AlbumBase.vue:37 +#: front/src/components/library/ArtistBase.vue:48 +#: front/src/components/library/EditForm.vue:107 +#: front/src/components/library/TrackBase.vue:53 #: front/src/components/library/radios/Filter.vue:53 #: front/src/components/manage/moderation/InstancePolicyForm.vue:54 #: front/src/components/moderation/FilterModal.vue:39 +#: front/src/components/moderation/ReportModal.vue:59 #: front/src/components/playlists/PlaylistModal.vue:26 #: front/src/components/playlists/PlaylistModal.vue:77 +#: front/src/views/playlists/Detail.vue:62 msgctxt "*/*/Button.Label/Verb" msgid "Cancel" msgstr "Abbrechen" -#: front/src/views/content/remote/Card.vue:97 +#: front/src/views/content/remote/Card.vue:110 #, fuzzy msgctxt "Content/Library/Card.Paragraph" msgid "Cancel follow request" @@ -840,9 +939,15 @@ msgstr "Entsprechende Tracks" #: front/src/components/library/FileUpload.vue:261 msgctxt "Content/Library/Help text" msgid "Cannot upload this file, ensure it is not too big" +msgstr "Die Datei kann nicht hochgeladen werden. Bitte prüfe, dass sie nicht zu groß ist" + +#: front/src/components/manage/moderation/ReportCard.vue:30 +#: front/src/components/mixins/Translations.vue:42 +#: front/src/components/moderation/ReportCategoryDropdown.vue:2 +#: front/src/components/mixins/Translations.vue:43 +msgctxt "*/*/*" +msgid "Category" msgstr "" -"Die Datei kann nicht hochgeladen werden. Bitte prüfe, dass sie nicht zu groß" -" ist" #: front/src/components/Footer.vue:21 msgctxt "Footer/Settings/Dropdown.Label/Short, Verb" @@ -859,6 +964,11 @@ msgctxt "Content/Settings/Button.Label" msgid "Change password" msgstr "Kennwort ändern" +#: front/src/components/Footer.vue:37 +msgctxt "Footer/Settings/Dropdown.Label/Short, Verb" +msgid "Change theme" +msgstr "" + #: front/src/views/auth/PasswordResetConfirm.vue:62 msgctxt "*/Signup/Title" msgid "Change your password" @@ -876,28 +986,22 @@ msgstr "Änderungen synchronisiert" #: front/src/components/auth/Settings.vue:71 msgctxt "Content/Settings/Paragraph'" -msgid "" -"Changing your password will also change your Subsonic API password if you " -"have requested one." -msgstr "" -"Beim Ändern deines Kennworts wird das Kennwort für die Subsonic-API " -"zurückgesetzt, sofern du eins erstellt hast." +msgid "Changing your password will also change your Subsonic API password if you have requested one." +msgstr "Beim Ändern deines Kennworts wird das Kennwort für die Subsonic-API zurückgesetzt, sofern du eins erstellt hast." #: front/src/components/auth/Settings.vue:98 msgctxt "Popup/Settings/Paragraph" msgid "Changing your password will have the following consequences:" msgstr "Wenn du dein Kennwort änderst, hat dies folgende Auswirkungen:" -#: front/src/components/Footer.vue:40 +#: front/src/components/Footer.vue:48 msgctxt "Footer/*/List item.Link" msgid "Chat room" msgstr "Chat-Raum" #: front/src/components/auth/ApplicationForm.vue:24 msgctxt "Content/Applications/Paragraph/" -msgid "" -"Checking the parent \"Read\" or \"Write\" scopes implies access to all the " -"corresponding children scopes." +msgid "Checking the parent \"Read\" or \"Write\" scopes implies access to all the corresponding children scopes." msgstr "" #: front/src/components/SetInstanceModal.vue:2 @@ -905,12 +1009,9 @@ msgctxt "Popup/Instance/Title" msgid "Choose your instance" msgstr "Wähle deine Instanz" -#: front/src/components/manage/users/InvitationForm.vue:37 -msgctxt "Content/Admin/Button.Label/Verb" -msgid "Clear" -msgstr "Löschen" - #: front/src/components/library/EditForm.vue:75 +#: front/src/components/library/EditForm.vue:88 +#: front/src/components/manage/users/InvitationForm.vue:37 msgctxt "Content/Library/Button.Label" msgid "Clear" msgstr "Löschen" @@ -921,46 +1022,47 @@ msgctxt "*/Playlist/Button.Label/Verb" msgid "Clear playlist" msgstr "Wiedergabeliste leeren" -#: front/src/components/audio/Player.vue:642 +#: front/src/components/ShortcutsModal.vue:144 +#, fuzzy +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Clear queue" +msgstr "Warteschlange leeren" + +#: front/src/components/audio/Player.vue:668 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Clear your queue" msgstr "Warteschlange leeren" -#: front/src/components/Home.vue:44 -msgctxt "Content/Home/List item/Verb" -msgid "Click once, listen for hours using built-in radios" -msgstr "Klicke einmal und höre dank der eingebauten Radios studenlang Musik" - #: front/src/components/mixins/Translations.vue:21 #: front/src/components/mixins/Translations.vue:22 msgctxt "Content/Library/Link.Title" -msgid "" -"Click to display more information about the import process for this upload" -msgstr "" -"Klicke um mehr Informationen zum Importprozess für diesen Upload anzuzeigen" +msgid "Click to display more information about the import process for this upload" +msgstr "Klicke um mehr Informationen zum Importprozess für diesen Upload anzuzeigen" #: front/src/components/library/FileUpload.vue:82 msgctxt "Content/Library/Paragraph/Call to action" msgid "Click to select files to upload or drag and drop files or directories" -msgstr "" -"Zum Hochladen klicken oder Dateien und Ordner hierher ziehen und ablegen" +msgstr "Zum Hochladen klicken oder Dateien und Ordner hierher ziehen und ablegen" +#: front/src/components/ShortcutsModal.vue:38 #: front/src/components/federation/FetchButton.vue:85 #: front/src/components/library/ImportStatusModal.vue:79 +#: front/src/components/manage/moderation/InstancePolicyModal.vue:34 msgctxt "*/*/Button.Label/Verb" msgid "Close" msgstr "Schließen" -#: front/src/components/ShortcutsModal.vue:20 -msgctxt "Popup/Keyboard shortcuts/Button.Label/Verb" -msgid "Close" -msgstr "Schließen" - #: front/src/components/federation/FetchButton.vue:88 msgctxt "*/*/Button.Label/Verb" msgid "Close and reload page" msgstr "Schließen und Seite neu laden" +#: front/src/components/About.vue:94 +#, fuzzy +msgctxt "*/*/*/State of registrations" +msgid "Closed" +msgstr "Schließen" + #: front/src/components/manage/users/InvitationForm.vue:26 #: front/src/components/manage/users/InvitationsTable.vue:42 msgctxt "Content/Admin/Table.Label/Noun" @@ -968,8 +1070,9 @@ msgid "Code" msgstr "Code" #: front/src/components/audio/album/Card.vue:41 -#: front/src/components/audio/artist/Card.vue:33 -msgctxt "Content/*/Card.Link/Verb" +#: front/src/components/common/CollapseLink.vue:3 +#, fuzzy +msgctxt "*/*/Button,Label" msgid "Collapse" msgstr "Zuklappen" @@ -993,44 +1096,47 @@ msgctxt "Content/Signup/Form.Label" msgid "Confirmation code" msgstr "Bestätigungscode" +#: front/src/components/About.vue:67 src/components/Home.vue:65 +msgctxt "Content/Home/Header/Name" +msgid "Contact" +msgstr "" + #: front/src/components/moderation/FilterModal.vue:90 msgctxt "*/Moderation/Message" msgid "Content filter successfully added" msgstr "Filter erfolgreich hinzugefügt" -#: front/src/components/mixins/Translations.vue:96 -#: front/src/components/mixins/Translations.vue:97 -msgctxt "Content/OAuth Scopes/Label" -msgid "Content filters" -msgstr "Filter auswählen" - #: front/src/components/auth/Settings.vue:116 +#: front/src/components/mixins/Translations.vue:108 +#: front/src/components/mixins/Translations.vue:109 msgctxt "Content/Settings/Title/Noun" msgid "Content filters" msgstr "Filter auswählen" #: front/src/components/auth/Settings.vue:119 msgctxt "Content/Settings/Paragraph" -msgid "" -"Content filters help you hide content you don't want to see on the service." -msgstr "" -"Mit Filtern können Inhalte verborgen werden, die nicht angezeigt werdern " -"sollen." +msgid "Content filters help you hide content you don't want to see on the service." +msgstr "Mit Filtern können Inhalte verborgen werden, die nicht angezeigt werdern sollen." #: front/src/components/common/ActionTable.vue:8 msgctxt "Content/*/Button.Help text.Paragraph" msgid "Content have been updated, click refresh to see up-to-date content" -msgstr "" -"Der Inhalt wurde aktualisiert. Um den neuesten Inhalt zu sehen, geh auf " -"Aktualisieren" +msgstr "Der Inhalt wurde aktualisiert. Um den neuesten Inhalt zu sehen, geh auf Aktualisieren" -#: front/src/components/Footer.vue:48 +#: front/src/components/About.vue:46 +#, fuzzy +msgctxt "Content/About/Header" +msgid "Contents" +msgstr "Filter auswählen" + +#: front/src/components/Footer.vue:56 msgctxt "Footer/*/List item.Link" msgid "Contribute" msgstr "Mitmachen" -#: front/src/components/audio/EmbedWizard.vue:19 +#: front/src/components/audio/EmbedWizard.vue:29 #: front/src/components/common/CopyInput.vue:8 +#: front/src/components/forms/PasswordInput.vue:43 msgctxt "*/*/Button.Label/Short, Verb" msgid "Copy" msgstr "Kopieren" @@ -1045,14 +1151,14 @@ msgctxt "Content/Auth/Paragraph" msgid "Copy-paste the following code in the application:" msgstr "" -#: front/src/components/audio/EmbedWizard.vue:21 +#: front/src/components/audio/EmbedWizard.vue:31 msgctxt "Popup/Embed/Paragraph" msgid "Copy/paste this code in your website HTML" msgstr "Füge diesen Code in Deine HTML-Webseite ein" #: front/src/components/library/TrackDetail.vue:10 -#: front/src/views/admin/library/TrackDetail.vue:153 -msgctxt "Content/Track/Table.Label/Noun" +#: front/src/views/admin/library/TrackDetail.vue:159 src/edits.js:77 +msgctxt "Content/Track/*/Noun" msgid "Copyright" msgstr "Urheberrecht" @@ -1066,29 +1172,20 @@ msgctxt "Content/Library/Error message.Title" msgid "Could not fetch remote library" msgstr "Die entfernte Mediathek konnte nicht abgerufen werden" -#: front/src/components/Home.vue:80 -msgctxt "Content/Home/List item" -msgid "Covers, lyrics, our goal is to have them all ;)" -msgstr "Albumcover, Liedtexte - unser Ziel ist es, alle zu haben ;)" - #: front/src/components/manage/moderation/InstancePolicyForm.vue:58 msgctxt "Content/Moderation/Card.Button.Label/Verb" msgid "Create" msgstr "Erstellen" -#: front/src/components/auth/Signup.vue:4 +#: front/src/views/auth/Signup.vue:4 msgctxt "Content/Signup/Title" msgid "Create a funkwhale account" msgstr "Funkwhale-Konto erstellen" -#: front/src/components/auth/Settings.vue:220 -msgctxt "Content/Settings/Button.Label" -msgid "Create a new application" -msgstr "Eine neue Anwendung erstellen" - #: front/src/components/auth/ApplicationNew.vue:8 #: front/src/components/auth/ApplicationNew.vue:41 -msgctxt "Content/Applications/Title" +#: front/src/components/auth/Settings.vue:220 +msgctxt "Content/Settings/Button.Label" msgid "Create a new application" msgstr "Eine neue Anwendung erstellen" @@ -1102,7 +1199,7 @@ msgctxt "Popup/Playlist/Title/Verb" msgid "Create a new playlist" msgstr "Eine neue Wiedergabeliste erstellen" -#: front/src/components/Sidebar.vue:57 src/components/auth/Login.vue:17 +#: front/src/components/Sidebar.vue:57 src/components/auth/LoginForm.vue:15 msgctxt "*/Signup/Link/Verb" msgid "Create an account" msgstr "Konto erstellen" @@ -1117,7 +1214,7 @@ msgctxt "Content/Library/Button.Label/Verb" msgid "Create library" msgstr "Mediathek erstellen" -#: front/src/components/auth/Signup.vue:53 +#: front/src/components/auth/SignupForm.vue:49 msgctxt "Content/Signup/Button.Label" msgid "Create my account" msgstr "Mein Konto erstellen" @@ -1142,11 +1239,13 @@ msgstr "Dein eigenes Radio erstellen" #: front/src/components/manage/library/AlbumsTable.vue:44 #: front/src/components/manage/library/ArtistsTable.vue:43 #: front/src/components/manage/library/LibrariesTable.vue:54 +#: front/src/components/manage/library/TagsTable.vue:45 #: front/src/components/manage/library/TracksTable.vue:44 #: front/src/components/manage/library/UploadsTable.vue:66 +#: front/src/components/manage/moderation/ReportCard.vue:43 #: front/src/components/manage/users/InvitationsTable.vue:40 -#: front/src/components/mixins/Translations.vue:43 -#: front/src/components/mixins/Translations.vue:44 +#: front/src/components/mixins/Translations.vue:53 +#: front/src/components/mixins/Translations.vue:54 msgctxt "Content/*/*/Noun" msgid "Creation date" msgstr "Erstellungsdatum" @@ -1156,6 +1255,12 @@ msgctxt "Content/Settings/Title/Noun" msgid "Current avatar" msgstr "Aktuelles Profilbild" +#: front/src/components/admin/SettingsGroup.vue:67 +#, fuzzy +msgctxt "Content/Settings/Title/Noun" +msgid "Current image" +msgstr "Aktuelle Nutzung" + #: front/src/views/content/libraries/DetailArea.vue:4 msgctxt "Content/Library/Title" msgid "Current library" @@ -1171,6 +1276,11 @@ msgctxt "Content/Library/Title" msgid "Current usage" msgstr "Aktuelle Nutzung" +#: front/src/components/Footer.vue:94 +msgctxt "Footer/Settings/Dropdown.Label/Theme name" +msgid "Dark" +msgstr "" + #: front/src/components/federation/FetchButton.vue:53 msgctxt "*/*/Error" msgid "Data returned by the remote server had invalid or missing attributes" @@ -1191,7 +1301,7 @@ msgctxt "Popup/Import/Table.Label/Noun" msgid "Debug information" msgstr "Titelinformation" -#: front/src/components/ShortcutsModal.vue:75 +#: front/src/components/ShortcutsModal.vue:128 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Decrease volume" msgstr "Lautstärke verringern" @@ -1203,23 +1313,29 @@ msgstr "Lautstärke verringern" #: front/src/components/manage/library/AlbumsTable.vue:188 #: front/src/components/manage/library/ArtistsTable.vue:178 #: front/src/components/manage/library/LibrariesTable.vue:205 +#: front/src/components/manage/library/TagsTable.vue:179 #: front/src/components/manage/library/TracksTable.vue:188 #: front/src/components/manage/library/UploadsTable.vue:255 #: front/src/components/manage/moderation/InstancePolicyForm.vue:61 +#: front/src/components/manage/moderation/NotesThread.vue:24 +#: front/src/components/manage/moderation/NotesThread.vue:29 +#: front/src/components/manage/moderation/ReportCard.vue:360 #: front/src/components/manage/users/InvitationsTable.vue:167 -#: front/src/views/admin/library/AlbumDetail.vue:72 -#: front/src/views/admin/library/AlbumDetail.vue:77 -#: front/src/views/admin/library/ArtistDetail.vue:71 +#: front/src/views/admin/library/AlbumDetail.vue:78 +#: front/src/views/admin/library/AlbumDetail.vue:83 #: front/src/views/admin/library/ArtistDetail.vue:76 +#: front/src/views/admin/library/ArtistDetail.vue:81 #: front/src/views/admin/library/LibraryDetail.vue:58 #: front/src/views/admin/library/LibraryDetail.vue:63 -#: front/src/views/admin/library/TrackDetail.vue:71 -#: front/src/views/admin/library/TrackDetail.vue:76 +#: front/src/views/admin/library/TagDetail.vue:41 +#: front/src/views/admin/library/TagDetail.vue:46 +#: front/src/views/admin/library/TrackDetail.vue:77 +#: front/src/views/admin/library/TrackDetail.vue:82 #: front/src/views/admin/library/UploadDetail.vue:65 #: front/src/views/admin/library/UploadDetail.vue:70 #: front/src/views/content/libraries/FilesTable.vue:222 #: front/src/views/content/libraries/Form.vue:29 -#: src/views/playlists/Detail.vue:34 +#: src/views/playlists/Detail.vue:42 msgctxt "*/*/*/Verb" msgid "Delete" msgstr "Löschen" @@ -1244,23 +1360,46 @@ msgctxt "Popup/Moderation/Button.Label/Verb" msgid "Delete moderation rule" msgstr "Moderationsregel löschen" -#: front/src/views/playlists/Detail.vue:39 -msgctxt "Popup/Playlist/Button.Label/Verb" -msgid "Delete playlist" -msgstr "Wiedergabeliste löschen" +#: front/src/components/auth/Settings.vue:274 +#: src/components/auth/Settings.vue:302 +#, fuzzy +msgctxt "*/*/Button.Label" +msgid "Delete my account" +msgstr "Mein Konto erstellen" + +#: front/src/components/auth/Settings.vue:297 +#, fuzzy +msgctxt "*/*/Button.Label" +msgid "Delete my account…" +msgstr "Mein Konto erstellen" + +#: front/src/views/playlists/Detail.vue:47 +msgctxt "Popup/Playlist/Button.Label/Verb" +msgid "Delete playlist" +msgstr "Wiedergabeliste löschen" #: front/src/views/radios/Detail.vue:28 msgctxt "Popup/Radio/Button.Label/Verb" msgid "Delete radio" msgstr "Radio löschen" -#: front/src/views/admin/library/AlbumDetail.vue:73 -#: front/src/views/admin/library/TrackDetail.vue:72 +#: front/src/components/manage/moderation/ReportCard.vue:357 +msgctxt "Content/Moderation/Button/Verb" +msgid "Delete reported object" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:358 +msgctxt "Content/Moderation/Popup/Header" +msgid "Delete reported object?" +msgstr "" + +#: front/src/views/admin/library/AlbumDetail.vue:79 +#: front/src/views/admin/library/TrackDetail.vue:78 msgctxt "Popup/Library/Title" msgid "Delete this album?" msgstr "Soll diesen Album gelöscht werden?" -#: front/src/views/admin/library/ArtistDetail.vue:72 +#: front/src/views/admin/library/ArtistDetail.vue:77 msgctxt "Popup/Library/Title" msgid "Delete this artist?" msgstr "Diese Mediathek löschen?" @@ -1276,60 +1415,71 @@ msgctxt "Popup/Moderation/Title" msgid "Delete this moderation rule?" msgstr "Diese Moderationsregel löschen?" +#: front/src/components/manage/moderation/NotesThread.vue:25 +#, fuzzy +msgctxt "Popup/Moderation/Title" +msgid "Delete this note?" +msgstr "Diese Mediathek löschen?" + #: front/src/components/library/EditCard.vue:94 msgctxt "Popup/Library/Title" msgid "Delete this suggestion?" msgstr "Soll dieser Vorschlag gelöscht werden?" +#: front/src/views/admin/library/TagDetail.vue:42 +#, fuzzy +msgctxt "Popup/Library/Title" +msgid "Delete this tag?" +msgstr "Soll diesen Album gelöscht werden?" + #: front/src/views/admin/library/UploadDetail.vue:66 msgctxt "Popup/Library/Title" msgid "Delete this upload?" msgstr "Soll dieser Upload gelöscht werden?" #: front/src/components/favorites/List.vue:35 -#: src/components/library/Albums.vue:26 -#: front/src/components/library/Artists.vue:26 +#: src/components/library/Albums.vue:30 +#: front/src/components/library/Artists.vue:30 #: src/components/library/Radios.vue:47 #: front/src/components/manage/library/AlbumsTable.vue:22 #: front/src/components/manage/library/ArtistsTable.vue:22 #: front/src/components/manage/library/EditsCardList.vue:40 #: front/src/components/manage/library/LibrariesTable.vue:31 +#: front/src/components/manage/library/TagsTable.vue:22 #: front/src/components/manage/library/TracksTable.vue:22 #: front/src/components/manage/library/UploadsTable.vue:41 #: front/src/components/manage/moderation/AccountsTable.vue:22 -#: front/src/components/manage/moderation/DomainsTable.vue:20 +#: front/src/components/manage/moderation/DomainsTable.vue:28 #: front/src/components/manage/users/UsersTable.vue:20 +#: front/src/views/admin/moderation/ReportsList.vue:45 #: front/src/views/content/libraries/FilesTable.vue:32 #: front/src/views/playlists/List.vue:28 msgctxt "Content/Search/Dropdown" msgid "Descending" msgstr "Absteigend" -#: front/src/views/admin/library/LibraryDetail.vue:123 -msgctxt "*/*/*/Noun" -msgid "Description" -msgstr "Beschreibung" +#: front/src/components/manage/moderation/NoteForm.vue:37 +msgctxt "Content/Moderation/Placeholder" +msgid "Describe what actions have been taken, or any other related updates…" +msgstr "" #: front/src/components/library/radios/Builder.vue:25 +#: front/src/views/admin/library/LibraryDetail.vue:132 #: front/src/views/content/libraries/Form.vue:14 -msgctxt "Content/*/Input.Label/Noun" +msgctxt "*/*/*/Noun" msgid "Description" msgstr "Beschreibung" #: front/src/views/content/libraries/Card.vue:48 -#: src/views/content/remote/Card.vue:54 +#: src/views/content/remote/Card.vue:67 msgctxt "Content/Library/Card.Button.Label/Noun" msgid "Details" msgstr "Details" -#: front/src/views/admin/moderation/AccountsDetail.vue:491 +#: front/src/views/admin/moderation/AccountsDetail.vue:511 msgctxt "Content/Moderation/Help text" -msgid "" -"Determine how much content the user can upload. Leave empty to use the " -"default value of the instance." -msgstr "" -"Lege das Speichervolumen des Nutzers fest. Wird kein Wert angegeben, wird " -"der Standardwert der Instanz verwendet." +msgid "Determine how much content the user can upload. Leave empty to use the default value of the instance." +msgstr "Lege das Speichervolumen des Nutzers fest. Wird kein Wert angegeben, wird der Standardwert der Instanz verwendet." #: front/src/components/mixins/Translations.vue:8 #: front/src/components/mixins/Translations.vue:9 @@ -1338,38 +1488,51 @@ msgid "Determine the visibility level of your activity" msgstr "Lege fest, wer deine Aktivität sehen kann" #: front/src/components/auth/Settings.vue:104 -#: front/src/components/auth/SubsonicTokenForm.vue:51 +#: front/src/components/auth/SubsonicTokenForm.vue:56 msgctxt "Popup/Settings/Button.Label" msgid "Disable access" msgstr "Zugriff deaktivieren" -#: front/src/components/auth/SubsonicTokenForm.vue:48 +#: front/src/components/auth/SubsonicTokenForm.vue:53 msgctxt "Content/Settings/Button.Label/Verb" msgid "Disable Subsonic access" msgstr "Subsonic-Zugriff deaktivieren" -#: front/src/components/auth/SubsonicTokenForm.vue:49 +#: front/src/components/auth/SubsonicTokenForm.vue:54 msgctxt "Popup/Settings/Title" msgid "Disable Subsonic API access?" msgstr "Subsonic-API-Zugriff deaktivieren?" +#: front/src/components/About.vue:118 src/components/About.vue:131 +#: front/src/components/About.vue:144 #: front/src/components/manage/moderation/InstancePolicyForm.vue:18 #: front/src/views/admin/moderation/AccountsDetail.vue:157 #: front/src/views/admin/moderation/AccountsDetail.vue:161 -msgctxt "*/*/*" +#, fuzzy +msgctxt "*/*/*/State of feature" msgid "Disabled" msgstr "Deaktiviert" -#: front/src/views/admin/library/TrackDetail.vue:145 +#: front/src/views/admin/library/TrackDetail.vue:151 msgctxt "*/*/*/Noun" msgid "Disc number" msgstr "CD-Nummer" +#: front/src/components/Home.vue:157 +msgctxt "Content/Home/Link" +msgid "Discover everything you need to know about Funkwhale and its features" +msgstr "" + #: front/src/components/auth/SubsonicTokenForm.vue:13 msgctxt "Content/Settings/Link" msgid "Discover how to use Funkwhale from other apps" msgstr "Entdecke, wie du Funkwhale von anderen Apps aus benutzen kannst" +#: front/src/views/Notifications.vue:45 +msgctxt "Content/Notifications/Button.Label/Verb" +msgid "Discover other ways to help" +msgstr "" + #: front/src/views/admin/moderation/AccountsDetail.vue:132 msgctxt "'Content/*/*/Noun'" msgid "Display name" @@ -1382,12 +1545,14 @@ msgstr "Öffentlich anzeigen" #: front/src/components/manage/moderation/InstancePolicyForm.vue:122 msgctxt "Content/Moderation/Help text" -msgid "" -"Do not download any media file (audio, album cover, account avatar…) from " -"this account or domain. This will purge existing content as well." -msgstr "" -"Lade keine Medien (Audio-Inhalt, Album-Cover, Profilbild, usw.) aus diesem " -"Konto oder Domain. Alle existierenden Inhalte werden ebenfalls gelöscht." +msgid "Do not download any media file (audio, album cover, account avatar…) from this account or domain. This will purge existing content as well." +msgstr "Lade keine Medien (Audio-Inhalt, Album-Cover, Profilbild, usw.) aus diesem Konto oder Domain. Alle existierenden Inhalte werden ebenfalls gelöscht." + +#: front/src/views/Notifications.vue:36 +#, fuzzy +msgctxt "Content/Notifications/Header" +msgid "Do you like Funkwhale?" +msgstr "Ãœber Funkwhale" #: front/src/components/playlists/Editor.vue:51 msgctxt "Popup/Playlist/Title" @@ -1399,7 +1564,7 @@ msgctxt "Modal/*/Title" msgid "Do you want to confirm this action?" msgstr "Vorgang bestätigen?" -#: front/src/views/playlists/Detail.vue:35 +#: front/src/views/playlists/Detail.vue:43 msgctxt "Popup/Playlist/Title/Call to action" msgid "Do you want to delete the playlist \"%{ playlist }\"?" msgstr "Möchtest du die Wiedergabeliste \"%{ playlist }\" löschen?" @@ -1409,6 +1574,12 @@ msgctxt "Popup/Radio/Title" msgid "Do you want to delete the radio \"%{ radio }\"?" msgstr "Möchtest du das Radio \"%{ radio }\" löschen?" +#: front/src/components/auth/Settings.vue:298 +#, fuzzy +msgctxt "Popup/Settings/Title" +msgid "Do you want to delete your account?" +msgstr "Möchtest du die vorherige Warteschlange wiederherstellen?" + #: front/src/components/moderation/FilterModal.vue:3 msgctxt "Popup/Moderation/Title/Verb" msgid "Do you want to hide content from artist \"%{ name }\"?" @@ -1421,7 +1592,13 @@ msgid_plural "Do you want to launch %{ action } on %{ count } elements?" msgstr[0] "Möchtest du %{ action } auf %{ count } Element ausführen?" msgstr[1] "Möchtest du %{ action } auf %{ count } Elemente ausführen?" -#: front/src/components/Sidebar.vue:118 +#: front/src/components/moderation/ReportModal.vue:3 +#, fuzzy +msgctxt "Popup/Moderation/Title/Verb" +msgid "Do you want to report this object?" +msgstr "Vorgang bestätigen?" + +#: front/src/components/Sidebar.vue:122 msgctxt "Sidebar/Queue/Message" msgid "Do you want to restore your previous queue?" msgstr "Möchtest du die vorherige Warteschlange wiederherstellen?" @@ -1437,26 +1614,33 @@ msgstr "Dokumentation" #: front/src/components/manage/library/TracksTable.vue:42 #: front/src/components/manage/library/UploadsTable.vue:62 #: front/src/components/manage/moderation/AccountsTable.vue:40 -#: front/src/components/mixins/Translations.vue:60 -#: front/src/views/admin/library/AlbumDetail.vue:118 -#: front/src/views/admin/library/ArtistDetail.vue:107 -#: front/src/views/admin/library/LibraryDetail.vue:114 -#: front/src/views/admin/library/TrackDetail.vue:170 +#: front/src/components/manage/moderation/ReportCard.vue:169 +#: front/src/components/manage/moderation/ReportCard.vue:179 +#: front/src/components/mixins/Translations.vue:72 +#: front/src/views/admin/library/AlbumDetail.vue:124 +#: front/src/views/admin/library/ArtistDetail.vue:112 +#: front/src/views/admin/library/LibraryDetail.vue:123 +#: front/src/views/admin/library/TrackDetail.vue:176 #: front/src/views/admin/library/UploadDetail.vue:121 #: front/src/views/admin/moderation/AccountsDetail.vue:123 -#: front/src/components/mixins/Translations.vue:61 +#: front/src/components/mixins/Translations.vue:73 msgctxt "Content/Moderation/*/Noun" msgid "Domain" msgstr "Domain" -#: front/src/views/admin/moderation/Base.vue:5 +#: front/src/views/admin/moderation/Base.vue:8 #: front/src/views/admin/moderation/DomainsList.vue:3 -#: front/src/views/admin/moderation/DomainsList.vue:48 +#: front/src/views/admin/moderation/DomainsList.vue:54 msgctxt "*/Moderation/*/Noun" msgid "Domains" msgstr "Domains" -#: front/src/components/library/TrackBase.vue:39 +#: front/src/views/Notifications.vue:42 +msgctxt "Content/Notifications/Button.Label/Verb" +msgid "Donate" +msgstr "" + +#: front/src/components/library/TrackBase.vue:37 #: front/src/views/admin/library/UploadDetail.vue:58 msgctxt "Content/Track/Link/Verb" msgid "Download" @@ -1465,15 +1649,14 @@ msgstr "Herunterladen" #: front/src/components/playlists/Editor.vue:59 msgctxt "Content/Playlist/Paragraph/Call to action" msgid "Drag and drop rows to reorder tracks in the playlist" -msgstr "" -"Klicke die Titel an und verschiebe sie, um die Wiedergabeliste umzuordnen" +msgstr "Klicke die Titel an und verschiebe sie, um die Wiedergabeliste umzuordnen" #: front/src/components/audio/track/Table.vue:10 #: front/src/components/library/TrackDetail.vue:30 -#: front/src/components/mixins/Translations.vue:56 +#: front/src/components/mixins/Translations.vue:68 #: front/src/views/admin/library/UploadDetail.vue:238 #: front/src/views/content/libraries/FilesTable.vue:60 -#: front/src/components/mixins/Translations.vue:57 +#: front/src/components/mixins/Translations.vue:69 msgctxt "Content/*/*" msgid "Duration" msgstr "Dauer" @@ -1483,41 +1666,27 @@ msgctxt "Content/Signup/Message" msgid "E-mail address confirmed" msgstr "E-Mail-Adresse bestätigt" -#: front/src/components/Home.vue:88 -msgctxt "Content/Home/Title" -msgid "Easy to use" -msgstr "Benutzerfreundlich" - -#: front/src/components/library/AlbumBase.vue:68 -#: front/src/components/library/ArtistBase.vue:79 -#: front/src/components/library/TrackBase.vue:87 +#: front/src/components/auth/Settings.vue:246 +#: src/components/library/AlbumBase.vue:73 +#: front/src/components/library/ArtistBase.vue:84 +#: front/src/components/library/TrackBase.vue:89 #: front/src/components/manage/moderation/InstancePolicyCard.vue:45 #: front/src/components/radios/Card.vue:23 -#: src/views/admin/library/AlbumDetail.vue:65 -#: front/src/views/admin/library/ArtistDetail.vue:64 -#: front/src/views/admin/library/TrackDetail.vue:64 +#: src/views/admin/library/AlbumDetail.vue:71 +#: front/src/views/admin/library/ArtistDetail.vue:69 +#: front/src/views/admin/library/TrackDetail.vue:70 #: front/src/views/content/libraries/Detail.vue:9 #: src/views/playlists/Detail.vue:31 msgctxt "Content/*/Button.Label/Verb" msgid "Edit" msgstr "Bearbeiten" -#: front/src/components/auth/Settings.vue:246 -msgctxt "Content/Settings/Button.Label" -msgid "Edit" -msgstr "Bearbeiten" - #: front/src/components/auth/ApplicationEdit.vue:30 #: front/src/components/auth/ApplicationEdit.vue:75 msgctxt "Content/Applications/Title" msgid "Edit application" msgstr "Anwendung bearbeiten" -#: front/src/components/About.vue:22 -msgctxt "Content/Settings/Button.Label/Verb" -msgid "Edit instance info" -msgstr "Instanzdaten bearbeiten" - #: front/src/components/manage/moderation/InstancePolicyForm.vue:3 msgctxt "Content/Moderation/Card.Title/Verb" msgid "Edit moderation rule" @@ -1538,23 +1707,20 @@ msgctxt "Content/*/Title" msgid "Edit this track" msgstr "Diesen Titel ändern" -#: front/src/views/admin/library/AlbumDetail.vue:182 -#: front/src/views/admin/library/ArtistDetail.vue:171 +#: front/src/components/mixins/Translations.vue:116 +#: front/src/views/admin/library/AlbumDetail.vue:198 +#: front/src/views/admin/library/ArtistDetail.vue:186 #: front/src/views/admin/library/Base.vue:5 #: src/views/admin/library/EditsList.vue:24 -#: front/src/views/admin/library/TrackDetail.vue:234 +#: front/src/views/admin/library/TrackDetail.vue:250 +#: front/src/components/mixins/Translations.vue:117 msgctxt "*/Admin/*/Noun" msgid "Edits" msgstr "Bearbeitungen" -#: front/src/components/mixins/Translations.vue:104 -#: front/src/components/mixins/Translations.vue:105 -msgctxt "Content/OAuth Scopes/Label" -msgid "Edits" -msgstr "Bearbeitungen" - -#: front/src/components/auth/Signup.vue:30 +#: front/src/components/auth/SignupForm.vue:26 #: front/src/components/manage/users/UsersTable.vue:38 +#: front/src/components/moderation/ReportModal.vue:31 msgctxt "Content/*/*/Noun" msgid "Email" msgstr "E-Mail-Adresse" @@ -1564,50 +1730,60 @@ msgctxt "Content/*/*" msgid "Email address" msgstr "E-Mail-Adresse" -#: front/src/components/library/AlbumBase.vue:53 -#: front/src/components/library/ArtistBase.vue:64 -#: front/src/components/library/TrackBase.vue:72 +#: front/src/components/library/AlbumBase.vue:54 +#: front/src/components/library/ArtistBase.vue:65 +#: front/src/components/library/TrackBase.vue:70 +#: src/views/playlists/Detail.vue:38 msgctxt "Content/*/Button.Label/Verb" msgid "Embed" msgstr "Integrieren" -#: front/src/components/audio/EmbedWizard.vue:20 +#: front/src/components/audio/EmbedWizard.vue:30 msgctxt "Popup/Embed/Input.Label/Noun" msgid "Embed code" msgstr "Code integrieren" -#: front/src/components/library/AlbumBase.vue:26 +#: front/src/components/library/AlbumBase.vue:27 msgctxt "Popup/Album/Title/Verb" msgid "Embed this album on your website" msgstr "Bette dieses Album auf Deiner Webseite ein" -#: front/src/components/library/ArtistBase.vue:37 +#: front/src/components/library/ArtistBase.vue:38 msgctxt "Popup/Artist/Title/Verb" msgid "Embed this artist work on your website" msgstr "Bette diesen Track auf Deiner Webseite ein" -#: front/src/components/library/TrackBase.vue:45 +#: front/src/views/playlists/Detail.vue:52 +#, fuzzy +msgctxt "Popup/Album/Title/Verb" +msgid "Embed this playlist on your website" +msgstr "Bette dieses Album auf Deiner Webseite ein" + +#: front/src/components/library/TrackBase.vue:43 msgctxt "Popup/Track/Title" msgid "Embed this track on your website" msgstr "Bette diesen Track auf Deiner Webseite ein" -#: front/src/views/admin/moderation/AccountsDetail.vue:259 -#: front/src/views/admin/moderation/DomainsDetail.vue:187 +#: front/src/views/admin/moderation/AccountsDetail.vue:260 +#: front/src/views/admin/moderation/DomainsDetail.vue:224 msgctxt "Content/Moderation/Table.Label/Noun" msgid "Emitted library follows" msgstr "Ausgehende Mediatheks-Abonnements" -#: front/src/views/admin/moderation/AccountsDetail.vue:243 -#: front/src/views/admin/moderation/DomainsDetail.vue:171 +#: front/src/views/admin/moderation/AccountsDetail.vue:244 +#: front/src/views/admin/moderation/DomainsDetail.vue:208 msgctxt "Content/Moderation/Table.Label/Noun" msgid "Emitted messages" msgstr "Verschickte Nachrichten" +#: front/src/components/About.vue:114 src/components/About.vue:127 +#: front/src/components/About.vue:140 #: front/src/components/manage/moderation/InstancePolicyCard.vue:8 #: front/src/components/manage/moderation/InstancePolicyForm.vue:17 #: front/src/views/admin/moderation/AccountsDetail.vue:156 #: front/src/views/admin/moderation/AccountsDetail.vue:160 -msgctxt "*/*/*" +#, fuzzy +msgctxt "*/*/*/State of feature" msgid "Enabled" msgstr "Aktiviert" @@ -1626,10 +1802,10 @@ msgctxt "Content/Search/Input.Placeholder" msgid "Enter a radio name…" msgstr "Name des Radios eingeben…" -#: front/src/components/library/Albums.vue:119 +#: front/src/components/library/Albums.vue:128 msgctxt "Content/Search/Input.Placeholder" -msgid "Enter album title..." -msgstr "Album Titel eingeben..." +msgid "Enter album title…" +msgstr "Album Titel eingeben…" #: front/src/components/library/Artists.vue:116 msgctxt "Content/Search/Input.Placeholder" @@ -1642,33 +1818,33 @@ msgid "Enter playlist name…" msgstr "Name der Wiedergabeliste eingeben…" #: front/src/views/auth/PasswordReset.vue:54 +#, fuzzy msgctxt "Content/Signup/Input.Placeholder" -msgid "Enter the email address binded to your account" +msgid "Enter the email address linked to your account" msgstr "Gib die E-Mail-Adresse ein, die mit deinem Konto verknüpft ist" -#: front/src/components/auth/Signup.vue:103 +#: front/src/components/auth/SignupForm.vue:96 msgctxt "Content/Signup/Form/Placeholder" msgid "Enter your email" msgstr "Gib deine E-Mail-Adresse ein" -#: front/src/components/auth/Signup.vue:98 src/components/auth/Signup.vue:100 +#: front/src/components/auth/SignupForm.vue:91 +#: src/components/auth/SignupForm.vue:93 msgctxt "Content/Signup/Form/Placeholder" msgid "Enter your invitation code (case insensitive)" -msgstr "" -"Gib deinen Einladungscode ein (Groß- und Kleinschreibung wird nicht " -"berücksichtigt)" +msgstr "Gib deinen Einladungscode ein (Groß- und Kleinschreibung wird nicht berücksichtigt)" #: front/src/components/metadata/Search.vue:114 msgctxt "Content/Library/Input.Placeholder/Verb" msgid "Enter your search query…" msgstr "Suche eingeben…" -#: front/src/components/auth/Signup.vue:102 +#: front/src/components/auth/SignupForm.vue:95 msgctxt "Content/Signup/Form/Placeholder" msgid "Enter your username" msgstr "Benutzername eingeben" -#: front/src/components/auth/Login.vue:83 +#: front/src/components/auth/LoginForm.vue:81 msgctxt "Content/Login/Input.Placeholder" msgid "Enter your username or email" msgstr "Benutzername oder E-Mail-Adresse eingeben" @@ -1685,7 +1861,7 @@ msgctxt "Popup/Import/Table.Label/Noun" msgid "Error detail" msgstr "Fehlerbericht" -#: front/src/views/admin/Settings.vue:87 +#: front/src/views/admin/Settings.vue:89 msgctxt "Content/Admin/Menu" msgid "Error reporting" msgstr "Fehlerbericht" @@ -1741,16 +1917,12 @@ msgctxt "Popup/Moderation/Error message" msgid "Error while fetching application data" msgstr "Fehler beim Abrufen der Anwendungsdaten" -#: front/src/views/admin/moderation/DomainsDetail.vue:118 +#: front/src/views/admin/moderation/DomainsDetail.vue:155 msgctxt "Content/Moderation/Table" msgid "Error while fetching node info" msgstr "Fehler beim Abrufen der Knoten-Information" #: front/src/components/admin/SettingsGroup.vue:5 -msgctxt "Content/Settings/Error message.Title" -msgid "Error while saving settings" -msgstr "Fehler beim Speichern der Einstellungen" - #: front/src/components/federation/FetchButton.vue:73 msgctxt "Content/*/Error message.Title" msgid "Error while saving settings" @@ -1761,6 +1933,18 @@ msgctxt "Content/Library/Error message.Title" msgid "Error while submitting edit" msgstr "Fehler beim Speichern der Einstellungen" +#: front/src/components/manage/moderation/NoteForm.vue:3 +#, fuzzy +msgctxt "Content/Moderation/Error message.Title" +msgid "Error while submitting note" +msgstr "Fehler beim Speichern der Einstellungen" + +#: front/src/components/moderation/ReportModal.vue:11 +#, fuzzy +msgctxt "Popup/Moderation/Error message" +msgid "Error while submitting report" +msgstr "Fehler beim Speichern der Einstellungen" + #: front/src/components/mixins/Translations.vue:32 #: front/src/components/mixins/Translations.vue:33 msgctxt "Content/Library/Table/Short" @@ -1782,7 +1966,7 @@ msgstr "Jeder" #: front/src/components/mixins/Translations.vue:12 msgctxt "Content/Settings/Dropdown" msgid "Everyone on this instance" -msgstr "Jerder auf dieser Instanz" +msgstr "Jeder auf dieser Instanz" #: front/src/components/mixins/Translations.vue:12 #: front/src/components/mixins/Translations.vue:13 @@ -1795,9 +1979,14 @@ msgctxt "Content/Radio/Table.Label/Verb" msgid "Exclude" msgstr "Ausschließen" +#: front/src/components/common/CollapseLink.vue:2 +msgctxt "*/*/Button,Label" +msgid "Expand" +msgstr "" + #: front/src/components/manage/users/InvitationsTable.vue:41 -#: front/src/components/mixins/Translations.vue:49 -#: front/src/components/mixins/Translations.vue:50 +#: front/src/components/mixins/Translations.vue:59 +#: front/src/components/mixins/Translations.vue:60 msgctxt "Content/Admin/Table.Label/Noun" msgid "Expiration date" msgstr "Ablaufdatum" @@ -1814,17 +2003,8 @@ msgstr "Abgelaufen bzw. benutzt" #: front/src/components/manage/moderation/InstancePolicyForm.vue:110 msgctxt "Content/Moderation/Help text" -msgid "" -"Explain why you're applying this policy. Depending on your instance " -"configuration, this will help you remember why you acted on this account or " -"domain, and may be displayed publicly to help users understand what " -"moderation rules are in place." -msgstr "" -"Erkläre, warum Du die Regel festlegst. Abhängig von Deiner " -"Instanzkonfiguration hilft Dir das, Dich daran zu erinnern, warum Du bzgl. " -"des Kontos oder dieser Domäne so gehandelt hast. Dies kann öffentlich " -"eingesehen werden damit die Benutzer verstehen, welche Moderationsregeln " -"gelten." +msgid "Explain why you're applying this policy. Depending on your instance configuration, this will help you remember why you acted on this account or domain, and may be displayed publicly to help users understand what moderation rules are in place." +msgstr "Erkläre, warum Du die Regel festlegst. Abhängig von Deiner Instanzkonfiguration hilft Dir das, Dich daran zu erinnern, warum Du bzgl. des Kontos oder dieser Domäne so gehandelt hast. Dies kann öffentlich eingesehen werden damit die Benutzer verstehen, welche Moderationsregeln gelten." #: front/src/components/manage/library/UploadsTable.vue:25 #: front/src/views/content/libraries/FilesTable.vue:16 @@ -1832,31 +2012,28 @@ msgctxt "Content/Library/Dropdown" msgid "Failed" msgstr "Fehlgeschlagen" -#: front/src/views/content/remote/Card.vue:62 +#: front/src/views/content/remote/Card.vue:75 msgctxt "Content/Library/Card.List item/Noun" msgid "Failed tracks:" msgstr "Fehlgeschlagene Titel:" -#: front/src/views/admin/library/AlbumDetail.vue:165 -#: front/src/views/admin/library/ArtistDetail.vue:154 -#: front/src/views/admin/library/TrackDetail.vue:217 +#: front/src/views/admin/library/AlbumDetail.vue:171 +#: front/src/views/admin/library/ArtistDetail.vue:159 +#: front/src/views/admin/library/TrackDetail.vue:223 msgctxt "*/*/*" msgid "Favorited tracks" msgstr "Lieblingstitel" #: front/src/components/Sidebar.vue:66 +#: src/components/mixins/Translations.vue:88 +#: front/src/components/mixins/Translations.vue:89 msgctxt "Sidebar/Favorites/List item.Link/Noun" msgid "Favorites" msgstr "Favoriten" -#: front/src/components/mixins/Translations.vue:76 -#: front/src/components/mixins/Translations.vue:77 -msgctxt "Content/OAuth Scopes/Label" -msgid "Favorites" -msgstr "Favoriten" - -#: front/src/views/admin/Settings.vue:84 -msgctxt "Content/Admin/Menu" +#: front/src/components/About.vue:110 src/views/admin/Settings.vue:84 +#, fuzzy +msgctxt "*/*/*" msgid "Federation" msgstr "Föderation" @@ -1880,6 +2057,11 @@ msgctxt "Content/Radio/Table.Label/Noun" msgid "Filter name" msgstr "Filtername" +#: front/src/components/Home.vue:118 +msgctxt "Content/Home/Link" +msgid "Find another pod" +msgstr "" + #: front/src/components/manage/library/UploadsTable.vue:26 #: front/src/components/mixins/Translations.vue:36 #: front/src/views/content/libraries/FilesTable.vue:17 @@ -1889,25 +2071,31 @@ msgid "Finished" msgstr "Beendet" #: front/src/components/manage/moderation/AccountsTable.vue:42 -#: front/src/components/manage/moderation/DomainsTable.vue:41 -#: front/src/views/admin/library/AlbumDetail.vue:149 -#: front/src/views/admin/library/ArtistDetail.vue:138 -#: front/src/views/admin/library/LibraryDetail.vue:153 -#: front/src/views/admin/library/TrackDetail.vue:201 +#: front/src/components/manage/moderation/DomainsTable.vue:49 +#: front/src/views/admin/library/AlbumDetail.vue:155 +#: front/src/views/admin/library/ArtistDetail.vue:143 +#: front/src/views/admin/library/LibraryDetail.vue:162 +#: front/src/views/admin/library/TagDetail.vue:98 +#: front/src/views/admin/library/TrackDetail.vue:207 #: front/src/views/admin/library/UploadDetail.vue:167 -#: front/src/views/admin/moderation/AccountsDetail.vue:235 -#: front/src/views/admin/moderation/DomainsDetail.vue:151 +#: front/src/views/admin/moderation/AccountsDetail.vue:236 +#: front/src/views/admin/moderation/DomainsDetail.vue:188 msgctxt "Content/Moderation/Table.Label/Short (Value is a date)" msgid "First seen" msgstr "Erstmals gesehen" -#: front/src/components/mixins/Translations.vue:46 -#: front/src/components/mixins/Translations.vue:47 +#: front/src/components/mixins/Translations.vue:56 +#: front/src/components/mixins/Translations.vue:57 msgctxt "Content/Moderation/Dropdown/Noun" msgid "First seen date" msgstr "Erstmals gesehen" -#: front/src/views/content/remote/Card.vue:87 +#: front/src/components/ShortcutsModal.vue:64 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Focus searchbar" +msgstr "" + +#: front/src/views/content/remote/Card.vue:100 msgctxt "Content/Library/Card.Button.Label/Verb" msgid "Follow" msgstr "Abonnieren" @@ -1917,40 +2105,34 @@ msgctxt "Content/Library/Title/Verb" msgid "Follow remote libraries" msgstr "Fernmediatheken abonnieren" -#: front/src/views/content/remote/Card.vue:92 +#: front/src/views/content/remote/Card.vue:105 msgctxt "Content/Library/Card.Paragraph" msgid "Follow request pending approval" msgstr "Ausstehende Abonnements-Anfrage" -#: front/src/components/mixins/Translations.vue:64 -#: front/src/views/admin/library/LibraryDetail.vue:161 +#: front/src/components/manage/library/LibrariesTable.vue:53 +#: front/src/components/mixins/Translations.vue:76 +#: front/src/views/admin/library/LibraryDetail.vue:170 #: front/src/views/content/libraries/Detail.vue:7 -#: front/src/components/mixins/Translations.vue:65 +#: front/src/components/mixins/Translations.vue:77 msgctxt "Content/Federation/*/Noun" msgid "Followers" msgstr "Abonnenten" -#: front/src/components/manage/library/LibrariesTable.vue:53 -msgctxt "Content/*/*/Noun" -msgid "Followers" -msgstr "Abonnenten" - -#: front/src/views/content/remote/Card.vue:103 +#: front/src/views/content/remote/Card.vue:116 msgctxt "Content/Library/Card.Paragraph" msgid "Following" msgstr "Abonniert" -#: front/src/components/mixins/Translations.vue:84 -#: front/src/components/mixins/Translations.vue:85 +#: front/src/components/mixins/Translations.vue:96 +#: front/src/components/mixins/Translations.vue:97 msgctxt "Content/OAuth Scopes/Label" msgid "Follows" msgstr "Abonnieren" -#: front/src/components/library/TrackBase.vue:17 +#: front/src/components/library/TrackBase.vue:245 msgctxt "Content/Track/Paragraph" -msgid "" -"From album <a class=\"internal\" href=\"%{ albumUrl }\">%{ album }</a> by <a" -" class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" +msgid "From album <a class=\"internal\" href=\"%{ albumUrl }\">%{ album }</a> by <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" msgstr "" #: front/src/components/auth/Authorize.vue:28 @@ -1960,38 +2142,21 @@ msgstr "Zugriff deaktivieren" #: front/src/components/auth/SubsonicTokenForm.vue:7 msgctxt "Content/Settings/Paragraph'" -msgid "" -"Funkwhale is compatible with other music players that support the Subsonic " -"API." -msgstr "" -"Funkwhale ist kompatibel mit anderen Mediaplayern, die die Subsonic-API " -"unterstützen." - -#: front/src/components/Home.vue:90 -msgctxt "Content/Home/Paragraph" -msgid "Funkwhale is dead simple to use." -msgstr "Funkwhale ist absolut einfach zu benutzen." - -#: front/src/components/Home.vue:39 -msgctxt "Content/Home/Paragraph" -msgid "" -"Funkwhale is designed to make it easy to listen to music you like, or to " -"discover new artists." -msgstr "" -"Funkwhale macht es Dir leicht, Deine Lieblingsmusik anzuhören und neue " -"Künstler·innen zu entdecken." +msgid "Funkwhale is compatible with other music players that support the Subsonic API." +msgstr "Funkwhale ist kompatibel mit anderen Mediaplayern, die die Subsonic-API unterstützen." -#: front/src/components/Home.vue:111 +#: front/src/components/Home.vue:88 +#, fuzzy msgctxt "Content/Home/Paragraph" -msgid "Funkwhale is free and gives you control on your music." +msgid "Funkwhale is free and developped by a friendly community of volunteers." msgstr "Funkwhale ist kostenlos und gibt dir die Kontrolle über deine Musik." -#: front/src/components/Home.vue:66 -msgctxt "Content/Home/Paragraph" -msgid "Funkwhale takes care of handling your music" -msgstr "Funkwhale kümmert sich um deine Musik" +#: front/src/components/About.vue:78 +msgctxt "*/*/*" +msgid "Funkwhale version" +msgstr "" -#: front/src/components/ShortcutsModal.vue:38 +#: front/src/components/ShortcutsModal.vue:56 msgctxt "Popup/Keyboard shortcuts/Title" msgid "General shortcuts" msgstr "Allgemeine Tastenkombinationen" @@ -2001,35 +2166,17 @@ msgctxt "Content/Admin/Button.Label/Verb" msgid "Get a new invitation" msgstr "Eine neue Einladung bekommen" -#: front/src/components/Home.vue:13 -msgctxt "Content/Home/Button.Label/Verb" -msgid "Get me to the library" -msgstr "Bring mich zur Mediathek" - -#: front/src/components/Home.vue:70 -msgctxt "Content/Home/List item/Verb" -msgid "" -"Get quality metadata about your music thanks to <a href=\"%{ url }\" " -"target=\"_blank\">MusicBrainz</a>" -msgstr "" -"Dank <a href=\"https://musicbrainz.org\" target=\"_blank\">MusicBrainz</a> " -"kannst du deine Musik mit hochwertigen Metadaten verschlagworten" - #: front/src/views/content/Home.vue:12 src/views/content/Home.vue:19 msgctxt "Content/Library/Button.Label/Verb" msgid "Get started" msgstr "Loslegen" -#: front/src/components/Footer.vue:37 +#: front/src/components/Footer.vue:45 +#: src/components/library/ImportStatusModal.vue:45 msgctxt "Footer/*/Link" msgid "Getting help" msgstr "Hilfe bekommen" -#: front/src/components/library/ImportStatusModal.vue:45 -msgctxt "Popup/Import/Table.Label/Noun" -msgid "Getting help" -msgstr "Hilfe bekommen" - #: front/src/components/common/ActionTable.vue:35 #: front/src/components/common/ActionTable.vue:56 msgctxt "Content/*/Button.Label/Short, Verb" @@ -2041,11 +2188,21 @@ msgctxt "Content/*/Button.Label/Verb" msgid "Go to home page" msgstr "Zurück zur Startseite" +#: front/src/views/Notifications.vue:27 src/views/Notifications.vue:61 +msgctxt "Content/Notifications/Button.Label" +msgid "Got it!" +msgstr "" + #: front/src/components/auth/Settings.vue:128 msgctxt "Content/Settings/Title" msgid "Hidden artists" msgstr "verborgene Künstler·innen" +#: front/src/components/About.vue:155 +msgctxt "*/*/*/Verb" +msgid "Hide" +msgstr "" + #: front/src/components/manage/moderation/InstancePolicyForm.vue:114 msgctxt "Content/Moderation/Help text" msgid "Hide account or domain content, except from followers." @@ -2056,12 +2213,12 @@ msgctxt "Popup/*/Button.Label" msgid "Hide content" msgstr "Inhalte verbergen" -#: front/src/components/audio/PlayButton.vue:26 +#: front/src/components/audio/PlayButton.vue:31 msgctxt "*/Queue/Dropdown/Button/Label/Short" msgid "Hide content from this artist" msgstr "Inhalte dieses Künsters verbergen" -#: front/src/components/audio/Player.vue:643 +#: front/src/components/audio/Player.vue:669 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Hide content from this artist…" msgstr "Inhalte dieses Künsters verbergen" @@ -2071,38 +2228,29 @@ msgctxt "Head/Home/Title" msgid "Home" msgstr "Start" -#: front/src/components/instance/Stats.vue:36 -msgctxt "Content/About/Paragraph/Unit" -msgid "Hours of music" -msgstr "Stunden Musik" - #: front/src/components/auth/SubsonicTokenForm.vue:10 msgctxt "Content/Settings/Paragraph" -msgid "" -"However, accessing Funkwhale from those clients require a separate password " -"you can set below." -msgstr "" -"Der Zugriff auf Funkwhale von diesen Apps benötigt ein zusätzliches " -"Kennwort. Du kannst dieses Kennwort hier erstellen." +msgid "However, accessing Funkwhale from those clients require a separate password you can set below." +msgstr "Der Zugriff auf Funkwhale von diesen Apps benötigt ein zusätzliches Kennwort. Du kannst dieses Kennwort hier erstellen." #: front/src/views/auth/PasswordResetConfirm.vue:24 +#, fuzzy msgctxt "Content/Signup/Paragraph" -msgid "" -"If the email address provided in the previous step is valid and binded to a " -"user account, you should receive an email with reset instructions in the " -"next couple of minutes." -msgstr "" -"Ist die angegebene E-Mail-Adresse mit einem Benutzerkonto verknüpft, wirst " -"du in Kürze eine E-Mail mit einer Anleitung zum Rücksetzen deines Passworts " -"bekommen." +msgid "If the email address provided in the previous step is valid and linked to a user account, you should receive an email with reset instructions in the next couple of minutes." +msgstr "Ist die angegebene E-Mail-Adresse mit einem Benutzerkonto verknüpft, wirst du in Kürze eine E-Mail mit einer Anleitung zum Rücksetzen deines Passworts bekommen." #: front/src/components/auth/Settings.vue:205 msgctxt "Content/Applications/Paragraph" -msgid "" -"If you authorize third-party applications to access your data, those " -"applications will be listed here." +msgid "If you authorize third-party applications to access your data, those applications will be listed here." msgstr "" +#: front/src/components/mixins/Translations.vue:46 +#: front/src/components/mixins/Translations.vue:47 +#, fuzzy +msgctxt "Content/Moderation/Dropdown" +msgid "Illegal content" +msgstr "Inhalte verbergen" + #: front/src/components/library/ImportStatusModal.vue:3 msgctxt "Popup/Import/Title" msgid "Import detail" @@ -2114,14 +2262,10 @@ msgid "Import reference" msgstr "Importreferenz" #: front/src/components/manage/library/UploadsTable.vue:20 -#: front/src/views/content/libraries/FilesTable.vue:11 -#: front/src/views/content/libraries/FilesTable.vue:59 -msgctxt "Content/Library/*/Noun" -msgid "Import status" -msgstr "Importstatus" - #: front/src/components/manage/library/UploadsTable.vue:64 #: front/src/views/admin/library/UploadDetail.vue:131 +#: front/src/views/content/libraries/FilesTable.vue:11 +#: front/src/views/content/libraries/FilesTable.vue:59 msgctxt "Content/*/*/Noun" msgid "Import status" msgstr "Importstatus" @@ -2162,12 +2306,12 @@ msgctxt "Popup/Moderation/List item" msgid "In radio suggestions" msgstr "" -#: front/src/components/manage/users/UsersTable.vue:54 +#: front/src/components/manage/users/UsersTable.vue:55 msgctxt "Content/Admin/Table" msgid "Inactive" msgstr "Inaktiv" -#: front/src/components/ShortcutsModal.vue:71 +#: front/src/components/ShortcutsModal.vue:124 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Increase volume" msgstr "Lautstärke erhöhen" @@ -2185,7 +2329,7 @@ msgctxt "Content/Settings/Dropdown/Short" msgid "Instance" msgstr "Instanzdaten" -#: front/src/views/admin/moderation/DomainsDetail.vue:71 +#: front/src/views/admin/moderation/DomainsDetail.vue:99 msgctxt "Content/Moderation/Title" msgid "Instance data" msgstr "Instanzdaten" @@ -2210,22 +2354,25 @@ msgctxt "Popup/Instance/Input.Label/Noun" msgid "Instance URL" msgstr "Instanzdaten" +#: front/src/components/manage/moderation/ReportCard.vue:92 +#: front/src/components/manage/moderation/ReportCard.vue:203 +msgctxt "Content/*/*/Noun" +msgid "Internal notes" +msgstr "" + #: front/src/components/library/FileUpload.vue:268 msgctxt "Content/Library/Help text" -msgid "" -"Invalid file type, ensure you are uploading an audio file. Supported file " -"extensions are %{ extensions }" -msgstr "" -"Das Dateiformat ist ungültig. Stelle bitte sicher, dass du eine Audio-Datei " -"hochladen möchtest. Die folgenden Dateiformate sind unterstützt: %{ " -"extensions }" +msgid "Invalid file type, ensure you are uploading an audio file. Supported file extensions are %{ extensions }" +msgstr "Das Dateiformat ist ungültig. Stelle bitte sicher, dass du eine Audio-Datei hochladen möchtest. Die folgenden Dateiformate sind unterstützt: %{ extensions }" #: front/src/components/library/ImportStatusModal.vue:139 +#: front/src/components/mixins/Translations.vue:45 +#: front/src/components/mixins/Translations.vue:46 msgctxt "Popup/Import/Error.Label" msgid "Invalid metadata" msgstr "" -#: front/src/components/auth/Signup.vue:44 +#: front/src/components/auth/SignupForm.vue:40 #: front/src/components/manage/users/InvitationForm.vue:11 msgctxt "Content/*/Input.Label" msgid "Invitation code" @@ -2237,7 +2384,13 @@ msgctxt "*/Admin/*/Noun" msgid "Invitations" msgstr "Einladungen" -#: front/src/components/Footer.vue:41 +#: front/src/components/manage/moderation/DomainsTable.vue:9 +#: front/src/views/admin/moderation/DomainsDetail.vue:106 +msgctxt "Content/Moderation/*/Adjective" +msgid "Is present on allow-list" +msgstr "" + +#: front/src/components/Footer.vue:49 msgctxt "Footer/*/List item.Link" msgid "Issue tracker" msgstr "Bugtracker" @@ -2247,17 +2400,18 @@ msgctxt "Popup/Instance/Error message.Title" msgid "It is not possible to connect to the given URL" msgstr "Es lässt sich keine Verbindung zur angegebenen Adresse herstellen" -#: front/src/components/Home.vue:50 -msgctxt "Content/Home/List item/Verb" -msgid "Keep a track of your favorite songs" -msgstr "Behalte einen Ãœberblick über deine Lieblingsmusik" +#: front/src/components/mixins/Translations.vue:65 +#: front/src/components/mixins/Translations.vue:66 +msgctxt "*/*/*/Noun" +msgid "Items" +msgstr "" #: front/src/components/Footer.vue:33 src/components/ShortcutsModal.vue:3 msgctxt "*/*/*/Noun" msgid "Keyboard shortcuts" msgstr "Tastenkombinationen" -#: front/src/views/admin/moderation/DomainsDetail.vue:161 +#: front/src/views/admin/moderation/DomainsDetail.vue:198 msgctxt "Content/Moderation/Table.Label.Link" msgid "Known accounts" msgstr "Bekannte Konten" @@ -2268,15 +2422,15 @@ msgid "Known libraries" msgstr "Bekannte Mediatheken" #: front/src/components/manage/users/UsersTable.vue:41 -#: front/src/components/mixins/Translations.vue:58 -#: front/src/views/admin/moderation/AccountsDetail.vue:205 -#: front/src/components/mixins/Translations.vue:59 +#: front/src/components/mixins/Translations.vue:70 +#: front/src/views/admin/moderation/AccountsDetail.vue:206 +#: front/src/components/mixins/Translations.vue:71 msgctxt "Content/Profile/Table.Label/Short, Noun (Value is a date)" msgid "Last activity" msgstr "Letzte Aktivität" -#: front/src/views/admin/moderation/AccountsDetail.vue:188 -#: front/src/views/admin/moderation/DomainsDetail.vue:78 +#: front/src/views/admin/moderation/AccountsDetail.vue:189 +#: front/src/views/admin/moderation/DomainsDetail.vue:115 msgctxt "Content/*/Table.Label" msgid "Last checked" msgstr "Letzte Ãœberprüfung" @@ -2291,13 +2445,13 @@ msgctxt "Content/Moderation/Table.Label/Noun" msgid "Last seen" msgstr "Zuletzt gesehen" -#: front/src/components/mixins/Translations.vue:47 -#: front/src/components/mixins/Translations.vue:48 +#: front/src/components/mixins/Translations.vue:57 +#: front/src/components/mixins/Translations.vue:58 msgctxt "Content/Moderation/Dropdown/Noun" msgid "Last seen date" msgstr "Zuletzt gesehen am" -#: front/src/views/content/remote/Card.vue:60 +#: front/src/views/content/remote/Card.vue:73 msgctxt "Content/Library/Card.List item/Noun" msgid "Last update:" msgstr "Letzte Aktualisierung:" @@ -2307,60 +2461,60 @@ msgctxt "Modal/*/Button.Label/Short, Verb" msgid "Launch" msgstr "Starten" -#: front/src/components/Home.vue:10 -msgctxt "Content/Home/Button.Label/Verb" -msgid "Learn more about this instance" -msgstr "Mehr über diese Instanz erfahren" +#: front/src/components/Home.vue:35 +#, fuzzy +msgctxt "Content/Home/Link" +msgid "Learn more" +msgstr "Abonnenten werden geladen…" #: front/src/components/manage/users/InvitationForm.vue:58 msgctxt "Content/Admin/Input.Placeholder" msgid "Leave empty for a random code" msgstr "Leerlassen für einen zufälligen Code" -#: front/src/components/audio/EmbedWizard.vue:7 +#: front/src/components/audio/EmbedWizard.vue:17 msgctxt "Popup/Embed/Paragraph" msgid "Leave empty for a responsive widget" msgstr "Leerlassen für ein reaktionsfähiges Widget" -#: front/src/views/admin/library/AlbumDetail.vue:232 -#: front/src/views/admin/library/ArtistDetail.vue:221 -#: front/src/views/admin/library/TrackDetail.vue:284 -#: front/src/views/admin/moderation/AccountsDetail.vue:327 -#: front/src/views/admin/moderation/DomainsDetail.vue:234 -#: front/src/views/content/Base.vue:5 +#: front/src/components/mixins/Translations.vue:64 +#: front/src/components/mixins/Translations.vue:65 msgctxt "*/*/*/Noun" -msgid "Libraries" -msgstr "Mediatheken" +msgid "Length" +msgstr "" +#: front/src/views/admin/library/AlbumDetail.vue:248 +#: front/src/views/admin/library/ArtistDetail.vue:236 #: front/src/views/admin/library/Base.vue:17 #: front/src/views/admin/library/LibrariesList.vue:24 -msgctxt "*/*/*" +#: front/src/views/admin/library/TrackDetail.vue:300 +#: front/src/views/admin/moderation/AccountsDetail.vue:339 +#: front/src/views/admin/moderation/DomainsDetail.vue:271 +#: front/src/views/content/Base.vue:5 +msgctxt "*/*/*/Noun" msgid "Libraries" msgstr "Mediatheken" -#: front/src/components/mixins/Translations.vue:72 -#: front/src/components/mixins/Translations.vue:73 +#: front/src/components/mixins/Translations.vue:84 +#: front/src/components/mixins/Translations.vue:85 msgctxt "Content/OAuth Scopes/Label" msgid "Libraries and uploads" msgstr "Mediathek aktualisiert" #: front/src/views/content/libraries/Form.vue:2 msgctxt "Content/Library/Paragraph" -msgid "" -"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." -msgstr "" -"Bibliotheken helfen Dir deine Musiksammlungen zu organisieren und teilen. Du" -" kannst deine eigene Musiksammlung zu Funkwhale hochladen und mit deinen " -"Freunden und deiner Familie teilen." +msgid "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." +msgstr "Bibliotheken helfen Dir deine Musiksammlungen zu organisieren und teilen. Du kannst deine eigene Musiksammlung zu Funkwhale hochladen und mit deinen Freunden und deiner Familie teilen." -#: front/src/components/Sidebar.vue:85 src/components/instance/Stats.vue:30 +#: front/src/components/Sidebar.vue:85 #: front/src/components/manage/library/UploadsTable.vue:60 -#: front/src/components/manage/users/UsersTable.vue:173 +#: front/src/components/manage/users/UsersTable.vue:174 +#: front/src/components/mixins/Report.vue:77 #: front/src/views/admin/library/UploadDetail.vue:144 -#: front/src/views/admin/moderation/AccountsDetail.vue:498 -msgctxt "*/*/*" +#: front/src/views/admin/moderation/AccountsDetail.vue:518 src/entities.js:132 +#: front/src/components/mixins/Report.vue:78 +#, fuzzy +msgctxt "*/*/*/Noun" msgid "Library" msgstr "Mediathek" @@ -2391,21 +2545,37 @@ msgstr "Mediathek aktualisiert" #: front/src/components/library/TrackDetail.vue:19 #: front/src/components/manage/library/TracksTable.vue:43 -#: front/src/views/admin/library/TrackDetail.vue:159 src/edits.js:61 +#: front/src/views/admin/library/TrackDetail.vue:165 src/edits.js:84 +#: front/src/entities.js:115 msgctxt "Content/*/*/Noun" msgid "License" msgstr "Lizenz" -#: front/src/views/admin/library/AlbumDetail.vue:157 -#: front/src/views/admin/library/ArtistDetail.vue:146 -#: front/src/views/admin/library/TrackDetail.vue:209 -msgctxt "*/*/*/Noun" -msgid "Listenings" +#: front/src/components/Footer.vue:90 +msgctxt "Footer/Settings/Dropdown.Label/Theme name" +msgid "Light" msgstr "" -#: front/src/components/mixins/Translations.vue:80 -#: front/src/components/mixins/Translations.vue:81 -msgctxt "Content/OAuth Scopes/Label" +#: front/src/views/admin/library/AlbumDetail.vue:188 +#: front/src/views/admin/library/ArtistDetail.vue:176 +#: front/src/views/admin/library/LibraryDetail.vue:179 +#: front/src/views/admin/library/TrackDetail.vue:240 +#: front/src/views/admin/moderation/AccountsDetail.vue:269 +msgctxt "Content/Moderation/Table.Label/Noun" +msgid "Linked reports" +msgstr "" + +#: front/src/components/Home.vue:135 +msgctxt "Content/Home/Link" +msgid "Listen to public albums and playlists shared on this pod" +msgstr "" + +#: front/src/components/mixins/Translations.vue:92 +#: front/src/views/admin/library/AlbumDetail.vue:163 +#: front/src/views/admin/library/ArtistDetail.vue:151 +#: front/src/views/admin/library/TrackDetail.vue:215 +#: front/src/components/mixins/Translations.vue:93 +msgctxt "*/*/*/Noun" msgid "Listenings" msgstr "" @@ -2431,7 +2601,7 @@ msgctxt "Content/Library/Paragraph" msgid "Loading library data…" msgstr "Die Mediathekdaten werden geladen…" -#: front/src/views/Notifications.vue:19 +#: front/src/views/Notifications.vue:84 msgctxt "Content/Notifications/Paragraph" msgid "Loading notifications…" msgstr "Die Benachrichtigungen werden geladen…" @@ -2456,6 +2626,7 @@ msgstr "Deine Favoriten werden geladen…" #: front/src/components/manage/library/LibrariesTable.vue:75 #: front/src/components/manage/library/TracksTable.vue:71 #: front/src/components/manage/library/UploadsTable.vue:99 +#: front/src/components/manage/moderation/ReportCard.vue:173 #: front/src/views/admin/library/AlbumDetail.vue:19 #: front/src/views/admin/library/ArtistDetail.vue:18 #: front/src/views/admin/library/LibraryDetail.vue:18 @@ -2471,12 +2642,12 @@ msgctxt "Content/Moderation/*/Short, Noun" msgid "Local account" msgstr "Lokales Konto" -#: front/src/components/auth/Login.vue:84 +#: front/src/components/Home.vue:96 src/views/auth/Login.vue:29 msgctxt "Head/Login/Title" msgid "Log In" msgstr "Anmelden" -#: front/src/components/auth/Login.vue:4 +#: front/src/views/auth/Login.vue:4 msgctxt "Content/Login/Title/Verb" msgid "Log in to your Funkwhale account" msgstr "Melde Dich bei Deinem Funkwhale-Konto an" @@ -2491,7 +2662,7 @@ msgctxt "Sidebar/Profile/List item.Link" msgid "Logged in as %{ username }" msgstr "Angemeldet als %{ username }" -#: front/src/components/Sidebar.vue:54 src/components/auth/Login.vue:42 +#: front/src/components/Sidebar.vue:54 src/components/auth/LoginForm.vue:41 msgctxt "*/Login/*/Verb" msgid "Login" msgstr "Anmelden" @@ -2509,43 +2680,42 @@ msgstr "Abmelden" #: front/src/views/content/libraries/Home.vue:9 msgctxt "Content/Library/Paragraph" msgid "Looks like you don't have a library, it's time to create one." -msgstr "" -"Es sieht aus, als hättest du noch keine Mediathek, höchste Zeit eine " -"anzulegen." +msgstr "Es sieht aus, als hättest du noch keine Mediathek, höchste Zeit eine anzulegen." -#: front/src/components/audio/Player.vue:632 -#: src/components/audio/Player.vue:633 +#: front/src/components/audio/Player.vue:658 +#: src/components/audio/Player.vue:659 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Looping disabled. Click to switch to single-track looping." -msgstr "" -"Wiederholung deaktiviert. Klicke um den aktuellen Track zu wiederholen." +msgstr "Wiederholung deaktiviert. Klicke um den aktuellen Track zu wiederholen." -#: front/src/components/audio/Player.vue:635 -#: src/components/audio/Player.vue:636 +#: front/src/components/audio/Player.vue:661 +#: src/components/audio/Player.vue:662 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Looping on a single track. Click to switch to whole queue looping." -msgstr "" -"Wiederholung des aktuellen Titels. Klicken um die ganze Warteschlange zu " -"wiederholen." +msgstr "Wiederholung des aktuellen Titels. Klicken um die ganze Warteschlange zu wiederholen." -#: front/src/components/audio/Player.vue:638 -#: src/components/audio/Player.vue:639 +#: front/src/components/audio/Player.vue:664 +#: src/components/audio/Player.vue:665 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Looping on whole queue. Click to disable looping." -msgstr "" -"Wiederholung der kompletten Warteschlange. Deaktiviere die Wiederholung " -"durch Klicken." +msgstr "Wiederholung der kompletten Warteschlange. Deaktiviere die Wiederholung durch Klicken." -#: front/src/components/Sidebar.vue:223 +#: front/src/components/Sidebar.vue:230 msgctxt "Sidebar/*/Hidden text" msgid "Main menu" msgstr "Hauptmenü" -#: front/src/views/admin/library/Base.vue:31 +#: front/src/views/admin/library/Base.vue:34 msgctxt "Head/Admin/Title" msgid "Manage library" msgstr "Mediathek verwalten" +#: front/src/components/manage/moderation/InstancePolicyModal.vue:8 +#, fuzzy +msgctxt "Popup/Moderation/Title/Verb" +msgid "Manage moderation rules for %{ obj }" +msgstr "Unterliegt einer Moderationsregel" + #: front/src/components/playlists/PlaylistModal.vue:3 msgctxt "Popup/Playlist/Title/Verb" msgid "Manage playlists" @@ -2561,7 +2731,7 @@ msgctxt "Content/Playlist/Button.Label/Verb" msgid "Manage your playlists" msgstr "Verwalte deine Wiedergabelisten" -#: front/src/views/Notifications.vue:14 +#: front/src/views/Notifications.vue:79 msgctxt "Content/Notifications/Button.Label/Verb" msgid "Mark all as read" msgstr "Alles als gelesen markieren" @@ -2576,12 +2746,12 @@ msgctxt "Content/Notifications/Button.Tooltip/Verb" msgid "Mark as unread" msgstr "Als ungelesen markieren" -#: front/src/views/admin/moderation/AccountsDetail.vue:310 +#: front/src/views/admin/moderation/AccountsDetail.vue:321 msgctxt "Content/*/*/Unit" msgid "MB" msgstr "MB" -#: front/src/components/audio/Player.vue:625 +#: front/src/components/audio/Player.vue:651 msgctxt "Sidebar/Player/Hidden text" msgid "Media player" msgstr "Medienspieler" @@ -2591,43 +2761,59 @@ msgctxt "Content/Profile/Paragraph" msgid "Member since %{ date }" msgstr "Mitglied seit %{ date }" +#: front/src/components/manage/moderation/ReportCard.vue:109 +#: front/src/components/moderation/ReportModal.vue:41 +msgctxt "*/*/Field.Label/Noun" +msgid "Message" +msgstr "" + #: front/src/components/Footer.vue:32 msgctxt "Footer/*/List item.Link" msgid "Mobile and desktop apps" msgstr "Mobile und desktopbasierte Anwendungen" +#: front/src/components/Home.vue:143 +#, fuzzy +msgctxt "Content/Home/Link" +msgid "Mobile apps" +msgstr "Mobile und desktopbasierte Anwendungen" + #: front/src/components/Sidebar.vue:96 -#: src/components/manage/users/UsersTable.vue:177 -#: front/src/views/admin/moderation/AccountsDetail.vue:502 -#: front/src/views/admin/moderation/Base.vue:21 +#: src/components/manage/users/UsersTable.vue:178 +#: front/src/views/admin/Settings.vue:85 +#: front/src/views/admin/moderation/AccountsDetail.vue:522 +#: front/src/views/admin/moderation/Base.vue:43 msgctxt "*/Moderation/*" msgid "Moderation" msgstr "Moderation" #: front/src/views/admin/moderation/AccountsDetail.vue:78 -#: front/src/views/admin/moderation/DomainsDetail.vue:42 +#: front/src/views/admin/moderation/DomainsDetail.vue:70 msgctxt "Content/Moderation/Card.Paragraph" -msgid "" -"Moderation policies help you control how your instance interact with a given" -" domain or account." -msgstr "" -"Moderationsregeln lassen Dich festlegen, wie Deine Instanz mit einer " -"bestimmten Domain oder einem bestimmten Konto interagiert." +msgid "Moderation policies help you control how your instance interact with a given domain or account." +msgstr "Moderationsregeln lassen Dich festlegen, wie Deine Instanz mit einer bestimmten Domain oder einem bestimmten Konto interagiert." + +#: front/src/components/manage/moderation/InstancePolicyModal.vue:4 +#, fuzzy +msgctxt "Content/Moderation/Button.Label" +msgid "Moderation rules…" +msgstr "Moderationsregel ändern" #: front/src/components/library/EditCard.vue:5 msgctxt "Content/Library/Card/Short" msgid "Modification %{ id }" msgstr "Änderungsdatum" -#: front/src/components/mixins/Translations.vue:48 -#: front/src/components/mixins/Translations.vue:49 +#: front/src/components/mixins/Translations.vue:58 +#: front/src/components/mixins/Translations.vue:59 msgctxt "Content/Playlist/Dropdown/Noun" msgid "Modification date" msgstr "Änderungsdatum" -#: front/src/components/library/AlbumBase.vue:42 -#: front/src/components/library/ArtistBase.vue:53 -#: front/src/components/library/TrackBase.vue:61 +#: front/src/components/audio/PlayButton.vue:100 +#: front/src/components/library/AlbumBase.vue:43 +#: front/src/components/library/ArtistBase.vue:54 +#: front/src/components/library/TrackBase.vue:59 msgctxt "*/*/Button.Label/Noun" msgid "More…" msgstr "" @@ -2637,7 +2823,7 @@ msgctxt "*/*/*/Noun" msgid "Music" msgstr "Musik" -#: front/src/components/audio/Player.vue:631 +#: front/src/components/audio/Player.vue:657 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Mute" msgstr "Stummschalten" @@ -2684,8 +2870,8 @@ msgctxt "Content/Library/Title" msgid "My libraries" msgstr "Meine Mediatheken" -#: front/src/components/audio/track/Row.vue:40 -#: src/components/library/EditCard.vue:60 +#: front/src/components/About.vue:105 src/components/audio/track/Row.vue:40 +#: front/src/components/library/EditCard.vue:60 #: front/src/components/library/EditForm.vue:70 #: front/src/components/library/TrackDetail.vue:34 #: front/src/components/library/TrackDetail.vue:43 @@ -2695,54 +2881,56 @@ msgstr "Meine Mediatheken" #: front/src/components/manage/library/TracksTable.vue:76 #: front/src/components/manage/library/UploadsTable.vue:121 #: front/src/components/manage/library/UploadsTable.vue:128 -#: front/src/components/manage/users/UsersTable.vue:61 +#: front/src/components/manage/moderation/ReportCard.vue:78 +#: front/src/components/manage/moderation/ReportCard.vue:87 +#: front/src/components/manage/moderation/ReportCard.vue:193 +#: front/src/components/manage/users/UsersTable.vue:62 #: front/src/views/admin/library/UploadDetail.vue:179 #: front/src/views/admin/library/UploadDetail.vue:214 #: front/src/views/admin/library/UploadDetail.vue:233 #: front/src/views/admin/library/UploadDetail.vue:244 #: front/src/views/admin/library/UploadDetail.vue:257 -#: front/src/views/admin/moderation/AccountsDetail.vue:192 -#: front/src/views/admin/moderation/DomainsDetail.vue:82 +#: front/src/views/admin/moderation/AccountsDetail.vue:193 +#: front/src/views/admin/moderation/DomainsDetail.vue:119 #: front/src/views/content/libraries/FilesTable.vue:95 #: front/src/views/content/libraries/FilesTable.vue:101 msgctxt "*/*/*" msgid "N/A" msgstr "k.A." -#: front/src/components/manage/library/LibrariesTable.vue:48 -#: front/src/components/manage/library/UploadsTable.vue:59 -msgctxt "*/*/*" -msgid "Name" -msgstr "Name" - #: front/src/components/auth/ApplicationForm.vue:9 -msgctxt "Content/Applications/Input.Label/Noun" -msgid "Name" -msgstr "Name" - #: front/src/components/auth/Settings.vue:133 #: front/src/components/manage/library/ArtistsTable.vue:39 +#: front/src/components/manage/library/LibrariesTable.vue:48 +#: front/src/components/manage/library/TagsTable.vue:41 +#: front/src/components/manage/library/UploadsTable.vue:59 #: front/src/components/manage/moderation/AccountsTable.vue:39 -#: front/src/components/manage/moderation/DomainsTable.vue:38 -#: front/src/components/mixins/Translations.vue:53 +#: front/src/components/manage/moderation/DomainsTable.vue:46 +#: front/src/components/mixins/Translations.vue:63 #: front/src/components/playlists/PlaylistModal.vue:45 -#: front/src/views/admin/library/ArtistDetail.vue:98 +#: front/src/views/admin/library/ArtistDetail.vue:103 #: front/src/views/admin/library/LibraryDetail.vue:85 +#: front/src/views/admin/library/TagDetail.vue:68 #: front/src/views/admin/library/UploadDetail.vue:92 -#: front/src/views/admin/moderation/DomainsDetail.vue:97 -#: front/src/views/content/libraries/Form.vue:10 src/edits.js:10 -#: front/src/components/mixins/Translations.vue:54 +#: front/src/views/admin/moderation/DomainsDetail.vue:134 +#: front/src/views/content/libraries/Form.vue:10 src/edits.js:17 +#: front/src/components/mixins/Translations.vue:64 msgctxt "*/*/*/Noun" msgid "Name" msgstr "Name" +#: front/src/views/Notifications.vue:24 src/views/Notifications.vue:58 +msgctxt "*/*/*" +msgid "Never" +msgstr "" + #: front/src/components/auth/Settings.vue:88 #: front/src/views/auth/PasswordResetConfirm.vue:14 msgctxt "Content/Settings/Input.Label" msgid "New password" msgstr "Neues Kennwort" -#: front/src/components/Sidebar.vue:173 +#: front/src/components/Sidebar.vue:177 msgctxt "Sidebar/Player/Paragraph" msgid "New tracks will be appended here automatically." msgstr "Neue Tracks werden hier automatisch hinzugefügt." @@ -2752,22 +2940,18 @@ msgctxt "Content/Library/Card.Table.Header/Short" msgid "New value" msgstr "Neuer Wert" -#: front/src/components/audio/Player.vue:629 +#: front/src/components/audio/Player.vue:655 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Next track" msgstr "Nächster Track" -#: front/src/components/Sidebar.vue:130 +#: front/src/components/Sidebar.vue:134 +#: front/src/components/manage/moderation/DomainsTable.vue:13 +#: front/src/views/admin/moderation/DomainsDetail.vue:110 msgctxt "*/*/*" msgid "No" msgstr "Nein" -#: front/src/components/Home.vue:95 -msgctxt "Content/Home/List item" -msgid "No add-ons, no plugins : you only need a web library" -msgstr "" -"Keine Erweiterungen, keine Plugins: du brauchst nur eine online Mediathek" - #: front/src/components/audio/Search.vue:25 msgctxt "Content/Search/Paragraph" msgid "No album matched your query" @@ -2783,6 +2967,11 @@ msgctxt "Content/Track/Table.Paragraph" msgid "No copyright information available for this track" msgstr "Kein Liedtext für diesen Titel verfügbar" +#: front/src/components/About.vue:25 src/components/Home.vue:25 +msgctxt "Content/Home/Paragraph" +msgid "No description available." +msgstr "" + #: front/src/components/library/TrackDetail.vue:25 msgctxt "Content/Track/Table.Paragraph" msgid "No licensing information for this track" @@ -2793,7 +2982,7 @@ msgctxt "Content/Federation/Paragraph" msgid "No matching library." msgstr "Keine passende Mediathek gefunden." -#: front/src/views/Notifications.vue:28 +#: front/src/views/Notifications.vue:93 msgctxt "Content/Notifications/Paragraph" msgid "No notification to show." msgstr "Keine Benachrichtigungen zum Anzeigen." @@ -2803,6 +2992,16 @@ msgctxt "Content/*/Paragraph" msgid "No results were found." msgstr "Nichts gefunden." +#: front/src/components/About.vue:32 +msgctxt "Content/Home/Paragraph" +msgid "No rules available." +msgstr "" + +#: front/src/components/About.vue:39 +msgctxt "Content/Home/Paragraph" +msgid "No terms available." +msgstr "" + #: front/src/components/mixins/Translations.vue:10 #: front/src/components/mixins/Translations.vue:11 msgctxt "Content/Settings/Dropdown" @@ -2819,18 +3018,22 @@ msgctxt "Content/Admin/Table" msgid "Not used" msgstr "Nicht verwendet" -#: front/src/components/mixins/Translations.vue:100 -#: front/src/components/mixins/Translations.vue:101 -msgctxt "Content/OAuth Scopes/Label" -msgid "Notifications" -msgstr "Benachrichtigungen" - -#: front/src/components/Sidebar.vue:46 src/views/Notifications.vue:76 +#: front/src/components/Sidebar.vue:46 +#: src/components/mixins/Translations.vue:112 +#: front/src/views/Notifications.vue:151 +#: src/components/mixins/Translations.vue:113 msgctxt "*/Notifications/*" msgid "Notifications" msgstr "Benachrichtigungen" -#: front/src/components/Footer.vue:47 +#: front/src/components/mixins/Translations.vue:47 +#: front/src/components/mixins/Translations.vue:48 +#, fuzzy +msgctxt "Content/Moderation/Dropdown" +msgid "Offensive content" +msgstr "Inhalte verbergen" + +#: front/src/components/Footer.vue:55 msgctxt "Footer/*/List item.Link" msgid "Official website" msgstr "Offizielle Webseite" @@ -2845,6 +3048,12 @@ msgctxt "Content/Library/Card.Table.Header/Short" msgid "Old value" msgstr "Alter Wert" +#: front/src/components/About.vue:90 +#, fuzzy +msgctxt "*/*/*/State of registrations" +msgid "Open" +msgstr "Frei" + #: front/src/components/manage/users/InvitationsTable.vue:20 msgctxt "Content/Admin/Dropdown/Adjective" msgid "Open" @@ -2852,27 +3061,29 @@ msgstr "Frei" #: front/src/components/library/ImportStatusModal.vue:56 msgctxt "Popup/Import/Table.Label/Value" -msgid "" -"Open a support thread (include the debug information below in your message)" +msgid "Open a support thread (include the debug information below in your message)" msgstr "" -#: front/src/components/library/AlbumBase.vue:73 -#: front/src/components/library/ArtistBase.vue:84 -#: front/src/components/library/TrackBase.vue:92 +#: front/src/components/library/AlbumBase.vue:87 +#: front/src/components/library/ArtistBase.vue:99 +#: front/src/components/library/TagDetail.vue:11 +#: front/src/components/library/TrackBase.vue:103 +#: front/src/components/manage/moderation/ReportCard.vue:128 msgctxt "Content/Moderation/Link" msgid "Open in moderation interface" msgstr "Moderationsregel ändern" -#: front/src/views/admin/library/AlbumDetail.vue:31 -#: front/src/views/admin/library/ArtistDetail.vue:30 -#: front/src/views/admin/library/TrackDetail.vue:30 +#: front/src/views/admin/library/AlbumDetail.vue:37 +#: front/src/views/admin/library/ArtistDetail.vue:35 +#: front/src/views/admin/library/TagDetail.vue:21 +#: front/src/views/admin/library/TrackDetail.vue:36 msgctxt "Content/Moderation/Link/Verb" msgid "Open local profile" msgstr "Profil öffnen" -#: front/src/views/admin/library/AlbumDetail.vue:46 -#: front/src/views/admin/library/ArtistDetail.vue:45 -#: front/src/views/admin/library/TrackDetail.vue:45 +#: front/src/views/admin/library/AlbumDetail.vue:52 +#: front/src/views/admin/library/ArtistDetail.vue:50 +#: front/src/views/admin/library/TrackDetail.vue:51 msgctxt "Content/Moderation/Link/Verb" msgid "Open on MusicBrainz" msgstr "Auf MusicBrainz ansehen" @@ -2882,10 +3093,10 @@ msgctxt "Content/Moderation/Link/Verb" msgid "Open profile" msgstr "Profil öffnen" -#: front/src/views/admin/library/AlbumDetail.vue:54 -#: front/src/views/admin/library/ArtistDetail.vue:53 +#: front/src/views/admin/library/AlbumDetail.vue:60 +#: front/src/views/admin/library/ArtistDetail.vue:58 #: front/src/views/admin/library/LibraryDetail.vue:49 -#: front/src/views/admin/library/TrackDetail.vue:53 +#: front/src/views/admin/library/TrackDetail.vue:59 #: front/src/views/admin/library/UploadDetail.vue:50 #: front/src/views/admin/moderation/AccountsDetail.vue:52 msgctxt "Content/Moderation/Link/Verb" @@ -2906,6 +3117,7 @@ msgstr "Oder die Moderationsregel anpassen" #: src/components/library/Radios.vue:41 #: front/src/components/manage/library/EditsCardList.vue:37 #: front/src/components/manage/users/UsersTable.vue:17 +#: front/src/views/admin/moderation/ReportsList.vue:42 #: front/src/views/playlists/List.vue:25 msgctxt "Content/Search/Dropdown.Label/Noun" msgid "Order" @@ -2913,40 +3125,51 @@ msgstr "Sortierung" #: front/src/components/favorites/List.vue:24 #: src/components/library/Albums.vue:15 -#: front/src/components/library/Artists.vue:15 +#: front/src/components/library/Artists.vue:19 #: src/components/library/Radios.vue:33 #: front/src/components/manage/library/AlbumsTable.vue:11 #: front/src/components/manage/library/ArtistsTable.vue:11 #: front/src/components/manage/library/EditsCardList.vue:29 #: front/src/components/manage/library/LibrariesTable.vue:20 +#: front/src/components/manage/library/TagsTable.vue:11 #: front/src/components/manage/library/TracksTable.vue:11 #: front/src/components/manage/library/UploadsTable.vue:30 #: front/src/components/manage/moderation/AccountsTable.vue:11 -#: front/src/components/manage/moderation/DomainsTable.vue:9 +#: front/src/components/manage/moderation/DomainsTable.vue:17 #: front/src/components/manage/users/InvitationsTable.vue:9 #: front/src/components/manage/users/UsersTable.vue:9 +#: front/src/views/admin/moderation/ReportsList.vue:34 #: front/src/views/content/libraries/FilesTable.vue:21 #: front/src/views/playlists/List.vue:17 msgctxt "Content/Search/Dropdown.Label/Noun" msgid "Ordering" msgstr "Reihenfolge" -#: front/src/components/library/Albums.vue:23 -#: src/components/library/Artists.vue:23 +#: front/src/components/library/Albums.vue:27 +#: src/components/library/Artists.vue:27 #: front/src/components/manage/library/AlbumsTable.vue:19 #: front/src/components/manage/library/ArtistsTable.vue:19 #: front/src/components/manage/library/LibrariesTable.vue:28 +#: front/src/components/manage/library/TagsTable.vue:19 #: front/src/components/manage/library/TracksTable.vue:19 #: front/src/components/manage/library/UploadsTable.vue:38 #: front/src/components/manage/moderation/AccountsTable.vue:19 -#: front/src/components/manage/moderation/DomainsTable.vue:17 +#: front/src/components/manage/moderation/DomainsTable.vue:25 #: front/src/views/content/libraries/FilesTable.vue:29 msgctxt "Content/Search/Dropdown.Label/Noun" msgid "Ordering direction" msgstr "Sortierreihenfolge" +#: front/src/components/mixins/Translations.vue:48 +#: front/src/components/mixins/Translations.vue:49 +msgctxt "Content/Moderation/Dropdown" +msgid "Other" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:143 #: front/src/components/manage/users/InvitationsTable.vue:38 -msgctxt "Content/Admin/Table.Label" +#, fuzzy +msgctxt "*/*/*" msgid "Owner" msgstr "Besitzer" @@ -2965,12 +3188,15 @@ msgctxt "Content/*/Hidden text/Noun" msgid "Pagination" msgstr "Seitennummerierung" -#: front/src/components/auth/Login.vue:33 src/components/auth/Signup.vue:40 -msgctxt "Content/*/Input.Label" +#: front/src/components/auth/LoginForm.vue:32 +#: src/components/auth/Settings.vue:291 +#: front/src/components/auth/SignupForm.vue:36 +#, fuzzy +msgctxt "*/*/*" msgid "Password" msgstr "Kennwort" -#: front/src/components/auth/SubsonicTokenForm.vue:94 +#: front/src/components/auth/SubsonicTokenForm.vue:100 msgctxt "Content/Settings/Message" msgid "Password updated" msgstr "Kennwort aktualisiert" @@ -2980,12 +3206,12 @@ msgctxt "Content/Signup/Card.Title" msgid "Password updated successfully" msgstr "Kennwort erfolgreich aktualisiert" -#: front/src/components/audio/Player.vue:628 +#: front/src/components/audio/Player.vue:654 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Pause track" msgstr "Titel pausieren" -#: front/src/components/ShortcutsModal.vue:59 +#: front/src/components/ShortcutsModal.vue:96 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Pause/play the current track" msgstr "Titel pausieren bzw. wiedergeben" @@ -3014,7 +3240,7 @@ msgctxt "Content/Library/Label" msgid "Pending files" msgstr "Ausstehende Dateien" -#: front/src/components/Sidebar.vue:225 +#: front/src/components/Sidebar.vue:232 msgctxt "Sidebar/Notifications/Hidden text" msgid "Pending follow requests" msgstr "Ausstehende Abonnieren-Anfrage" @@ -3025,84 +3251,76 @@ msgctxt "Content/Admin/*/Noun" msgid "Pending review" msgstr "Ausstehende Dateien" -#: front/src/components/Sidebar.vue:226 +#: front/src/components/Sidebar.vue:233 msgctxt "Sidebar/Moderation/Hidden text" msgid "Pending review edits" msgstr "Ausstehende Dateien" +#: front/src/components/auth/Settings.vue:176 #: front/src/components/manage/users/UsersTable.vue:42 #: front/src/views/admin/moderation/AccountsDetail.vue:166 -msgctxt "Content/Admin/Table.Label/Noun" -msgid "Permissions" -msgstr "Berechtigungen" - -#: front/src/components/auth/Settings.vue:176 msgctxt "Content/*/*/Noun" msgid "Permissions" msgstr "Berechtigungen" #: front/src/components/audio/PlayButton.vue:9 -#: front/src/components/library/TrackBase.vue:26 +#: front/src/components/library/TrackBase.vue:24 msgctxt "*/Queue/Button.Label/Short, Verb" msgid "Play" msgstr "Abspielen" #: front/src/components/audio/album/Card.vue:48 -#: front/src/components/audio/artist/Card.vue:44 -#: front/src/components/library/AlbumBase.vue:20 +#: front/src/components/library/AlbumBase.vue:21 #: front/src/components/library/AlbumDetail.vue:11 #: src/views/playlists/Detail.vue:24 msgctxt "Content/Queue/Button.Label/Short, Verb" msgid "Play all" msgstr "Alles abspielen" -#: front/src/components/library/ArtistBase.vue:31 +#: front/src/components/library/ArtistBase.vue:32 msgctxt "Content/Artist/Button.Label/Verb" msgid "Play all albums" msgstr "Alle Alben abspielen" -#: front/src/components/audio/PlayButton.vue:76 +#: front/src/components/audio/PlayButton.vue:92 msgctxt "*/Queue/Dropdown/Button/Title" msgid "Play next" msgstr "Danach abspielen" -#: front/src/components/ShortcutsModal.vue:67 +#: front/src/components/ShortcutsModal.vue:120 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Play next track" msgstr "Nächster Track abspielen" -#: front/src/components/audio/PlayButton.vue:74 +#: front/src/components/audio/PlayButton.vue:90 msgctxt "*/Queue/Dropdown/Button/Title" msgid "Play now" msgstr "Jetzt abspielen" -#: front/src/components/ShortcutsModal.vue:63 +#: front/src/components/ShortcutsModal.vue:116 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Play previous track" msgstr "Vorheriger Track abspielen" -#: front/src/components/audio/PlayButton.vue:77 +#: front/src/components/audio/PlayButton.vue:93 msgctxt "*/Queue/Dropdown/Button/Title" msgid "Play similar songs" msgstr "Spiele ähnliche Stücke" -#: front/src/components/Sidebar.vue:224 +#: front/src/components/Sidebar.vue:231 msgctxt "Sidebar/Player/Hidden text" msgid "Play this track" msgstr "Diesen Track abspielen" -#: front/src/components/audio/Player.vue:627 +#: front/src/components/audio/Player.vue:653 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Play track" msgstr "Abspielen" -#: front/src/components/audio/PlayButton.vue:82 -msgctxt "*/Queue/Button/Title" -msgid "Play..." -msgstr "Abspielen..." - -#: front/src/views/playlists/Detail.vue:91 -msgctxt "Head/Playlist/Title" +#: front/src/components/mixins/Report.vue:66 src/views/playlists/Detail.vue:121 +#: front/src/components/mixins/Report.vue:67 +#, fuzzy +msgctxt "*/*/*" msgid "Playlist" msgstr "Wiedergabeliste" @@ -3139,65 +3357,60 @@ msgctxt "Content/Playlist/Dropdown.Label" msgid "Playlist visibility" msgstr "Sichtbarkeit der Wiedergabeliste" -#: front/src/components/mixins/Translations.vue:88 -#: front/src/components/mixins/Translations.vue:89 -msgctxt "Content/OAuth Scopes/Label" -msgid "Playlists" -msgstr "Wiedergabelisten" - #: front/src/components/Sidebar.vue:71 src/components/library/Home.vue:16 -#: front/src/components/library/Library.vue:16 src/views/admin/Settings.vue:83 -#: front/src/views/admin/library/AlbumDetail.vue:173 -#: front/src/views/admin/library/ArtistDetail.vue:162 -#: front/src/views/admin/library/TrackDetail.vue:225 +#: front/src/components/library/Library.vue:16 +#: front/src/components/mixins/Translations.vue:100 +#: src/views/admin/Settings.vue:83 +#: front/src/views/admin/library/AlbumDetail.vue:179 +#: front/src/views/admin/library/ArtistDetail.vue:167 +#: front/src/views/admin/library/TrackDetail.vue:231 #: src/views/playlists/List.vue:106 +#: front/src/components/mixins/Translations.vue:101 msgctxt "*/*/*" msgid "Playlists" msgstr "Wiedergabelisten" -#: front/src/components/Home.vue:56 -msgctxt "Content/Home/List item" -msgid "Playlists? We got them" -msgstr "Wiedergabelisten? Haben wir auch!" +#: front/src/components/audio/EmbedWizard.vue:9 +msgctxt "Content/Embed/Message" +msgid "Please contact your admins and ask them to update the corresponding setting." +msgstr "" #: front/src/components/auth/Settings.vue:79 msgctxt "Content/Settings/Error message.List item/Call to action" msgid "Please double-check your password is correct" msgstr "Prüfe bitte genau, ob dein Kennwort stimmt" -#: front/src/components/auth/Login.vue:9 +#: front/src/components/auth/LoginForm.vue:5 msgctxt "Content/Login/Error message.List item/Call to action" msgid "Please double-check your username/password couple is correct" -msgstr "" -"Bitte prüfe genau, ob deine Benutzernamen- und Kennwortkombination stimmen" +msgstr "Bitte prüfe genau, ob deine Benutzernamen- und Kennwortkombination stimmen" #: front/src/components/auth/Settings.vue:46 msgctxt "Content/Settings/Paragraph" msgid "PNG, GIF or JPG. At most 2MB. Will be downscaled to 400x400px." +msgstr "PNG, GIF oder JPG. Max. 2 MB. Das Bild wird ggf. auf 400x400 Bildpunkte verkleinert." + +#: front/src/components/About.vue:72 +msgctxt "Content/About/Header/Name" +msgid "Pod configuration" msgstr "" -"PNG, GIF oder JPG. Max. 2 MB. Das Bild wird ggf. auf 400x400 Bildpunkte " -"verkleinert." -#: front/src/views/admin/library/TrackDetail.vue:137 -msgctxt "*/*/*/Noun" +#: front/src/views/admin/library/TrackDetail.vue:143 src/edits.js:70 +msgctxt "*/*/*/Short, Noun" msgid "Position" msgstr "Seitennummerierung" #: front/src/components/manage/moderation/InstancePolicyForm.vue:118 msgctxt "Content/Moderation/Help text" -msgid "" -"Prevent account or domain from triggering notifications, except from " -"followers." -msgstr "" -"Verhindert, dass Konto oder Domain Benachrichtigungen auslösen. Ausnahme " -"sind Abonnenten." +msgid "Prevent account or domain from triggering notifications, except from followers." +msgstr "Verhindert, dass Konto oder Domain Benachrichtigungen auslösen. Ausnahme sind Abonnenten." -#: front/src/components/audio/EmbedWizard.vue:33 +#: front/src/components/audio/EmbedWizard.vue:43 msgctxt "Popup/Embed/Title/Noun" msgid "Preview" msgstr "Vorschau" -#: front/src/components/audio/Player.vue:626 +#: front/src/components/audio/Player.vue:652 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Previous track" msgstr "Vorheriger Track" @@ -3208,7 +3421,7 @@ msgctxt "Content/Settings/Dropdown/Short" msgid "Private" msgstr "" -#: front/src/views/content/remote/Card.vue:43 +#: front/src/views/content/remote/Card.vue:56 msgctxt "Content/Library/Card.List item" msgid "Problem during scanning" msgstr "Fehler beim Durchsuchen" @@ -3229,14 +3442,20 @@ msgctxt "Content/Library/Tab.Title/Short" msgid "Processing" msgstr "In Bearbeitung" -#: front/src/components/mixins/Translations.vue:68 -#: front/src/components/mixins/Translations.vue:69 +#: front/src/components/mixins/Translations.vue:80 +#: front/src/components/mixins/Translations.vue:81 msgctxt "Content/OAuth Scopes/Label" msgid "Profile" msgstr "Profil öffnen" +#: front/src/components/auth/SignupForm.vue:5 +#, fuzzy +msgctxt "Content/Signup/Form/Paragraph" +msgid "Public registrations are not possible on this instance. You will need an invitation code to sign up." +msgstr "Die Anmeldung auf dieser Instanz ist geschlossen. Du brauchst einen Einladungskode, um dich anmelden zu können." + #: front/src/components/manage/moderation/AccountsTable.vue:188 -#: front/src/components/manage/moderation/DomainsTable.vue:168 +#: front/src/components/manage/moderation/DomainsTable.vue:186 #: front/src/views/content/libraries/Quota.vue:36 #: front/src/views/content/libraries/Quota.vue:39 #: front/src/views/content/libraries/Quota.vue:62 @@ -3267,7 +3486,7 @@ msgctxt "Sidebar/Queue/Tab.Title/Noun" msgid "Queue" msgstr "Warteschlange" -#: front/src/components/audio/Player.vue:322 +#: front/src/components/audio/Player.vue:329 msgctxt "Content/Queue/Message" msgid "Queue shuffled!" msgstr "Warteschlange gemischt!" @@ -3299,16 +3518,12 @@ msgstr "Radio aktualisiert" #: front/src/components/library/Library.vue:13 #: src/components/library/Radios.vue:142 +#: front/src/components/mixins/Translations.vue:104 +#: front/src/components/mixins/Translations.vue:105 msgctxt "*/*/*" msgid "Radios" msgstr "Radios" -#: front/src/components/mixins/Translations.vue:92 -#: front/src/components/mixins/Translations.vue:93 -msgctxt "Content/OAuth Scopes/Label" -msgid "Radios" -msgstr "Radios" - #: front/src/components/auth/ApplicationForm.vue:151 msgctxt "Content/OAuth Scopes/Label/Verb" msgid "Read" @@ -3335,15 +3550,15 @@ msgctxt "Content/Moderation/*/Noun" msgid "Reason" msgstr "Begründung" -#: front/src/views/admin/moderation/AccountsDetail.vue:251 -#: front/src/views/admin/moderation/DomainsDetail.vue:179 +#: front/src/views/admin/moderation/AccountsDetail.vue:252 +#: front/src/views/admin/moderation/DomainsDetail.vue:216 msgctxt "Content/Moderation/Table.Label/Noun" msgid "Received library follows" msgstr "Empfangene Abonnements" -#: front/src/components/manage/moderation/DomainsTable.vue:40 -#: front/src/components/mixins/Translations.vue:62 -#: front/src/components/mixins/Translations.vue:63 +#: front/src/components/manage/moderation/DomainsTable.vue:48 +#: front/src/components/mixins/Translations.vue:74 +#: front/src/components/mixins/Translations.vue:75 msgctxt "Content/Moderation/*/Noun" msgid "Received messages" msgstr "Empfangene Nachrichten" @@ -3363,6 +3578,12 @@ msgctxt "Content/Home/Title" msgid "Recently added" msgstr "Kürzlich hinzugefügt" +#: front/src/components/Home.vue:167 +#, fuzzy +msgctxt "Content/Home/Title" +msgid "Recently added albums" +msgstr "Kürzlich hinzugefügt" + #: front/src/components/library/Home.vue:11 msgctxt "Content/Home/Title" msgid "Recently favorited" @@ -3391,14 +3612,14 @@ msgctxt "Popup/*/Message.Title" msgid "Refresh error" msgstr "Aktualisieren" -#: front/src/views/admin/library/AlbumDetail.vue:50 -#: front/src/views/admin/library/ArtistDetail.vue:49 -#: front/src/views/admin/library/TrackDetail.vue:49 +#: front/src/views/admin/library/AlbumDetail.vue:56 +#: front/src/views/admin/library/ArtistDetail.vue:54 +#: front/src/views/admin/library/TrackDetail.vue:55 msgctxt "Content/Moderation/Button/Verb" msgid "Refresh from remote server" msgstr "" -#: front/src/views/admin/moderation/DomainsDetail.vue:127 +#: front/src/views/admin/moderation/DomainsDetail.vue:164 msgctxt "Content/Moderation/Button.Label/Verb" msgid "Refresh node info" msgstr "Knoteninformationen aktualisieren" @@ -3410,9 +3631,7 @@ msgstr "Knoteninformationen aktualisieren" #: front/src/components/federation/FetchButton.vue:80 msgctxt "Popup/*/Message.Content" -msgid "" -"Refresh request wasn't proceed in time by our server. It will be processed " -"later." +msgid "Refresh request wasn't proceed in time by our server. It will be processed later." msgstr "" #: front/src/components/federation/FetchButton.vue:16 @@ -3435,16 +3654,13 @@ msgctxt "Popup/*/Title" msgid "Refreshing object from remote…" msgstr "" -#: front/src/components/auth/Signup.vue:9 -msgctxt "Content/Signup/Form/Paragraph" -msgid "" -"Registration are closed on this instance, you will need an invitation code " -"to signup." -msgstr "" -"Die Anmeldung auf dieser Instanz ist geschlossen. Du brauchst einen " -"Einladungskode, um dich anmelden zu können." +#: front/src/components/About.vue:86 +#, fuzzy +msgctxt "*/*/*" +msgid "Registrations" +msgstr "Verwaltung" -#: front/src/components/manage/users/UsersTable.vue:71 +#: front/src/components/manage/users/UsersTable.vue:72 msgctxt "Content/Admin/Table, User role" msgid "Regular user" msgstr "herkömmlicher Benutzer" @@ -3469,8 +3685,8 @@ msgid "Rejected" msgstr "Abgewiesen" #: front/src/components/manage/library/AlbumsTable.vue:43 -#: front/src/components/mixins/Translations.vue:44 src/edits.js:28 -#: front/src/components/mixins/Translations.vue:45 +#: front/src/components/mixins/Translations.vue:54 src/edits.js:43 +#: front/src/components/mixins/Translations.vue:55 msgctxt "Content/*/*/Noun" msgid "Release date" msgstr "Zuletzt gesehen am" @@ -3480,6 +3696,11 @@ msgctxt "Content/Library/Paragraph" msgid "Remaining storage space" msgstr "" +#: front/src/views/Notifications.vue:18 src/views/Notifications.vue:52 +msgctxt "Content/Notifications/Label" +msgid "Remind me in:" +msgstr "" + #: front/src/views/content/remote/Home.vue:6 msgctxt "Content/Library/Title/Noun" msgid "Remote libraries" @@ -3487,12 +3708,8 @@ msgstr "Fernmediatheken" #: front/src/views/content/remote/Home.vue:7 msgctxt "Content/Library/Paragraph" -msgid "" -"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." -msgstr "" -"Entfernte Mediatheken sind im Besitz anderer Nutzer des Netzwerks. Du kannst" -" darauf zugreifen, wenn diese öffentlich sind, oder du die Erlaubnis hast." +msgid "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." +msgstr "Entfernte Mediatheken sind im Besitz anderer Nutzer des Netzwerks. Du kannst darauf zugreifen, wenn diese öffentlich sind, oder du die Erlaubnis hast." #: front/src/components/library/radios/Filter.vue:59 msgctxt "Content/Radio/Button.Label/Verb" @@ -3509,6 +3726,13 @@ msgctxt "Content/Moderation/Button.Label" msgid "Remove filter" msgstr "Profilbild löschen" +#: front/src/components/manage/moderation/DomainsTable.vue:198 +#: front/src/views/admin/moderation/DomainsDetail.vue:39 +#, fuzzy +msgctxt "Content/Moderation/Action/Verb" +msgid "Remove from allow-list" +msgstr "Aus den Favoriten entfernen" + #: front/src/components/favorites/TrackFavoriteIcon.vue:26 msgctxt "Content/Track/Icon.Tooltip/Verb" msgid "Remove from favorites" @@ -3516,43 +3740,105 @@ msgstr "Aus den Favoriten entfernen" #: front/src/views/content/libraries/Quota.vue:38 msgctxt "Popup/Library/Paragraph" -msgid "" -"Removes uploaded but yet to be processed tracks completely, adding the " -"corresponding data to your quota." -msgstr "" -"Die importierten Titel, die noch nicht vom Server verarbeitet wurden, werden" -" vollständig entfernt. Du erhältst den entsprechenden Speicherplatz zurück." +msgid "Removes uploaded but yet to be processed tracks completely, adding the corresponding data to your quota." +msgstr "Die importierten Titel, die noch nicht vom Server verarbeitet wurden, werden vollständig entfernt. Du erhältst den entsprechenden Speicherplatz zurück." #: front/src/views/content/libraries/Quota.vue:64 msgctxt "Popup/Library/Paragraph" -msgid "" -"Removes uploaded tracks skipped during the import processes completely, " -"adding the corresponding data to your quota." -msgstr "" -"Die hochgeladenen Titel, die beim Import übersprungen wurden, werden " -"vollständig entfernt. Du erhältst den entsprechenden Speicherplatz zurück." +msgid "Removes uploaded tracks skipped during the import processes completely, adding the corresponding data to your quota." +msgstr "Die hochgeladenen Titel, die beim Import übersprungen wurden, werden vollständig entfernt. Du erhältst den entsprechenden Speicherplatz zurück." #: front/src/views/content/libraries/Quota.vue:90 msgctxt "Popup/Library/Paragraph" -msgid "" -"Removes uploaded tracks that could not be processed by the server " -"completely, adding the corresponding data to your quota." +msgid "Removes uploaded tracks that could not be processed by the server completely, adding the corresponding data to your quota." +msgstr "Die hochgeladenen Titel, die vom Server nicht verarbeitet wurden, werden vollständig entfernt. Du erhältst den entsprechenden Speicherplatz zurück." + +#: front/src/components/audio/PlayButton.vue:94 +#, fuzzy +msgctxt "*/Queue/Dropdown/Button/Title" +msgid "Replace current queue" +msgstr "Zur Warteschlange hinzufügen" + +#: front/src/components/mixins/Report.vue:6 src/components/mixins/Report.vue:7 +msgctxt "*/Moderation/*/Verb" +msgid "Report @%{ username }…" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:5 +msgctxt "Content/Moderation/Card/Short" +msgid "Report %{ id }" +msgstr "" + +#: front/src/components/moderation/ReportModal.vue:139 +#, fuzzy +msgctxt "*/Moderation/Message" +msgid "Report successfully submitted, thank you" +msgstr "Die Änderung wurde erfolgreich übertragen." + +#: front/src/components/mixins/Report.vue:36 +#: src/components/mixins/Report.vue:37 +#, fuzzy +msgctxt "*/Moderation/*/Verb" +msgid "Report this album…" +msgstr "Dieses Album bearbeiten" + +#: front/src/components/mixins/Report.vue:50 +#: src/components/mixins/Report.vue:51 +#, fuzzy +msgctxt "*/Moderation/*/Verb" +msgid "Report this artist…" +msgstr "Diesen Titel ändern" + +#: front/src/components/mixins/Report.vue:72 +#: src/components/mixins/Report.vue:73 +#, fuzzy +msgctxt "*/Moderation/*/Verb" +msgid "Report this library…" +msgstr "Diese Mediathek löschen?" + +#: front/src/components/mixins/Report.vue:61 +#: src/components/mixins/Report.vue:62 +#, fuzzy +msgctxt "*/Moderation/*/Verb" +msgid "Report this playlist…" +msgstr "Zur Wiedergabeliste hinzufügen" + +#: front/src/components/mixins/Report.vue:23 +#: src/components/mixins/Report.vue:24 +#, fuzzy +msgctxt "*/Moderation/*/Verb" +msgid "Report this track…" +msgstr "Diesen Titel ändern" + +#: front/src/components/audio/PlayButton.vue:95 +msgctxt "*/Moderation/*/Button/Label,Verb" +msgid "Report…" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:117 +msgctxt "Content/*/*/Short" +msgid "Reported object" +msgstr "" + +#: front/src/views/admin/moderation/Base.vue:5 +#: front/src/views/admin/moderation/ReportsList.vue:3 +#: front/src/views/admin/moderation/ReportsList.vue:208 +msgctxt "*/Moderation/*/Noun" +msgid "Reports" msgstr "" -"Die hochgeladenen Titel, die vom Server nicht verarbeitet wurden, werden " -"vollständig entfernt. Du erhältst den entsprechenden Speicherplatz zurück." -#: front/src/components/auth/SubsonicTokenForm.vue:33 -#: front/src/components/auth/SubsonicTokenForm.vue:36 +#: front/src/components/auth/SubsonicTokenForm.vue:38 +#: front/src/components/auth/SubsonicTokenForm.vue:41 msgctxt "*/Settings/Button.Label/Verb" msgid "Request a new password" msgstr "Neues Kennwort beantragen" -#: front/src/components/auth/SubsonicTokenForm.vue:34 +#: front/src/components/auth/SubsonicTokenForm.vue:39 msgctxt "Popup/Settings/Title" msgid "Request a new Subsonic API password?" msgstr "Neues Subsonic-API-Kennwort beantragen?" -#: front/src/components/auth/SubsonicTokenForm.vue:42 +#: front/src/components/auth/SubsonicTokenForm.vue:47 msgctxt "Content/Settings/Button.Label/Verb" msgid "Request a password" msgstr "Kennwort beantragen" @@ -3562,35 +3848,52 @@ msgctxt "Popup/*/Loading.Title" msgid "Requesting a fetch…" msgstr "" -#: front/src/components/library/EditForm.vue:82 +#: front/src/components/library/EditForm.vue:94 msgctxt "Content/Library/Button.Label" -msgid "Reset to initial value: %{ value }" +msgid "Reset to initial value" msgstr "" -#: front/src/components/auth/Login.vue:35 src/views/auth/PasswordReset.vue:4 -#: front/src/views/auth/PasswordReset.vue:53 +#: front/src/components/auth/LoginForm.vue:34 +#: src/views/auth/PasswordReset.vue:4 front/src/views/auth/PasswordReset.vue:53 msgctxt "*/Login/*/Verb" msgid "Reset your password" msgstr "Kennwort zurücksetzen" +#: front/src/components/manage/moderation/ReportCard.vue:83 +#, fuzzy +msgctxt "Content/*/*/Noun" +msgid "Resolution date" +msgstr "Erstellungsdatum" + +#: front/src/components/manage/moderation/ReportCard.vue:218 +msgctxt "Content/*/Button.Label/Verb" +msgid "Resolve" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:62 +#: front/src/views/admin/moderation/ReportsList.vue:20 +msgctxt "Content/*/*/Short" +msgid "Resolved" +msgstr "" + #: front/src/views/content/libraries/FilesTable.vue:223 msgctxt "Content/Library/Dropdown/Verb" msgid "Restart import" msgstr "Import erneut starten" +#: front/src/components/library/EditForm.vue:31 +msgctxt "Content/Library/Button.Label" +msgid "Restrict to unreviewed edits" +msgstr "Begrenze auf unbestätigte Änderungen" + #: front/src/components/favorites/List.vue:39 -#: src/components/library/Albums.vue:30 -#: front/src/components/library/Artists.vue:30 +#: src/components/library/Albums.vue:34 +#: front/src/components/library/Artists.vue:34 #: src/components/library/Radios.vue:52 front/src/views/playlists/List.vue:32 msgctxt "Content/Search/Dropdown.Label/Noun" msgid "Results per page" msgstr "Ergebnisse pro Seite" -#: front/src/components/library/EditForm.vue:31 -msgctxt "Content/Library/Button.Label" -msgid "Retrict to unreviewed edits" -msgstr "Begrenze auf unbestätigte Änderungen" - #: front/src/views/auth/EmailConfirm.vue:17 msgctxt "Content/Signup/Link/Verb" msgid "Return to login" @@ -3621,52 +3924,54 @@ msgctxt "Content/Moderation/Card.Title/Noun" msgid "Rule" msgstr "Regel" -#: front/src/components/admin/SettingsGroup.vue:67 +#: front/src/components/About.vue:28 src/components/About.vue:56 +#, fuzzy +msgctxt "Content/About/Header" +msgid "Rules" +msgstr "Regel" + +#: front/src/components/admin/SettingsGroup.vue:75 #: front/src/components/library/radios/Builder.vue:34 msgctxt "Content/*/Button.Label/Verb" msgid "Save" msgstr "Speichern" -#: front/src/views/content/remote/Card.vue:175 +#: front/src/views/content/remote/Card.vue:203 msgctxt "Content/Library/Message" msgid "Scan launched" msgstr "Scan gestartet" -#: front/src/views/content/remote/Card.vue:67 +#: front/src/views/content/remote/Card.vue:80 msgctxt "Content/Library/Card.Button.Label/Verb" msgid "Scan now" msgstr "Jetzt scannen" -#: front/src/views/content/remote/Card.vue:35 +#: front/src/views/content/remote/Card.vue:48 msgctxt "Content/Library/Card.List item" msgid "Scan pending" msgstr "Aufsteigend" -#: front/src/views/content/remote/Card.vue:176 +#: front/src/views/content/remote/Card.vue:204 msgctxt "Content/Library/Message" msgid "Scan skipped (previous scan is too recent)" msgstr "Scan ausgelassen (der letzte Scan fand kurz zuvor statt)" -#: front/src/views/content/remote/Card.vue:47 +#: front/src/views/content/remote/Card.vue:60 msgctxt "Content/Library/Card.List item" msgid "Scanned" msgstr "Scan abgeschlossen" -#: front/src/views/content/remote/Card.vue:51 +#: front/src/views/content/remote/Card.vue:64 msgctxt "Content/Library/Card.List item" msgid "Scanned with errors" msgstr "Scan mit Fehlern abgeschlossen" -#: front/src/views/content/remote/Card.vue:39 +#: front/src/views/content/remote/Card.vue:52 msgctxt "Content/Library/Card.List item" msgid "Scanning… (%{ progress }%)" msgstr "Scan läuft… (%{ progress }%)" #: front/src/components/auth/ApplicationForm.vue:22 -msgctxt "Content/Applications/Input.Label/Noun" -msgid "Scopes" -msgstr "" - #: front/src/components/auth/Settings.vue:226 msgctxt "Content/*/*/Noun" msgid "Scopes" @@ -3679,12 +3984,14 @@ msgstr "" #: front/src/components/manage/library/ArtistsTable.vue:5 #: front/src/components/manage/library/EditsCardList.vue:6 #: front/src/components/manage/library/LibrariesTable.vue:5 +#: front/src/components/manage/library/TagsTable.vue:5 #: front/src/components/manage/library/TracksTable.vue:5 #: front/src/components/manage/library/UploadsTable.vue:5 #: front/src/components/manage/moderation/AccountsTable.vue:5 #: front/src/components/manage/moderation/DomainsTable.vue:5 #: front/src/components/manage/users/InvitationsTable.vue:5 #: front/src/components/manage/users/UsersTable.vue:5 +#: front/src/views/admin/moderation/ReportsList.vue:8 #: front/src/views/content/libraries/FilesTable.vue:5 #: src/views/playlists/List.vue:13 msgctxt "Content/Search/Input.Label/Noun" @@ -3697,6 +4004,7 @@ msgid "Search a remote library" msgstr "Eine Fernmediathek suchen" #: front/src/components/manage/library/EditsCardList.vue:211 +#: front/src/views/admin/moderation/ReportsList.vue:207 msgctxt "Content/Search/Input.Placeholder" msgid "Search by account, summary, domain…" msgstr "Nach Titel, Künstler·innen oder Domain suchen…" @@ -3731,7 +4039,13 @@ msgctxt "Content/Search/Input.Placeholder" msgid "Search by domain, username, bio…" msgstr "Suche nach Domain, Benutzernamen, Biografie…" -#: front/src/components/manage/moderation/DomainsTable.vue:151 +#: front/src/components/manage/library/TagsTable.vue:165 +#, fuzzy +msgctxt "Content/Search/Input.Placeholder" +msgid "Search by name" +msgstr "Suchen nach Name…" + +#: front/src/components/manage/moderation/DomainsTable.vue:168 msgctxt "Content/Search/Input.Placeholder" msgid "Search by name…" msgstr "Suchen nach Name…" @@ -3746,12 +4060,12 @@ msgctxt "Content/Admin/Input.Placeholder/Verb" msgid "Search by username, e-mail address, code…" msgstr "Benutzernamen, E-Mail-Adresse, Kode suchen…" -#: front/src/components/manage/users/UsersTable.vue:163 +#: front/src/components/manage/users/UsersTable.vue:164 msgctxt "Content/Search/Input.Placeholder" msgid "Search by username, e-mail address, name…" msgstr "Benutzernamen, E-Mail-Adresse, Namen suchen…" -#: front/src/components/audio/SearchBar.vue:20 +#: front/src/components/audio/SearchBar.vue:27 msgctxt "Sidebar/Search/Input.Placeholder" msgid "Search for artists, albums, tracks…" msgstr "Nach Künstler·innen, Alben und Titeln suchen…" @@ -3761,16 +4075,30 @@ msgctxt "Content/Search/Title" msgid "Search for some music" msgstr "Musik suchen" -#: front/src/components/library/AlbumBase.vue:57 -#: front/src/components/library/ArtistBase.vue:68 -#: front/src/components/library/TrackBase.vue:76 +#: front/src/components/library/TagsSelector.vue:6 +#, fuzzy +msgctxt "*/Dropdown/Placeholder/Verb" +msgid "Search for tags…" +msgstr "Suchen nach Name…" + +#: front/src/components/library/AlbumBase.vue:66 +#: front/src/components/library/ArtistBase.vue:77 +#: front/src/components/library/TrackBase.vue:82 +#, fuzzy +msgctxt "Content/*/Button.Label/Verb" +msgid "Search on Discogs" +msgstr "Musik suchen" + +#: front/src/components/library/AlbumBase.vue:58 +#: front/src/components/library/ArtistBase.vue:69 +#: front/src/components/library/TrackBase.vue:74 msgctxt "Content/*/Button.Label/Verb" msgid "Search on Wikipedia" msgstr "Auf Wikipedia suchen" #: front/src/components/library/Library.vue:35 -#: src/views/admin/library/Base.vue:32 -#: front/src/views/admin/moderation/Base.vue:22 +#: src/views/admin/library/Base.vue:35 +#: front/src/views/admin/moderation/Base.vue:44 #: src/views/admin/users/Base.vue:21 front/src/views/content/Base.vue:19 msgctxt "Menu/*/Hidden text" msgid "Secondary menu" @@ -3781,6 +4109,26 @@ msgctxt "Content/Admin/Menu.Title" msgid "Sections" msgstr "Abschnitte" +#: front/src/components/ShortcutsModal.vue:108 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek backwards 30s" +msgstr "" + +#: front/src/components/ShortcutsModal.vue:100 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek backwards 5s" +msgstr "" + +#: front/src/components/ShortcutsModal.vue:112 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek forwards 30s" +msgstr "" + +#: front/src/components/ShortcutsModal.vue:104 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek forwards 5s" +msgstr "" + #: front/src/components/library/radios/Builder.vue:46 msgctxt "Content/Radio/Dropdown.Placeholder/Verb" msgid "Select a filter" @@ -3799,9 +4147,14 @@ msgctxt "Content/*/Link/Verb" msgid "Select only current page" msgstr "Nur die aktuelle Seite auswählen" -#: front/src/components/Sidebar.vue:43 src/components/Sidebar.vue:108 -#: front/src/components/manage/users/UsersTable.vue:181 -#: front/src/views/admin/moderation/AccountsDetail.vue:506 +#: front/src/components/Home.vue:43 +msgctxt "Content/Home/Link" +msgid "Server rules" +msgstr "" + +#: front/src/components/Sidebar.vue:43 src/components/Sidebar.vue:112 +#: front/src/components/manage/users/UsersTable.vue:182 +#: front/src/views/admin/moderation/AccountsDetail.vue:526 msgctxt "*/*/*/Noun" msgid "Settings" msgstr "Einstellungen" @@ -3823,18 +4176,25 @@ msgstr "Freigabe-Link" #: front/src/views/content/libraries/Detail.vue:15 msgctxt "Content/Library/Paragraph" -msgid "" -"Share this link with other users so they can request access to your library." -msgstr "" -"Teile diesen Link mit anderen Nutzenden, damit diese Zugriff auf deine " -"Mediathek anfordern können." +msgid "Share this link with other users so they can request access to your library." +msgstr "Teile diesen Link mit anderen Nutzenden, damit diese Zugriff auf deine Mediathek anfordern können." #: front/src/views/content/libraries/Detail.vue:14 -#: front/src/views/content/remote/Card.vue:77 +#: front/src/views/content/remote/Card.vue:90 msgctxt "Content/Library/Title" msgid "Sharing link" msgstr "Freigabe-Link" +#: front/src/components/audio/EmbedWizard.vue:5 +msgctxt "Content/Embed/Message" +msgid "Sharing will not work because this pod doesn't allow anonymous users to access content." +msgstr "" + +#: front/src/components/About.vue:156 +msgctxt "*/*/*/Verb" +msgid "Show" +msgstr "" + #: front/src/components/audio/album/Card.vue:38 #, fuzzy msgctxt "Content/Album/Card.Link/Verb" @@ -3843,10 +4203,11 @@ msgid_plural "Show %{ count } more tracks" msgstr[0] "%{ count } weiteren Track zeigen" msgstr[1] "%{ count } weitere Tracks zeigen" -#: front/src/components/audio/artist/Card.vue:30 -msgctxt "Content/Artist/Card.Link" -msgid "Show 1 more album" -msgid_plural "Show %{ count } more albums" +#: front/src/components/tags/List.vue:11 +#, fuzzy +msgctxt "Content/*/Button/Label/Verb" +msgid "Show 1 more tag" +msgid_plural "Show %{ count } more tags" msgstr[0] "1 weiteres Album zeigen" msgstr[1] "%{ count } weitere Alben zeigen" @@ -3855,17 +4216,29 @@ msgctxt "Content/Library/Button.Label" msgid "Show all edits" msgstr "Zeige alle Änderungen" -#: front/src/components/ShortcutsModal.vue:42 +#: front/src/components/ShortcutsModal.vue:60 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Show available keyboard shortcuts" msgstr "Verfügbare Tastenkombinationen zeigen" -#: front/src/views/Notifications.vue:7 +#: front/src/components/common/ExpandableDiv.vue:7 +#, fuzzy +msgctxt "*/*/Button,Label" +msgid "Show less" +msgstr "Zeige alle Änderungen" + +#: front/src/components/common/ExpandableDiv.vue:8 +#, fuzzy +msgctxt "*/*/Button,Label" +msgid "Show more" +msgstr "1 weiteres Album zeigen" + +#: front/src/views/Notifications.vue:72 msgctxt "Content/Notifications/Form.Label/Verb" msgid "Show read notifications" msgstr "Gelesene Benachrichtigungen zeigen" -#: front/src/components/forms/PasswordInput.vue:26 +#: front/src/components/forms/PasswordInput.vue:42 msgctxt "Content/Settings/Button.Tooltip/Verb" msgid "Show/hide password" msgstr "Passwort verstecken bzw. zeigen" @@ -3874,56 +4247,64 @@ msgstr "Passwort verstecken bzw. zeigen" #: front/src/components/manage/library/ArtistsTable.vue:84 #: front/src/components/manage/library/EditsCardList.vue:72 #: front/src/components/manage/library/LibrariesTable.vue:110 +#: front/src/components/manage/library/TagsTable.vue:79 #: front/src/components/manage/library/TracksTable.vue:95 #: front/src/components/manage/library/UploadsTable.vue:144 #: front/src/components/manage/moderation/AccountsTable.vue:88 -#: front/src/components/manage/moderation/DomainsTable.vue:74 +#: front/src/components/manage/moderation/DomainsTable.vue:85 #: front/src/components/manage/users/InvitationsTable.vue:76 -#: front/src/components/manage/users/UsersTable.vue:87 +#: front/src/components/manage/users/UsersTable.vue:88 #: front/src/views/content/libraries/FilesTable.vue:117 msgctxt "Content/*/Paragraph" msgid "Showing results %{ start }-%{ end } on %{ total }" msgstr "Ergebnisse %{ start } bis %{ end } von %{ total }" -#: front/src/components/ShortcutsModal.vue:83 +#: front/src/components/ShortcutsModal.vue:140 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Shuffle queue" msgstr "Warteschlange mischen" -#: front/src/components/audio/Player.vue:641 +#: front/src/components/audio/Player.vue:667 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Shuffle your queue" msgstr "Warteschlange mischen" -#: front/src/components/auth/Signup.vue:97 +#: front/src/components/Home.vue:103 +#, fuzzy +msgctxt "*/Signup/Title" +msgid "Sign up" +msgstr "Anmeldung" + +#: front/src/views/auth/Signup.vue:37 msgctxt "*/Signup/Title" msgid "Sign Up" msgstr "Anmeldung" +#: front/src/components/Home.vue:107 +msgctxt "Content/Home/Paragraph" +msgid "Sign up now to keep a track of your favorites, create playlists, discover new content and much more!" +msgstr "" + #: front/src/components/manage/users/UsersTable.vue:40 msgctxt "Content/Admin/Table.Label/Short, Noun (Value is a date)" msgid "Sign-up" msgstr "Anmeldung" -#: front/src/components/mixins/Translations.vue:57 -#: front/src/views/admin/moderation/AccountsDetail.vue:197 -#: front/src/components/mixins/Translations.vue:58 +#: front/src/components/mixins/Translations.vue:69 +#: front/src/views/admin/moderation/AccountsDetail.vue:198 +#: front/src/components/mixins/Translations.vue:70 msgctxt "Content/Admin/Table.Label/Noun" msgid "Sign-up date" msgstr "Anmeldedatum" -#: front/src/components/manage/library/UploadsTable.vue:65 -#: front/src/views/admin/library/UploadDetail.vue:219 -msgctxt "Content/*/*/Noun" -msgid "Size" -msgstr "Größe" - #: front/src/components/library/FileUpload.vue:94 #: front/src/components/library/TrackDetail.vue:39 -#: front/src/components/mixins/Translations.vue:54 +#: front/src/components/manage/library/UploadsTable.vue:65 +#: front/src/components/mixins/Translations.vue:66 +#: front/src/views/admin/library/UploadDetail.vue:219 #: front/src/views/content/libraries/FilesTable.vue:61 -#: front/src/components/mixins/Translations.vue:55 -msgctxt "Content/Library/*/in MB" +#: front/src/components/mixins/Translations.vue:67 +msgctxt "Content/*/*/Noun" msgid "Size" msgstr "Größe" @@ -3940,7 +4321,7 @@ msgctxt "Content/Library/Label" msgid "Skipped files" msgstr "Ãœbersprungene Dateien" -#: front/src/views/admin/moderation/DomainsDetail.vue:89 +#: front/src/views/admin/moderation/DomainsDetail.vue:126 msgctxt "Content/Moderation/Table.Label" msgid "Software" msgstr "Software" @@ -3955,96 +4336,65 @@ msgctxt "Content/*/Paragraph" msgid "Sorry, the page you asked for does not exist:" msgstr "Entschuldigung, die aufgerufene Seite existiert nicht:" -#: front/src/components/Footer.vue:49 +#: front/src/components/Footer.vue:57 msgctxt "Footer/*/List item.Link" msgid "Source code" msgstr "Quellcode" #: front/src/components/auth/Profile.vue:23 -#: front/src/components/manage/users/UsersTable.vue:70 +#: front/src/components/manage/users/UsersTable.vue:71 msgctxt "Content/Profile/User role" msgid "Staff member" msgstr "Teammember" -#: front/src/components/audio/PlayButton.vue:23 +#: front/src/components/audio/PlayButton.vue:27 #: src/components/radios/Button.vue:4 msgctxt "*/Queue/Button.Label/Short, Verb" msgid "Start radio" msgstr "Radio einschalten" -#: front/src/views/admin/Settings.vue:86 -msgctxt "Content/Admin/Menu" +#: front/src/components/About.vue:170 src/components/Home.vue:53 +#: front/src/views/admin/Settings.vue:87 +#, fuzzy +msgctxt "Content/Home/Header" msgid "Statistics" msgstr "Statistik" -#: front/src/views/admin/moderation/AccountsDetail.vue:490 +#: front/src/views/admin/moderation/AccountsDetail.vue:510 msgctxt "Content/Moderation/Help text" -msgid "" -"Statistics are computed from known activity and content on your instance, " -"and do not reflect general activity for this account" -msgstr "" -"Statistiken betrachten ausschließlich die Aktivität und den Inhalt, die von " -"deiner Instanz bekannt sind, und stellen nicht die gesamte Aktivität dieses " -"Kontos dar" +msgid "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this account" +msgstr "Statistiken betrachten ausschließlich die Aktivität und den Inhalt, die von deiner Instanz bekannt sind, und stellen nicht die gesamte Aktivität dieses Kontos dar" -#: front/src/views/admin/moderation/DomainsDetail.vue:371 +#: front/src/views/admin/moderation/DomainsDetail.vue:418 msgctxt "Content/Moderation/Help text" -msgid "" -"Statistics are computed from known activity and content on your instance, " -"and do not reflect general activity for this domain" -msgstr "" -"Statistiken betrachten ausschließlich die Aktivität und den Inhalt, die von " -"deiner Instanz bekannt sind, und stellen nicht die gesamte Aktivität dieses " -"Domains dar" - -#: front/src/views/admin/library/AlbumDetail.vue:329 -#: front/src/views/admin/library/ArtistDetail.vue:328 -#: front/src/views/admin/library/LibraryDetail.vue:316 -#: front/src/views/admin/library/TrackDetail.vue:371 +msgid "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this domain" +msgstr "Statistiken betrachten ausschließlich die Aktivität und den Inhalt, die von deiner Instanz bekannt sind, und stellen nicht die gesamte Aktivität dieses Domains dar" + +#: front/src/views/admin/library/AlbumDetail.vue:346 +#: front/src/views/admin/library/ArtistDetail.vue:345 +#: front/src/views/admin/library/LibraryDetail.vue:356 +#: front/src/views/admin/library/TagDetail.vue:210 +#: front/src/views/admin/library/TrackDetail.vue:389 #: front/src/views/admin/library/UploadDetail.vue:335 msgctxt "Content/Moderation/Help text" -msgid "" -"Statistics are computed from known activity and content on your instance, " -"and do not reflect general activity for this object" -msgstr "" -"Statistiken betrachten ausschließlich die Aktivität und den Inhalt, die von " -"deiner Instanz bekannt sind, und stellen nicht die gesamte Aktivität dieses " -"Kontos dar" - -#: front/src/views/admin/moderation/DomainsDetail.vue:115 -msgctxt "Content/Moderation/Table.Label (Value is Error message)" -msgid "Status" -msgstr "Status" +msgid "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" +msgstr "Statistiken betrachten ausschließlich die Aktivität und den Inhalt, die von deiner Instanz bekannt sind, und stellen nicht die gesamte Aktivität dieses Kontos dar" #: front/src/components/library/FileUpload.vue:95 -msgctxt "Content/Library/Table.Label (Value is Uploading/Uploaded/Error)" -msgid "Status" -msgstr "Status" - -#: front/src/views/content/libraries/Detail.vue:28 -msgctxt "Content/Library.Federation/Table.Label (Value is Approved/Rejected)" -msgid "Status" -msgstr "Status" - +#: front/src/components/manage/library/EditsCardList.vue:12 +#: front/src/components/manage/moderation/ReportCard.vue:57 #: front/src/components/manage/users/InvitationsTable.vue:17 #: front/src/components/manage/users/InvitationsTable.vue:39 -msgctxt "Content/Admin/*/Noun (Value is Used/Not used)" -msgid "Status" -msgstr "Status" - #: front/src/components/manage/users/UsersTable.vue:43 -msgctxt "Content/Admin/Table.Label/Noun (Value is Regular user/Admin)" -msgid "Status" -msgstr "Status" - -#: front/src/components/manage/library/EditsCardList.vue:12 -msgctxt "" -"Content/Search/Dropdown.Label (Value is All/Pending " -"review/Approved/Rejected)" +#: front/src/views/admin/moderation/DomainsDetail.vue:152 +#: front/src/views/admin/moderation/ReportsList.vue:14 +#: front/src/views/content/libraries/Detail.vue:28 +#, fuzzy +msgctxt "*/*/*" msgid "Status" msgstr "Status" -#: front/src/components/Sidebar.vue:174 src/components/radios/Button.vue:3 +#: front/src/components/Sidebar.vue:178 src/components/radios/Button.vue:3 msgctxt "*/Player/Button.Label/Short, Verb" msgid "Stop radio" msgstr "Radio ausschalten" @@ -4054,7 +4404,7 @@ msgctxt "*/*/Button.Label/Verb" msgid "Submit" msgstr "Abschicken" -#: front/src/components/library/EditForm.vue:98 +#: front/src/components/library/EditForm.vue:110 msgctxt "Content/Library/Button.Label/Verb" msgid "Submit and apply edit" msgstr "Senden und anwenden" @@ -4064,12 +4414,24 @@ msgctxt "Content/Library/Button.Label" msgid "Submit another edit" msgstr "" -#: front/src/components/library/EditForm.vue:99 +#: front/src/components/moderation/ReportModal.vue:64 +#, fuzzy +msgctxt "Popup/*/Button.Label" +msgid "Submit report" +msgstr "Abschicken" + +#: front/src/components/library/EditForm.vue:111 msgctxt "Content/Library/Button.Label/Verb" msgid "Submit suggestion" msgstr "" -#: front/src/views/admin/Settings.vue:85 +#: front/src/components/manage/moderation/ReportCard.vue:17 +#, fuzzy +msgctxt "Content/Moderation/*" +msgid "Submitted by" +msgstr "Abschicken" + +#: front/src/views/admin/Settings.vue:86 msgctxt "Content/Admin/Menu" msgid "Subsonic" msgstr "Subsonic" @@ -4109,16 +4471,21 @@ msgctxt "Content/Library/Tab.Title/Short" msgid "Summary" msgstr "Zusammenfassung" -#: front/src/components/library/EditForm.vue:87 +#: front/src/components/library/EditForm.vue:99 msgctxt "*/*/*" msgid "Summary (optional)" msgstr "Zusammenfassung (optional)" -#: front/src/components/Footer.vue:39 +#: front/src/components/Footer.vue:47 msgctxt "Footer/*/Listitem.Link" msgid "Support forum" msgstr "Hilfe-Forum" +#: front/src/views/Notifications.vue:10 +msgctxt "Content/Notifications/Header" +msgid "Support this Funkwhale pod" +msgstr "" + #: front/src/components/library/FileUpload.vue:85 msgctxt "Content/Library/Paragraph" msgid "Supported extensions: %{ extensions }" @@ -4129,26 +4496,47 @@ msgctxt "Content/Playlist/Paragraph" msgid "Syncing changes to server…" msgstr "Synchronisierung der Änderungen auf dem Server…" -#: front/src/components/audio/EmbedWizard.vue:25 +#: front/src/components/audio/SearchBar.vue:35 +msgctxt "*/*/*/Noun" +msgid "Tag" +msgstr "" + +#: front/src/views/admin/library/TagDetail.vue:61 +#, fuzzy +msgctxt "Content/Moderation/Title" +msgid "Tag data" +msgstr "Trackname" + +#: front/src/components/library/Albums.vue:23 +#: src/components/library/Artists.vue:15 +#: front/src/views/admin/library/Base.vue:23 +#: src/views/admin/library/TagsList.vue:24 front/src/edits.js:24 +#: src/edits.js:50 src/edits.js:91 src/entities.js:120 +msgctxt "*/*/*/Noun" +msgid "Tags" +msgstr "" + +#: front/src/components/mixins/Translations.vue:44 +#: front/src/components/mixins/Translations.vue:45 +#, fuzzy +msgctxt "Content/Moderation/Dropdown" +msgid "Takedown request" +msgstr "Ausstehende Abonnieren-Anfrage" + +#: front/src/components/About.vue:35 src/components/About.vue:61 +msgctxt "Content/About/Header" +msgid "Terms and privacy policy" +msgstr "" + +#: front/src/components/audio/EmbedWizard.vue:35 #: front/src/components/common/CopyInput.vue:3 msgctxt "Content/*/Paragraph" msgid "Text copied to clipboard!" msgstr "Text in die Zwischenablage kopiert!" -#: front/src/components/Home.vue:26 -msgctxt "Content/Home/Paragraph" -msgid "" -"That's simple: we loved Grooveshark and we want to build something even " -"better." -msgstr "" -"So einfach ist es: wir liebten Grooveshark und wollen noch etwas viel " -"besseres aufbauen." - -#: front/src/views/admin/library/AlbumDetail.vue:75 +#: front/src/views/admin/library/AlbumDetail.vue:81 msgctxt "Content/Moderation/Paragraph" -msgid "" -"The album will be removed, as well as associated uploads, tracks, favorites " -"and listening history. This action is irreversible." +msgid "The album will be removed, as well as associated uploads, tracks, favorites and listening history. This action is irreversible." msgstr "" #: front/src/components/auth/Authorize.vue:39 @@ -4156,19 +4544,15 @@ msgctxt "Content/Auth/Paragraph" msgid "The application is also requesting the following unknown permissions:" msgstr "" -#: front/src/views/admin/library/ArtistDetail.vue:74 +#: front/src/views/admin/library/ArtistDetail.vue:79 msgctxt "Content/Moderation/Paragraph" -msgid "" -"The artist will be removed, as well as associated uploads, tracks, albums, " -"favorites and listening history. This action is irreversible." +msgid "The artist will be removed, as well as associated uploads, tracks, albums, favorites and listening history. This action is irreversible." msgstr "" -#: front/src/components/Footer.vue:53 +#: front/src/components/Footer.vue:61 msgctxt "Footer/*/List item.Link" msgid "The funkwhale logo was kindly designed and provided by Francis Gading." -msgstr "" -"Das Funkwhale-Logo wurde gestaltet und freundlicherweise zur Verfügung " -"gestellt von Francis Gading." +msgstr "Das Funkwhale-Logo wurde gestaltet und freundlicherweise zur Verfügung gestellt von Francis Gading." #: front/src/components/SetInstanceModal.vue:8 msgctxt "Popup/Instance/Error message.List item" @@ -4177,24 +4561,17 @@ msgstr "Die angegebene Adresse ist kein Funkwhale-Server" #: front/src/views/content/libraries/Form.vue:34 msgctxt "Popup/Library/Paragraph" -msgid "" -"The library and all its tracks will be deleted. This can not be undone." -msgstr "" -"Die Mediathek und all ihre Titel werden gelöscht. Dieser Vorgang kann nicht " -"rückgängig gemacht werden." +msgid "The library and all its tracks will be deleted. This can not be undone." +msgstr "Die Mediathek und all ihre Titel werden gelöscht. Dieser Vorgang kann nicht rückgängig gemacht werden." #: front/src/views/admin/library/LibraryDetail.vue:61 msgctxt "Content/Moderation/Paragraph" -msgid "" -"The library will be removed, as well as associated uploads, and follows. " -"This action is irreversible." +msgid "The library will be removed, as well as associated uploads, and follows. This action is irreversible." msgstr "" #: front/src/components/library/ImportStatusModal.vue:140 msgctxt "Popup/Import/Error.Label" -msgid "" -"The metadata included in the file is invalid or some mandatory fields are " -"missing." +msgid "The metadata included in the file is invalid or some mandatory fields are missing." msgstr "" #: front/src/components/library/FileUpload.vue:38 @@ -4207,14 +4584,16 @@ msgctxt "Sidebar/Player/Error message.Paragraph" msgid "The next track will play automatically in a few seconds…" msgstr "Der nächste Titel wird automatisch in wenigen Sekunden wiedergegeben…" -#: front/src/components/Home.vue:116 -msgctxt "Content/Home/List item" -msgid "" -"The plaform is free and open-source, you can install it and modify it " -"without worries" +#: front/src/components/manage/moderation/NotesThread.vue:27 +#, fuzzy +msgctxt "Content/Moderation/Paragraph" +msgid "The note will be removed. This action is irreversible." +msgstr "Der Vorschlag wird entgültig gelöscht. Das kann nicht rückgängig gemacht werden." + +#: front/src/components/manage/moderation/ReportCard.vue:120 +msgctxt "Content/Moderation/Message" +msgid "The object associated with this report was deleted." msgstr "" -"Die Plattform ist kostenlos und Open-Source, du kannst sie installieren und " -"anpassen ohne Beschränkung" #: front/src/components/playlists/Form.vue:14 msgctxt "Content/Playlist/Error message.Title" @@ -4228,54 +4607,49 @@ msgstr "" #: front/src/components/federation/FetchButton.vue:13 msgctxt "Popup/*/Message.Content" -msgid "" -"The remote server answered, but returned data was unsupported by Funkwhale." +msgid "The remote server answered, but returned data was unsupported by Funkwhale." msgstr "" #: front/src/components/federation/FetchButton.vue:44 msgctxt "*/*/Error" -msgid "The remote server didn't answered fast enough" +msgid "The remote server didn't respond quickly enough" msgstr "" #: front/src/components/federation/FetchButton.vue:50 msgctxt "*/*/Error" -msgid "The return server returned invalid JSON or JSON-LD data" +msgid "The remote server returned invalid JSON or JSON-LD data" msgstr "" #: front/src/components/manage/library/AlbumsTable.vue:189 msgctxt "Popup/*/Paragraph" -msgid "" -"The selected albums will be removed, as well as associated tracks, uploads, " -"favorites and listening history. This action is irreversible." +msgid "The selected albums will be removed, as well as associated tracks, uploads, favorites and listening history. This action is irreversible." msgstr "" #: front/src/components/manage/library/ArtistsTable.vue:179 msgctxt "Popup/*/Paragraph" -msgid "" -"The selected artist will be removed, as well as associated uploads, tracks, " -"albums, favorites and listening history. This action is irreversible." +msgid "The selected artist will be removed, as well as associated uploads, tracks, albums, favorites and listening history. This action is irreversible." msgstr "" #: front/src/components/manage/library/LibrariesTable.vue:206 msgctxt "Popup/*/Paragraph" -msgid "" -"The selected library will be removed, as well as associated uploads and " -"follows. This action is irreversible." +msgid "The selected library will be removed, as well as associated uploads and follows. This action is irreversible." msgstr "" +#: front/src/components/manage/library/TagsTable.vue:180 +#, fuzzy +msgctxt "Popup/*/Paragraph" +msgid "The selected tag will be removed and unlinked with existing content, if any. This action is irreversible." +msgstr "Der Vorschlag wird entgültig gelöscht. Das kann nicht rückgängig gemacht werden." + #: front/src/components/manage/library/TracksTable.vue:189 msgctxt "Popup/*/Paragraph" -msgid "" -"The selected tracks will be removed, as well as associated uploads, " -"favorites and listening history. This action is irreversible." +msgid "The selected tracks will be removed, as well as associated uploads, favorites and listening history. This action is irreversible." msgstr "" #: front/src/components/manage/library/UploadsTable.vue:256 msgctxt "Popup/*/Paragraph" msgid "The selected upload will be removed. This action is irreversible." -msgstr "" -"Der Vorschlag wird entgültig gelöscht. Das kann nicht rückgängig gemacht " -"werden." +msgstr "Der Vorschlag wird entgültig gelöscht. Das kann nicht rückgängig gemacht werden." #: front/src/components/SetInstanceModal.vue:7 msgctxt "Popup/Instance/Error message.List item" @@ -4289,11 +4663,14 @@ msgstr "Die Subsonic-API ist auf dieser Instanz nicht verfügbar." #: front/src/components/library/EditCard.vue:96 msgctxt "Popup/Library/Paragraph" -msgid "" -"The suggestion will be completely removed, this action is irreversible." -msgstr "" -"Der Vorschlag wird entgültig gelöscht. Das kann nicht rückgängig gemacht " -"werden." +msgid "The suggestion will be completely removed, this action is irreversible." +msgstr "Der Vorschlag wird entgültig gelöscht. Das kann nicht rückgängig gemacht werden." + +#: front/src/views/admin/library/TagDetail.vue:44 +#, fuzzy +msgctxt "Content/Moderation/Paragraph" +msgid "The tag will be removed and unlinked from any existing entity. This action is irreversible." +msgstr "Der Vorschlag wird entgültig gelöscht. Das kann nicht rückgängig gemacht werden." #: front/src/components/playlists/PlaylistModal.vue:34 msgctxt "Popup/Playlist/Error message.Title" @@ -4305,19 +4682,15 @@ msgctxt "Sidebar/Player/Error message.Title" msgid "The track cannot be loaded" msgstr "Der Titel kann nicht geladen werden" -#: front/src/views/admin/library/TrackDetail.vue:74 +#: front/src/views/admin/library/TrackDetail.vue:80 msgctxt "Content/Moderation/Paragraph" -msgid "" -"The track will be removed, as well as associated uploads, favorites and " -"listening history. This action is irreversible." +msgid "The track will be removed, as well as associated uploads, favorites and listening history. This action is irreversible." msgstr "" #: front/src/views/admin/library/UploadDetail.vue:68 msgctxt "Content/Moderation/Paragraph" msgid "The upload will be removed. This action is irreversible." -msgstr "" -"Der Vorschlag wird entgültig gelöscht. Das kann nicht rückgängig gemacht " -"werden." +msgstr "Der Vorschlag wird entgültig gelöscht. Das kann nicht rückgängig gemacht werden." #: front/src/components/library/FileUpload.vue:42 msgctxt "Content/Library/List item" @@ -4327,8 +4700,7 @@ msgstr "Die hochgeladenen Musikdateien sind im OGG-, Flac- oder MP3-Format" #: front/src/views/content/Home.vue:4 msgctxt "Content/Library/Paragraph" msgid "There are various ways to grab new content and make it available here." -msgstr "" -"Es gibt zahlreiche Wege, neue Inhalte abzurufen und hier zu veröffentlichen." +msgstr "Es gibt zahlreiche Wege, neue Inhalte abzurufen und hier zu veröffentlichen." #: front/src/components/manage/moderation/InstancePolicyForm.vue:66 msgctxt "Popup/Moderation/Paragraph" @@ -4345,21 +4717,37 @@ msgctxt "Content/Artist/Paragraph" msgid "This artist is present in the following libraries:" msgstr "Dieser Künstler kommt in den folgenden Mediatheken vor:" +#: front/src/components/manage/moderation/DomainsTable.vue:169 +#, fuzzy +msgctxt "Content/Moderation/Popup" +msgid "This domain is present in your allow-list" +msgstr "Dieser Künstler kommt in den folgenden Mediatheken vor:" + #: front/src/views/admin/moderation/AccountsDetail.vue:84 -#: front/src/views/admin/moderation/DomainsDetail.vue:48 +#: front/src/views/admin/moderation/DomainsDetail.vue:76 msgctxt "Content/Moderation/Card.Title" msgid "This domain is subject to specific moderation rules" msgstr "Für diese Domain gelten besondere Moderationsregeln" +#: front/src/components/manage/moderation/InstancePolicyModal.vue:16 +#, fuzzy +msgctxt "Content/Moderation/Card.Title" +msgid "This entity is subject to specific moderation rules" +msgstr "Für diese Domain gelten besondere Moderationsregeln" + #: front/src/views/content/Home.vue:9 msgctxt "Content/Library/Paragraph" msgid "This instance offers up to %{quota} of storage space for every user." msgstr "Diese Instanz bietet den Nutzenden bis zu %{quota} Speicherplatz." +#: front/src/components/auth/Settings.vue:300 +msgctxt "Popup/Settings/Paragraph" +msgid "This is irreversible and will permanently remove your data from our servers. You will we immediatly logged out." +msgstr "" + #: front/src/components/auth/Settings.vue:165 msgctxt "Content/Settings/Paragraph" -msgid "" -"This is the list of applications that have access to your account data." +msgid "This is the list of applications that have access to your account data." msgstr "" #: front/src/components/auth/Settings.vue:218 @@ -4375,33 +4763,22 @@ msgstr "Das bist du!" #: front/src/views/content/libraries/Form.vue:73 msgctxt "Content/Library/Input.Placeholder" msgid "This library contains my personal music, I hope you like it." -msgstr "" -"Diese Mediathek enthält meine persönliche Musik. Ich hoffe sie gefällt euch." +msgstr "Diese Mediathek enthält meine persönliche Musik. Ich hoffe sie gefällt euch." -#: front/src/views/content/remote/Card.vue:141 +#: front/src/views/content/remote/Card.vue:169 msgctxt "Content/Library/Card.Help text" -msgid "" -"This library is private and your approval from its owner is needed to access" -" its content" -msgstr "" -"Diese Mediathek ist privat. Dein Zugriff auf sie benötigt die Genehmigung " -"des Eigentümers / der Eigentümerin" +msgid "This library is private and your approval from its owner is needed to access its content" +msgstr "Diese Mediathek ist privat. Dein Zugriff auf sie benötigt die Genehmigung des Eigentümers / der Eigentümerin" -#: front/src/views/content/remote/Card.vue:142 +#: front/src/views/content/remote/Card.vue:170 msgctxt "Content/Library/Card.Help text" msgid "This library is public and you can access its content freely" -msgstr "" -"Diese Mediathek ist öffentlich. Du kannst auf den Inhalt ohne " -"Einschränkungen zugreifen" +msgstr "Diese Mediathek ist öffentlich. Du kannst auf den Inhalt ohne Einschränkungen zugreifen" #: front/src/components/common/ActionTable.vue:47 msgctxt "Modal/*/Paragraph" -msgid "" -"This may affect a lot of elements or have irreversible consequences, please " -"double check this is really what you want." -msgstr "" -"Durch diese Aktion können mehrere Elemente betroffen sein. Ãœberlege, ob du " -"es wirklich so willst." +msgid "This may affect a lot of elements or have irreversible consequences, please double check this is really what you want." +msgstr "Durch diese Aktion können mehrere Elemente betroffen sein. Ãœberlege, ob du es wirklich so willst." #: front/src/components/library/AlbumEdit.vue:8 #: front/src/components/library/ArtistEdit.vue:8 @@ -4410,6 +4787,11 @@ msgctxt "Content/*/Message" msgid "This object is managed by another server, you cannot edit it." msgstr "" +#: front/src/components/Home.vue:87 +msgctxt "Content/Home/Paragraph" +msgid "This pod runs Funkwhale, a community-driven project that lets you listen and share music and audio within a decentralized, open network." +msgstr "" + #: front/src/components/library/FileUpload.vue:51 msgctxt "Content/Library/Paragraph" msgid "This reference will be used to group imported files together." @@ -4417,20 +4799,16 @@ msgstr "Diese Referenz wird verwendet, um importierte Dateien zu gruppieren." #: front/src/components/mixins/Translations.vue:33 #: front/src/components/mixins/Translations.vue:34 +#, fuzzy msgctxt "Content/Library/Help text" -msgid "This track could not be processed, please it is tagged correctly" -msgstr "" -"Bei der Verarbeitung des Titels ist ein Fehler aufgetreten. Ãœberprüfe bitte," -" dass er richtig verschlagwortet ist" +msgid "This track could not be processed, please make sure it is tagged correctly" +msgstr "Bei der Verarbeitung des Titels ist ein Fehler aufgetreten. Ãœberprüfe bitte, dass er richtig verschlagwortet ist" #: front/src/components/mixins/Translations.vue:29 #: front/src/components/mixins/Translations.vue:30 msgctxt "Content/Library/Help text" -msgid "" -"This track has been uploaded, but hasn't been processed by the server yet" -msgstr "" -"Der Titel wurde hochgeladen, er ist aber noch nicht vom Server verarbeitet " -"worden" +msgid "This track has been uploaded, but hasn't been processed by the server yet" +msgstr "Der Titel wurde hochgeladen, er ist aber noch nicht vom Server verarbeitet worden" #: front/src/components/mixins/Translations.vue:25 #: front/src/components/mixins/Translations.vue:26 @@ -4438,7 +4816,7 @@ msgctxt "Content/Library/Help text" msgid "This track is already present in one of your libraries" msgstr "Eine deiner Mediatheken enthält bereits diesen Titel" -#: front/src/components/audio/PlayButton.vue:85 +#: front/src/components/audio/PlayButton.vue:103 msgctxt "*/Queue/Button/Title" msgid "This track is not available in any library you have access to" msgstr "Dieser Titel ist in keiner deiner verfügbaren Mediatheken enthalten" @@ -4448,93 +4826,84 @@ msgctxt "Content/Track/Paragraph" msgid "This track is present in the following libraries:" msgstr "Dieser Track ist in den folgenden Mediatheken enthalten:" -#: front/src/views/playlists/Detail.vue:38 +#: front/src/views/playlists/Detail.vue:46 msgctxt "Popup/Playlist/Paragraph" msgid "This will completely delete this playlist and cannot be undone." -msgstr "" -"Die Wiedergabeliste wird dauerhaft gelöscht und kann nicht zurückerstellt " -"werden." +msgstr "Die Wiedergabeliste wird dauerhaft gelöscht und kann nicht zurückerstellt werden." #: front/src/views/radios/Detail.vue:27 msgctxt "Popup/Radio/Paragraph" msgid "This will completely delete this radio and cannot be undone." -msgstr "" -"Das Radio wird dauerhaft gelöscht und kann nicht wiederhergestellt werden." +msgstr "Das Radio wird dauerhaft gelöscht und kann nicht wiederhergestellt werden." -#: front/src/components/auth/SubsonicTokenForm.vue:50 +#: front/src/components/auth/SubsonicTokenForm.vue:55 msgctxt "Popup/Settings/Paragraph" -msgid "" -"This will completely disable access to the Subsonic API using from account." +msgid "This will completely disable access to the Subsonic API using from account." msgstr "Der Zugriff zur Subsonic-API von diesem Konto wird deaktiviert." -#: front/src/components/auth/SubsonicTokenForm.vue:35 -msgctxt "Popup/Settings/Paragraph" -msgid "" -"This will log you out from existing devices that use the current password." +#: front/src/components/manage/moderation/ReportCard.vue:359 +msgctxt "Content/Moderation/Popup,Paragraph" +msgid "This will delete the object associated with this report and mark the report as resolved. The deletion is irreversible." msgstr "" -"Du wirst von den vorhandenen Geräten abgemeldet, die dieses Passwort nutzen." + +#: front/src/components/auth/SubsonicTokenForm.vue:40 +msgctxt "Popup/Settings/Paragraph" +msgid "This will log you out from existing devices that use the current password." +msgstr "Du wirst von den vorhandenen Geräten abgemeldet, die dieses Passwort nutzen." #: front/src/components/auth/Settings.vue:253 msgctxt "Popup/Settings/Paragraph" -msgid "" -"This will permanently delete the application and all the associated tokens." -msgstr "" -"Die Wiedergabeliste wird dauerhaft gelöscht und kann nicht zurückerstellt " -"werden." +msgid "This will permanently delete the application and all the associated tokens." +msgstr "Die Wiedergabeliste wird dauerhaft gelöscht und kann nicht zurückerstellt werden." #: front/src/components/auth/Settings.vue:194 msgctxt "Popup/Settings/Paragraph" -msgid "" -"This will prevent this application from accessing the service on your " -"behalf." +msgid "This will prevent this application from accessing the service on your behalf." msgstr "" #: front/src/components/playlists/Editor.vue:54 msgctxt "Popup/Playlist/Paragraph" msgid "This will remove all tracks from this playlist and cannot be undone." -msgstr "" -"Damit werden alle Titel von der Playlist gelöscht. Das kann nicht rückgängig" -" gemacht werden." - -#: front/src/views/admin/library/AlbumDetail.vue:99 -#: front/src/views/admin/library/TrackDetail.vue:98 src/edits.js:21 -#: src/edits.js:39 -msgctxt "*/*/*/Noun" -msgid "Title" -msgstr "Titel" +msgstr "Damit werden alle Titel von der Playlist gelöscht. Das kann nicht rückgängig gemacht werden." #: front/src/components/audio/track/Table.vue:7 -#: front/src/views/content/libraries/FilesTable.vue:55 -msgctxt "Content/Track/*/Noun" -msgid "Title" -msgstr "Titel" - #: front/src/components/manage/library/AlbumsTable.vue:39 #: front/src/components/manage/library/TracksTable.vue:39 -msgctxt "*/*/*" +#: front/src/views/admin/library/AlbumDetail.vue:105 +#: front/src/views/admin/library/TrackDetail.vue:104 +#: front/src/views/content/libraries/FilesTable.vue:55 src/edits.js:36 +#: front/src/edits.js:62 +msgctxt "*/*/*/Noun" msgid "Title" msgstr "Titel" #: front/src/components/SetInstanceModal.vue:16 msgctxt "Popup/Instance/Paragraph" -msgid "" -"To continue, please select the Funkwhale instance you want to connect to. " -"Enter the address directly, or select one of the suggested choices." +msgid "To continue, please select the Funkwhale instance you want to connect to. Enter the address directly, or select one of the suggested choices." +msgstr "Wähle bitte nun die Funkhwhale-Instanz aus, zu der Du dich verbinden möchtest. Gib die Adresse direkt an, oder wähle einen der Vorschläge aus." + +#: front/src/components/ShortcutsModal.vue:148 +#, fuzzy +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Toggle favorite" +msgstr "1 Favorit" + +#: front/src/components/ShortcutsModal.vue:132 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Toggle mute" msgstr "" -"Wähle bitte nun die Funkhwhale-Instanz aus, zu der Du dich verbinden " -"möchtest. Gib die Adresse direkt an, oder wähle einen der Vorschläge aus." -#: front/src/components/ShortcutsModal.vue:79 +#: front/src/components/ShortcutsModal.vue:136 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Toggle queue looping" msgstr "Warteschlangenwiederholung umschalten" -#: front/src/views/admin/library/AlbumDetail.vue:222 -#: front/src/views/admin/library/ArtistDetail.vue:211 -#: front/src/views/admin/library/LibraryDetail.vue:200 -#: front/src/views/admin/library/TrackDetail.vue:274 -#: front/src/views/admin/moderation/AccountsDetail.vue:317 -#: front/src/views/admin/moderation/DomainsDetail.vue:225 +#: front/src/views/admin/library/AlbumDetail.vue:238 +#: front/src/views/admin/library/ArtistDetail.vue:226 +#: front/src/views/admin/library/LibraryDetail.vue:219 +#: front/src/views/admin/library/TrackDetail.vue:290 +#: front/src/views/admin/moderation/AccountsDetail.vue:329 +#: front/src/views/admin/moderation/DomainsDetail.vue:262 msgctxt "Content/Moderation/Table.Label" msgid "Total size" msgstr "Gesamtvolumen" @@ -4544,20 +4913,18 @@ msgctxt "Content/Library/Card.Help text" msgid "Total size of the files in this library" msgstr "Gesamtgröße der Dateien in dieser Mediathek" -#: front/src/views/admin/moderation/DomainsDetail.vue:105 +#: front/src/views/admin/moderation/DomainsDetail.vue:142 msgctxt "Content/*/*" msgid "Total users" msgstr "Gesamtanzahl der Nutzenden" -#: front/src/views/admin/library/UploadDetail.vue:199 -msgctxt "*/*/*" -msgid "Track" -msgstr "Track" - -#: front/src/components/audio/SearchBar.vue:27 -#: front/src/components/library/TrackBase.vue:173 +#: front/src/components/audio/SearchBar.vue:34 +#: front/src/components/library/TrackBase.vue:188 #: front/src/components/library/TrackDetail.vue:128 #: front/src/components/metadata/Search.vue:138 +#: src/components/mixins/Report.vue:28 +#: front/src/views/admin/library/UploadDetail.vue:199 +#: front/src/components/mixins/Report.vue:29 msgctxt "*/*/*/Noun" msgid "Track" msgstr "Track" @@ -4567,7 +4934,7 @@ msgctxt "Content/Library/Card/Short" msgid "Track #%{ id } - %{ name }" msgstr "" -#: front/src/views/admin/library/TrackDetail.vue:91 +#: front/src/views/admin/library/TrackDetail.vue:97 msgctxt "Content/Moderation/Title" msgid "Track data" msgstr "Trackname" @@ -4577,30 +4944,28 @@ msgctxt "Content/Track/Title/Noun" msgid "Track information" msgstr "Titelinformation" -#: front/src/components/mixins/Translations.vue:50 -#: front/src/components/mixins/Translations.vue:51 +#: front/src/components/mixins/Translations.vue:60 +#: front/src/components/mixins/Translations.vue:61 msgctxt "Content/*/Dropdown/Noun" msgid "Track name" msgstr "Trackname" -#: front/src/components/instance/Stats.vue:54 #: front/src/components/library/AlbumDetail.vue:19 -#: front/src/components/playlists/PlaylistModal.vue:47 -#: front/src/views/admin/moderation/AccountsDetail.vue:362 -#: front/src/views/admin/moderation/DomainsDetail.vue:274 -#: front/src/views/content/Base.vue:8 src/views/content/libraries/Detail.vue:8 -#: front/src/views/playlists/Detail.vue:51 src/views/radios/Detail.vue:34 -msgctxt "*/*/*/Noun" -msgid "Tracks" -msgstr "Tracks" - +#: front/src/components/library/TagDetail.vue:36 #: front/src/components/manage/library/AlbumsTable.vue:42 #: front/src/components/manage/library/ArtistsTable.vue:42 -#: front/src/views/admin/library/AlbumDetail.vue:252 -#: front/src/views/admin/library/ArtistDetail.vue:251 +#: front/src/components/manage/library/TagsTable.vue:44 +#: front/src/components/playlists/PlaylistModal.vue:47 +#: front/src/views/admin/library/AlbumDetail.vue:268 +#: front/src/views/admin/library/ArtistDetail.vue:266 #: front/src/views/admin/library/Base.vue:14 -#: front/src/views/admin/library/LibraryDetail.vue:229 +#: front/src/views/admin/library/LibraryDetail.vue:248 +#: front/src/views/admin/library/TagDetail.vue:143 #: front/src/views/admin/library/TracksList.vue:24 +#: front/src/views/admin/moderation/AccountsDetail.vue:374 +#: front/src/views/admin/moderation/DomainsDetail.vue:311 +#: front/src/views/content/Base.vue:8 src/views/content/libraries/Detail.vue:8 +#: front/src/views/playlists/Detail.vue:76 src/views/radios/Detail.vue:34 msgctxt "*/*/*" msgid "Tracks" msgstr "Tracks" @@ -4610,79 +4975,64 @@ msgctxt "Content/Artist/Title" msgid "Tracks by this artist" msgstr "Titel von diesem Künstler oder Künstlerin" -#: front/src/components/instance/Stats.vue:25 -msgctxt "Content/About/Paragraph/Unit" -msgid "Tracks favorited" -msgstr "Tracks in den Favoriten" - -#: front/src/components/instance/Stats.vue:19 -msgctxt "Content/About/Paragraph/Unit" -msgid "tracks listened" -msgstr "Angehörte Tracks" - #: front/src/components/library/radios/Filter.vue:44 msgctxt "Popup/Radio/Title/Noun" msgid "Tracks matching filter" msgstr "Titel Auswahl Filter" #: front/src/components/library/TrackDetail.vue:57 +#: front/src/components/manage/moderation/ReportCard.vue:134 #: front/src/views/admin/library/UploadDetail.vue:250 +#: front/src/views/admin/moderation/AccountsDetail.vue:181 msgctxt "Content/Track/Table.Label/Noun" msgid "Type" msgstr "Typ" -#: front/src/views/admin/moderation/AccountsDetail.vue:180 -msgctxt "Content/Moderation/Table.Label/Noun" -msgid "Type" -msgstr "Typ" - #: front/src/components/manage/moderation/AccountsTable.vue:44 -#: front/src/components/manage/moderation/DomainsTable.vue:42 +#: front/src/components/manage/moderation/DomainsTable.vue:50 msgctxt "Content/Moderation/Table.Label/Short" msgid "Under moderation rule" msgstr "Unterliegt einer Moderationsregel" -#: front/src/views/content/remote/Card.vue:109 -#: src/views/content/remote/Card.vue:114 +#: front/src/components/ShortcutsModal.vue:68 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Unfocus searchbar" +msgstr "" + +#: front/src/views/content/remote/Card.vue:122 +#: src/views/content/remote/Card.vue:127 msgctxt "*/Library/Button.Label/Verb" msgid "Unfollow" msgstr "Abonnement beenden" -#: front/src/views/content/remote/Card.vue:110 +#: front/src/views/content/remote/Card.vue:123 msgctxt "Popup/Library/Title" msgid "Unfollow this library?" msgstr "Das Abonnement an dieser Mediathek beenden?" -#: front/src/components/About.vue:17 -msgctxt "Content/About/Paragraph" -msgid "" -"Unfortunately, the owners of this instance did not yet take the time to " -"complete this page." -msgstr "" -"Leider haben die Eintümer dieser Instanz diese Seite noch nicht fertig " -"gestellt." - #: front/src/components/federation/FetchButton.vue:54 #: front/src/components/federation/FetchButton.vue:55 -msgctxt "*/*/Error" -msgid "Unknowkn error" -msgstr "" - #: front/src/components/library/ImportStatusModal.vue:144 -msgctxt "Popup/Import/Error.Label" -msgid "Unkwown error" +msgctxt "*/*/Error" +msgid "Unknown error" msgstr "" -#: front/src/components/Home.vue:37 -msgctxt "Content/Home/Title" -msgid "Unlimited music" -msgstr "Unbegrenzt Musik anhören" - -#: front/src/components/audio/Player.vue:630 +#: front/src/components/audio/Player.vue:656 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Unmute" msgstr "Stummschaltung aufheben" +#: front/src/components/manage/moderation/ReportCard.vue:225 +msgctxt "Content/*/Button.Label" +msgid "Unresolve" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:67 +#: front/src/views/admin/moderation/ReportsList.vue:23 +msgctxt "Content/*/*/Short" +msgid "Unresolved" +msgstr "" + #: front/src/components/manage/moderation/InstancePolicyForm.vue:57 msgctxt "Content/Moderation/Card.Button.Label/Verb" msgid "Update" @@ -4746,12 +5096,8 @@ msgstr "Hochladedatum" #: front/src/components/library/FileUpload.vue:258 msgctxt "Content/Library/Help text" -msgid "" -"Upload denied, ensure the file is not too big and that you have not reached " -"your quota" -msgstr "" -"Hochladen abgelehnt. Bitte prüfe, dass die Datei nicht zu groß ist, und dass" -" du noch über genügenden Speicherplatz verfügst" +msgid "Upload denied, ensure the file is not too big and that you have not reached your quota" +msgstr "Hochladen abgelehnt. Bitte prüfe, dass die Datei nicht zu groß ist, und dass du noch über genügenden Speicherplatz verfügst" #: front/src/components/library/ImportStatusModal.vue:8 msgctxt "Popup/Import/Message" @@ -4760,20 +5106,18 @@ msgstr "" #: front/src/views/content/Home.vue:7 msgctxt "Content/Library/Paragraph" -msgid "" -"Upload music files (MP3, OGG, FLAC, etc.) from your personal library " -"directly from your browser to enjoy them here." -msgstr "" -"Lade Musikdatei (MP3, OGG, Flac, usw.) von deiner eigenen Mediathek direkt " -"im Browser hoch, und höre sie hier an." +msgid "Upload music files (MP3, OGG, FLAC, etc.) from your personal library directly from your browser to enjoy them here." +msgstr "Lade Musikdatei (MP3, OGG, Flac, usw.) von deiner eigenen Mediathek direkt im Browser hoch, und höre sie hier an." #: front/src/components/library/FileUpload.vue:30 msgctxt "Content/Library/Title/Verb" msgid "Upload new tracks" msgstr "Neue Tracks hochladen" -#: front/src/views/admin/moderation/AccountsDetail.vue:298 -msgctxt "Content/Moderation/Table.Label/Noun" +#: front/src/components/About.vue:99 +#: front/src/views/admin/moderation/AccountsDetail.vue:309 +#, fuzzy +msgctxt "*/*/*" msgid "Upload quota" msgstr "Speichervolumen" @@ -4784,9 +5128,7 @@ msgstr "Hochladezeit abgelaufen. Bitte versuche es erneut" #: front/src/components/library/ImportStatusModal.vue:14 msgctxt "Popup/Import/Message" -msgid "" -"Upload was skipped because a similar one is already available in one of your" -" libraries." +msgid "Upload was skipped because a similar one is already available in one of your libraries." msgstr "" #: front/src/components/library/ImportStatusModal.vue:11 @@ -4809,35 +5151,25 @@ msgctxt "Content/Library/Table" msgid "Uploading…" msgstr "Hochladen läuft…" +#: front/src/components/manage/library/LibrariesTable.vue:52 +#: front/src/components/manage/moderation/AccountsTable.vue:41 +#: front/src/components/mixins/Translations.vue:75 +#: front/src/views/admin/library/AlbumDetail.vue:258 +#: front/src/views/admin/library/ArtistDetail.vue:246 #: front/src/views/admin/library/Base.vue:20 +#: front/src/views/admin/library/LibraryDetail.vue:258 +#: front/src/views/admin/library/TrackDetail.vue:310 #: front/src/views/admin/library/UploadsList.vue:24 +#: front/src/views/admin/moderation/AccountsDetail.vue:349 +#: front/src/views/admin/moderation/DomainsDetail.vue:281 +#: front/src/components/mixins/Translations.vue:76 msgctxt "*/*/*" msgid "Uploads" msgstr "Hochladen" -#: front/src/components/manage/moderation/AccountsTable.vue:41 -#: front/src/components/mixins/Translations.vue:63 -#: front/src/views/admin/library/AlbumDetail.vue:242 -#: front/src/views/admin/library/ArtistDetail.vue:231 -#: front/src/views/admin/library/LibraryDetail.vue:239 -#: front/src/views/admin/library/TrackDetail.vue:294 -#: front/src/views/admin/moderation/AccountsDetail.vue:337 -#: front/src/views/admin/moderation/DomainsDetail.vue:244 -#: front/src/components/mixins/Translations.vue:64 -msgctxt "Content/Moderation/Table.Label/Noun" -msgid "Uploads" -msgstr "Hochladen" - -#: front/src/components/manage/library/LibrariesTable.vue:52 -msgctxt "Content/*/*/Noun" -msgid "Uploads" -msgstr "Hochladen" - #: front/src/components/auth/ApplicationForm.vue:16 msgctxt "Content/Applications/Help Text" -msgid "" -"Use \"urn:ietf:wg:oauth:2.0:oob\" as a redirect URI if your application is " -"not served on the web." +msgid "Use \"urn:ietf:wg:oauth:2.0:oob\" as a redirect URI if your application is not served on the web." msgstr "" #: front/src/components/Footer.vue:16 @@ -4845,39 +5177,57 @@ msgctxt "Footer/*/List item.Link" msgid "Use another instance" msgstr "Eine andere Instanz benutzen" +#: front/src/components/Home.vue:146 +msgctxt "Content/Home/Link" +msgid "Use Funkwhale on other devices with our apps" +msgstr "" + +#: front/src/components/moderation/ReportModal.vue:44 +msgctxt "*/*/Field,Help" +msgid "Use this field to provide additional context to the moderator that will handle your report." +msgstr "" + #: front/src/views/auth/PasswordReset.vue:12 msgctxt "Content/Signup/Paragraph" -msgid "" -"Use this form to request a password reset. We will send an email to the " -"given address with instructions to reset your password." +msgid "Use this form to request a password reset. We will send an email to the given address with instructions to reset your password." +msgstr "Mit diesem Formular kannst du ein neues Kennwort beantragen. In Kürze erhältst du von uns eine Nachricht an die angegebene E-Mail-Adresse mit den Anleitungen." + +#: front/src/components/moderation/ReportModal.vue:18 +msgctxt "*/Moderation/Popup,Paragraph" +msgid "Use this form to submit a report to our moderation team." msgstr "" -"Mit diesem Formular kannst du ein neues Kennwort beantragen. In Kürze " -"erhältst du von uns eine Nachricht an die angegebene E-Mail-Adresse mit den " -"Anleitungen." #: front/src/components/manage/moderation/InstancePolicyForm.vue:111 msgctxt "Content/Moderation/Help text" -msgid "" -"Use this setting to temporarily enable/disable the policy without completely" -" removing it." -msgstr "" -"Mit dieser Einstellung kannst du die Moderationsregel temporär umschalten, " -"ohne sie zu löschen." +msgid "Use this setting to temporarily enable/disable the policy without completely removing it." +msgstr "Mit dieser Einstellung kannst du die Moderationsregel temporär umschalten, ohne sie zu löschen." #: front/src/components/manage/users/InvitationsTable.vue:49 msgctxt "Content/Admin/Table" msgid "Used" msgstr "Verwendet" +#: front/src/components/Home.vue:125 +msgctxt "Content/Home/Header" +msgid "Useful links" +msgstr "" + #: front/src/views/content/libraries/Detail.vue:26 msgctxt "Content/Library/Table.Label" msgid "User" msgstr "Benutzer" -#: front/src/components/instance/Stats.vue:5 -msgctxt "Content/About/Title/Noun" -msgid "User activity" -msgstr "Aktivität der Nutzenden" +#: front/src/components/Home.vue:154 +#, fuzzy +msgctxt "Content/Home/Link" +msgid "User guides" +msgstr "Mediatheken der Nutzenden" + +#: front/src/views/admin/Settings.vue:88 +#, fuzzy +msgctxt "Content/Admin/Menu" +msgid "User Interface" +msgstr "Benutzername" #: front/src/components/library/AlbumDetail.vue:26 #: front/src/components/library/ArtistDetail.vue:39 @@ -4891,35 +5241,35 @@ msgctxt "Content/Radio/Title" msgid "User radios" msgstr "Radios der Nutzenden" -#: front/src/components/auth/Signup.vue:19 +#: front/src/components/auth/SignupForm.vue:15 #: front/src/components/manage/users/UsersTable.vue:37 -#: front/src/components/mixins/Translations.vue:59 +#: front/src/components/mixins/Translations.vue:71 #: front/src/views/admin/moderation/AccountsDetail.vue:114 -#: front/src/components/mixins/Translations.vue:60 +#: front/src/components/mixins/Translations.vue:72 msgctxt "Content/*/*" msgid "Username" msgstr "Benutzername" -#: front/src/components/auth/Login.vue:15 +#: front/src/components/auth/LoginForm.vue:11 msgctxt "Content/Login/Input.Label/Noun" msgid "Username or email" msgstr "Benutzername oder E-Mail-Adresse" -#: front/src/components/instance/Stats.vue:13 -msgctxt "Content/About/Paragraph/Unit" -msgid "users" -msgstr "Nutzende" - -#: front/src/components/Sidebar.vue:102 -#: front/src/components/manage/moderation/DomainsTable.vue:39 -#: front/src/components/mixins/Translations.vue:61 +#: front/src/components/Sidebar.vue:106 +#: front/src/components/manage/moderation/DomainsTable.vue:47 +#: front/src/components/mixins/Translations.vue:73 #: src/views/admin/Settings.vue:81 front/src/views/admin/users/Base.vue:5 #: src/views/admin/users/UsersList.vue:21 -#: front/src/components/mixins/Translations.vue:62 +#: front/src/components/mixins/Translations.vue:74 msgctxt "*/*/*/Noun" msgid "Users" msgstr "Nutzende" +#: front/src/components/Home.vue:110 +msgctxt "Content/Home/Paragraph" +msgid "Users on this pod also get %{ quota } of free storage to upload their own content!" +msgstr "" + #: front/src/components/Footer.vue:29 msgctxt "Footer/*/Title" msgid "Using Funkwhale" @@ -4937,45 +5287,60 @@ msgctxt "Content/Library/Link/Verb" msgid "View files" msgstr "Dateien ansehen" -#: front/src/components/library/AlbumBase.vue:81 -#: front/src/components/library/ArtistBase.vue:92 -#: front/src/components/library/TrackBase.vue:100 -#: front/src/views/admin/library/AlbumDetail.vue:42 -#: front/src/views/admin/library/ArtistDetail.vue:41 +#: front/src/components/library/AlbumBase.vue:95 +#: front/src/components/library/ArtistBase.vue:107 +#: front/src/components/library/TrackBase.vue:111 +#: front/src/views/admin/library/AlbumDetail.vue:48 +#: front/src/views/admin/library/ArtistDetail.vue:46 #: front/src/views/admin/library/LibraryDetail.vue:34 #: front/src/views/admin/library/LibraryDetail.vue:45 -#: front/src/views/admin/library/TrackDetail.vue:41 +#: front/src/views/admin/library/TagDetail.vue:32 +#: front/src/views/admin/library/TrackDetail.vue:47 #: front/src/views/admin/library/UploadDetail.vue:35 #: front/src/views/admin/library/UploadDetail.vue:46 #: front/src/views/admin/moderation/AccountsDetail.vue:37 #: front/src/views/admin/moderation/AccountsDetail.vue:45 +#: front/src/views/admin/moderation/DomainsDetail.vue:30 msgctxt "Content/Moderation/Link/Verb" msgid "View in Django's admin" msgstr "" -#: front/src/components/library/AlbumBase.vue:61 -#: front/src/components/library/ArtistBase.vue:72 -#: front/src/components/library/TrackBase.vue:80 +#: front/src/components/Home.vue:169 +#, fuzzy +msgctxt "Content/Home/Link" +msgid "View more…" +msgstr "Abonnenten werden geladen…" + +#: front/src/components/library/AlbumBase.vue:62 +#: front/src/components/library/ArtistBase.vue:73 +#: front/src/components/library/TrackBase.vue:78 #: front/src/components/metadata/ArtistCard.vue:49 #: front/src/components/metadata/ReleaseCard.vue:53 msgctxt "Content/*/*/Clickable, Verb" msgid "View on MusicBrainz" msgstr "Auf MusicBrainz ansehen" +#: front/src/components/manage/moderation/ReportCard.vue:124 +msgctxt "Content/Moderation/Link" +msgid "View public page" +msgstr "" + #: front/src/components/manage/library/LibrariesTable.vue:11 #: front/src/components/manage/library/LibrariesTable.vue:51 #: front/src/components/manage/library/UploadsTable.vue:11 #: front/src/components/manage/library/UploadsTable.vue:63 #: front/src/views/admin/library/LibraryDetail.vue:94 #: front/src/views/admin/library/UploadDetail.vue:101 +#: front/src/views/content/libraries/Form.vue:18 msgctxt "*/*/*" msgid "Visibility" msgstr "Sichtbarkeit" -#: front/src/views/content/libraries/Form.vue:18 -msgctxt "Content/Library/Dropdown.Label" -msgid "Visibility" -msgstr "Sichtbarkeit" +#: front/src/components/Home.vue:91 +#, fuzzy +msgctxt "Content/Home/Link" +msgid "Visit funkwhale.audio" +msgstr "Funwhale nutzen" #: front/src/components/library/AlbumDetail.vue:4 msgctxt "Content/Album/" @@ -4987,7 +5352,13 @@ msgctxt "Popup/*/Loading.Title" msgid "Waiting for result…" msgstr "Deine Favoriten werden geladen…" -#: front/src/components/auth/Login.vue:7 +#: front/src/components/auth/Settings.vue:285 +#, fuzzy +msgctxt "Content/Settings/Error message.Title" +msgid "We cannot delete your account" +msgstr "Wir können dich nicht einloggen" + +#: front/src/components/auth/LoginForm.vue:3 msgctxt "Content/Login/Error message.Title" msgid "We cannot log you in" msgstr "Wir können dich nicht einloggen" @@ -4997,42 +5368,37 @@ msgctxt "Content/*/Error message.Title" msgid "We cannot save your changes" msgstr "Dein Konto kann nicht erstellt werden" -#: front/src/components/Home.vue:122 -msgctxt "Content/Home/List item" -msgid "We do not track you or bother you with ads" -msgstr "Weder verfolgen wir dich noch stören wir dich mit Werbung" +#: front/src/views/Notifications.vue:39 +msgctxt "Content/Notifications/Paragraph" +msgid "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!" +msgstr "" #: front/src/components/library/FileUpload.vue:39 msgctxt "Content/Library/Link" msgid "We recommend using Picard for that purpose." msgstr "Zu diesem Zweck wird Picard empfohlen." -#: front/src/components/Home.vue:7 -msgctxt "Content/Home/Title" -msgid "We think listening to music should be simple." -msgstr "Wir denken, Musik hören sollte möglichst einfach sein." +#: front/src/components/moderation/ReportModal.vue:35 +msgctxt "*/*/Field,Help" +msgid "We'll use this email if we need to contact you regarding this report." +msgstr "" -#: front/src/components/Home.vue:148 +#: front/src/components/Home.vue:207 msgctxt "Head/Home/Title" msgid "Welcome" msgstr "Willkommen" #: front/src/components/Home.vue:5 -msgctxt "Content/Home/Title/Verb" -msgid "Welcome on Funkwhale" -msgstr "Willkommen auf Funkwhale" - -#: front/src/components/Home.vue:24 -msgctxt "Content/Home/Title" -msgid "Why funkwhale?" -msgstr "Warum Funkwhale?" +msgctxt "Content/Home/Header" +msgid "Welcome to %{ podName }!" +msgstr "" -#: front/src/components/audio/EmbedWizard.vue:13 +#: front/src/components/audio/EmbedWizard.vue:23 msgctxt "Popup/Embed/Input.Label" msgid "Widget height" msgstr "Grafikobjektshöhe" -#: front/src/components/audio/EmbedWizard.vue:6 +#: front/src/components/audio/EmbedWizard.vue:16 msgctxt "Popup/Embed/Input.Label" msgid "Widget width" msgstr "Grafikobjektsbreite" @@ -5052,9 +5418,11 @@ msgctxt "Content/OAuth Scopes/Help Text" msgid "Write-only access to user data" msgstr "" -#: front/src/components/Sidebar.vue:129 +#: front/src/components/Sidebar.vue:133 #: front/src/components/manage/moderation/AccountsTable.vue:72 -#: front/src/components/manage/moderation/DomainsTable.vue:58 +#: front/src/components/manage/moderation/DomainsTable.vue:12 +#: front/src/components/manage/moderation/DomainsTable.vue:69 +#: front/src/views/admin/moderation/DomainsDetail.vue:109 msgctxt "*/*/*" msgid "Yes" msgstr "Ja" @@ -5066,28 +5434,17 @@ msgstr "Ja, logge mich aus!" #: front/src/views/content/libraries/Form.vue:19 msgctxt "Content/Library/Paragraph" -msgid "" -"You are able to share your library with other people, regardless of its " -"visibility." -msgstr "" -"Du kannst deine Mediathek mit Anderen teilen, auch wenn sie privat ist." +msgid "You are able to share your library with other people, regardless of its visibility." +msgstr "Du kannst deine Mediathek mit Anderen teilen, auch wenn sie privat ist." #: front/src/components/library/FileUpload.vue:32 msgctxt "Content/Library/Paragraph" -msgid "" -"You are about to upload music to your library. Before proceeding, please " -"ensure that:" -msgstr "" -"Die Musik wird bald zu deiner Mediathek hochgeladen. Prüfe bitte vorab, " -"dass:" +msgid "You are about to upload music to your library. Before proceeding, please ensure that:" +msgstr "Die Musik wird bald zu deiner Mediathek hochgeladen. Prüfe bitte vorab, dass:" #: front/src/components/SetInstanceModal.vue:12 msgctxt "Popup/Login/Paragraph" -msgid "" -"You are currently connected to <a href=\"%{ url }\" target=\"_blank\">%{ " -"hostname } <i class=\"external icon\"/></a>. If you continue, you will " -"be disconnected from your current instance and all your local data will be " -"deleted." +msgid "You are currently connected to <a href=\"%{ url }\" target=\"_blank\">%{ hostname } <i class=\"external icon\"/></a>. If you continue, you will be disconnected from your current instance and all your local data will be deleted." msgstr "" #: front/src/components/library/ArtistDetail.vue:6 @@ -5102,12 +5459,8 @@ msgstr "Du bist als %{ username } angemeldet" #: front/src/components/library/FileUpload.vue:35 msgctxt "Content/Library/List item" -msgid "" -"You are not uploading copyrighted content in a public library, otherwise you" -" may be infringing the law" -msgstr "" -"Die lädst kein urheberrechtlich geschütztes Material in eine öffentliche " -"Mediathek hoch. Wenn doch, missachtest Du das Gesetz" +msgid "You are not uploading copyrighted content in a public library, otherwise you may be infringing the law" +msgstr "Die lädst kein urheberrechtlich geschütztes Material in eine öffentliche Mediathek hoch. Wenn doch, missachtest Du das Gesetz" #: front/src/components/SetInstanceModal.vue:98 msgctxt "*/Instance/Message" @@ -5115,30 +5468,14 @@ msgid "You are now using the Funkwhale instance at %{ url }" msgstr "" #: front/src/views/content/Home.vue:17 +#, fuzzy msgctxt "Content/Library/Paragraph" -msgid "" -"You can follow libraries from other users to get access to new music. Public" -" libraries can be followed immediatly, while following a private library " -"requires approval from its owner." -msgstr "" -"Folge Mediatheken von anderen Hörern, um auf neue Musik zu stoßen. " -"Öffentlichen Mediatheken kann sofort gefolgt werden, wohingegen geschlossene" -" Mediatheken die Erlaubnis von ihrem Eigentümer / von ihrer Eigentümerin " -"bedürfen." - -#: front/src/components/Home.vue:128 -msgctxt "Content/Home/List item" -msgid "" -"You can invite friends and family to your instance so they can enjoy your " -"music" -msgstr "" -"Du kannst Freunde und Deine Familie auf Deine eigene Instanz einladen, " -"sodass sie Deine Musik genießen können" +msgid "You can 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." +msgstr "Folge Mediatheken von anderen Hörern, um auf neue Musik zu stoßen. Öffentlichen Mediatheken kann sofort gefolgt werden, wohingegen geschlossene Mediatheken die Erlaubnis von ihrem Eigentümer / von ihrer Eigentümerin bedürfen." #: front/src/components/moderation/FilterModal.vue:31 msgctxt "Popup/Moderation/Paragraph" -msgid "" -"You can manage and update your filters anytime from your account settings." +msgid "You can manage and update your filters any time from your account settings." msgstr "" #: front/src/views/auth/EmailConfirm.vue:24 @@ -5146,23 +5483,20 @@ msgctxt "Content/Signup/Paragraph" msgid "You can now use the service without limitations." msgstr "Du kannst jetzt den Service unbegrenzt nutzen." +#: front/src/components/auth/Settings.vue:278 +msgctxt "Content/Settings/Paragraph'" +msgid "You can permanently and irreversibly delete your account and all the associated data using the form below. You will be asked for confirmation." +msgstr "" + #: front/src/components/library/radios/Builder.vue:7 msgctxt "Content/Radio/Paragraph" -msgid "" -"You can use this interface to build your own custom radio, which will play " -"tracks according to your criteria." -msgstr "" -"Dank dieser Schnittstelle kannst du dein eigenes Radio aufbauen, das die " -"entsprechenden Tracks abspielt." +msgid "You can use this interface to build your own custom radio, which will play tracks according to your criteria." +msgstr "Dank dieser Schnittstelle kannst du dein eigenes Radio aufbauen, das die entsprechenden Tracks abspielt." #: front/src/components/auth/SubsonicTokenForm.vue:7 msgctxt "Content/Settings/Paragraph" -msgid "" -"You can use those to enjoy your playlist and music in offline mode, on your " -"smartphone or tablet, for instance." -msgstr "" -"Damit kannst du deine Wiedergabelisten und Musik offline genießen, zum " -"Beispiel auf deinem Smartphone bzw. Tablett." +msgid "You can use those to enjoy your playlist and music in offline mode, on your smartphone or tablet, for instance." +msgstr "Damit kannst du deine Wiedergabelisten und Musik offline genießen, zum Beispiel auf deinem Smartphone bzw. Tablett." #: front/src/components/auth/Settings.vue:202 msgctxt "Content/Applications/Paragraph" @@ -5179,19 +5513,17 @@ msgctxt "Content/Moderation/Card.Title" msgid "You don't have any rule in place for this account." msgstr "Du hast keine Moderationsregeln in Kraft für dieses Konto." -#: front/src/views/admin/moderation/DomainsDetail.vue:39 +#: front/src/views/admin/moderation/DomainsDetail.vue:67 msgctxt "Content/Moderation/Card.Title" msgid "You don't have any rule in place for this domain." msgstr "Du hast keine Moderationsregeln in Kraft für diese Domain." #: front/src/components/library/EditForm.vue:52 msgctxt "Content/Library/Paragraph" -msgid "" -"You don't have the permission to edit this object, but you can suggest " -"changes. Once submitted, suggestions will be reviewed before approval." +msgid "You don't have the permission to edit this object, but you can suggest changes. Once submitted, suggestions will be reviewed before approval." msgstr "" -#: front/src/components/Sidebar.vue:171 +#: front/src/components/Sidebar.vue:175 msgctxt "Sidebar/Player/Title" msgid "You have a radio playing" msgstr "Du hörst gerade ein Radio an" @@ -5203,11 +5535,8 @@ msgstr "Du kannst Verbindungsproblemen erfahren." #: front/src/components/auth/Settings.vue:100 msgctxt "Popup/Settings/List item" -msgid "" -"You will be logged out from this session and have to log in with the new one" -msgstr "" -"Du wirst von dieser Sitzung ausgeloggt und du musst dich mit deinem neuen " -"Kennwort einloggen" +msgid "You will be logged out from this session and have to log in with the new one" +msgstr "Du wirst von dieser Sitzung ausgeloggt und du musst dich mit deinem neuen Kennwort einloggen" #: front/src/components/auth/Authorize.vue:51 msgctxt "Content/Auth/Paragraph" @@ -5221,25 +5550,24 @@ msgstr "" #: front/src/components/auth/Settings.vue:71 msgctxt "Content/Settings/Paragraph" -msgid "" -"You will have to update your password on your clients that use this " -"password." -msgstr "" -"Du musst dann das Kennwort auf allen Deiner verbundenen Geräte " -"aktualisieren." +msgid "You will have to update your password on your clients that use this password." +msgstr "Du musst dann das Kennwort auf allen Deiner verbundenen Geräte aktualisieren." #: front/src/components/moderation/FilterModal.vue:20 msgctxt "Popup/Moderation/Paragraph" -msgid "" -"You will not see tracks, albums and user activity linked to this artist " -"anymore:" +msgid "You will not see tracks, albums and user activity linked to this artist any more:" msgstr "" -#: front/src/components/auth/Signup.vue:13 +#: front/src/components/auth/SignupForm.vue:9 msgctxt "Content/Signup/Form/Paragraph" msgid "Your account cannot be created." msgstr "Dein Avatar kann nicht gespeichert werden" +#: front/src/components/auth/Settings.vue:281 +msgctxt "Content/Settings/Paragraph'" +msgid "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." +msgstr "" + #: front/src/components/auth/Settings.vue:215 msgctxt "Content/Settings/Title/Noun" msgid "Your applications" @@ -5250,6 +5578,11 @@ msgctxt "Content/Settings/Error message.Title" msgid "Your avatar cannot be saved" msgstr "Dein Avatar kann nicht gespeichert werden" +#: front/src/components/auth/Settings.vue:527 +msgctxt "*/Auth/Message" +msgid "Your deletion request was submitted, your account and content will be deleted shortly" +msgstr "" + #: front/src/components/library/EditForm.vue:3 msgctxt "Content/Library/Paragraph" msgid "Your edit was successfully submitted." @@ -5260,12 +5593,13 @@ msgctxt "Head/Favorites/Title" msgid "Your Favorites" msgstr "Deine Favoriten" -#: front/src/components/Home.vue:109 -msgctxt "Content/Home/Title" -msgid "Your music, your way" -msgstr "Deine Musik, so wie du willst" +#: front/src/views/Notifications.vue:5 +#, fuzzy +msgctxt "Content/Notifications/Title" +msgid "Your messages" +msgstr "Verschickte Nachrichten" -#: front/src/views/Notifications.vue:4 +#: front/src/views/Notifications.vue:69 msgctxt "Content/Notifications/Title" msgid "Your notifications" msgstr "Deine Benachrichtigungen" @@ -5281,43 +5615,41 @@ msgid "Your password has been updated successfully." msgstr "Dein Kennwort wurde erfolgreich aktualisiert." #: front/src/components/auth/Settings.vue:14 +#, fuzzy msgctxt "Content/Settings/Error message.Title" -msgid "Your settings can't be updateds" +msgid "Your settings can't be updated" msgstr "Einstellungen konnten nicht aktualisiert werden" #: front/src/components/auth/Settings.vue:101 msgctxt "Popup/Settings/List item" -msgid "" -"Your Subsonic password will be changed to a new, random one, logging you out" -" from devices that used the old Subsonic password" -msgstr "" -"Dein Subsonic-Kennwort wird mit einem neuen zufälligen Kennwort ersetzt. Du " -"wirst auf allen aktuell verbundenen Geräten ausgeloggt, die noch das alte " -"Kennwort nutzen" +msgid "Your Subsonic password will be changed to a new, random one, logging you out from devices that used the old Subsonic password" +msgstr "Dein Subsonic-Kennwort wird mit einem neuen zufälligen Kennwort ersetzt. Du wirst auf allen aktuell verbundenen Geräten ausgeloggt, die noch das alte Kennwort nutzen" -#: front/src/edits.js:47 -msgctxt "*/*/*/Short, Noun" -msgid "Position" -msgstr "Seitennummerierung" +#: front/src/entities.js:126 +#, fuzzy +msgctxt "*/*/*/Noun" +msgid "MusicBrainz ID" +msgstr "Auf MusicBrainz ansehen" -#: front/src/edits.js:54 -msgctxt "Content/Track/*/Noun" -msgid "Copyright" -msgstr "Urheberrecht" +#: front/src/main.js:110 +msgctxt "*/Error/Paragraph" +msgid "You sent too many requests and have been rate limited, please try again in %{ delay }" +msgstr "" -#: front/src/components/library/AlbumBase.vue:183 +#: front/src/main.js:113 +msgctxt "*/Error/Paragraph" +msgid "You sent too many requests and have been rate limited, please try again later" +msgstr "" + +#: front/src/components/library/AlbumBase.vue:208 #, fuzzy msgctxt "Content/Album/Header.Title" -msgid "" -"Album containing %{ count } track, by <a class=\"internal\" href=\"%{ " -"artistUrl }\">%{ artist }</a>" -msgid_plural "" -"Album containing %{ count } tracks, by <a class=\"internal\" href=\"%{ " -"artistUrl }\">%{ artist }</a>" +msgid "Album containing %{ count } track, by <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" +msgid_plural "Album containing %{ count } tracks, by <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" msgstr[0] "Album mit %{ count } Track, von %{ artist }" msgstr[1] "Album mit %{ count } Tracks, von %{ artist }" -#: front/src/components/audio/PlayButton.vue:220 +#: front/src/components/audio/PlayButton.vue:246 msgctxt "*/Queue/Message" msgid "%{ count } track was added to your queue" msgid_plural "%{ count } tracks were added to your queue" diff --git a/front/locales/en_GB/LC_MESSAGES/app.po b/front/locales/en_GB/LC_MESSAGES/app.po index 0300026f43472ca639c7546acb08af968ca335d8..97ce6731c36b06443439c2de1521396ef569afb1 100644 --- a/front/locales/en_GB/LC_MESSAGES/app.po +++ b/front/locales/en_GB/LC_MESSAGES/app.po @@ -1,2988 +1,5560 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# English translations for front package. +# Copyright (C) 2019 THE front'S COPYRIGHT HOLDER # This file is distributed under the same license as the front package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# Automatically generated, 2019. # msgid "" msgstr "" "Project-Id-Version: front 0.1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-01-29 10:47+0100\n" -"PO-Revision-Date: 2019-03-07 12:44+0000\n" -"Last-Translator: gerry_the_hat <gerd-schumann@web.de>\n" +"POT-Creation-Date: 2019-10-01 15:15+0200\n" +"PO-Revision-Date: 2019-10-03 17:13+0000\n" +"Last-Translator: Ciarán Ainsworth <ciaranainsworth@posteo.net>\n" "Language-Team: none\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 3.2.2\n" +"X-Generator: Weblate 3.7\n" #: front/src/components/playlists/PlaylistModal.vue:9 +msgctxt "Popup/Playlist/Paragraph" msgid "\"%{ title }\", by %{ artist }" msgstr "\"%{ title }\", by %{ artist }" #: front/src/components/Sidebar.vue:24 +msgctxt "Sidebar/Queue/Tab.Title" msgid "(%{ index } of %{ length })" msgstr "(%{ index } of %{ length })" #: front/src/components/Sidebar.vue:22 +msgctxt "Sidebar/Queue/Tab.Title" msgid "(empty)" msgstr "(empty)" -#: front/src/components/common/ActionTable.vue:57 -#: front/src/components/common/ActionTable.vue:66 +#: front/src/components/auth/Authorize.vue:16 +msgctxt "Content/Auth/Title" +msgid "%{ app } wants to access your Funkwhale account" +msgstr "%{ app } wants to access your Funkwhale account" + +#: front/src/components/About.vue:173 src/components/Home.vue:56 +msgctxt "Content/Home/Stat" +msgid "%{ count } active user" +msgid_plural "%{ count } active users" +msgstr[0] "%{ count } active user" +msgstr[1] "%{ count } active users" + +#: front/src/components/About.vue:182 +msgctxt "Content/Home/Stat" +msgid "%{ count } albums" +msgid_plural "%{ count } albums" +msgstr[0] "%{ count } albums" +msgstr[1] "%{ count } albums" + +#: front/src/components/About.vue:152 +msgctxt "*/*/*" +msgid "%{ count } allowed domains" +msgid_plural "%{ count } allowed domains" +msgstr[0] "%{ count } allowed domains" +msgstr[1] "%{ count } allowed domains" + +#: front/src/components/About.vue:179 +msgctxt "Content/Home/Stat" +msgid "%{ count } artists" +msgid_plural "%{ count } artists" +msgstr[0] "%{ count } artists" +msgstr[1] "%{ count } artists" + +#: front/src/components/About.vue:176 src/components/Home.vue:59 +msgctxt "Content/Home/Stat" +msgid "%{ count } hour of music" +msgid_plural "%{ count } hours of music" +msgstr[0] "%{ count } hour of music" +msgstr[1] "%{ count } hours of music" + +#: front/src/components/About.vue:188 +msgctxt "Content/Home/Stat" +msgid "%{ count } listenings" +msgid_plural "%{ count } listenings" +msgstr[0] "%{ count } listenings" +msgstr[1] "%{ count } listenings" + +#: front/src/components/common/ActionTable.vue:68 +msgctxt "Content/*/Paragraph" msgid "%{ count } on %{ total } selected" msgid_plural "%{ count } on %{ total } selected" msgstr[0] "%{ count } on %{ total } selected" msgstr[1] "%{ count } on %{ total } selected" -#: front/src/components/Sidebar.vue:110 src/components/audio/album/Card.vue:54 -#: front/src/views/content/libraries/Card.vue:39 src/views/content/remote/Card.vue:26 +#: front/src/components/Sidebar.vue:125 src/components/audio/album/Card.vue:52 +#: front/src/views/content/libraries/Card.vue:40 +#: src/views/content/remote/Card.vue:43 +msgctxt "*/*/*" msgid "%{ count } track" msgid_plural "%{ count } tracks" msgstr[0] "%{ count } track" msgstr[1] "%{ count } tracks" -#: front/src/components/library/Artist.vue:13 +#: front/src/components/library/ArtistBase.vue:13 +msgctxt "Content/Artist/Paragraph" msgid "%{ count } track in %{ albumsCount } albums" msgid_plural "%{ count } tracks in %{ albumsCount } albums" msgstr[0] "%{ count } track in %{ albumsCount } albums" msgstr[1] "%{ count } tracks in %{ albumsCount } albums" -#: front/src/components/library/radios/Builder.vue:80 +#: front/src/components/library/radios/Builder.vue:81 +msgctxt "Content/Radio/Table.Paragraph/Short" msgid "%{ count } track matching combined filters" msgid_plural "%{ count } tracks matching combined filters" msgstr[0] "%{ count } track matching combined filters" msgstr[1] "%{ count } tracks matching combined filters" -#: front/src/components/audio/PlayButton.vue:180 -msgid "%{ count } track was added to your queue" -msgid_plural "%{ count } tracks were added to your queue" -msgstr[0] "%{ count } track was added to your queue" -msgstr[1] "%{ count } tracks were added to your queue" +#: front/src/components/About.vue:185 +msgctxt "Content/Home/Stat" +msgid "%{ count } tracks" +msgid_plural "%{ count } tracks" +msgstr[0] "%{ count } tracks" +msgstr[1] "%{ count } tracks" -#: front/src/components/playlists/Card.vue:18 +#: front/src/components/playlists/Card.vue:28 +msgctxt "Content/*/Card/List item" msgid "%{ count} track" msgid_plural "%{ count } tracks" msgstr[0] "%{ count} track" msgstr[1] "%{ count } tracks" #: front/src/views/content/libraries/Quota.vue:11 +msgctxt "Content/Library/Paragraph" msgid "%{ current } used on %{ max } allowed" msgstr "%{ current } used on %{ max } allowed" #: front/src/components/common/Duration.vue:2 +msgctxt "Content/*/Paragraph" msgid "%{ hours } h %{ minutes } min" msgstr "%{ hours } h %{ minutes } min" #: front/src/components/common/Duration.vue:5 +msgctxt "Content/*/Paragraph" msgid "%{ minutes } min" msgstr "%{ minutes } min" #: front/src/components/notifications/NotificationRow.vue:40 +msgctxt "Content/Notifications/Paragraph" msgid "%{ username } accepted your follow on library \"%{ library }\"" msgstr "%{ username } accepted your follow on library \"%{ library }\"" #: front/src/components/notifications/NotificationRow.vue:39 +msgctxt "Content/Notifications/Paragraph" msgid "%{ username } followed your library \"%{ library }\"" msgstr "%{ username } followed your library \"%{ library }\"" #: front/src/components/notifications/NotificationRow.vue:41 +msgctxt "Content/Notifications/Paragraph" msgid "%{ username } wants to follow your library \"%{ library }\"" msgstr "%{ username } wants to follow your library \"%{ library }\"" #: front/src/components/auth/Profile.vue:46 +msgctxt "Head/Profile/Title" msgid "%{ username }'s profile" msgstr "%{ username }'s profile" -#: front/src/components/audio/artist/Card.vue:41 +#: front/src/components/playlists/PlaylistModal.vue:21 +msgctxt "Popup/Playlist/Paragraph" +msgid "<strong>%{ track }</strong> is already in <strong>%{ playlist }</strong>." +msgstr "<strong>%{ track }</strong> is already in <strong>%{ playlist }</strong>." + +#: front/src/components/audio/artist/Card.vue:11 +msgctxt "Content/Artist/Card" msgid "1 album" msgid_plural "%{ count } albums" msgstr[0] "1 album" msgstr[1] "%{ count } albums" #: front/src/components/favorites/List.vue:10 +msgctxt "Content/Favorites/Title" msgid "1 favorite" msgid_plural "%{ count } favorites" msgstr[0] "1 favourite" msgstr[1] "%{ count } favourites" -#: front/src/components/library/FileUpload.vue:226 -#: front/src/components/library/FileUpload.vue:227 -msgid "A network error occured while uploading this file" +#: front/src/components/audio/artist/Card.vue:15 +msgctxt "Content/Artist/Card" +msgid "1 track" +msgid_plural "%{ count } tracks" +msgstr[0] "1 track" +msgstr[1] "%{ count } tracks" + +#: front/src/views/Notifications.vue:21 src/views/Notifications.vue:55 +msgctxt "*/*/*" +msgid "30 days" +msgstr "30 days" + +#: front/src/views/Notifications.vue:22 src/views/Notifications.vue:56 +msgctxt "*/*/*" +msgid "60 days" +msgstr "60 days" + +#: front/src/views/Notifications.vue:23 src/views/Notifications.vue:57 +msgctxt "*/*/*" +msgid "90 days" +msgstr "90 days" + +#: front/src/components/library/FileUpload.vue:264 +msgctxt "Content/Library/Help text" +msgid "A network error occurred while uploading this file" msgstr "A network error occurred while uploading this file" +#: front/src/components/library/EditForm.vue:161 +msgctxt "*/*/Placeholder" +msgid "A short summary describing your changes." +msgstr "A short summary describing your changes." + #: front/src/components/About.vue:5 -msgid "About %{ instance }" -msgstr "About %{ instance }" +msgctxt "Content/Home/Header" +msgid "About %{ podName }" +msgstr "About %{ podName }" #: front/src/components/Footer.vue:6 +msgctxt "Footer/About/Title" msgid "About %{instanceName}" msgstr "About %{instanceName}" -#: front/src/components/Footer.vue:45 +#: front/src/components/Footer.vue:53 src/components/Home.vue:85 +msgctxt "Footer/*/Title/Short" msgid "About Funkwhale" msgstr "About Funkwhale" #: front/src/components/Footer.vue:10 +msgctxt "Footer/About/List item.Link" msgid "About page" msgstr "About page" -#: front/src/components/About.vue:8 src/components/About.vue:67 -msgid "About this instance" -msgstr "About this instance" +#: front/src/components/Home.vue:19 +msgctxt "Content/Home/Header" +msgid "About this Funkwhale pod" +msgstr "About this Funkwhale pod" + +#: front/src/components/About.vue:21 src/components/About.vue:51 +msgctxt "Content/About/Header" +msgid "About this pod" +msgstr "About this pod" #: front/src/views/content/libraries/Detail.vue:48 +msgctxt "Content/Library/Button.Label" msgid "Accept" msgstr "Accept" #: front/src/views/content/libraries/Detail.vue:40 +msgctxt "Content/Library/Table/Short" msgid "Accepted" msgstr "Accepted" -#: front/src/components/auth/SubsonicTokenForm.vue:110 +#: front/src/components/auth/SubsonicTokenForm.vue:117 +msgctxt "Content/Settings/Message" msgid "Access disabled" msgstr "Access disabled" -#: front/src/components/Home.vue:106 -msgid "Access your music from a clean interface that focus on what really matters" -msgstr "" -"Access your music from a clean interface that focuses on what really matters" - -#: front/src/components/mixins/Translations.vue:19 -#: front/src/components/mixins/Translations.vue:20 +#: front/src/components/mixins/Translations.vue:85 +#: front/src/components/mixins/Translations.vue:86 +msgctxt "Content/OAuth Scopes/Paragraph" +msgid "Access to audio files, libraries, artists, albums and tracks" +msgstr "Access to audio files, libraries, artists, albums and tracks" + +#: front/src/components/mixins/Translations.vue:109 +#: front/src/components/mixins/Translations.vue:110 +msgctxt "Content/OAuth Scopes/Paragraph" +msgid "Access to content filters" +msgstr "Access to content filters" + +#: front/src/components/mixins/Translations.vue:117 +#: front/src/components/mixins/Translations.vue:118 +msgctxt "Content/OAuth Scopes/Paragraph" +msgid "Access to edits" +msgstr "Access to edits" + +#: front/src/components/mixins/Translations.vue:81 +#: front/src/components/mixins/Translations.vue:82 +msgctxt "Content/OAuth Scopes/Paragraph" +msgid "Access to email, username, and profile information" +msgstr "Access to email, username, and profile information" + +#: front/src/components/mixins/Translations.vue:89 +#: front/src/components/mixins/Translations.vue:90 +msgctxt "Content/OAuth Scopes/Paragraph" +msgid "Access to favorites" +msgstr "Access to favourites" + +#: front/src/components/mixins/Translations.vue:97 +#: front/src/components/mixins/Translations.vue:98 +msgctxt "Content/OAuth Scopes/Paragraph" +msgid "Access to follows" +msgstr "Access to follows" + +#: front/src/components/mixins/Translations.vue:93 +#: front/src/components/mixins/Translations.vue:94 +msgctxt "Content/OAuth Scopes/Paragraph" +msgid "Access to listening history" +msgstr "Access to listening history" + +#: front/src/components/mixins/Translations.vue:113 +#: front/src/components/mixins/Translations.vue:114 +msgctxt "Content/OAuth Scopes/Paragraph" +msgid "Access to notifications" +msgstr "Access to notifications" + +#: front/src/components/mixins/Translations.vue:101 +#: front/src/components/mixins/Translations.vue:102 +msgctxt "Content/OAuth Scopes/Paragraph" +msgid "Access to playlists" +msgstr "Access to playlists" + +#: front/src/components/mixins/Translations.vue:105 +#: front/src/components/mixins/Translations.vue:106 +msgctxt "Content/OAuth Scopes/Paragraph" +msgid "Access to radios" +msgstr "Access to radios" + +#: front/src/components/manage/library/UploadsTable.vue:67 +#: front/src/components/mixins/Translations.vue:55 +#: front/src/views/admin/library/UploadDetail.vue:175 +#: front/src/components/mixins/Translations.vue:56 +msgctxt "Content/*/*/Noun" msgid "Accessed date" -msgstr "Access date" - -#: front/src/views/admin/moderation/AccountsDetail.vue:78 +msgstr "Accessed date" + +#: front/src/components/manage/library/LibrariesTable.vue:49 +#: front/src/components/manage/library/UploadsTable.vue:61 +#: front/src/components/manage/moderation/ReportCard.vue:156 +#: front/src/components/mixins/Report.vue:13 +#: front/src/views/admin/library/LibraryDetail.vue:113 +#: front/src/views/admin/library/UploadDetail.vue:111 +#: front/src/components/mixins/Report.vue:14 +msgctxt "*/*/*/Noun" +msgid "Account" +msgstr "Account" + +#: front/src/views/admin/moderation/AccountsDetail.vue:107 +msgctxt "Content/Moderation/Title" msgid "Account data" msgstr "Account data" #: front/src/components/auth/Settings.vue:5 +msgctxt "Content/Settings/Title" msgid "Account settings" msgstr "Account settings" -#: front/src/components/auth/Settings.vue:263 +#: front/src/components/auth/Settings.vue:544 +msgctxt "Head/Settings/Title" msgid "Account Settings" msgstr "Account Settings" #: front/src/components/manage/users/UsersTable.vue:39 +msgctxt "Content/Admin/Table.Label/Short, Noun" msgid "Account status" msgstr "Account status" #: front/src/views/auth/PasswordReset.vue:14 +msgctxt "Content/Signup/Input.Label" msgid "Account's email" msgstr "Account's email" #: front/src/views/admin/moderation/AccountsList.vue:3 #: front/src/views/admin/moderation/AccountsList.vue:24 -#: front/src/views/admin/moderation/Base.vue:8 +#: front/src/views/admin/moderation/Base.vue:11 +msgctxt "*/Moderation/Title" msgid "Accounts" msgstr "Accounts" #: front/src/views/content/libraries/Detail.vue:29 +msgctxt "Content/Library/Table.Label" msgid "Action" msgstr "Action" -#: front/src/components/common/ActionTable.vue:99 +#: front/src/components/common/ActionTable.vue:101 +msgctxt "Content/*/Paragraph" msgid "Action %{ action } was launched successfully on %{ count } element" msgid_plural "Action %{ action } was launched successfully on %{ count } elements" msgstr[0] "Action %{ action } was launched successfully on %{ count } element" msgstr[1] "Action %{ action } was launched successfully on %{ count } elements" -#: front/src/components/common/ActionTable.vue:21 -#: front/src/components/library/radios/Builder.vue:64 +#: front/src/components/common/ActionTable.vue:22 +#: front/src/components/library/radios/Builder.vue:65 +#: front/src/components/manage/moderation/ReportCard.vue:210 +msgctxt "Content/*/*/Noun" msgid "Actions" msgstr "Actions" -#: front/src/components/manage/users/UsersTable.vue:53 +#: front/src/components/manage/users/UsersTable.vue:54 +msgctxt "Content/Admin/Table" msgid "Active" msgstr "Active" -#: front/src/views/admin/moderation/AccountsDetail.vue:199 -#: front/src/views/admin/moderation/DomainsDetail.vue:144 +#: front/src/views/admin/library/AlbumDetail.vue:140 +#: front/src/views/admin/library/ArtistDetail.vue:128 +#: front/src/views/admin/library/LibraryDetail.vue:147 +#: front/src/views/admin/library/TagDetail.vue:83 +#: front/src/views/admin/library/TrackDetail.vue:192 +#: front/src/views/admin/library/UploadDetail.vue:160 +#: front/src/views/admin/moderation/AccountsDetail.vue:221 +#: front/src/views/admin/moderation/DomainsDetail.vue:173 +msgctxt "Content/Moderation/Title" msgid "Activity" msgstr "Activity" #: front/src/components/mixins/Translations.vue:7 #: front/src/components/mixins/Translations.vue:8 +msgctxt "Content/Settings/Dropdown.Label/Noun" msgid "Activity visibility" msgstr "Activity visibility" -#: front/src/views/admin/moderation/DomainsList.vue:18 +#: front/src/views/admin/moderation/DomainsList.vue:22 +msgctxt "Content/Moderation/Button/Verb" msgid "Add" msgstr "Add" #: front/src/views/admin/moderation/DomainsList.vue:13 +msgctxt "Content/Moderation/Form.Label/Verb" msgid "Add a domain" msgstr "Add a domain" +#: front/src/views/admin/moderation/AccountsDetail.vue:79 +msgctxt "Content/Moderation/Button/Verb" +msgid "Add a moderation policy" +msgstr "Add a moderation policy" + #: front/src/components/manage/moderation/InstancePolicyForm.vue:4 +msgctxt "Content/Moderation/Card.Button.Label/Verb" msgid "Add a new moderation rule" msgstr "Add a new moderation rule" #: front/src/views/content/Home.vue:35 +msgctxt "Content/Library/Title/Verb" msgid "Add and manage content" msgstr "Add and manage content" +#: front/src/components/playlists/Editor.vue:28 +#: front/src/components/playlists/PlaylistModal.vue:31 +msgctxt "*/Playlist/Button.Label/Verb" +msgid "Add anyways" +msgstr "Add anyway" + #: front/src/components/Sidebar.vue:75 src/views/content/Base.vue:18 +msgctxt "*/Library/*/Verb" msgid "Add content" msgstr "Add content" -#: front/src/components/library/radios/Builder.vue:50 +#: front/src/components/library/radios/Builder.vue:51 +msgctxt "Content/Radio/Button.Label/Verb" msgid "Add filter" msgstr "Add filter" -#: front/src/components/library/radios/Builder.vue:40 +#: front/src/components/library/radios/Builder.vue:41 +msgctxt "Content/Radio/Paragraph" msgid "Add filters to customize your radio" msgstr "Add filters to customise your radio" -#: front/src/components/audio/PlayButton.vue:64 +#: front/src/components/manage/moderation/NoteForm.vue:12 +msgctxt "Content/Moderation/Button.Label/Verb" +msgid "Add note" +msgstr "Add note" + +#: front/src/components/manage/moderation/DomainsTable.vue:191 +#: front/src/views/admin/moderation/DomainsDetail.vue:46 +#: front/src/views/admin/moderation/DomainsList.vue:18 +msgctxt "Content/Moderation/Action/Verb" +msgid "Add to allow-list" +msgstr "Add to allow-list" + +#: front/src/components/audio/PlayButton.vue:91 +msgctxt "*/Queue/Dropdown/Button/Title" msgid "Add to current queue" msgstr "Add to current queue" #: front/src/components/favorites/TrackFavoriteIcon.vue:4 #: front/src/components/favorites/TrackFavoriteIcon.vue:28 +msgctxt "Content/Track/*/Verb" msgid "Add to favorites" msgstr "Add to favourites" #: front/src/components/playlists/TrackPlaylistIcon.vue:6 #: front/src/components/playlists/TrackPlaylistIcon.vue:34 +msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Add to playlist…" msgstr "Add to playlist…" -#: front/src/components/audio/PlayButton.vue:14 +#: front/src/components/audio/PlayButton.vue:15 +msgctxt "*/Queue/Dropdown/Button/Label/Short" msgid "Add to queue" msgstr "Add to queue" -#: front/src/components/playlists/PlaylistModal.vue:116 +#: front/src/components/playlists/PlaylistModal.vue:142 +msgctxt "Popup/Playlist/Table.Button.Tooltip/Verb" msgid "Add to this playlist" msgstr "Add to this playlist" -#: front/src/components/playlists/PlaylistModal.vue:54 +#: front/src/components/playlists/PlaylistModal.vue:68 +msgctxt "Popup/Playlist/Table.Button.Label/Verb" msgid "Add track" msgstr "Add track" -#: front/src/components/manage/users/UsersTable.vue:69 +#: front/src/components/manage/users/UsersTable.vue:70 +msgctxt "Content/Admin/Table.User role" msgid "Admin" msgstr "Admin" #: front/src/components/Sidebar.vue:79 +msgctxt "Sidebar/Admin/Title/Noun" msgid "Administration" msgstr "Administration" -#: front/src/components/audio/SearchBar.vue:26 src/components/audio/track/Table.vue:8 -#: front/src/components/library/Album.vue:153 -#: front/src/components/manage/library/FilesTable.vue:39 +#: front/src/components/audio/SearchBar.vue:33 +#: src/components/audio/track/Table.vue:9 +#: front/src/components/library/AlbumBase.vue:170 +#: front/src/components/library/ArtistBase.vue:212 +#: front/src/components/manage/library/TracksTable.vue:40 #: front/src/components/metadata/Search.vue:134 -#: front/src/views/content/libraries/FilesTable.vue:56 +#: src/components/mixins/Report.vue:41 +#: front/src/views/admin/library/TrackDetail.vue:113 +#: front/src/views/content/libraries/FilesTable.vue:57 +#: front/src/components/mixins/Report.vue:42 +msgctxt "*/*/*" msgid "Album" msgstr "Album" -#: front/src/components/library/Album.vue:183 -msgid "Album containing %{ count } track, by %{ artist }" -msgid_plural "Album containing %{ count } tracks, by %{ artist }" -msgstr[0] "Album containing %{ count } track, by %{ artist }" -msgstr[1] "Album containing %{ count } tracks, by %{ artist }" +#: front/src/views/admin/library/TrackDetail.vue:134 +msgctxt "*/*/*/Noun" +msgid "Album artist" +msgstr "Album artist" -#: front/src/components/mixins/Translations.vue:24 -#: front/src/components/mixins/Translations.vue:25 +#: front/src/views/admin/library/AlbumDetail.vue:98 +msgctxt "Content/Moderation/Title" +msgid "Album data" +msgstr "Album data" + +#: front/src/components/mixins/Translations.vue:61 +#: front/src/components/mixins/Translations.vue:62 +msgctxt "Content/*/Dropdown/Noun" msgid "Album name" msgstr "Album name" -#: front/src/components/library/Track.vue:27 -msgid "Album page" -msgstr "Album page" - -#: front/src/components/audio/Search.vue:19 src/components/instance/Stats.vue:48 -#: front/src/views/admin/moderation/AccountsDetail.vue:321 -#: front/src/views/admin/moderation/DomainsDetail.vue:257 +#: front/src/components/audio/Search.vue:19 +#: src/components/library/Albums.vue:129 +#: front/src/components/library/Library.vue:7 +#: src/components/library/TagDetail.vue:28 +#: front/src/components/manage/library/ArtistsTable.vue:41 +#: front/src/components/manage/library/TagsTable.vue:43 +#: front/src/views/admin/library/AlbumsList.vue:24 +#: front/src/views/admin/library/ArtistDetail.vue:256 +#: front/src/views/admin/library/Base.vue:11 +#: front/src/views/admin/library/LibraryDetail.vue:238 +#: front/src/views/admin/library/TagDetail.vue:133 +#: front/src/views/admin/moderation/AccountsDetail.vue:366 +#: front/src/views/admin/moderation/DomainsDetail.vue:301 +msgctxt "*/*/*" msgid "Albums" msgstr "Albums" -#: front/src/components/library/Artist.vue:44 +#: front/src/components/library/ArtistDetail.vue:21 +msgctxt "Content/Artist/Title" msgid "Albums by this artist" msgstr "Albums by this artist" +#: front/src/components/manage/library/EditsCardList.vue:15 +#: front/src/components/manage/library/LibrariesTable.vue:13 +#: front/src/components/manage/library/UploadsTable.vue:13 +#: front/src/components/manage/library/UploadsTable.vue:22 +#: front/src/components/manage/moderation/DomainsTable.vue:11 #: front/src/components/manage/users/InvitationsTable.vue:19 +#: front/src/components/moderation/ReportCategoryDropdown.vue:32 +#: front/src/views/admin/moderation/ReportsList.vue:17 #: front/src/views/content/libraries/FilesTable.vue:13 +msgctxt "Content/*/Dropdown" msgid "All" msgstr "All" +#: front/src/components/common/ActionTable.vue:59 +msgctxt "Content/*/Paragraph" +msgid "All %{ count } element selected" +msgid_plural "All %{ count } elements selected" +msgstr[0] "All %{ count } element selected" +msgstr[1] "All %{ count } elements selected" + +#: front/src/components/auth/Authorize.vue:107 +msgctxt "Head/Authorize/Title" +msgid "Allow application" +msgstr "Allow application" + +#: front/src/components/About.vue:136 +msgctxt "*/*/*" +msgid "Allow-list" +msgstr "Allow-list" + +#: front/src/components/About.vue:149 +msgctxt "*/*/*" +msgid "Allowed domains" +msgstr "Allowed domains" + +#: front/src/components/library/ImportStatusModal.vue:17 +msgctxt "Popup/Import/Message" +msgid "An error occurred during upload processing. You will find more information below." +msgstr "An error occurred during upload processing. You will find more information below." + #: front/src/components/playlists/Editor.vue:13 -msgid "An error occured while saving your changes" +msgctxt "Content/Playlist/Error message.Title" +msgid "An error occurred while saving your changes" msgstr "An error occurred while saving your changes" -#: front/src/components/auth/Login.vue:10 -msgid "An unknown error happend, this can mean the server is down or cannot be reached" -msgstr "" -"An unknown error happened, this can mean the server is down or cannot be " -"reached" - +#: front/src/components/federation/FetchButton.vue:21 +msgctxt "Popup/*/Message.Content" +msgid "An error occurred while trying to refresh data:" +msgstr "An error occurred while trying to refresh data:" + +#: front/src/components/federation/FetchButton.vue:41 +msgctxt "*/*/Error" +msgid "An HTTP error occurred while contacting the remote server" +msgstr "An HTTP error occurred while contacting the remote server" + +#: front/src/components/library/ImportStatusModal.vue:145 +msgctxt "Popup/Import/Error.Label" +msgid "An unknown error occurred" +msgstr "An unknown error occurred" + +#: front/src/components/About.vue:123 +msgctxt "*/*/*" +msgid "Anonymous access" +msgstr "Anonymous access" + +#: front/src/components/moderation/ReportModal.vue:54 +msgctxt "Popup/Moderation/Error message" +msgid "Anonymous reports are disabled, please sign-in to submit a report." +msgstr "Anonymous reports are disabled, please sign-in to submit a report." + +#: front/src/components/auth/Settings.vue:175 +#: src/components/auth/Settings.vue:225 +msgctxt "*/*/*/Noun" +msgid "Application" +msgstr "Application" + +#: front/src/components/auth/ApplicationEdit.vue:12 +msgctxt "Content/Applications/Title" +msgid "Application details" +msgstr "Application details" + +#: front/src/components/auth/ApplicationEdit.vue:21 +msgctxt "Content/Applications/Label" +msgid "Application ID" +msgstr "Application ID" + +#: front/src/components/auth/ApplicationEdit.vue:16 +msgctxt "Content/Application/Paragraph/" +msgid "Application ID and secret are really sensitive values and must be treated like passwords. Do not share those with anyone else." +msgstr "Application ID and secret are really sensitive values and must be treated like passwords. Do not share those with anyone else." + +#: front/src/components/auth/ApplicationEdit.vue:25 +msgctxt "Content/Applications/Label" +msgid "Application secret" +msgstr "Application secret" + +#: front/src/components/library/EditCard.vue:81 #: front/src/components/notifications/NotificationRow.vue:66 +msgctxt "Content/*/Button.Label/Verb" msgid "Approve" msgstr "Approve" +#: front/src/components/library/EditCard.vue:25 +#: front/src/components/manage/library/EditsCardList.vue:21 +msgctxt "Content/*/*/Short" +msgid "Approved" +msgstr "Approved" + +#: front/src/components/library/EditCard.vue:21 +msgctxt "Content/Library/Card/Short" +msgid "Approved and applied" +msgstr "Approved and applied" + #: front/src/components/auth/Logout.vue:5 +msgctxt "Content/Login/Title" msgid "Are you sure you want to log out?" msgstr "Are you sure you want to log out?" -#: front/src/components/audio/SearchBar.vue:25 src/components/audio/track/Table.vue:7 -#: front/src/components/library/Artist.vue:137 -#: front/src/components/manage/library/FilesTable.vue:38 +#: front/src/components/audio/SearchBar.vue:32 +#: src/components/audio/track/Table.vue:8 +#: front/src/components/manage/library/AlbumsTable.vue:40 +#: front/src/components/manage/library/TracksTable.vue:41 #: front/src/components/metadata/Search.vue:130 -#: front/src/views/content/libraries/FilesTable.vue:55 +#: src/components/mixins/Report.vue:55 +#: front/src/views/admin/library/AlbumDetail.vue:114 +#: front/src/views/admin/library/TrackDetail.vue:124 +#: front/src/views/content/libraries/FilesTable.vue:56 src/entities.js:12 +#: front/src/components/mixins/Report.vue:56 +msgctxt "*/*/*/Noun" msgid "Artist" msgstr "Artist" -#: front/src/components/mixins/Translations.vue:25 -#: front/src/components/mixins/Translations.vue:26 +#: front/src/views/admin/library/ArtistDetail.vue:96 +msgctxt "Content/Moderation/Title" +msgid "Artist data" +msgstr "Artist data" + +#: front/src/components/mixins/Translations.vue:62 +#: front/src/components/mixins/Translations.vue:63 +msgctxt "Content/*/Dropdown/Noun" msgid "Artist name" msgstr "Artist name" -#: front/src/components/library/Album.vue:16 src/components/library/Track.vue:33 -msgid "Artist page" -msgstr "Artist page" - #: front/src/components/audio/Search.vue:65 +msgctxt "*/Search/Input.Placeholder" msgid "Artist, album, track…" msgstr "Artist, album, track…" -#: front/src/components/audio/Search.vue:10 src/components/instance/Stats.vue:42 -#: front/src/components/library/Artists.vue:119 src/components/library/Library.vue:7 -#: front/src/views/admin/moderation/AccountsDetail.vue:313 -#: front/src/views/admin/moderation/DomainsDetail.vue:249 +#: front/src/components/audio/Search.vue:10 +#: src/components/library/Artists.vue:117 +#: front/src/components/library/Library.vue:10 +#: front/src/components/library/TagDetail.vue:19 +#: front/src/components/manage/library/TagsTable.vue:42 +#: front/src/views/admin/library/ArtistsList.vue:24 +#: front/src/views/admin/library/Base.vue:8 +#: front/src/views/admin/library/LibraryDetail.vue:228 +#: front/src/views/admin/library/TagDetail.vue:123 +#: front/src/views/admin/moderation/AccountsDetail.vue:358 +#: front/src/views/admin/moderation/DomainsDetail.vue:291 +msgctxt "*/*/*/Noun" msgid "Artists" msgstr "Artists" -#: front/src/components/favorites/List.vue:33 src/components/library/Artists.vue:25 -#: front/src/components/library/Radios.vue:44 -#: front/src/components/manage/library/FilesTable.vue:19 +#: front/src/components/favorites/List.vue:34 +#: src/components/library/Albums.vue:29 +#: front/src/components/library/Artists.vue:29 +#: src/components/library/Radios.vue:44 +#: front/src/components/manage/library/AlbumsTable.vue:21 +#: front/src/components/manage/library/ArtistsTable.vue:21 +#: front/src/components/manage/library/EditsCardList.vue:39 +#: front/src/components/manage/library/LibrariesTable.vue:30 +#: front/src/components/manage/library/TagsTable.vue:21 +#: front/src/components/manage/library/TracksTable.vue:21 +#: front/src/components/manage/library/UploadsTable.vue:40 #: front/src/components/manage/moderation/AccountsTable.vue:21 -#: front/src/components/manage/moderation/DomainsTable.vue:19 +#: front/src/components/manage/moderation/DomainsTable.vue:27 #: front/src/components/manage/users/UsersTable.vue:19 +#: front/src/views/admin/moderation/ReportsList.vue:44 #: front/src/views/content/libraries/FilesTable.vue:31 #: front/src/views/playlists/List.vue:27 +msgctxt "Content/Search/Dropdown" msgid "Ascending" msgstr "Ascending" #: front/src/views/auth/PasswordReset.vue:28 +msgctxt "Content/Signup/Button.Label/Verb" msgid "Ask for a password reset" msgstr "Ask for a password reset" -#: front/src/views/admin/moderation/AccountsDetail.vue:245 -#: front/src/views/admin/moderation/DomainsDetail.vue:202 +#: front/src/components/manage/moderation/ReportCard.vue:72 +msgctxt "Content/Moderation/*" +msgid "Assigned to" +msgstr "Assigned to" + +#: front/src/views/admin/library/AlbumDetail.vue:214 +#: front/src/views/admin/library/ArtistDetail.vue:202 +#: front/src/views/admin/library/LibraryDetail.vue:195 +#: front/src/views/admin/library/TagDetail.vue:113 +#: front/src/views/admin/library/TrackDetail.vue:266 +#: front/src/views/admin/library/UploadDetail.vue:191 +#: front/src/views/admin/moderation/AccountsDetail.vue:285 +#: front/src/views/admin/moderation/DomainsDetail.vue:239 +msgctxt "Content/Moderation/Title" msgid "Audio content" msgstr "Audio content" -#: front/src/components/ShortcutsModal.vue:55 +#: front/src/components/ShortcutsModal.vue:92 +msgctxt "Popup/Keyboard shortcuts/Title" msgid "Audio player shortcuts" msgstr "Audio player shortcuts" -#: front/src/components/playlists/PlaylistModal.vue:26 +#: front/src/components/auth/Authorize.vue:47 +msgctxt "Content/Signup/Button.Label/Verb" +msgid "Authorize %{ app }" +msgstr "Authorise %{ app }" + +#: front/src/components/auth/Authorize.vue:4 +msgctxt "Content/Auth/Title/Verb" +msgid "Authorize third-party app" +msgstr "Authorise third-party app" + +#: front/src/components/auth/Settings.vue:162 +msgctxt "Content/Settings/Title/Noun" +msgid "Authorized apps" +msgstr "Authorised apps" + +#: front/src/components/playlists/PlaylistModal.vue:40 +msgctxt "Popup/Playlist/Title" msgid "Available playlists" msgstr "Available playlists" #: front/src/components/auth/Settings.vue:34 +msgctxt "Content/Settings/Title" msgid "Avatar" msgstr "Avatar" #: front/src/views/auth/PasswordReset.vue:25 #: front/src/views/auth/PasswordResetConfirm.vue:18 +msgctxt "Content/Signup/Link" msgid "Back to login" msgstr "Back to login" -#: front/src/components/library/Track.vue:129 -#: front/src/components/manage/library/FilesTable.vue:42 -#: front/src/components/mixins/Translations.vue:29 -#: front/src/components/mixins/Translations.vue:30 +#: front/src/components/auth/ApplicationEdit.vue:9 +#: front/src/components/auth/ApplicationNew.vue:5 +msgctxt "Content/Applications/Link" +msgid "Back to settings" +msgstr "Back to settings" + +#: front/src/components/library/TrackDetail.vue:48 +#: front/src/components/mixins/Translations.vue:67 +#: front/src/views/admin/library/UploadDetail.vue:227 +#: front/src/components/mixins/Translations.vue:68 +msgctxt "Content/Track/*/Noun" msgid "Bitrate" msgstr "Bitrate" #: front/src/components/manage/moderation/InstancePolicyCard.vue:19 #: front/src/components/manage/moderation/InstancePolicyForm.vue:34 +msgctxt "Content/Moderation/*/Verb" msgid "Block everything" msgstr "Block everything" #: front/src/components/manage/moderation/InstancePolicyForm.vue:112 +msgctxt "Content/Moderation/Help text" msgid "Block everything from this account or domain. This will prevent any interaction with the entity, and purge related content (uploads, libraries, follows, etc.)" -msgstr "" -"Block everything from this account or domain. This will prevent any " -"interaction with the entity, and purge related content (uploads, libraries, " -"follows, etc.)" +msgstr "Block everything from this account or domain. This will prevent any interaction with the entity, and purge related content (uploads, libraries, follows, etc.)" #: front/src/components/Sidebar.vue:18 src/components/library/Library.vue:4 +msgctxt "*/Library/*/Verb" msgid "Browse" msgstr "Browse" #: front/src/components/Sidebar.vue:65 +msgctxt "Sidebar/Library/List item.Link/Verb" msgid "Browse library" msgstr "Browse library" +#: front/src/components/Home.vue:132 +msgctxt "Content/Home/Link" +msgid "Browse public content" +msgstr "Browse public content" + +#: front/src/components/library/Albums.vue:4 +msgctxt "Content/Album/Title" +msgid "Browsing albums" +msgstr "Browsing albums" + #: front/src/components/library/Artists.vue:4 +msgctxt "Content/Artist/Title" msgid "Browsing artists" msgstr "Browsing artists" #: front/src/views/playlists/List.vue:3 +msgctxt "Content/Playlist/Title" msgid "Browsing playlists" msgstr "Browsing playlists" #: front/src/components/library/Radios.vue:4 +msgctxt "Content/Radio/Title" msgid "Browsing radios" msgstr "Browsing radios" #: front/src/components/library/radios/Builder.vue:5 +msgctxt "Content/Radio/Title" msgid "Builder" msgstr "Builder" #: front/src/components/audio/album/Card.vue:13 +msgctxt "Content/Album/Card" msgid "By %{ artist }" msgstr "By %{ artist }" -#: front/src/views/content/remote/Card.vue:103 +#: front/src/views/content/remote/Card.vue:125 +msgctxt "Popup/Library/Paragraph" msgid "By unfollowing this library, you loose access to its content." msgstr "By unfollowing this library, you lose access to its content." -#: front/src/views/admin/moderation/AccountsDetail.vue:261 -#: front/src/views/admin/moderation/DomainsDetail.vue:217 +#: front/src/views/admin/library/AlbumDetail.vue:230 +#: front/src/views/admin/library/ArtistDetail.vue:218 +#: front/src/views/admin/library/LibraryDetail.vue:211 +#: front/src/views/admin/library/TrackDetail.vue:282 +#: front/src/views/admin/library/UploadDetail.vue:208 +#: front/src/views/admin/moderation/AccountsDetail.vue:301 +#: front/src/views/admin/moderation/DomainsDetail.vue:254 +msgctxt "Content/Moderation/Table.Label/Noun" msgid "Cached size" msgstr "Cached size" +#: front/src/components/SetInstanceModal.vue:37 #: front/src/components/common/DangerousButton.vue:17 -#: front/src/components/library/Album.vue:52 src/components/library/Track.vue:76 +#: front/src/components/library/AlbumBase.vue:37 +#: front/src/components/library/ArtistBase.vue:48 +#: front/src/components/library/EditForm.vue:107 +#: front/src/components/library/TrackBase.vue:53 #: front/src/components/library/radios/Filter.vue:53 #: front/src/components/manage/moderation/InstancePolicyForm.vue:54 -#: front/src/components/playlists/PlaylistModal.vue:63 +#: front/src/components/moderation/FilterModal.vue:39 +#: front/src/components/moderation/ReportModal.vue:59 +#: front/src/components/playlists/PlaylistModal.vue:26 +#: front/src/components/playlists/PlaylistModal.vue:77 +#: front/src/views/playlists/Detail.vue:62 +msgctxt "*/*/Button.Label/Verb" msgid "Cancel" msgstr "Cancel" -#: front/src/components/library/radios/Builder.vue:63 +#: front/src/views/content/remote/Card.vue:110 +msgctxt "Content/Library/Card.Paragraph" +msgid "Cancel follow request" +msgstr "Cancel follow request" + +#: front/src/components/library/radios/Builder.vue:64 +msgctxt "Content/Radio/Table.Label/Noun (Value is a number of Tracks)" msgid "Candidates" msgstr "Candidates" -#: front/src/components/auth/Settings.vue:75 -msgid "Cannot change your password" -msgstr "Cannot change your password" - -#: front/src/components/library/FileUpload.vue:223 -#: front/src/components/library/FileUpload.vue:224 +#: front/src/components/library/FileUpload.vue:261 +msgctxt "Content/Library/Help text" msgid "Cannot upload this file, ensure it is not too big" msgstr "Cannot upload this file, ensure it is not too big" +#: front/src/components/manage/moderation/ReportCard.vue:30 +#: front/src/components/mixins/Translations.vue:42 +#: front/src/components/moderation/ReportCategoryDropdown.vue:2 +#: front/src/components/mixins/Translations.vue:43 +msgctxt "*/*/*" +msgid "Category" +msgstr "Category" + #: front/src/components/Footer.vue:21 +msgctxt "Footer/Settings/Dropdown.Label/Short, Verb" msgid "Change language" msgstr "Change language" -#: front/src/components/auth/Settings.vue:67 +#: front/src/components/auth/Settings.vue:68 +msgctxt "Content/Settings/Title/Verb" msgid "Change my password" msgstr "Change my password" -#: front/src/components/auth/Settings.vue:94 +#: front/src/components/auth/Settings.vue:95 +msgctxt "Content/Settings/Button.Label" msgid "Change password" msgstr "Change password" -#: front/src/views/auth/PasswordResetConfirm.vue:4 +#: front/src/components/Footer.vue:37 +msgctxt "Footer/Settings/Dropdown.Label/Short, Verb" +msgid "Change theme" +msgstr "Change theme" + #: front/src/views/auth/PasswordResetConfirm.vue:62 +msgctxt "*/Signup/Title" msgid "Change your password" msgstr "Change your password" -#: front/src/components/auth/Settings.vue:95 +#: front/src/components/auth/Settings.vue:96 +msgctxt "Popup/Settings/Title" msgid "Change your password?" msgstr "Change your password?" -#: front/src/components/playlists/Editor.vue:21 +#: front/src/components/playlists/Editor.vue:31 +msgctxt "Content/Playlist/Paragraph" msgid "Changes synced with server" msgstr "Changes synced with server" -#: front/src/components/auth/Settings.vue:70 +#: front/src/components/auth/Settings.vue:71 +msgctxt "Content/Settings/Paragraph'" msgid "Changing your password will also change your Subsonic API password if you have requested one." -msgstr "" -"Changing your password will also change your Subsonic API password if you " -"have requested one." +msgstr "Changing your password will also change your Subsonic API password if you have requested one." -#: front/src/components/auth/Settings.vue:97 -msgid "Changing your password will have the following consequences" -msgstr "Changing your password will have the following consequences" +#: front/src/components/auth/Settings.vue:98 +msgctxt "Popup/Settings/Paragraph" +msgid "Changing your password will have the following consequences:" +msgstr "Changing your password will have the following consequences:" -#: front/src/components/Footer.vue:40 +#: front/src/components/Footer.vue:48 +msgctxt "Footer/*/List item.Link" msgid "Chat room" msgstr "Chat room" -#: front/src/App.vue:13 +#: front/src/components/auth/ApplicationForm.vue:24 +msgctxt "Content/Applications/Paragraph/" +msgid "Checking the parent \"Read\" or \"Write\" scopes implies access to all the corresponding children scopes." +msgstr "Checking the parent \"Read\" or \"Write\" scopes implies access to all the corresponding children scopes." + +#: front/src/components/SetInstanceModal.vue:2 +msgctxt "Popup/Instance/Title" msgid "Choose your instance" msgstr "Choose your instance" -#: front/src/components/Home.vue:64 -msgid "Clean library" -msgstr "Clean library" - +#: front/src/components/library/EditForm.vue:75 +#: front/src/components/library/EditForm.vue:88 #: front/src/components/manage/users/InvitationForm.vue:37 +msgctxt "Content/Library/Button.Label" msgid "Clear" msgstr "Clear" -#: front/src/components/playlists/Editor.vue:40 -#: front/src/components/playlists/Editor.vue:45 +#: front/src/components/playlists/Editor.vue:50 +#: front/src/components/playlists/Editor.vue:55 +msgctxt "*/Playlist/Button.Label/Verb" msgid "Clear playlist" msgstr "Clear playlist" -#: front/src/components/audio/Player.vue:366 +#: front/src/components/ShortcutsModal.vue:144 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Clear queue" +msgstr "Clear queue" + +#: front/src/components/audio/Player.vue:668 +msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Clear your queue" msgstr "Clear your queue" -#: front/src/components/Home.vue:44 -msgid "Click once, listen for hours using built-in radios" -msgstr "Click once, listen for hours using built-in radios" +#: front/src/components/mixins/Translations.vue:21 +#: front/src/components/mixins/Translations.vue:22 +msgctxt "Content/Library/Link.Title" +msgid "Click to display more information about the import process for this upload" +msgstr "Click to display more information about the import process for this upload" -#: front/src/components/library/FileUpload.vue:75 +#: front/src/components/library/FileUpload.vue:82 +msgctxt "Content/Library/Paragraph/Call to action" msgid "Click to select files to upload or drag and drop files or directories" msgstr "Click to select files to upload or drag and drop files or directories" -#: front/src/components/ShortcutsModal.vue:20 +#: front/src/components/ShortcutsModal.vue:38 +#: front/src/components/federation/FetchButton.vue:85 +#: front/src/components/library/ImportStatusModal.vue:79 +#: front/src/components/manage/moderation/InstancePolicyModal.vue:34 +msgctxt "*/*/Button.Label/Verb" msgid "Close" msgstr "Close" +#: front/src/components/federation/FetchButton.vue:88 +msgctxt "*/*/Button.Label/Verb" +msgid "Close and reload page" +msgstr "Close and reload page" + +#: front/src/components/About.vue:94 +msgctxt "*/*/*/State of registrations" +msgid "Closed" +msgstr "Closed" + #: front/src/components/manage/users/InvitationForm.vue:26 #: front/src/components/manage/users/InvitationsTable.vue:42 +msgctxt "Content/Admin/Table.Label/Noun" msgid "Code" msgstr "Code" -#: front/src/components/audio/album/Card.vue:43 -#: front/src/components/audio/artist/Card.vue:33 +#: front/src/components/audio/album/Card.vue:41 +#: front/src/components/common/CollapseLink.vue:3 +msgctxt "*/*/Button,Label" msgid "Collapse" msgstr "Collapse" -#: front/src/components/library/radios/Builder.vue:62 +#: front/src/components/library/radios/Builder.vue:63 +msgctxt "Content/Radio/Table.Label/Verb (Value is a List of Parameters)" msgid "Config" msgstr "Config" #: front/src/components/common/DangerousButton.vue:21 +msgctxt "Modal/*/Button.Label/Short, Verb" msgid "Confirm" msgstr "Confirm" -#: front/src/views/auth/EmailConfirm.vue:4 src/views/auth/EmailConfirm.vue:20 #: front/src/views/auth/EmailConfirm.vue:51 +msgctxt "Head/Signup/Title" msgid "Confirm your e-mail address" msgstr "Confirm your e-mail address" #: front/src/views/auth/EmailConfirm.vue:13 +msgctxt "Content/Signup/Form.Label" msgid "Confirmation code" msgstr "Confirmation code" -#: front/src/components/common/ActionTable.vue:7 +#: front/src/components/About.vue:67 src/components/Home.vue:65 +msgctxt "Content/Home/Header/Name" +msgid "Contact" +msgstr "Contact" + +#: front/src/components/moderation/FilterModal.vue:90 +msgctxt "*/Moderation/Message" +msgid "Content filter successfully added" +msgstr "Content filter successfully added" + +#: front/src/components/auth/Settings.vue:116 +#: front/src/components/mixins/Translations.vue:108 +#: front/src/components/mixins/Translations.vue:109 +msgctxt "Content/Settings/Title/Noun" +msgid "Content filters" +msgstr "Content filters" + +#: front/src/components/auth/Settings.vue:119 +msgctxt "Content/Settings/Paragraph" +msgid "Content filters help you hide content you don't want to see on the service." +msgstr "Content filters help you hide content you don't want to see on the service." + +#: front/src/components/common/ActionTable.vue:8 +msgctxt "Content/*/Button.Help text.Paragraph" msgid "Content have been updated, click refresh to see up-to-date content" -msgstr "Content has been updated. Click refresh to see up-to-date content" +msgstr "Content have been updated, click refresh to see up-to-date content" -#: front/src/components/Footer.vue:48 +#: front/src/components/About.vue:46 +msgctxt "Content/About/Header" +msgid "Contents" +msgstr "Contents" + +#: front/src/components/Footer.vue:56 +msgctxt "Footer/*/List item.Link" msgid "Contribute" msgstr "Contribute" -#: front/src/components/audio/EmbedWizard.vue:19 +#: front/src/components/audio/EmbedWizard.vue:29 #: front/src/components/common/CopyInput.vue:8 +#: front/src/components/forms/PasswordInput.vue:43 +msgctxt "*/*/Button.Label/Short, Verb" msgid "Copy" msgstr "Copy" -#: front/src/components/playlists/Editor.vue:163 +#: front/src/components/playlists/Editor.vue:194 +msgctxt "Content/Playlist/Button.Tooltip/Verb" msgid "Copy queued tracks to playlist" msgstr "Copy queued tracks to playlist" -#: front/src/components/audio/EmbedWizard.vue:21 +#: front/src/components/auth/Authorize.vue:55 +msgctxt "Content/Auth/Paragraph" +msgid "Copy-paste the following code in the application:" +msgstr "Copy-paste the following code in the application:" + +#: front/src/components/audio/EmbedWizard.vue:31 +msgctxt "Popup/Embed/Paragraph" msgid "Copy/paste this code in your website HTML" msgstr "Copy/paste this code in your website HTML" -#: front/src/components/library/Track.vue:91 +#: front/src/components/library/TrackDetail.vue:10 +#: front/src/views/admin/library/TrackDetail.vue:159 src/edits.js:77 +msgctxt "Content/Track/*/Noun" msgid "Copyright" msgstr "Copyright" #: front/src/views/auth/EmailConfirm.vue:7 +msgctxt "Content/Signup/Paragraph" msgid "Could not confirm your e-mail address" msgstr "Could not confirm your e-mail address" #: front/src/views/content/remote/ScanForm.vue:3 +msgctxt "Content/Library/Error message.Title" msgid "Could not fetch remote library" msgstr "Could not fetch remote library" -#: front/src/views/content/libraries/FilesTable.vue:213 -msgid "Could not process this track, ensure it is tagged correctly" -msgstr "Could not process this track, ensure it is tagged correctly" - -#: front/src/components/Home.vue:85 -msgid "Covers, lyrics, our goal is to have them all ;)" -msgstr "Covers, lyrics, our goal is to have them all ;)" - #: front/src/components/manage/moderation/InstancePolicyForm.vue:58 +msgctxt "Content/Moderation/Card.Button.Label/Verb" msgid "Create" msgstr "Create" -#: front/src/components/auth/Signup.vue:4 +#: front/src/views/auth/Signup.vue:4 +msgctxt "Content/Signup/Title" msgid "Create a funkwhale account" -msgstr "Create a Funkwhale account" +msgstr "Create a funkwhale account" + +#: front/src/components/auth/ApplicationNew.vue:8 +#: front/src/components/auth/ApplicationNew.vue:41 +#: front/src/components/auth/Settings.vue:220 +msgctxt "Content/Settings/Button.Label" +msgid "Create a new application" +msgstr "Create a new application" #: front/src/views/content/libraries/Home.vue:14 +msgctxt "Content/Library/Link/Verb" msgid "Create a new library" msgstr "Create a new library" #: front/src/components/playlists/Form.vue:2 +msgctxt "Popup/Playlist/Title/Verb" msgid "Create a new playlist" msgstr "Create a new playlist" -#: front/src/components/Sidebar.vue:57 src/components/auth/Login.vue:17 +#: front/src/components/Sidebar.vue:57 src/components/auth/LoginForm.vue:15 +msgctxt "*/Signup/Link/Verb" msgid "Create an account" msgstr "Create an account" +#: front/src/components/auth/ApplicationForm.vue:65 +msgctxt "Content/Applications/Button.Label/Verb" +msgid "Create application" +msgstr "Create application" + #: front/src/views/content/libraries/Form.vue:26 +msgctxt "Content/Library/Button.Label/Verb" msgid "Create library" msgstr "Create library" -#: front/src/components/auth/Signup.vue:53 +#: front/src/components/auth/SignupForm.vue:49 +msgctxt "Content/Signup/Button.Label" msgid "Create my account" msgstr "Create my account" +#: front/src/components/auth/Settings.vue:264 +msgctxt "Content/Applications/Paragraph" +msgid "Create one to integrate Funkwhale with third-party applications." +msgstr "Create one to integrate Funkwhale with third-party applications." + #: front/src/components/playlists/Form.vue:34 +msgctxt "Content/Playlist/Button.Label/Verb" msgid "Create playlist" msgstr "Create playlist" #: front/src/components/library/Radios.vue:23 +msgctxt "Content/Radio/Button.Label/Verb" msgid "Create your own radio" msgstr "Create your own radio" +#: front/src/components/auth/Settings.vue:134 +#: src/components/auth/Settings.vue:227 +#: front/src/components/manage/library/AlbumsTable.vue:44 +#: front/src/components/manage/library/ArtistsTable.vue:43 +#: front/src/components/manage/library/LibrariesTable.vue:54 +#: front/src/components/manage/library/TagsTable.vue:45 +#: front/src/components/manage/library/TracksTable.vue:44 +#: front/src/components/manage/library/UploadsTable.vue:66 +#: front/src/components/manage/moderation/ReportCard.vue:43 #: front/src/components/manage/users/InvitationsTable.vue:40 -#: front/src/components/mixins/Translations.vue:16 -#: front/src/components/mixins/Translations.vue:17 +#: front/src/components/mixins/Translations.vue:53 +#: front/src/components/mixins/Translations.vue:54 +msgctxt "Content/*/*/Noun" msgid "Creation date" msgstr "Creation date" #: front/src/components/auth/Settings.vue:54 +msgctxt "Content/Settings/Title/Noun" msgid "Current avatar" msgstr "Current avatar" +#: front/src/components/admin/SettingsGroup.vue:67 +msgctxt "Content/Settings/Title/Noun" +msgid "Current image" +msgstr "Current image" + #: front/src/views/content/libraries/DetailArea.vue:4 +msgctxt "Content/Library/Title" msgid "Current library" msgstr "Current library" #: front/src/components/playlists/PlaylistModal.vue:8 +msgctxt "Popup/Playlist/Title" msgid "Current track" msgstr "Current track" #: front/src/views/content/libraries/Quota.vue:2 +msgctxt "Content/Library/Title" msgid "Current usage" msgstr "Current usage" +#: front/src/components/Footer.vue:94 +msgctxt "Footer/Settings/Dropdown.Label/Theme name" +msgid "Dark" +msgstr "Dark" + +#: front/src/components/federation/FetchButton.vue:53 +msgctxt "*/*/Error" +msgid "Data returned by the remote server had invalid or missing attributes" +msgstr "Data returned by the remote server had invalid or missing attributes" + +#: front/src/components/federation/FetchButton.vue:17 +msgctxt "Popup/*/Message.Content" +msgid "Data was refreshed successfully from remote server." +msgstr "Data was refreshed successfully from remote server." + #: front/src/views/content/libraries/Detail.vue:27 +msgctxt "Content/Library/Table.Label" msgid "Date" msgstr "Date" -#: front/src/components/ShortcutsModal.vue:75 +#: front/src/components/library/ImportStatusModal.vue:64 +msgctxt "Popup/Import/Table.Label/Noun" +msgid "Debug information" +msgstr "Debug information" + +#: front/src/components/ShortcutsModal.vue:128 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Decrease volume" msgstr "Decrease volume" -#: front/src/components/manage/library/FilesTable.vue:190 +#: front/src/components/auth/Settings.vue:150 +#: src/components/auth/Settings.vue:251 +#: front/src/components/library/EditCard.vue:93 +#: front/src/components/library/EditCard.vue:98 +#: front/src/components/manage/library/AlbumsTable.vue:188 +#: front/src/components/manage/library/ArtistsTable.vue:178 +#: front/src/components/manage/library/LibrariesTable.vue:205 +#: front/src/components/manage/library/TagsTable.vue:179 +#: front/src/components/manage/library/TracksTable.vue:188 +#: front/src/components/manage/library/UploadsTable.vue:255 #: front/src/components/manage/moderation/InstancePolicyForm.vue:61 +#: front/src/components/manage/moderation/NotesThread.vue:24 +#: front/src/components/manage/moderation/NotesThread.vue:29 +#: front/src/components/manage/moderation/ReportCard.vue:360 #: front/src/components/manage/users/InvitationsTable.vue:167 -#: front/src/views/content/libraries/FilesTable.vue:233 -#: front/src/views/content/libraries/Form.vue:29 src/views/playlists/Detail.vue:33 +#: front/src/views/admin/library/AlbumDetail.vue:78 +#: front/src/views/admin/library/AlbumDetail.vue:83 +#: front/src/views/admin/library/ArtistDetail.vue:76 +#: front/src/views/admin/library/ArtistDetail.vue:81 +#: front/src/views/admin/library/LibraryDetail.vue:58 +#: front/src/views/admin/library/LibraryDetail.vue:63 +#: front/src/views/admin/library/TagDetail.vue:41 +#: front/src/views/admin/library/TagDetail.vue:46 +#: front/src/views/admin/library/TrackDetail.vue:77 +#: front/src/views/admin/library/TrackDetail.vue:82 +#: front/src/views/admin/library/UploadDetail.vue:65 +#: front/src/views/admin/library/UploadDetail.vue:70 +#: front/src/views/content/libraries/FilesTable.vue:222 +#: front/src/views/content/libraries/Form.vue:29 +#: src/views/playlists/Detail.vue:42 +msgctxt "*/*/*/Verb" msgid "Delete" msgstr "Delete" +#: front/src/components/auth/Settings.vue:254 +msgctxt "*/Settings/Button.Label/Verb" +msgid "Delete application" +msgstr "Delete application" + +#: front/src/components/auth/Settings.vue:252 +msgctxt "Popup/Settings/Title" +msgid "Delete application \"%{ application }\"?" +msgstr "Delete application \"%{ application }\"?" + #: front/src/views/content/libraries/Form.vue:39 +msgctxt "Popup/Library/Button.Label/Verb" msgid "Delete library" msgstr "Delete library" #: front/src/components/manage/moderation/InstancePolicyForm.vue:69 +msgctxt "Popup/Moderation/Button.Label/Verb" msgid "Delete moderation rule" msgstr "Delete moderation rule" -#: front/src/views/playlists/Detail.vue:38 +#: front/src/components/auth/Settings.vue:274 +#: src/components/auth/Settings.vue:302 +msgctxt "*/*/Button.Label" +msgid "Delete my account" +msgstr "Delete my account" + +#: front/src/components/auth/Settings.vue:297 +msgctxt "*/*/Button.Label" +msgid "Delete my account…" +msgstr "Delete my account…" + +#: front/src/views/playlists/Detail.vue:47 +msgctxt "Popup/Playlist/Button.Label/Verb" msgid "Delete playlist" msgstr "Delete playlist" #: front/src/views/radios/Detail.vue:28 +msgctxt "Popup/Radio/Button.Label/Verb" msgid "Delete radio" msgstr "Delete radio" +#: front/src/components/manage/moderation/ReportCard.vue:357 +msgctxt "Content/Moderation/Button/Verb" +msgid "Delete reported object" +msgstr "Delete reported object" + +#: front/src/components/manage/moderation/ReportCard.vue:358 +msgctxt "Content/Moderation/Popup/Header" +msgid "Delete reported object?" +msgstr "Delete reported object?" + +#: front/src/views/admin/library/AlbumDetail.vue:79 +#: front/src/views/admin/library/TrackDetail.vue:78 +msgctxt "Popup/Library/Title" +msgid "Delete this album?" +msgstr "Delete this album?" + +#: front/src/views/admin/library/ArtistDetail.vue:77 +msgctxt "Popup/Library/Title" +msgid "Delete this artist?" +msgstr "Delete this artist?" + +#: front/src/views/admin/library/LibraryDetail.vue:59 #: front/src/views/content/libraries/Form.vue:31 +msgctxt "Popup/Library/Title" msgid "Delete this library?" msgstr "Delete this library?" #: front/src/components/manage/moderation/InstancePolicyForm.vue:63 +msgctxt "Popup/Moderation/Title" msgid "Delete this moderation rule?" msgstr "Delete this moderation rule?" -#: front/src/components/favorites/List.vue:34 src/components/library/Artists.vue:26 -#: front/src/components/library/Radios.vue:47 -#: front/src/components/manage/library/FilesTable.vue:20 +#: front/src/components/manage/moderation/NotesThread.vue:25 +msgctxt "Popup/Moderation/Title" +msgid "Delete this note?" +msgstr "Delete this note?" + +#: front/src/components/library/EditCard.vue:94 +msgctxt "Popup/Library/Title" +msgid "Delete this suggestion?" +msgstr "Delete this suggestion?" + +#: front/src/views/admin/library/TagDetail.vue:42 +msgctxt "Popup/Library/Title" +msgid "Delete this tag?" +msgstr "Delete this tag?" + +#: front/src/views/admin/library/UploadDetail.vue:66 +msgctxt "Popup/Library/Title" +msgid "Delete this upload?" +msgstr "Delete this upload?" + +#: front/src/components/favorites/List.vue:35 +#: src/components/library/Albums.vue:30 +#: front/src/components/library/Artists.vue:30 +#: src/components/library/Radios.vue:47 +#: front/src/components/manage/library/AlbumsTable.vue:22 +#: front/src/components/manage/library/ArtistsTable.vue:22 +#: front/src/components/manage/library/EditsCardList.vue:40 +#: front/src/components/manage/library/LibrariesTable.vue:31 +#: front/src/components/manage/library/TagsTable.vue:22 +#: front/src/components/manage/library/TracksTable.vue:22 +#: front/src/components/manage/library/UploadsTable.vue:41 #: front/src/components/manage/moderation/AccountsTable.vue:22 -#: front/src/components/manage/moderation/DomainsTable.vue:20 +#: front/src/components/manage/moderation/DomainsTable.vue:28 #: front/src/components/manage/users/UsersTable.vue:20 +#: front/src/views/admin/moderation/ReportsList.vue:45 #: front/src/views/content/libraries/FilesTable.vue:32 #: front/src/views/playlists/List.vue:28 +msgctxt "Content/Search/Dropdown" msgid "Descending" msgstr "Descending" +#: front/src/components/manage/moderation/NoteForm.vue:37 +msgctxt "Content/Moderation/Placeholder" +msgid "Describe what actions have been taken, or any other related updates…" +msgstr "Describe what actions have been taken, or any other related updates…" + #: front/src/components/library/radios/Builder.vue:25 +#: front/src/views/admin/library/LibraryDetail.vue:132 #: front/src/views/content/libraries/Form.vue:14 +msgctxt "*/*/*/Noun" msgid "Description" msgstr "Description" -#: front/src/views/content/libraries/Card.vue:47 -msgid "Detail" -msgstr "Detail" - -#: front/src/views/content/remote/Card.vue:50 +#: front/src/views/content/libraries/Card.vue:48 +#: src/views/content/remote/Card.vue:67 +msgctxt "Content/Library/Card.Button.Label/Noun" msgid "Details" msgstr "Details" -#: front/src/views/admin/moderation/AccountsDetail.vue:455 +#: front/src/views/admin/moderation/AccountsDetail.vue:511 +msgctxt "Content/Moderation/Help text" msgid "Determine how much content the user can upload. Leave empty to use the default value of the instance." -msgstr "" -"Determine how much content the user can upload. Leave empty to use the " -"default value of the instance." +msgstr "Determine how much content the user can upload. Leave empty to use the default value of the instance." #: front/src/components/mixins/Translations.vue:8 #: front/src/components/mixins/Translations.vue:9 +msgctxt "Content/Settings/Dropdown.Help text" msgid "Determine the visibility level of your activity" msgstr "Determine the visibility level of your activity" -#: front/src/components/auth/Settings.vue:103 -#: front/src/components/auth/SubsonicTokenForm.vue:51 +#: front/src/components/auth/Settings.vue:104 +#: front/src/components/auth/SubsonicTokenForm.vue:56 +msgctxt "Popup/Settings/Button.Label" msgid "Disable access" msgstr "Disable access" -#: front/src/components/auth/SubsonicTokenForm.vue:48 +#: front/src/components/auth/SubsonicTokenForm.vue:53 +msgctxt "Content/Settings/Button.Label/Verb" msgid "Disable Subsonic access" msgstr "Disable Subsonic access" -#: front/src/components/auth/SubsonicTokenForm.vue:49 +#: front/src/components/auth/SubsonicTokenForm.vue:54 +msgctxt "Popup/Settings/Title" msgid "Disable Subsonic API access?" msgstr "Disable Subsonic API access?" +#: front/src/components/About.vue:118 src/components/About.vue:131 +#: front/src/components/About.vue:144 #: front/src/components/manage/moderation/InstancePolicyForm.vue:18 -#: front/src/views/admin/moderation/AccountsDetail.vue:128 -#: front/src/views/admin/moderation/AccountsDetail.vue:132 +#: front/src/views/admin/moderation/AccountsDetail.vue:157 +#: front/src/views/admin/moderation/AccountsDetail.vue:161 +msgctxt "*/*/*/State of feature" msgid "Disabled" msgstr "Disabled" +#: front/src/views/admin/library/TrackDetail.vue:151 +msgctxt "*/*/*/Noun" +msgid "Disc number" +msgstr "Disc number" + +#: front/src/components/Home.vue:157 +msgctxt "Content/Home/Link" +msgid "Discover everything you need to know about Funkwhale and its features" +msgstr "Discover everything you need to know about Funkwhale and its features" + #: front/src/components/auth/SubsonicTokenForm.vue:13 +msgctxt "Content/Settings/Link" msgid "Discover how to use Funkwhale from other apps" msgstr "Discover how to use Funkwhale from other apps" -#: front/src/views/admin/moderation/AccountsDetail.vue:103 +#: front/src/views/Notifications.vue:45 +msgctxt "Content/Notifications/Button.Label/Verb" +msgid "Discover other ways to help" +msgstr "Discover other ways to help" + +#: front/src/views/admin/moderation/AccountsDetail.vue:132 +msgctxt "'Content/*/*/Noun'" msgid "Display name" msgstr "Display name" #: front/src/components/library/radios/Builder.vue:30 +msgctxt "Content/Radio/Checkbox.Label/Verb" msgid "Display publicly" msgstr "Display publicly" #: front/src/components/manage/moderation/InstancePolicyForm.vue:122 +msgctxt "Content/Moderation/Help text" msgid "Do not download any media file (audio, album cover, account avatar…) from this account or domain. This will purge existing content as well." -msgstr "" -"Do not download any media files (audio, album cover, account avatar…) from " -"this account or domain. This will purge existing content as well." +msgstr "Do not download any media file (audio, album cover, account avatar…) from this account or domain. This will purge existing content as well." + +#: front/src/views/Notifications.vue:36 +msgctxt "Content/Notifications/Header" +msgid "Do you like Funkwhale?" +msgstr "Do you like Funkwhale?" -#: front/src/components/playlists/Editor.vue:42 +#: front/src/components/playlists/Editor.vue:51 +msgctxt "Popup/Playlist/Title" msgid "Do you want to clear the playlist \"%{ playlist }\"?" msgstr "Do you want to clear the playlist \"%{ playlist }\"?" #: front/src/components/common/DangerousButton.vue:7 +msgctxt "Modal/*/Title" msgid "Do you want to confirm this action?" msgstr "Do you want to confirm this action?" -#: front/src/views/playlists/Detail.vue:35 +#: front/src/views/playlists/Detail.vue:43 +msgctxt "Popup/Playlist/Title/Call to action" msgid "Do you want to delete the playlist \"%{ playlist }\"?" msgstr "Do you want to delete the playlist \"%{ playlist }\"?" #: front/src/views/radios/Detail.vue:26 +msgctxt "Popup/Radio/Title" msgid "Do you want to delete the radio \"%{ radio }\"?" msgstr "Do you want to delete the radio \"%{ radio }\"?" -#: front/src/components/common/ActionTable.vue:36 +#: front/src/components/auth/Settings.vue:298 +msgctxt "Popup/Settings/Title" +msgid "Do you want to delete your account?" +msgstr "Do you want to delete your account?" + +#: front/src/components/moderation/FilterModal.vue:3 +msgctxt "Popup/Moderation/Title/Verb" +msgid "Do you want to hide content from artist \"%{ name }\"?" +msgstr "Do you want to hide content from artist \"%{ name }\"?" + +#: front/src/components/common/ActionTable.vue:37 +msgctxt "Modal/*/Title" msgid "Do you want to launch %{ action } on %{ count } element?" msgid_plural "Do you want to launch %{ action } on %{ count } elements?" msgstr[0] "Do you want to launch %{ action } on %{ count } element?" msgstr[1] "Do you want to launch %{ action } on %{ count } elements?" -#: front/src/components/Sidebar.vue:107 +#: front/src/components/moderation/ReportModal.vue:3 +msgctxt "Popup/Moderation/Title/Verb" +msgid "Do you want to report this object?" +msgstr "Do you want to report this object?" + +#: front/src/components/Sidebar.vue:122 +msgctxt "Sidebar/Queue/Message" msgid "Do you want to restore your previous queue?" msgstr "Do you want to restore your previous queue?" #: front/src/components/Footer.vue:31 +msgctxt "Footer/*/List item.Link/Short, Noun" msgid "Documentation" msgstr "Documentation" +#: front/src/components/manage/library/AlbumsTable.vue:41 +#: front/src/components/manage/library/ArtistsTable.vue:40 +#: front/src/components/manage/library/LibrariesTable.vue:50 +#: front/src/components/manage/library/TracksTable.vue:42 +#: front/src/components/manage/library/UploadsTable.vue:62 #: front/src/components/manage/moderation/AccountsTable.vue:40 -#: front/src/components/mixins/Translations.vue:34 -#: front/src/views/admin/moderation/AccountsDetail.vue:93 -#: front/src/components/mixins/Translations.vue:35 +#: front/src/components/manage/moderation/ReportCard.vue:169 +#: front/src/components/manage/moderation/ReportCard.vue:179 +#: front/src/components/mixins/Translations.vue:72 +#: front/src/views/admin/library/AlbumDetail.vue:124 +#: front/src/views/admin/library/ArtistDetail.vue:112 +#: front/src/views/admin/library/LibraryDetail.vue:123 +#: front/src/views/admin/library/TrackDetail.vue:176 +#: front/src/views/admin/library/UploadDetail.vue:121 +#: front/src/views/admin/moderation/AccountsDetail.vue:123 +#: front/src/components/mixins/Translations.vue:73 +msgctxt "Content/Moderation/*/Noun" msgid "Domain" msgstr "Domain" -#: front/src/views/admin/moderation/Base.vue:5 +#: front/src/views/admin/moderation/Base.vue:8 #: front/src/views/admin/moderation/DomainsList.vue:3 -#: front/src/views/admin/moderation/DomainsList.vue:48 +#: front/src/views/admin/moderation/DomainsList.vue:54 +msgctxt "*/Moderation/*/Noun" msgid "Domains" msgstr "Domains" -#: front/src/components/library/Track.vue:55 +#: front/src/views/Notifications.vue:42 +msgctxt "Content/Notifications/Button.Label/Verb" +msgid "Donate" +msgstr "Donate" + +#: front/src/components/library/TrackBase.vue:37 +#: front/src/views/admin/library/UploadDetail.vue:58 +msgctxt "Content/Track/Link/Verb" msgid "Download" msgstr "Download" -#: front/src/components/playlists/Editor.vue:49 +#: front/src/components/playlists/Editor.vue:59 +msgctxt "Content/Playlist/Paragraph/Call to action" msgid "Drag and drop rows to reorder tracks in the playlist" msgstr "Drag and drop rows to reorder tracks in the playlist" -#: front/src/components/audio/track/Table.vue:9 src/components/library/Track.vue:111 -#: front/src/components/manage/library/FilesTable.vue:43 -#: front/src/components/mixins/Translations.vue:30 -#: front/src/views/content/libraries/FilesTable.vue:59 -#: front/src/components/mixins/Translations.vue:31 +#: front/src/components/audio/track/Table.vue:10 +#: front/src/components/library/TrackDetail.vue:30 +#: front/src/components/mixins/Translations.vue:68 +#: front/src/views/admin/library/UploadDetail.vue:238 +#: front/src/views/content/libraries/FilesTable.vue:60 +#: front/src/components/mixins/Translations.vue:69 +msgctxt "Content/*/*" msgid "Duration" msgstr "Duration" #: front/src/views/auth/EmailConfirm.vue:23 +msgctxt "Content/Signup/Message" msgid "E-mail address confirmed" msgstr "E-mail address confirmed" -#: front/src/components/Home.vue:93 -msgid "Easy to use" -msgstr "Easy to use" - +#: front/src/components/auth/Settings.vue:246 +#: src/components/library/AlbumBase.vue:73 +#: front/src/components/library/ArtistBase.vue:84 +#: front/src/components/library/TrackBase.vue:89 +#: front/src/components/manage/moderation/InstancePolicyCard.vue:45 +#: front/src/components/radios/Card.vue:23 +#: src/views/admin/library/AlbumDetail.vue:71 +#: front/src/views/admin/library/ArtistDetail.vue:69 +#: front/src/views/admin/library/TrackDetail.vue:70 #: front/src/views/content/libraries/Detail.vue:9 +#: src/views/playlists/Detail.vue:31 +msgctxt "Content/*/Button.Label/Verb" msgid "Edit" msgstr "Edit" -#: front/src/components/About.vue:22 -msgid "Edit instance info" -msgstr "Edit instance info" +#: front/src/components/auth/ApplicationEdit.vue:30 +#: front/src/components/auth/ApplicationEdit.vue:75 +msgctxt "Content/Applications/Title" +msgid "Edit application" +msgstr "Edit application" -#: front/src/components/radios/Card.vue:22 src/views/playlists/Detail.vue:30 -msgid "Edit…" -msgstr "Edit…" - -#: front/src/components/auth/Signup.vue:30 +#: front/src/components/manage/moderation/InstancePolicyForm.vue:3 +msgctxt "Content/Moderation/Card.Title/Verb" +msgid "Edit moderation rule" +msgstr "Edit moderation rule" + +#: front/src/components/library/AlbumEdit.vue:4 +msgctxt "Content/*/Title" +msgid "Edit this album" +msgstr "Edit this album" + +#: front/src/components/library/ArtistEdit.vue:4 +msgctxt "Content/*/Title" +msgid "Edit this artist" +msgstr "Edit this artist" + +#: front/src/components/library/TrackEdit.vue:4 +msgctxt "Content/*/Title" +msgid "Edit this track" +msgstr "Edit this track" + +#: front/src/components/mixins/Translations.vue:116 +#: front/src/views/admin/library/AlbumDetail.vue:198 +#: front/src/views/admin/library/ArtistDetail.vue:186 +#: front/src/views/admin/library/Base.vue:5 +#: src/views/admin/library/EditsList.vue:24 +#: front/src/views/admin/library/TrackDetail.vue:250 +#: front/src/components/mixins/Translations.vue:117 +msgctxt "*/Admin/*/Noun" +msgid "Edits" +msgstr "Edits" + +#: front/src/components/auth/SignupForm.vue:26 #: front/src/components/manage/users/UsersTable.vue:38 +#: front/src/components/moderation/ReportModal.vue:31 +msgctxt "Content/*/*/Noun" msgid "Email" msgstr "Email" -#: front/src/views/admin/moderation/AccountsDetail.vue:111 +#: front/src/views/admin/moderation/AccountsDetail.vue:140 +msgctxt "Content/*/*" msgid "Email address" msgstr "Email address" -#: front/src/components/library/Album.vue:38 src/components/library/Track.vue:62 +#: front/src/components/library/AlbumBase.vue:54 +#: front/src/components/library/ArtistBase.vue:65 +#: front/src/components/library/TrackBase.vue:70 +#: src/views/playlists/Detail.vue:38 +msgctxt "Content/*/Button.Label/Verb" msgid "Embed" msgstr "Embed" -#: front/src/components/audio/EmbedWizard.vue:20 +#: front/src/components/audio/EmbedWizard.vue:30 +msgctxt "Popup/Embed/Input.Label/Noun" msgid "Embed code" msgstr "Embed code" -#: front/src/components/library/Album.vue:42 +#: front/src/components/library/AlbumBase.vue:27 +msgctxt "Popup/Album/Title/Verb" msgid "Embed this album on your website" msgstr "Embed this album on your website" -#: front/src/components/library/Track.vue:66 +#: front/src/components/library/ArtistBase.vue:38 +msgctxt "Popup/Artist/Title/Verb" +msgid "Embed this artist work on your website" +msgstr "Embed this artist work on your website" + +#: front/src/views/playlists/Detail.vue:52 +msgctxt "Popup/Album/Title/Verb" +msgid "Embed this playlist on your website" +msgstr "Embed this playlist on your website" + +#: front/src/components/library/TrackBase.vue:43 +msgctxt "Popup/Track/Title" msgid "Embed this track on your website" msgstr "Embed this track on your website" -#: front/src/views/admin/moderation/AccountsDetail.vue:230 -#: front/src/views/admin/moderation/DomainsDetail.vue:187 +#: front/src/views/admin/moderation/AccountsDetail.vue:260 +#: front/src/views/admin/moderation/DomainsDetail.vue:224 +msgctxt "Content/Moderation/Table.Label/Noun" msgid "Emitted library follows" msgstr "Emitted library follows" -#: front/src/views/admin/moderation/AccountsDetail.vue:214 -#: front/src/views/admin/moderation/DomainsDetail.vue:171 +#: front/src/views/admin/moderation/AccountsDetail.vue:244 +#: front/src/views/admin/moderation/DomainsDetail.vue:208 +msgctxt "Content/Moderation/Table.Label/Noun" msgid "Emitted messages" msgstr "Emitted messages" +#: front/src/components/About.vue:114 src/components/About.vue:127 +#: front/src/components/About.vue:140 #: front/src/components/manage/moderation/InstancePolicyCard.vue:8 #: front/src/components/manage/moderation/InstancePolicyForm.vue:17 -#: front/src/views/admin/moderation/AccountsDetail.vue:127 -#: front/src/views/admin/moderation/AccountsDetail.vue:131 +#: front/src/views/admin/moderation/AccountsDetail.vue:156 +#: front/src/views/admin/moderation/AccountsDetail.vue:160 +msgctxt "*/*/*/State of feature" msgid "Enabled" msgstr "Enabled" -#: front/src/views/playlists/Detail.vue:29 +#: front/src/views/playlists/Detail.vue:30 +msgctxt "Content/Playlist/Button.Label/Verb" msgid "End edition" msgstr "End edition" #: front/src/views/content/remote/ScanForm.vue:50 +msgctxt "Content/Library/Input.Placeholder" msgid "Enter a library URL" msgstr "Enter a library URL" -#: front/src/components/library/Radios.vue:140 +#: front/src/components/library/Radios.vue:141 +msgctxt "Content/Search/Input.Placeholder" msgid "Enter a radio name…" msgstr "Enter a radio name…" -#: front/src/components/library/Artists.vue:118 +#: front/src/components/library/Albums.vue:128 +msgctxt "Content/Search/Input.Placeholder" +msgid "Enter album title…" +msgstr "Enter album title…" + +#: front/src/components/library/Artists.vue:116 +msgctxt "Content/Search/Input.Placeholder" msgid "Enter artist name…" msgstr "Enter artist name…" #: front/src/views/playlists/List.vue:107 +msgctxt "Content/Playlist/Placeholder/Call to action" msgid "Enter playlist name…" msgstr "Enter playlist name…" -#: front/src/components/auth/Signup.vue:102 +#: front/src/views/auth/PasswordReset.vue:54 +msgctxt "Content/Signup/Input.Placeholder" +msgid "Enter the email address linked to your account" +msgstr "Enter the email address linked to your account" + +#: front/src/components/auth/SignupForm.vue:96 +msgctxt "Content/Signup/Form/Placeholder" msgid "Enter your email" msgstr "Enter your email" -#: front/src/components/auth/Signup.vue:98 src/components/auth/Signup.vue:99 +#: front/src/components/auth/SignupForm.vue:91 +#: src/components/auth/SignupForm.vue:93 +msgctxt "Content/Signup/Form/Placeholder" msgid "Enter your invitation code (case insensitive)" msgstr "Enter your invitation code (case insensitive)" #: front/src/components/metadata/Search.vue:114 +msgctxt "Content/Library/Input.Placeholder/Verb" msgid "Enter your search query…" msgstr "Enter your search query…" -#: front/src/components/auth/Signup.vue:101 +#: front/src/components/auth/SignupForm.vue:95 +msgctxt "Content/Signup/Form/Placeholder" msgid "Enter your username" msgstr "Enter your username" -#: front/src/components/auth/Login.vue:83 +#: front/src/components/auth/LoginForm.vue:81 +msgctxt "Content/Login/Input.Placeholder" msgid "Enter your username or email" msgstr "Enter your username or email" #: front/src/components/auth/SubsonicTokenForm.vue:19 #: front/src/views/content/libraries/Form.vue:4 +msgctxt "Content/*/Error message.Title" msgid "Error" msgstr "Error" -#: front/src/views/admin/Settings.vue:87 +#: front/src/components/federation/FetchButton.vue:34 +#: front/src/components/library/ImportStatusModal.vue:32 +msgctxt "Popup/Import/Table.Label/Noun" +msgid "Error detail" +msgstr "Error detail" + +#: front/src/views/admin/Settings.vue:89 +msgctxt "Content/Admin/Menu" msgid "Error reporting" msgstr "Error reporting" -#: front/src/components/common/ActionTable.vue:92 +#: front/src/components/federation/FetchButton.vue:26 +#: front/src/components/library/ImportStatusModal.vue:24 +msgctxt "Popup/Import/Table.Label/Noun" +msgid "Error type" +msgstr "Error type" + +#: front/src/components/common/ActionTable.vue:94 +msgctxt "Content/*/Error message/Header" msgid "Error while applying action" msgstr "Error while applying action" #: front/src/views/auth/PasswordReset.vue:7 +msgctxt "Content/Signup/Card.Title" msgid "Error while asking for a password reset" msgstr "Error while asking for a password reset" +#: front/src/components/auth/Authorize.vue:6 +msgctxt "Popup/Moderation/Error message" +msgid "Error while authorizing application" +msgstr "Error while authorising application" + #: front/src/views/auth/PasswordResetConfirm.vue:7 +msgctxt "Content/Signup/Card.Title" msgid "Error while changing your password" msgstr "Error while changing your password" #: front/src/views/admin/moderation/DomainsList.vue:6 +msgctxt "Content/Moderation/Message.Title" msgid "Error while creating domain" msgstr "Error while creating domain" +#: front/src/components/moderation/FilterModal.vue:13 +msgctxt "Popup/Moderation/Error message" +msgid "Error while creating filter" +msgstr "Error while creating filter" + #: front/src/components/manage/users/InvitationForm.vue:4 +msgctxt "Content/Admin/Error message.Title" msgid "Error while creating invitation" msgstr "Error while creating invitation" #: front/src/components/manage/moderation/InstancePolicyForm.vue:7 +msgctxt "Content/Moderation/Error message.Title" msgid "Error while creating rule" msgstr "Error while creating rule" -#: front/src/views/admin/moderation/DomainsDetail.vue:126 +#: front/src/components/auth/Authorize.vue:7 +msgctxt "Popup/Moderation/Error message" +msgid "Error while fetching application data" +msgstr "Error while fetching application data" + +#: front/src/views/admin/moderation/DomainsDetail.vue:155 +msgctxt "Content/Moderation/Table" msgid "Error while fetching node info" msgstr "Error while fetching node info" #: front/src/components/admin/SettingsGroup.vue:5 +#: front/src/components/federation/FetchButton.vue:73 +msgctxt "Content/*/Error message.Title" msgid "Error while saving settings" msgstr "Error while saving settings" -#: front/src/views/content/libraries/FilesTable.vue:212 +#: front/src/components/library/EditForm.vue:46 +msgctxt "Content/Library/Error message.Title" +msgid "Error while submitting edit" +msgstr "Error while submitting edit" + +#: front/src/components/manage/moderation/NoteForm.vue:3 +msgctxt "Content/Moderation/Error message.Title" +msgid "Error while submitting note" +msgstr "Error while submitting note" + +#: front/src/components/moderation/ReportModal.vue:11 +msgctxt "Popup/Moderation/Error message" +msgid "Error while submitting report" +msgstr "Error while submitting report" + +#: front/src/components/mixins/Translations.vue:32 +#: front/src/components/mixins/Translations.vue:33 +msgctxt "Content/Library/Table/Short" msgid "Errored" msgstr "Errored" #: front/src/views/content/libraries/Quota.vue:75 +msgctxt "Content/Library/Label" msgid "Errored files" msgstr "Errored files" -#: front/src/components/playlists/Form.vue:89 +#: front/src/components/mixins/Translations.vue:17 +#: front/src/components/mixins/Translations.vue:18 +msgctxt "Content/Settings/Dropdown/Short" msgid "Everyone" msgstr "Everyone" #: front/src/components/mixins/Translations.vue:11 -#: front/src/components/playlists/Form.vue:85 src/views/content/libraries/Form.vue:73 #: front/src/components/mixins/Translations.vue:12 +msgctxt "Content/Settings/Dropdown" msgid "Everyone on this instance" msgstr "Everyone on this instance" -#: front/src/views/content/libraries/Form.vue:74 +#: front/src/components/mixins/Translations.vue:12 +#: front/src/components/mixins/Translations.vue:13 +msgctxt "Content/Settings/Dropdown" msgid "Everyone, across all instances" msgstr "Everyone, across all instances" -#: front/src/components/library/radios/Builder.vue:61 +#: front/src/components/library/radios/Builder.vue:62 +msgctxt "Content/Radio/Table.Label/Verb" msgid "Exclude" msgstr "Exclude" +#: front/src/components/common/CollapseLink.vue:2 +msgctxt "*/*/Button,Label" +msgid "Expand" +msgstr "Expand" + #: front/src/components/manage/users/InvitationsTable.vue:41 -#: front/src/components/mixins/Translations.vue:22 -#: front/src/components/mixins/Translations.vue:23 +#: front/src/components/mixins/Translations.vue:59 +#: front/src/components/mixins/Translations.vue:60 +msgctxt "Content/Admin/Table.Label/Noun" msgid "Expiration date" msgstr "Expiry date" #: front/src/components/manage/users/InvitationsTable.vue:50 +msgctxt "Content/Admin/Table" msgid "Expired" msgstr "Expired" #: front/src/components/manage/users/InvitationsTable.vue:21 +msgctxt "Content/Admin/Dropdown/Adjective" msgid "Expired/used" msgstr "Expired/used" #: front/src/components/manage/moderation/InstancePolicyForm.vue:110 +msgctxt "Content/Moderation/Help text" msgid "Explain why you're applying this policy. Depending on your instance configuration, this will help you remember why you acted on this account or domain, and may be displayed publicly to help users understand what moderation rules are in place." -msgstr "" -"Explain why you're applying this policy. Depending on your instance " -"configuration, this will help you remember why you acted on this account or " -"domain, and may be displayed publicly to help users understand what " -"moderation rules are in place." +msgstr "Explain why you're applying this policy. Depending on your instance configuration, this will help you remember why you acted on this account or domain, and may be displayed publicly to help users understand what moderation rules are in place." +#: front/src/components/manage/library/UploadsTable.vue:25 #: front/src/views/content/libraries/FilesTable.vue:16 +msgctxt "Content/Library/Dropdown" msgid "Failed" msgstr "Failed" -#: front/src/views/content/remote/Card.vue:58 +#: front/src/views/content/remote/Card.vue:75 +msgctxt "Content/Library/Card.List item/Noun" msgid "Failed tracks:" msgstr "Failed tracks:" +#: front/src/views/admin/library/AlbumDetail.vue:171 +#: front/src/views/admin/library/ArtistDetail.vue:159 +#: front/src/views/admin/library/TrackDetail.vue:223 +msgctxt "*/*/*" +msgid "Favorited tracks" +msgstr "Favourited tracks" + #: front/src/components/Sidebar.vue:66 +#: src/components/mixins/Translations.vue:88 +#: front/src/components/mixins/Translations.vue:89 +msgctxt "Sidebar/Favorites/List item.Link/Noun" msgid "Favorites" msgstr "Favourites" -#: front/src/views/admin/Settings.vue:84 +#: front/src/components/About.vue:110 src/views/admin/Settings.vue:84 +msgctxt "*/*/*" msgid "Federation" msgstr "Federation" -#: front/src/components/library/FileUpload.vue:84 +#: front/src/components/library/TrackDetail.vue:66 +msgctxt "Content/*/*/Noun" +msgid "Federation ID" +msgstr "Federation ID" + +#: front/src/components/library/EditCard.vue:45 +msgctxt "Content/Library/Card.Table.Header/Short" +msgid "Field" +msgstr "Field" + +#: front/src/components/library/FileUpload.vue:93 +msgctxt "Content/Library/Table.Label" msgid "Filename" msgstr "Filename" -#: front/src/views/admin/library/Base.vue:5 src/views/admin/library/FilesList.vue:21 -msgid "Files" -msgstr "Files" - -#: front/src/components/library/radios/Builder.vue:60 +#: front/src/components/library/radios/Builder.vue:61 +msgctxt "Content/Radio/Table.Label/Noun" msgid "Filter name" msgstr "Filter name" +#: front/src/components/Home.vue:118 +msgctxt "Content/Home/Link" +msgid "Find another pod" +msgstr "Find another pod" + +#: front/src/components/manage/library/UploadsTable.vue:26 +#: front/src/components/mixins/Translations.vue:36 #: front/src/views/content/libraries/FilesTable.vue:17 -#: front/src/views/content/libraries/FilesTable.vue:216 +#: front/src/components/mixins/Translations.vue:37 +msgctxt "Content/Library/*" msgid "Finished" msgstr "Finished" #: front/src/components/manage/moderation/AccountsTable.vue:42 -#: front/src/components/manage/moderation/DomainsTable.vue:41 -#: front/src/views/admin/moderation/AccountsDetail.vue:159 -#: front/src/views/admin/moderation/DomainsDetail.vue:78 +#: front/src/components/manage/moderation/DomainsTable.vue:49 +#: front/src/views/admin/library/AlbumDetail.vue:155 +#: front/src/views/admin/library/ArtistDetail.vue:143 +#: front/src/views/admin/library/LibraryDetail.vue:162 +#: front/src/views/admin/library/TagDetail.vue:98 +#: front/src/views/admin/library/TrackDetail.vue:207 +#: front/src/views/admin/library/UploadDetail.vue:167 +#: front/src/views/admin/moderation/AccountsDetail.vue:236 +#: front/src/views/admin/moderation/DomainsDetail.vue:188 +msgctxt "Content/Moderation/Table.Label/Short (Value is a date)" msgid "First seen" msgstr "First seen" -#: front/src/components/mixins/Translations.vue:17 -#: front/src/components/mixins/Translations.vue:18 +#: front/src/components/mixins/Translations.vue:56 +#: front/src/components/mixins/Translations.vue:57 +msgctxt "Content/Moderation/Dropdown/Noun" msgid "First seen date" msgstr "First seen date" -#: front/src/views/content/remote/Card.vue:83 +#: front/src/components/ShortcutsModal.vue:64 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Focus searchbar" +msgstr "Focus searchbar" + +#: front/src/views/content/remote/Card.vue:100 +msgctxt "Content/Library/Card.Button.Label/Verb" msgid "Follow" msgstr "Follow" #: front/src/views/content/Home.vue:16 +msgctxt "Content/Library/Title/Verb" msgid "Follow remote libraries" msgstr "Follow remote libraries" -#: front/src/views/content/remote/Card.vue:88 +#: front/src/views/content/remote/Card.vue:105 +msgctxt "Content/Library/Card.Paragraph" msgid "Follow request pending approval" msgstr "Follow request pending approval" -#: front/src/components/mixins/Translations.vue:38 +#: front/src/components/manage/library/LibrariesTable.vue:53 +#: front/src/components/mixins/Translations.vue:76 +#: front/src/views/admin/library/LibraryDetail.vue:170 #: front/src/views/content/libraries/Detail.vue:7 -#: front/src/components/mixins/Translations.vue:39 +#: front/src/components/mixins/Translations.vue:77 +msgctxt "Content/Federation/*/Noun" msgid "Followers" msgstr "Followers" -#: front/src/views/content/remote/Card.vue:93 +#: front/src/views/content/remote/Card.vue:116 +msgctxt "Content/Library/Card.Paragraph" msgid "Following" msgstr "Following" -#: front/src/components/library/Track.vue:17 -msgid "From album %{ album } by %{ artist }" -msgstr "From album %{ album } by %{ artist }" +#: front/src/components/mixins/Translations.vue:96 +#: front/src/components/mixins/Translations.vue:97 +msgctxt "Content/OAuth Scopes/Label" +msgid "Follows" +msgstr "Follows" -#: front/src/components/auth/SubsonicTokenForm.vue:7 -msgid "Funkwhale is compatible with other music players that support the Subsonic API." -msgstr "" -"Funkwhale is compatible with other music players that support the Subsonic " -"API." +#: front/src/components/library/TrackBase.vue:245 +msgctxt "Content/Track/Paragraph" +msgid "From album <a class=\"internal\" href=\"%{ albumUrl }\">%{ album }</a> by <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" +msgstr "From album <a class=\"internal\" href=\"%{ albumUrl }\">%{ album }</a> by <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" -#: front/src/components/Home.vue:95 -msgid "Funkwhale is dead simple to use." -msgstr "Funkwhale is dead simple to use." +#: front/src/components/auth/Authorize.vue:28 +msgctxt "Content/Auth/Label/Noun" +msgid "Full access" +msgstr "Full access" -#: front/src/components/Home.vue:39 -msgid "Funkwhale is designed to make it easy to listen to music you like, or to discover new artists." -msgstr "" -"Funkwhale is designed to make it easy to listen to music you like, or to " -"discover new artists." +#: front/src/components/auth/SubsonicTokenForm.vue:7 +msgctxt "Content/Settings/Paragraph'" +msgid "Funkwhale is compatible with other music players that support the Subsonic API." +msgstr "Funkwhale is compatible with other music players that support the Subsonic API." -#: front/src/components/Home.vue:116 -msgid "Funkwhale is free and gives you control on your music." -msgstr "Funkwhale is free and gives you control of your music." +#: front/src/components/Home.vue:88 +msgctxt "Content/Home/Paragraph" +msgid "Funkwhale is free and developped by a friendly community of volunteers." +msgstr "Funkwhale is free and developed by a friendly community of volunteers." -#: front/src/components/Home.vue:66 -msgid "Funkwhale takes care of handling your music" -msgstr "Funkwhale takes care of handling your music" +#: front/src/components/About.vue:78 +msgctxt "*/*/*" +msgid "Funkwhale version" +msgstr "Funkwhale version" -#: front/src/components/ShortcutsModal.vue:38 +#: front/src/components/ShortcutsModal.vue:56 +msgctxt "Popup/Keyboard shortcuts/Title" msgid "General shortcuts" msgstr "General shortcuts" #: front/src/components/manage/users/InvitationForm.vue:16 +msgctxt "Content/Admin/Button.Label/Verb" msgid "Get a new invitation" msgstr "Get a new invitation" -#: front/src/components/Home.vue:13 -msgid "Get me to the library" -msgstr "Get me to the library" - -#: front/src/components/Home.vue:76 -msgid "Get quality metadata about your music thanks to <a href=\"%{ url }\" target=\"_blank\">MusicBrainz</a>" -msgstr "" -"Get quality metadata about your music thanks to <a href=\"%{ url }\" target=" -"\"_blank\">MusicBrainz</a>" - #: front/src/views/content/Home.vue:12 src/views/content/Home.vue:19 +msgctxt "Content/Library/Button.Label/Verb" msgid "Get started" msgstr "Get started" -#: front/src/components/Footer.vue:37 +#: front/src/components/Footer.vue:45 +#: src/components/library/ImportStatusModal.vue:45 +msgctxt "Footer/*/Link" msgid "Getting help" msgstr "Getting help" -#: front/src/components/common/ActionTable.vue:34 -#: front/src/components/common/ActionTable.vue:54 +#: front/src/components/common/ActionTable.vue:35 +#: front/src/components/common/ActionTable.vue:56 +msgctxt "Content/*/Button.Label/Short, Verb" msgid "Go" msgstr "Go" #: front/src/components/PageNotFound.vue:14 +msgctxt "Content/*/Button.Label/Verb" msgid "Go to home page" msgstr "Go to home page" +#: front/src/views/Notifications.vue:27 src/views/Notifications.vue:61 +msgctxt "Content/Notifications/Button.Label" +msgid "Got it!" +msgstr "Got it!" + +#: front/src/components/auth/Settings.vue:128 +msgctxt "Content/Settings/Title" +msgid "Hidden artists" +msgstr "Hidden artists" + +#: front/src/components/About.vue:155 +msgctxt "*/*/*/Verb" +msgid "Hide" +msgstr "Hide" + #: front/src/components/manage/moderation/InstancePolicyForm.vue:114 +msgctxt "Content/Moderation/Help text" msgid "Hide account or domain content, except from followers." msgstr "Hide account or domain content, except from followers." +#: front/src/components/moderation/FilterModal.vue:40 +msgctxt "Popup/*/Button.Label" +msgid "Hide content" +msgstr "Hide content" + +#: front/src/components/audio/PlayButton.vue:31 +msgctxt "*/Queue/Dropdown/Button/Label/Short" +msgid "Hide content from this artist" +msgstr "Hide content from this artist" + +#: front/src/components/audio/Player.vue:669 +msgctxt "Sidebar/Player/Icon.Tooltip/Verb" +msgid "Hide content from this artist…" +msgstr "Hide content from this artist…" + #: front/src/components/library/Home.vue:65 +msgctxt "Head/Home/Title" msgid "Home" msgstr "Home" -#: front/src/components/instance/Stats.vue:36 -msgid "Hours of music" -msgstr "Hours of music" - #: front/src/components/auth/SubsonicTokenForm.vue:10 +msgctxt "Content/Settings/Paragraph" msgid "However, accessing Funkwhale from those clients require a separate password you can set below." -msgstr "" -"However, accessing Funkwhale from those clients requires a separate password " -"you can set below." +msgstr "However, accessing Funkwhale from those clients require a separate password you can set below." #: front/src/views/auth/PasswordResetConfirm.vue:24 -msgid "If the email address provided in the previous step is valid and binded to a user account, you should receive an email with reset instructions in the next couple of minutes." -msgstr "" -"If the email address provided in the previous step is valid and binded to a " -"user account, you should receive an email with reset instructions in the " -"next couple of minutes." - -#: front/src/components/manage/library/FilesTable.vue:40 -msgid "Import date" -msgstr "Import date" - -#: front/src/components/Home.vue:71 -msgid "Import music from various platforms, such as YouTube or SoundCloud" -msgstr "Import music from various platforms, such as YouTube or SoundCloud" - -#: front/src/components/library/FileUpload.vue:51 +msgctxt "Content/Signup/Paragraph" +msgid "If the email address provided in the previous step is valid and linked to a user account, you should receive an email with reset instructions in the next couple of minutes." +msgstr "If the email address provided in the previous step is valid and linked to a user account, you should receive an email with reset instructions in the next couple of minutes." + +#: front/src/components/auth/Settings.vue:205 +msgctxt "Content/Applications/Paragraph" +msgid "If you authorize third-party applications to access your data, those applications will be listed here." +msgstr "If you authorise third-party applications to access your data, those applications will be listed here." + +#: front/src/components/mixins/Translations.vue:46 +#: front/src/components/mixins/Translations.vue:47 +msgctxt "Content/Moderation/Dropdown" +msgid "Illegal content" +msgstr "Illegal content" + +#: front/src/components/library/ImportStatusModal.vue:3 +msgctxt "Popup/Import/Title" +msgid "Import detail" +msgstr "Import detail" + +#: front/src/components/library/FileUpload.vue:50 +msgctxt "Content/Library/Input.Label/Noun" msgid "Import reference" msgstr "Import reference" +#: front/src/components/manage/library/UploadsTable.vue:20 +#: front/src/components/manage/library/UploadsTable.vue:64 +#: front/src/views/admin/library/UploadDetail.vue:131 #: front/src/views/content/libraries/FilesTable.vue:11 -#: front/src/views/content/libraries/FilesTable.vue:58 +#: front/src/views/content/libraries/FilesTable.vue:59 +msgctxt "Content/*/*/Noun" msgid "Import status" msgstr "Import status" -#: front/src/views/content/libraries/FilesTable.vue:217 +#: front/src/components/mixins/Translations.vue:37 +#: front/src/components/mixins/Translations.vue:38 +msgctxt "Content/Library/Help text" msgid "Imported" msgstr "Imported" -#: front/src/components/mixins/Translations.vue:21 -#: front/src/components/mixins/Translations.vue:22 -msgid "Imported date" -msgstr "Imported date" +#: front/src/components/federation/FetchButton.vue:47 +msgctxt "*/*/Error" +msgid "Impossible to connect to the remote server" +msgstr "Impossible to connect to the remote server" + +#: front/src/components/moderation/FilterModal.vue:26 +msgctxt "Popup/Moderation/List item" +msgid "In \"Recently added\" widget" +msgstr "In \"Recently added\" widget" + +#: front/src/components/moderation/FilterModal.vue:27 +msgctxt "Popup/Moderation/List item" +msgid "In artists and album listings" +msgstr "In artists and album listings" #: front/src/components/favorites/TrackFavoriteIcon.vue:3 +msgctxt "Content/Track/Button.Message" msgid "In favorites" msgstr "In favourites" -#: front/src/components/manage/users/UsersTable.vue:54 +#: front/src/components/moderation/FilterModal.vue:25 +msgctxt "Popup/Moderation/List item" +msgid "In other users favorites and listening history" +msgstr "In other users' favourites and listening history" + +#: front/src/components/moderation/FilterModal.vue:28 +msgctxt "Popup/Moderation/List item" +msgid "In radio suggestions" +msgstr "In radio suggestions" + +#: front/src/components/manage/users/UsersTable.vue:55 +msgctxt "Content/Admin/Table" msgid "Inactive" msgstr "Inactive" -#: front/src/components/ShortcutsModal.vue:71 +#: front/src/components/ShortcutsModal.vue:124 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Increase volume" msgstr "Increase volume" -#: front/src/views/auth/PasswordReset.vue:54 -msgid "Input the email address binded to your account" -msgstr "Input the email address bound to your account" - -#: front/src/components/playlists/Editor.vue:31 +#: front/src/components/playlists/Editor.vue:41 +msgctxt "Content/Playlist/Button.Label/Verb" msgid "Insert from queue (%{ count } track)" msgid_plural "Insert from queue (%{ count } tracks)" msgstr[0] "Insert from queue (%{ count } track)" msgstr[1] "Insert from queue (%{ count } tracks)" -#: front/src/views/admin/moderation/DomainsDetail.vue:71 +#: front/src/components/mixins/Translations.vue:16 +#: front/src/components/mixins/Translations.vue:17 +msgctxt "Content/Settings/Dropdown/Short" +msgid "Instance" +msgstr "Instance" + +#: front/src/views/admin/moderation/DomainsDetail.vue:99 +msgctxt "Content/Moderation/Title" msgid "Instance data" msgstr "Instance data" #: front/src/views/admin/Settings.vue:80 +msgctxt "Content/Admin/Menu" msgid "Instance information" msgstr "Instance information" #: front/src/components/library/Radios.vue:9 +msgctxt "Content/Radio/Title" msgid "Instance radios" msgstr "Instance radios" #: front/src/views/admin/Settings.vue:75 +msgctxt "Head/Admin/Title" msgid "Instance settings" msgstr "Instance settings" -#: front/src/components/library/FileUpload.vue:230 -#: front/src/components/library/FileUpload.vue:231 +#: front/src/components/SetInstanceModal.vue:19 +msgctxt "Popup/Instance/Input.Label/Noun" +msgid "Instance URL" +msgstr "Instance URL" + +#: front/src/components/manage/moderation/ReportCard.vue:92 +#: front/src/components/manage/moderation/ReportCard.vue:203 +msgctxt "Content/*/*/Noun" +msgid "Internal notes" +msgstr "Internal notes" + +#: front/src/components/library/FileUpload.vue:268 +msgctxt "Content/Library/Help text" msgid "Invalid file type, ensure you are uploading an audio file. Supported file extensions are %{ extensions }" -msgstr "" -"Invalid file type, ensure you are uploading an audio file. Supported file " -"extensions are %{ extensions }" +msgstr "Invalid file type, ensure you are uploading an audio file. Supported file extensions are %{ extensions }" -#: front/src/components/auth/Signup.vue:44 +#: front/src/components/library/ImportStatusModal.vue:139 +#: front/src/components/mixins/Translations.vue:45 +#: front/src/components/mixins/Translations.vue:46 +msgctxt "Popup/Import/Error.Label" +msgid "Invalid metadata" +msgstr "Invalid metadata" + +#: front/src/components/auth/SignupForm.vue:40 #: front/src/components/manage/users/InvitationForm.vue:11 +msgctxt "Content/*/Input.Label" msgid "Invitation code" msgstr "Invitation code" -#: front/src/views/admin/users/Base.vue:8 src/views/admin/users/InvitationsList.vue:3 +#: front/src/views/admin/users/Base.vue:8 #: front/src/views/admin/users/InvitationsList.vue:24 +msgctxt "*/Admin/*/Noun" msgid "Invitations" msgstr "Invitations" -#: front/src/components/Footer.vue:41 +#: front/src/components/manage/moderation/DomainsTable.vue:9 +#: front/src/views/admin/moderation/DomainsDetail.vue:106 +msgctxt "Content/Moderation/*/Adjective" +msgid "Is present on allow-list" +msgstr "Is present on allow-list" + +#: front/src/components/Footer.vue:49 +msgctxt "Footer/*/List item.Link" msgid "Issue tracker" msgstr "Issue tracker" -#: front/src/components/Home.vue:50 -msgid "Keep a track of your favorite songs" -msgstr "Keep track of your favourite songs" +#: front/src/components/SetInstanceModal.vue:5 +msgctxt "Popup/Instance/Error message.Title" +msgid "It is not possible to connect to the given URL" +msgstr "It is not possible to connect to the given URL" + +#: front/src/components/mixins/Translations.vue:65 +#: front/src/components/mixins/Translations.vue:66 +msgctxt "*/*/*/Noun" +msgid "Items" +msgstr "Items" #: front/src/components/Footer.vue:33 src/components/ShortcutsModal.vue:3 +msgctxt "*/*/*/Noun" msgid "Keyboard shortcuts" msgstr "Keyboard shortcuts" -#: front/src/views/admin/moderation/DomainsDetail.vue:161 +#: front/src/views/admin/moderation/DomainsDetail.vue:198 +msgctxt "Content/Moderation/Table.Label.Link" msgid "Known accounts" msgstr "Known accounts" #: front/src/views/content/remote/Home.vue:14 +msgctxt "Content/Library/Title" msgid "Known libraries" msgstr "Known libraries" #: front/src/components/manage/users/UsersTable.vue:41 -#: front/src/components/mixins/Translations.vue:32 -#: front/src/views/admin/moderation/AccountsDetail.vue:184 -#: front/src/components/mixins/Translations.vue:33 +#: front/src/components/mixins/Translations.vue:70 +#: front/src/views/admin/moderation/AccountsDetail.vue:206 +#: front/src/components/mixins/Translations.vue:71 +msgctxt "Content/Profile/Table.Label/Short, Noun (Value is a date)" msgid "Last activity" msgstr "Last activity" -#: front/src/views/admin/moderation/AccountsDetail.vue:167 -#: front/src/views/admin/moderation/DomainsDetail.vue:86 +#: front/src/views/admin/moderation/AccountsDetail.vue:189 +#: front/src/views/admin/moderation/DomainsDetail.vue:115 +msgctxt "Content/*/Table.Label" msgid "Last checked" msgstr "Last checked" -#: front/src/components/playlists/PlaylistModal.vue:32 +#: front/src/components/playlists/PlaylistModal.vue:46 +msgctxt "Popup/Playlist/Table.Label/Short" msgid "Last modification" msgstr "Last modification" #: front/src/components/manage/moderation/AccountsTable.vue:43 +msgctxt "Content/Moderation/Table.Label/Noun" msgid "Last seen" msgstr "Last seen" -#: front/src/components/mixins/Translations.vue:18 -#: front/src/components/mixins/Translations.vue:19 +#: front/src/components/mixins/Translations.vue:57 +#: front/src/components/mixins/Translations.vue:58 +msgctxt "Content/Moderation/Dropdown/Noun" msgid "Last seen date" msgstr "Last seen date" -#: front/src/views/content/remote/Card.vue:56 +#: front/src/views/content/remote/Card.vue:73 +msgctxt "Content/Library/Card.List item/Noun" msgid "Last update:" msgstr "Last update:" -#: front/src/components/common/ActionTable.vue:47 +#: front/src/components/common/ActionTable.vue:49 +msgctxt "Modal/*/Button.Label/Short, Verb" msgid "Launch" msgstr "Launch" -#: front/src/components/Home.vue:10 -msgid "Learn more about this instance" -msgstr "Learn more about this instance" +#: front/src/components/Home.vue:35 +msgctxt "Content/Home/Link" +msgid "Learn more" +msgstr "Learn more" #: front/src/components/manage/users/InvitationForm.vue:58 +msgctxt "Content/Admin/Input.Placeholder" msgid "Leave empty for a random code" msgstr "Leave empty for a random code" -#: front/src/components/audio/EmbedWizard.vue:7 +#: front/src/components/audio/EmbedWizard.vue:17 +msgctxt "Popup/Embed/Paragraph" msgid "Leave empty for a responsive widget" msgstr "Leave empty for a responsive widget" -#: front/src/views/admin/moderation/AccountsDetail.vue:297 -#: front/src/views/admin/moderation/DomainsDetail.vue:233 +#: front/src/components/mixins/Translations.vue:64 +#: front/src/components/mixins/Translations.vue:65 +msgctxt "*/*/*/Noun" +msgid "Length" +msgstr "Length" + +#: front/src/views/admin/library/AlbumDetail.vue:248 +#: front/src/views/admin/library/ArtistDetail.vue:236 +#: front/src/views/admin/library/Base.vue:17 +#: front/src/views/admin/library/LibrariesList.vue:24 +#: front/src/views/admin/library/TrackDetail.vue:300 +#: front/src/views/admin/moderation/AccountsDetail.vue:339 +#: front/src/views/admin/moderation/DomainsDetail.vue:271 #: front/src/views/content/Base.vue:5 +msgctxt "*/*/*/Noun" msgid "Libraries" msgstr "Libraries" +#: front/src/components/mixins/Translations.vue:84 +#: front/src/components/mixins/Translations.vue:85 +msgctxt "Content/OAuth Scopes/Label" +msgid "Libraries and uploads" +msgstr "Libraries and uploads" + #: front/src/views/content/libraries/Form.vue:2 +msgctxt "Content/Library/Paragraph" msgid "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." -msgstr "" -"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." - -#: front/src/components/instance/Stats.vue:30 -#: front/src/components/manage/users/UsersTable.vue:173 -#: front/src/views/admin/moderation/AccountsDetail.vue:464 +msgstr "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." + +#: front/src/components/Sidebar.vue:85 +#: front/src/components/manage/library/UploadsTable.vue:60 +#: front/src/components/manage/users/UsersTable.vue:174 +#: front/src/components/mixins/Report.vue:77 +#: front/src/views/admin/library/UploadDetail.vue:144 +#: front/src/views/admin/moderation/AccountsDetail.vue:518 src/entities.js:132 +#: front/src/components/mixins/Report.vue:78 +msgctxt "*/*/*/Noun" msgid "Library" msgstr "Library" -#: front/src/views/content/libraries/Form.vue:109 +#: front/src/views/content/libraries/Form.vue:103 +msgctxt "Content/Library/Message" msgid "Library created" msgstr "Library created" -#: front/src/views/content/libraries/Form.vue:129 +#: front/src/views/admin/library/LibraryDetail.vue:78 +msgctxt "Content/Moderation/Title" +msgid "Library data" +msgstr "Library data" + +#: front/src/views/content/libraries/Form.vue:123 +msgctxt "Content/Library/Message" msgid "Library deleted" msgstr "Library deleted" -#: front/src/views/admin/library/FilesList.vue:3 -msgid "Library files" -msgstr "Library files" +#: front/src/views/admin/library/EditsList.vue:4 +msgctxt "Content/Admin/Title/Noun" +msgid "Library edits" +msgstr "Library edits" -#: front/src/views/content/libraries/Form.vue:106 +#: front/src/views/content/libraries/Form.vue:100 +msgctxt "Content/Library/Message" msgid "Library updated" msgstr "Library updated" -#: front/src/components/library/Track.vue:100 +#: front/src/components/library/TrackDetail.vue:19 +#: front/src/components/manage/library/TracksTable.vue:43 +#: front/src/views/admin/library/TrackDetail.vue:165 src/edits.js:84 +#: front/src/entities.js:115 +msgctxt "Content/*/*/Noun" msgid "License" msgstr "License" +#: front/src/components/Footer.vue:90 +msgctxt "Footer/Settings/Dropdown.Label/Theme name" +msgid "Light" +msgstr "Light" + +#: front/src/views/admin/library/AlbumDetail.vue:188 +#: front/src/views/admin/library/ArtistDetail.vue:176 +#: front/src/views/admin/library/LibraryDetail.vue:179 +#: front/src/views/admin/library/TrackDetail.vue:240 +#: front/src/views/admin/moderation/AccountsDetail.vue:269 +msgctxt "Content/Moderation/Table.Label/Noun" +msgid "Linked reports" +msgstr "Linked reports" + +#: front/src/components/Home.vue:135 +msgctxt "Content/Home/Link" +msgid "Listen to public albums and playlists shared on this pod" +msgstr "Listen to public albums and playlists shared on this pod" + +#: front/src/components/mixins/Translations.vue:92 +#: front/src/views/admin/library/AlbumDetail.vue:163 +#: front/src/views/admin/library/ArtistDetail.vue:151 +#: front/src/views/admin/library/TrackDetail.vue:215 +#: front/src/components/mixins/Translations.vue:93 +msgctxt "*/*/*/Noun" +msgid "Listenings" +msgstr "Listenings" + +#: front/src/components/audio/track/Table.vue:25 +#: front/src/components/library/ArtistDetail.vue:28 +msgctxt "Content/*/Button.Label" +msgid "Load more…" +msgstr "Load more…" + #: front/src/views/content/libraries/Detail.vue:21 +msgctxt "Content/Library/Paragraph" msgid "Loading followers…" msgstr "Loading followers…" #: front/src/views/content/libraries/Home.vue:3 +msgctxt "Content/Library/Paragraph" msgid "Loading Libraries…" msgstr "Loading Libraries…" #: front/src/views/content/libraries/Detail.vue:3 #: front/src/views/content/libraries/Upload.vue:3 +msgctxt "Content/Library/Paragraph" msgid "Loading library data…" msgstr "Loading library data…" -#: front/src/views/Notifications.vue:4 +#: front/src/views/Notifications.vue:84 +msgctxt "Content/Notifications/Paragraph" msgid "Loading notifications…" msgstr "Loading notifications…" #: front/src/views/content/remote/Home.vue:3 +msgctxt "Content/Library/Paragraph" msgid "Loading remote libraries…" msgstr "Loading remote libraries…" #: front/src/views/content/libraries/Quota.vue:4 +msgctxt "Content/Library/Paragraph" msgid "Loading usage data…" msgstr "Loading usage data…" #: front/src/components/favorites/List.vue:5 +msgctxt "Content/Favorites/Message" msgid "Loading your favorites…" msgstr "Loading your favourites…" +#: front/src/components/manage/library/AlbumsTable.vue:65 +#: front/src/components/manage/library/ArtistsTable.vue:58 +#: front/src/components/manage/library/LibrariesTable.vue:75 +#: front/src/components/manage/library/TracksTable.vue:71 +#: front/src/components/manage/library/UploadsTable.vue:99 +#: front/src/components/manage/moderation/ReportCard.vue:173 +#: front/src/views/admin/library/AlbumDetail.vue:19 +#: front/src/views/admin/library/ArtistDetail.vue:18 +#: front/src/views/admin/library/LibraryDetail.vue:18 +#: front/src/views/admin/library/TrackDetail.vue:18 +#: front/src/views/admin/library/UploadDetail.vue:19 +msgctxt "Content/Moderation/*/Short, Noun" +msgid "Local" +msgstr "Local" + #: front/src/components/manage/moderation/AccountsTable.vue:59 #: front/src/views/admin/moderation/AccountsDetail.vue:18 +msgctxt "Content/Moderation/*/Short, Noun" msgid "Local account" msgstr "Local account" -#: front/src/components/auth/Login.vue:84 +#: front/src/components/Home.vue:96 src/views/auth/Login.vue:29 +msgctxt "Head/Login/Title" msgid "Log In" msgstr "Log In" -#: front/src/components/auth/Login.vue:4 +#: front/src/views/auth/Login.vue:4 +msgctxt "Content/Login/Title/Verb" msgid "Log in to your Funkwhale account" msgstr "Log in to your Funkwhale account" #: front/src/components/auth/Logout.vue:20 +msgctxt "Head/Login/Title" msgid "Log Out" msgstr "Log Out" #: front/src/components/Sidebar.vue:38 +msgctxt "Sidebar/Profile/List item.Link" msgid "Logged in as %{ username }" msgstr "Logged in as %{ username }" -#: front/src/components/Sidebar.vue:54 src/components/auth/Login.vue:42 +#: front/src/components/Sidebar.vue:54 src/components/auth/LoginForm.vue:41 +msgctxt "*/Login/*/Verb" msgid "Login" msgstr "Login" -#: front/src/views/admin/moderation/AccountsDetail.vue:119 +#: front/src/views/admin/moderation/AccountsDetail.vue:148 +msgctxt "Content/*/*/Noun" msgid "Login status" msgstr "Login status" #: front/src/components/Sidebar.vue:52 +msgctxt "Sidebar/Login/List item.Link/Verb" msgid "Logout" msgstr "Logout" #: front/src/views/content/libraries/Home.vue:9 +msgctxt "Content/Library/Paragraph" msgid "Looks like you don't have a library, it's time to create one." msgstr "Looks like you don't have a library, it's time to create one." -#: front/src/components/audio/Player.vue:356 src/components/audio/Player.vue:357 +#: front/src/components/audio/Player.vue:658 +#: src/components/audio/Player.vue:659 +msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Looping disabled. Click to switch to single-track looping." msgstr "Looping disabled. Click to switch to single-track looping." -#: front/src/components/audio/Player.vue:359 src/components/audio/Player.vue:360 +#: front/src/components/audio/Player.vue:661 +#: src/components/audio/Player.vue:662 +msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Looping on a single track. Click to switch to whole queue looping." msgstr "Looping on a single track. Click to switch to whole queue looping." -#: front/src/components/audio/Player.vue:362 src/components/audio/Player.vue:363 +#: front/src/components/audio/Player.vue:664 +#: src/components/audio/Player.vue:665 +msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Looping on whole queue. Click to disable looping." msgstr "Looping on whole queue. Click to disable looping." -#: front/src/components/library/Track.vue:150 -msgid "Lyrics" -msgstr "Lyrics" - -#: front/src/components/Sidebar.vue:210 +#: front/src/components/Sidebar.vue:230 +msgctxt "Sidebar/*/Hidden text" msgid "Main menu" msgstr "Main menu" -#: front/src/views/admin/library/Base.vue:16 +#: front/src/views/admin/library/Base.vue:34 +msgctxt "Head/Admin/Title" msgid "Manage library" msgstr "Manage library" +#: front/src/components/manage/moderation/InstancePolicyModal.vue:8 +msgctxt "Popup/Moderation/Title/Verb" +msgid "Manage moderation rules for %{ obj }" +msgstr "Manage moderation rules for %{ obj }" + #: front/src/components/playlists/PlaylistModal.vue:3 +msgctxt "Popup/Playlist/Title/Verb" msgid "Manage playlists" msgstr "Manage playlists" #: front/src/views/admin/users/Base.vue:20 +msgctxt "Head/Admin/Title" msgid "Manage users" msgstr "Manage users" #: front/src/views/playlists/List.vue:8 +msgctxt "Content/Playlist/Button.Label/Verb" msgid "Manage your playlists" msgstr "Manage your playlists" -#: front/src/views/Notifications.vue:17 +#: front/src/views/Notifications.vue:79 +msgctxt "Content/Notifications/Button.Label/Verb" msgid "Mark all as read" msgstr "Mark all as read" #: front/src/components/notifications/NotificationRow.vue:46 +msgctxt "Content/Notifications/Button.Tooltip/Verb" msgid "Mark as read" msgstr "Mark as read" #: front/src/components/notifications/NotificationRow.vue:47 +msgctxt "Content/Notifications/Button.Tooltip/Verb" msgid "Mark as unread" msgstr "Mark as unread" -#: front/src/views/admin/moderation/AccountsDetail.vue:281 +#: front/src/views/admin/moderation/AccountsDetail.vue:321 +msgctxt "Content/*/*/Unit" msgid "MB" msgstr "MB" -#: front/src/components/audio/Player.vue:349 +#: front/src/components/audio/Player.vue:651 +msgctxt "Sidebar/Player/Hidden text" msgid "Media player" msgstr "Media player" #: front/src/components/auth/Profile.vue:12 +msgctxt "Content/Profile/Paragraph" msgid "Member since %{ date }" msgstr "Member since %{ date }" +#: front/src/components/manage/moderation/ReportCard.vue:109 +#: front/src/components/moderation/ReportModal.vue:41 +msgctxt "*/*/Field.Label/Noun" +msgid "Message" +msgstr "Message" + #: front/src/components/Footer.vue:32 +msgctxt "Footer/*/List item.Link" msgid "Mobile and desktop apps" msgstr "Mobile and desktop apps" -#: front/src/components/Sidebar.vue:97 src/components/manage/users/UsersTable.vue:177 -#: front/src/views/admin/moderation/AccountsDetail.vue:468 -#: front/src/views/admin/moderation/Base.vue:21 +#: front/src/components/Home.vue:143 +msgctxt "Content/Home/Link" +msgid "Mobile apps" +msgstr "Mobile apps" + +#: front/src/components/Sidebar.vue:96 +#: src/components/manage/users/UsersTable.vue:178 +#: front/src/views/admin/Settings.vue:85 +#: front/src/views/admin/moderation/AccountsDetail.vue:522 +#: front/src/views/admin/moderation/Base.vue:43 +msgctxt "*/Moderation/*" msgid "Moderation" msgstr "Moderation" -#: front/src/views/admin/moderation/AccountsDetail.vue:49 -#: front/src/views/admin/moderation/DomainsDetail.vue:42 +#: front/src/views/admin/moderation/AccountsDetail.vue:78 +#: front/src/views/admin/moderation/DomainsDetail.vue:70 +msgctxt "Content/Moderation/Card.Paragraph" msgid "Moderation policies help you control how your instance interact with a given domain or account." -msgstr "" -"Moderation policies help you control how your instance interact with a given " -"domain or account." +msgstr "Moderation policies help you control how your instance interact with a given domain or account." -#: front/src/components/mixins/Translations.vue:20 -#: front/src/components/mixins/Translations.vue:21 +#: front/src/components/manage/moderation/InstancePolicyModal.vue:4 +msgctxt "Content/Moderation/Button.Label" +msgid "Moderation rules…" +msgstr "Moderation rules…" + +#: front/src/components/library/EditCard.vue:5 +msgctxt "Content/Library/Card/Short" +msgid "Modification %{ id }" +msgstr "Modification %{ id }" + +#: front/src/components/mixins/Translations.vue:58 +#: front/src/components/mixins/Translations.vue:59 +msgctxt "Content/Playlist/Dropdown/Noun" msgid "Modification date" msgstr "Modification date" +#: front/src/components/audio/PlayButton.vue:100 +#: front/src/components/library/AlbumBase.vue:43 +#: front/src/components/library/ArtistBase.vue:54 +#: front/src/components/library/TrackBase.vue:59 +msgctxt "*/*/Button.Label/Noun" +msgid "More…" +msgstr "More…" + #: front/src/components/Sidebar.vue:63 src/views/admin/Settings.vue:82 +msgctxt "*/*/*/Noun" msgid "Music" msgstr "Music" -#: front/src/components/audio/Player.vue:355 +#: front/src/components/audio/Player.vue:657 +msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Mute" msgstr "Mute" #: front/src/components/manage/moderation/InstancePolicyCard.vue:24 #: front/src/components/manage/moderation/InstancePolicyForm.vue:115 +msgctxt "Content/Moderation/*/Verb" msgid "Mute activity" msgstr "Mute activity" #: front/src/components/manage/moderation/InstancePolicyCard.vue:28 +#: front/src/components/manage/moderation/InstancePolicyForm.vue:119 +msgctxt "Content/Moderation/*/Verb" msgid "Mute notifications" msgstr "Mute notifications" #: front/src/components/Sidebar.vue:34 +msgctxt "Sidebar/Profile/Title" msgid "My account" msgstr "My account" -#: front/src/components/library/radios/Builder.vue:236 +#: front/src/components/library/radios/Builder.vue:238 +msgctxt "Content/Radio/Input.Placeholder" msgid "My awesome description" msgstr "My awesome description" -#: front/src/views/content/libraries/Form.vue:70 +#: front/src/views/content/libraries/Form.vue:72 +msgctxt "Content/Library/Input.Placeholder" msgid "My awesome library" msgstr "My awesome library" -#: front/src/components/playlists/Form.vue:74 +#: front/src/components/playlists/Form.vue:76 +msgctxt "Content/Playlist/Input.Placeholder" msgid "My awesome playlist" msgstr "My awesome playlist" -#: front/src/components/library/radios/Builder.vue:235 +#: front/src/components/library/radios/Builder.vue:237 +msgctxt "Content/Radio/Input.Placeholder" msgid "My awesome radio" msgstr "My awesome radio" #: front/src/views/content/libraries/Home.vue:6 +msgctxt "Content/Library/Title" msgid "My libraries" msgstr "My libraries" -#: front/src/components/audio/track/Row.vue:40 src/components/library/Track.vue:115 -#: front/src/components/library/Track.vue:124 src/components/library/Track.vue:133 -#: front/src/components/library/Track.vue:142 -#: front/src/components/manage/library/FilesTable.vue:63 -#: front/src/components/manage/library/FilesTable.vue:69 -#: front/src/components/manage/library/FilesTable.vue:75 -#: front/src/components/manage/library/FilesTable.vue:81 -#: front/src/components/manage/users/UsersTable.vue:61 -#: front/src/views/admin/moderation/AccountsDetail.vue:171 -#: front/src/views/admin/moderation/DomainsDetail.vue:90 -#: front/src/views/content/libraries/FilesTable.vue:92 -#: front/src/views/content/libraries/FilesTable.vue:98 -#: front/src/views/admin/moderation/DomainsDetail.vue:109 -#: front/src/views/admin/moderation/DomainsDetail.vue:117 +#: front/src/components/About.vue:105 src/components/audio/track/Row.vue:40 +#: front/src/components/library/EditCard.vue:60 +#: front/src/components/library/EditForm.vue:70 +#: front/src/components/library/TrackDetail.vue:34 +#: front/src/components/library/TrackDetail.vue:43 +#: front/src/components/library/TrackDetail.vue:52 +#: front/src/components/library/TrackDetail.vue:61 +#: front/src/components/manage/library/AlbumsTable.vue:73 +#: front/src/components/manage/library/TracksTable.vue:76 +#: front/src/components/manage/library/UploadsTable.vue:121 +#: front/src/components/manage/library/UploadsTable.vue:128 +#: front/src/components/manage/moderation/ReportCard.vue:78 +#: front/src/components/manage/moderation/ReportCard.vue:87 +#: front/src/components/manage/moderation/ReportCard.vue:193 +#: front/src/components/manage/users/UsersTable.vue:62 +#: front/src/views/admin/library/UploadDetail.vue:179 +#: front/src/views/admin/library/UploadDetail.vue:214 +#: front/src/views/admin/library/UploadDetail.vue:233 +#: front/src/views/admin/library/UploadDetail.vue:244 +#: front/src/views/admin/library/UploadDetail.vue:257 +#: front/src/views/admin/moderation/AccountsDetail.vue:193 +#: front/src/views/admin/moderation/DomainsDetail.vue:119 +#: front/src/views/content/libraries/FilesTable.vue:95 +#: front/src/views/content/libraries/FilesTable.vue:101 +msgctxt "*/*/*" msgid "N/A" msgstr "N/A" +#: front/src/components/auth/ApplicationForm.vue:9 +#: front/src/components/auth/Settings.vue:133 +#: front/src/components/manage/library/ArtistsTable.vue:39 +#: front/src/components/manage/library/LibrariesTable.vue:48 +#: front/src/components/manage/library/TagsTable.vue:41 +#: front/src/components/manage/library/UploadsTable.vue:59 #: front/src/components/manage/moderation/AccountsTable.vue:39 -#: front/src/components/manage/moderation/DomainsTable.vue:38 -#: front/src/components/mixins/Translations.vue:26 -#: front/src/components/playlists/PlaylistModal.vue:31 -#: front/src/views/admin/moderation/DomainsDetail.vue:105 -#: front/src/views/content/libraries/Form.vue:10 -#: front/src/components/mixins/Translations.vue:27 +#: front/src/components/manage/moderation/DomainsTable.vue:46 +#: front/src/components/mixins/Translations.vue:63 +#: front/src/components/playlists/PlaylistModal.vue:45 +#: front/src/views/admin/library/ArtistDetail.vue:103 +#: front/src/views/admin/library/LibraryDetail.vue:85 +#: front/src/views/admin/library/TagDetail.vue:68 +#: front/src/views/admin/library/UploadDetail.vue:92 +#: front/src/views/admin/moderation/DomainsDetail.vue:134 +#: front/src/views/content/libraries/Form.vue:10 src/edits.js:17 +#: front/src/components/mixins/Translations.vue:64 +msgctxt "*/*/*/Noun" msgid "Name" msgstr "Name" -#: front/src/components/auth/Settings.vue:87 +#: front/src/views/Notifications.vue:24 src/views/Notifications.vue:58 +msgctxt "*/*/*" +msgid "Never" +msgstr "Never" + +#: front/src/components/auth/Settings.vue:88 #: front/src/views/auth/PasswordResetConfirm.vue:14 +msgctxt "Content/Settings/Input.Label" msgid "New password" msgstr "New password" -#: front/src/components/Sidebar.vue:160 +#: front/src/components/Sidebar.vue:177 +msgctxt "Sidebar/Player/Paragraph" msgid "New tracks will be appended here automatically." msgstr "New tracks will be appended here automatically." -#: front/src/components/audio/Player.vue:353 +#: front/src/components/library/EditCard.vue:47 +msgctxt "Content/Library/Card.Table.Header/Short" +msgid "New value" +msgstr "New value" + +#: front/src/components/audio/Player.vue:655 +msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Next track" msgstr "Next track" -#: front/src/components/Sidebar.vue:119 +#: front/src/components/Sidebar.vue:134 +#: front/src/components/manage/moderation/DomainsTable.vue:13 +#: front/src/views/admin/moderation/DomainsDetail.vue:110 +msgctxt "*/*/*" msgid "No" msgstr "No" -#: front/src/components/Home.vue:100 -msgid "No add-ons, no plugins : you only need a web library" -msgstr "No add-ons, no plugins : you only need a web library" - #: front/src/components/audio/Search.vue:25 +msgctxt "Content/Search/Paragraph" msgid "No album matched your query" msgstr "No album matched your query" #: front/src/components/audio/Search.vue:16 +msgctxt "Content/Search/Paragraph" msgid "No artist matched your query" msgstr "No artist matched your query" -#: front/src/components/library/Track.vue:158 -msgid "No lyrics available for this track." -msgstr "No lyrics available for this track." +#: front/src/components/library/TrackDetail.vue:14 +msgctxt "Content/Track/Table.Paragraph" +msgid "No copyright information available for this track" +msgstr "No copyright information available for this track" + +#: front/src/components/About.vue:25 src/components/Home.vue:25 +msgctxt "Content/Home/Paragraph" +msgid "No description available." +msgstr "No description available." + +#: front/src/components/library/TrackDetail.vue:25 +msgctxt "Content/Track/Table.Paragraph" +msgid "No licensing information for this track" +msgstr "No licensing information for this track" #: front/src/components/federation/LibraryWidget.vue:6 +msgctxt "Content/Federation/Paragraph" msgid "No matching library." msgstr "No matching library." -#: front/src/views/Notifications.vue:26 +#: front/src/views/Notifications.vue:93 +msgctxt "Content/Notifications/Paragraph" msgid "No notification to show." msgstr "No notification to show." -#: front/src/components/mixins/Translations.vue:10 -#: front/src/components/playlists/Form.vue:81 src/views/content/libraries/Form.vue:72 +#: front/src/components/common/EmptyState.vue:7 +msgctxt "Content/*/Paragraph" +msgid "No results were found." +msgstr "No results were found." + +#: front/src/components/About.vue:32 +msgctxt "Content/Home/Paragraph" +msgid "No rules available." +msgstr "No rules available." + +#: front/src/components/About.vue:39 +msgctxt "Content/Home/Paragraph" +msgid "No terms available." +msgstr "No terms available." + +#: front/src/components/mixins/Translations.vue:10 #: front/src/components/mixins/Translations.vue:11 +msgctxt "Content/Settings/Dropdown" msgid "Nobody except me" msgstr "Nobody except me" #: front/src/views/content/libraries/Detail.vue:57 +msgctxt "Content/Library/Paragraph" msgid "Nobody is following this library" msgstr "Nobody is following this library" #: front/src/components/manage/users/InvitationsTable.vue:51 +msgctxt "Content/Admin/Table" msgid "Not used" msgstr "Not used" -#: front/src/components/Sidebar.vue:46 src/views/Notifications.vue:74 +#: front/src/components/Sidebar.vue:46 +#: src/components/mixins/Translations.vue:112 +#: front/src/views/Notifications.vue:151 +#: src/components/mixins/Translations.vue:113 +msgctxt "*/Notifications/*" msgid "Notifications" msgstr "Notifications" -#: front/src/components/Footer.vue:47 +#: front/src/components/mixins/Translations.vue:47 +#: front/src/components/mixins/Translations.vue:48 +msgctxt "Content/Moderation/Dropdown" +msgid "Offensive content" +msgstr "Offensive content" + +#: front/src/components/Footer.vue:55 +msgctxt "Footer/*/List item.Link" msgid "Official website" msgstr "Official website" -#: front/src/components/auth/Settings.vue:82 +#: front/src/components/auth/Settings.vue:83 +msgctxt "Content/Settings/Input.Label" msgid "Old password" msgstr "Old password" +#: front/src/components/library/EditCard.vue:46 +msgctxt "Content/Library/Card.Table.Header/Short" +msgid "Old value" +msgstr "Old value" + +#: front/src/components/About.vue:90 +msgctxt "*/*/*/State of registrations" +msgid "Open" +msgstr "Open" + #: front/src/components/manage/users/InvitationsTable.vue:20 +msgctxt "Content/Admin/Dropdown/Adjective" msgid "Open" msgstr "Open" +#: front/src/components/library/ImportStatusModal.vue:56 +msgctxt "Popup/Import/Table.Label/Value" +msgid "Open a support thread (include the debug information below in your message)" +msgstr "Open a support thread (include the debug information below in your message)" + +#: front/src/components/library/AlbumBase.vue:87 +#: front/src/components/library/ArtistBase.vue:99 +#: front/src/components/library/TagDetail.vue:11 +#: front/src/components/library/TrackBase.vue:103 +#: front/src/components/manage/moderation/ReportCard.vue:128 +msgctxt "Content/Moderation/Link" +msgid "Open in moderation interface" +msgstr "Open in moderation interface" + +#: front/src/views/admin/library/AlbumDetail.vue:37 +#: front/src/views/admin/library/ArtistDetail.vue:35 +#: front/src/views/admin/library/TagDetail.vue:21 +#: front/src/views/admin/library/TrackDetail.vue:36 +msgctxt "Content/Moderation/Link/Verb" +msgid "Open local profile" +msgstr "Open local profile" + +#: front/src/views/admin/library/AlbumDetail.vue:52 +#: front/src/views/admin/library/ArtistDetail.vue:50 +#: front/src/views/admin/library/TrackDetail.vue:51 +msgctxt "Content/Moderation/Link/Verb" +msgid "Open on MusicBrainz" +msgstr "Open on MusicBrainz" + #: front/src/views/admin/moderation/AccountsDetail.vue:23 +msgctxt "Content/Moderation/Link/Verb" msgid "Open profile" msgstr "Open profile" +#: front/src/views/admin/library/AlbumDetail.vue:60 +#: front/src/views/admin/library/ArtistDetail.vue:58 +#: front/src/views/admin/library/LibraryDetail.vue:49 +#: front/src/views/admin/library/TrackDetail.vue:59 +#: front/src/views/admin/library/UploadDetail.vue:50 +#: front/src/views/admin/moderation/AccountsDetail.vue:52 +msgctxt "Content/Moderation/Link/Verb" +msgid "Open remote profile" +msgstr "Open remote profile" + #: front/src/views/admin/moderation/DomainsDetail.vue:16 +msgctxt "Content/Moderation/Link/Verb" msgid "Open website" msgstr "Open website" #: front/src/components/manage/moderation/InstancePolicyForm.vue:40 +msgctxt "Content/Moderation/Card.Title" msgid "Or customize your rule" msgstr "Or customise your rule" -#: front/src/components/favorites/List.vue:31 src/components/library/Radios.vue:41 -#: front/src/components/manage/library/FilesTable.vue:17 +#: front/src/components/favorites/List.vue:32 +#: src/components/library/Radios.vue:41 +#: front/src/components/manage/library/EditsCardList.vue:37 #: front/src/components/manage/users/UsersTable.vue:17 +#: front/src/views/admin/moderation/ReportsList.vue:42 #: front/src/views/playlists/List.vue:25 +msgctxt "Content/Search/Dropdown.Label/Noun" msgid "Order" msgstr "Order" -#: front/src/components/favorites/List.vue:23 src/components/library/Artists.vue:15 -#: front/src/components/library/Radios.vue:33 -#: front/src/components/manage/library/FilesTable.vue:9 +#: front/src/components/favorites/List.vue:24 +#: src/components/library/Albums.vue:15 +#: front/src/components/library/Artists.vue:19 +#: src/components/library/Radios.vue:33 +#: front/src/components/manage/library/AlbumsTable.vue:11 +#: front/src/components/manage/library/ArtistsTable.vue:11 +#: front/src/components/manage/library/EditsCardList.vue:29 +#: front/src/components/manage/library/LibrariesTable.vue:20 +#: front/src/components/manage/library/TagsTable.vue:11 +#: front/src/components/manage/library/TracksTable.vue:11 +#: front/src/components/manage/library/UploadsTable.vue:30 #: front/src/components/manage/moderation/AccountsTable.vue:11 -#: front/src/components/manage/moderation/DomainsTable.vue:9 +#: front/src/components/manage/moderation/DomainsTable.vue:17 #: front/src/components/manage/users/InvitationsTable.vue:9 #: front/src/components/manage/users/UsersTable.vue:9 +#: front/src/views/admin/moderation/ReportsList.vue:34 #: front/src/views/content/libraries/FilesTable.vue:21 #: front/src/views/playlists/List.vue:17 +msgctxt "Content/Search/Dropdown.Label/Noun" msgid "Ordering" msgstr "Ordering" -#: front/src/components/library/Artists.vue:23 +#: front/src/components/library/Albums.vue:27 +#: src/components/library/Artists.vue:27 +#: front/src/components/manage/library/AlbumsTable.vue:19 +#: front/src/components/manage/library/ArtistsTable.vue:19 +#: front/src/components/manage/library/LibrariesTable.vue:28 +#: front/src/components/manage/library/TagsTable.vue:19 +#: front/src/components/manage/library/TracksTable.vue:19 +#: front/src/components/manage/library/UploadsTable.vue:38 #: front/src/components/manage/moderation/AccountsTable.vue:19 -#: front/src/components/manage/moderation/DomainsTable.vue:17 +#: front/src/components/manage/moderation/DomainsTable.vue:25 #: front/src/views/content/libraries/FilesTable.vue:29 +msgctxt "Content/Search/Dropdown.Label/Noun" msgid "Ordering direction" msgstr "Ordering direction" +#: front/src/components/mixins/Translations.vue:48 +#: front/src/components/mixins/Translations.vue:49 +msgctxt "Content/Moderation/Dropdown" +msgid "Other" +msgstr "Other" + +#: front/src/components/manage/moderation/ReportCard.vue:143 #: front/src/components/manage/users/InvitationsTable.vue:38 +msgctxt "*/*/*" msgid "Owner" msgstr "Owner" #: front/src/components/PageNotFound.vue:33 +msgctxt "Head/*/Title" msgid "Page Not Found" msgstr "Page Not Found" #: front/src/components/PageNotFound.vue:7 +msgctxt "Content/*/Title" msgid "Page not found!" msgstr "Page not found!" #: front/src/components/Pagination.vue:39 +msgctxt "Content/*/Hidden text/Noun" msgid "Pagination" msgstr "Pagination" -#: front/src/components/auth/Login.vue:33 src/components/auth/Signup.vue:40 +#: front/src/components/auth/LoginForm.vue:32 +#: src/components/auth/Settings.vue:291 +#: front/src/components/auth/SignupForm.vue:36 +msgctxt "*/*/*" msgid "Password" msgstr "Password" -#: front/src/components/auth/SubsonicTokenForm.vue:94 +#: front/src/components/auth/SubsonicTokenForm.vue:100 +msgctxt "Content/Settings/Message" msgid "Password updated" msgstr "Password updated" #: front/src/views/auth/PasswordResetConfirm.vue:28 +msgctxt "Content/Signup/Card.Title" msgid "Password updated successfully" msgstr "Password updated successfully" -#: front/src/components/audio/Player.vue:352 +#: front/src/components/audio/Player.vue:654 +msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Pause track" msgstr "Pause track" -#: front/src/components/ShortcutsModal.vue:59 +#: front/src/components/ShortcutsModal.vue:96 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Pause/play the current track" msgstr "Pause/play the current track" #: front/src/components/manage/moderation/InstancePolicyCard.vue:12 +msgctxt "Content/Moderation/Card.List item" msgid "Paused" msgstr "Paused" -#: front/src/components/library/FileUpload.vue:107 +#: front/src/components/library/FileUpload.vue:116 +#: front/src/components/manage/library/UploadsTable.vue:23 +#: front/src/components/mixins/Translations.vue:28 #: front/src/views/content/libraries/FilesTable.vue:14 -#: front/src/views/content/libraries/FilesTable.vue:208 +#: front/src/components/mixins/Translations.vue:29 +msgctxt "Content/Library/*/Short" msgid "Pending" msgstr "Pending" #: front/src/views/content/libraries/Detail.vue:37 +msgctxt "Content/Library/Table/Short" msgid "Pending approval" msgstr "Pending approval" #: front/src/views/content/libraries/Quota.vue:22 +msgctxt "Content/Library/Label" msgid "Pending files" msgstr "Pending files" -#: front/src/components/Sidebar.vue:212 +#: front/src/components/Sidebar.vue:232 +msgctxt "Sidebar/Notifications/Hidden text" msgid "Pending follow requests" msgstr "Pending follow requests" +#: front/src/components/library/EditCard.vue:29 +#: front/src/components/manage/library/EditsCardList.vue:18 +msgctxt "Content/Admin/*/Noun" +msgid "Pending review" +msgstr "Pending review" + +#: front/src/components/Sidebar.vue:233 +msgctxt "Sidebar/Moderation/Hidden text" +msgid "Pending review edits" +msgstr "Pending review edits" + +#: front/src/components/auth/Settings.vue:176 #: front/src/components/manage/users/UsersTable.vue:42 -#: front/src/views/admin/moderation/AccountsDetail.vue:137 +#: front/src/views/admin/moderation/AccountsDetail.vue:166 +msgctxt "Content/*/*/Noun" msgid "Permissions" msgstr "Permissions" -#: front/src/components/audio/PlayButton.vue:9 src/components/library/Track.vue:40 +#: front/src/components/audio/PlayButton.vue:9 +#: front/src/components/library/TrackBase.vue:24 +msgctxt "*/Queue/Button.Label/Short, Verb" msgid "Play" msgstr "Play" -#: front/src/components/audio/album/Card.vue:50 -#: front/src/components/audio/artist/Card.vue:44 src/components/library/Album.vue:22 -#: front/src/components/library/Album.vue:67 src/views/playlists/Detail.vue:23 +#: front/src/components/audio/album/Card.vue:48 +#: front/src/components/library/AlbumBase.vue:21 +#: front/src/components/library/AlbumDetail.vue:11 +#: src/views/playlists/Detail.vue:24 +msgctxt "Content/Queue/Button.Label/Short, Verb" msgid "Play all" msgstr "Play all" -#: front/src/components/library/Artist.vue:26 +#: front/src/components/library/ArtistBase.vue:32 +msgctxt "Content/Artist/Button.Label/Verb" msgid "Play all albums" msgstr "Play all albums" -#: front/src/components/audio/PlayButton.vue:15 -#: front/src/components/audio/PlayButton.vue:65 +#: front/src/components/audio/PlayButton.vue:92 +msgctxt "*/Queue/Dropdown/Button/Title" msgid "Play next" msgstr "Play next" -#: front/src/components/ShortcutsModal.vue:67 +#: front/src/components/ShortcutsModal.vue:120 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Play next track" msgstr "Play next track" -#: front/src/components/audio/PlayButton.vue:16 -#: front/src/components/audio/PlayButton.vue:63 +#: front/src/components/audio/PlayButton.vue:90 +msgctxt "*/Queue/Dropdown/Button/Title" msgid "Play now" msgstr "Play now" -#: front/src/components/ShortcutsModal.vue:63 +#: front/src/components/ShortcutsModal.vue:116 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Play previous track" msgstr "Play previous track" -#: front/src/components/Sidebar.vue:211 +#: front/src/components/audio/PlayButton.vue:93 +msgctxt "*/Queue/Dropdown/Button/Title" +msgid "Play similar songs" +msgstr "Play similar songs" + +#: front/src/components/Sidebar.vue:231 +msgctxt "Sidebar/Player/Hidden text" msgid "Play this track" msgstr "Play this track" -#: front/src/components/audio/Player.vue:351 +#: front/src/components/audio/Player.vue:653 +msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Play track" msgstr "Play track" -#: front/src/components/audio/PlayButton.vue:70 -msgid "Play..." -msgstr "Play…" - -#: front/src/views/playlists/Detail.vue:90 +#: front/src/components/mixins/Report.vue:66 src/views/playlists/Detail.vue:121 +#: front/src/components/mixins/Report.vue:67 +msgctxt "*/*/*" msgid "Playlist" msgstr "Playlist" #: front/src/views/playlists/Detail.vue:12 +msgctxt "Content/Playlist/Header.Subtitle" msgid "Playlist containing %{ count } track, by %{ username }" msgid_plural "Playlist containing %{ count } tracks, by %{ username }" msgstr[0] "Playlist containing %{ count } track, by %{ username }" msgstr[1] "Playlist containing %{ count } tracks, by %{ username }" #: front/src/components/playlists/Form.vue:9 +msgctxt "Content/Playlist/Message" msgid "Playlist created" msgstr "Playlist created" #: front/src/components/playlists/Editor.vue:4 +msgctxt "Content/Playlist/Title" msgid "Playlist editor" msgstr "Playlist editor" #: front/src/components/playlists/Form.vue:21 +msgctxt "Content/Playlist/Input.Label" msgid "Playlist name" msgstr "Playlist name" #: front/src/components/playlists/Form.vue:6 +msgctxt "Content/Playlist/Message" msgid "Playlist updated" msgstr "Playlist updated" #: front/src/components/playlists/Form.vue:25 +msgctxt "Content/Playlist/Dropdown.Label" msgid "Playlist visibility" msgstr "Playlist visibility" #: front/src/components/Sidebar.vue:71 src/components/library/Home.vue:16 -#: front/src/components/library/Library.vue:13 src/views/admin/Settings.vue:83 -#: front/src/views/playlists/List.vue:106 +#: front/src/components/library/Library.vue:16 +#: front/src/components/mixins/Translations.vue:100 +#: src/views/admin/Settings.vue:83 +#: front/src/views/admin/library/AlbumDetail.vue:179 +#: front/src/views/admin/library/ArtistDetail.vue:167 +#: front/src/views/admin/library/TrackDetail.vue:231 +#: src/views/playlists/List.vue:106 +#: front/src/components/mixins/Translations.vue:101 +msgctxt "*/*/*" msgid "Playlists" msgstr "Playlists" -#: front/src/components/Home.vue:56 -msgid "Playlists? We got them" -msgstr "Playlists? We got them" +#: front/src/components/audio/EmbedWizard.vue:9 +msgctxt "Content/Embed/Message" +msgid "Please contact your admins and ask them to update the corresponding setting." +msgstr "" +"Please contact your admins and ask them to update the corresponding setting." -#: front/src/components/auth/Settings.vue:78 +#: front/src/components/auth/Settings.vue:79 +msgctxt "Content/Settings/Error message.List item/Call to action" msgid "Please double-check your password is correct" msgstr "Please double-check your password is correct" -#: front/src/components/auth/Login.vue:9 +#: front/src/components/auth/LoginForm.vue:5 +msgctxt "Content/Login/Error message.List item/Call to action" msgid "Please double-check your username/password couple is correct" msgstr "Please double-check your username/password couple is correct" #: front/src/components/auth/Settings.vue:46 +msgctxt "Content/Settings/Paragraph" msgid "PNG, GIF or JPG. At most 2MB. Will be downscaled to 400x400px." msgstr "PNG, GIF or JPG. At most 2MB. Will be downscaled to 400x400px." +#: front/src/components/About.vue:72 +msgctxt "Content/About/Header/Name" +msgid "Pod configuration" +msgstr "Pod configuration" + +#: front/src/views/admin/library/TrackDetail.vue:143 src/edits.js:70 +msgctxt "*/*/*/Short, Noun" +msgid "Position" +msgstr "Position" + #: front/src/components/manage/moderation/InstancePolicyForm.vue:118 +msgctxt "Content/Moderation/Help text" msgid "Prevent account or domain from triggering notifications, except from followers." -msgstr "" -"Prevent account or domain from triggering notifications, except from " -"followers." +msgstr "Prevent account or domain from triggering notifications, except from followers." -#: front/src/components/audio/EmbedWizard.vue:29 +#: front/src/components/audio/EmbedWizard.vue:43 +msgctxt "Popup/Embed/Title/Noun" msgid "Preview" msgstr "Preview" -#: front/src/components/audio/Player.vue:350 +#: front/src/components/audio/Player.vue:652 +msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Previous track" msgstr "Previous track" -#: front/src/views/content/remote/Card.vue:39 +#: front/src/components/mixins/Translations.vue:15 +#: front/src/components/mixins/Translations.vue:16 +msgctxt "Content/Settings/Dropdown/Short" +msgid "Private" +msgstr "Private" + +#: front/src/views/content/remote/Card.vue:56 +msgctxt "Content/Library/Card.List item" msgid "Problem during scanning" msgstr "Problem during scanning" -#: front/src/components/library/FileUpload.vue:58 +#: front/src/components/library/FileUpload.vue:57 +msgctxt "Content/Library/Button.Label" msgid "Proceed" msgstr "Proceed" #: front/src/views/auth/EmailConfirm.vue:26 #: front/src/views/auth/PasswordResetConfirm.vue:31 +msgctxt "Content/Signup/Link/Verb" msgid "Proceed to login" msgstr "Proceed to login" #: front/src/components/library/FileUpload.vue:17 +msgctxt "Content/Library/Tab.Title/Short" msgid "Processing" msgstr "Processing" +#: front/src/components/mixins/Translations.vue:80 +#: front/src/components/mixins/Translations.vue:81 +msgctxt "Content/OAuth Scopes/Label" +msgid "Profile" +msgstr "Profile" + +#: front/src/components/auth/SignupForm.vue:5 +msgctxt "Content/Signup/Form/Paragraph" +msgid "Public registrations are not possible on this instance. You will need an invitation code to sign up." +msgstr "Public registrations are not possible on this instance. You will need an invitation code to sign up." + #: front/src/components/manage/moderation/AccountsTable.vue:188 -#: front/src/components/manage/moderation/DomainsTable.vue:168 +#: front/src/components/manage/moderation/DomainsTable.vue:186 #: front/src/views/content/libraries/Quota.vue:36 #: front/src/views/content/libraries/Quota.vue:39 #: front/src/views/content/libraries/Quota.vue:62 #: front/src/views/content/libraries/Quota.vue:65 #: front/src/views/content/libraries/Quota.vue:88 #: front/src/views/content/libraries/Quota.vue:91 +msgctxt "*/*/*/Verb" msgid "Purge" msgstr "Purge" #: front/src/views/content/libraries/Quota.vue:89 +msgctxt "Popup/Library/Title" msgid "Purge errored files?" msgstr "Purge errored files?" #: front/src/views/content/libraries/Quota.vue:37 +msgctxt "Popup/Library/Title" msgid "Purge pending files?" msgstr "Purge pending files?" #: front/src/views/content/libraries/Quota.vue:63 +msgctxt "Popup/Library/Title" msgid "Purge skipped files?" msgstr "Purge skipped files?" #: front/src/components/Sidebar.vue:20 +msgctxt "Sidebar/Queue/Tab.Title/Noun" msgid "Queue" msgstr "Queue" -#: front/src/components/audio/Player.vue:283 +#: front/src/components/audio/Player.vue:329 +msgctxt "Content/Queue/Message" msgid "Queue shuffled!" msgstr "Queue shuffled!" #: front/src/views/radios/Detail.vue:80 +msgctxt "Head/Radio/Title" msgid "Radio" msgstr "Radio" -#: front/src/components/library/radios/Builder.vue:233 +#: front/src/components/library/radios/Builder.vue:235 +msgctxt "Head/Radio/Title" msgid "Radio Builder" msgstr "Radio Builder" #: front/src/components/library/radios/Builder.vue:15 +msgctxt "Content/Radio/Message" msgid "Radio created" msgstr "Radio created" #: front/src/components/library/radios/Builder.vue:21 +msgctxt "Content/Radio/Input.Label/Noun" msgid "Radio name" msgstr "Radio name" #: front/src/components/library/radios/Builder.vue:12 +msgctxt "Content/Radio/Message" msgid "Radio updated" msgstr "Radio updated" -#: front/src/components/library/Library.vue:10 src/components/library/Radios.vue:141 +#: front/src/components/library/Library.vue:13 +#: src/components/library/Radios.vue:142 +#: front/src/components/mixins/Translations.vue:104 +#: front/src/components/mixins/Translations.vue:105 +msgctxt "*/*/*" msgid "Radios" msgstr "Radios" +#: front/src/components/auth/ApplicationForm.vue:151 +msgctxt "Content/OAuth Scopes/Label/Verb" +msgid "Read" +msgstr "Read" + +#: front/src/components/library/ImportStatusModal.vue:51 +msgctxt "Popup/Import/Table.Label/Value" +msgid "Read our documentation for this error" +msgstr "Read our documentation for this error" + +#: front/src/components/auth/Authorize.vue:24 +msgctxt "Content/Auth/Label/Noun" +msgid "Read-only" +msgstr "Read-only" + +#: front/src/components/auth/ApplicationForm.vue:152 +msgctxt "Content/OAuth Scopes/Help Text" +msgid "Read-only access to user data" +msgstr "Read-only access to user data" + #: front/src/components/manage/moderation/InstancePolicyCard.vue:39 #: front/src/components/manage/moderation/InstancePolicyForm.vue:25 +msgctxt "Content/Moderation/*/Noun" msgid "Reason" msgstr "Reason" -#: front/src/views/admin/moderation/AccountsDetail.vue:222 -#: front/src/views/admin/moderation/DomainsDetail.vue:179 +#: front/src/views/admin/moderation/AccountsDetail.vue:252 +#: front/src/views/admin/moderation/DomainsDetail.vue:216 +msgctxt "Content/Moderation/Table.Label/Noun" msgid "Received library follows" msgstr "Received library follows" -#: front/src/components/manage/moderation/DomainsTable.vue:40 -#: front/src/components/mixins/Translations.vue:36 -#: front/src/components/mixins/Translations.vue:37 +#: front/src/components/manage/moderation/DomainsTable.vue:48 +#: front/src/components/mixins/Translations.vue:74 +#: front/src/components/mixins/Translations.vue:75 +msgctxt "Content/Moderation/*/Noun" msgid "Received messages" msgstr "Received messages" +#: front/src/components/library/EditForm.vue:27 +msgctxt "Content/Library/Paragraph" +msgid "Recent edits" +msgstr "Recent edits" + +#: front/src/components/library/EditForm.vue:17 +msgctxt "Content/Library/Paragraph" +msgid "Recent edits awaiting review" +msgstr "Recent edits awaiting review" + #: front/src/components/library/Home.vue:24 +msgctxt "Content/Home/Title" msgid "Recently added" msgstr "Recently added" +#: front/src/components/Home.vue:167 +msgctxt "Content/Home/Title" +msgid "Recently added albums" +msgstr "Recently added albums" + #: front/src/components/library/Home.vue:11 +msgctxt "Content/Home/Title" msgid "Recently favorited" msgstr "Recently favourited" #: front/src/components/library/Home.vue:6 +msgctxt "Content/Home/Title" msgid "Recently listened" msgstr "Recently listened" -#: front/src/views/content/remote/Home.vue:15 +#: front/src/components/auth/ApplicationForm.vue:13 +msgctxt "Content/Applications/Input.Label/Noun" +msgid "Redirect URI" +msgstr "Redirect URI" + +#: front/src/components/auth/Settings.vue:125 +#: src/components/auth/Settings.vue:170 +#: front/src/components/common/EmptyState.vue:16 +#: src/views/content/remote/Home.vue:15 +msgctxt "Content/*/Button.Label/Short, Verb" msgid "Refresh" msgstr "Refresh" -#: front/src/views/admin/moderation/DomainsDetail.vue:135 +#: front/src/components/federation/FetchButton.vue:20 +msgctxt "Popup/*/Message.Title" +msgid "Refresh error" +msgstr "Refresh error" + +#: front/src/views/admin/library/AlbumDetail.vue:56 +#: front/src/views/admin/library/ArtistDetail.vue:54 +#: front/src/views/admin/library/TrackDetail.vue:55 +msgctxt "Content/Moderation/Button/Verb" +msgid "Refresh from remote server" +msgstr "Refresh from remote server" + +#: front/src/views/admin/moderation/DomainsDetail.vue:164 +msgctxt "Content/Moderation/Button.Label/Verb" msgid "Refresh node info" msgstr "Refresh node info" -#: front/src/components/common/ActionTable.vue:272 +#: front/src/components/federation/FetchButton.vue:79 +msgctxt "Popup/*/Message.Title" +msgid "Refresh pending" +msgstr "Refresh pending" + +#: front/src/components/federation/FetchButton.vue:80 +msgctxt "Popup/*/Message.Content" +msgid "Refresh request wasn't proceed in time by our server. It will be processed later." +msgstr "Refresh request wasn't proceed in time by our server. It will be processed later." + +#: front/src/components/federation/FetchButton.vue:16 +msgctxt "Popup/*/Message.Title" +msgid "Refresh successful" +msgstr "Refresh successful" + +#: front/src/components/common/ActionTable.vue:275 +msgctxt "Content/*/Button.Tooltip/Verb" msgid "Refresh table content" msgstr "Refresh table content" -#: front/src/components/auth/Signup.vue:9 -msgid "Registration are closed on this instance, you will need an invitation code to signup." -msgstr "" -"Registration are closed on this instance, you will need an invitation code " -"to signup." +#: front/src/components/federation/FetchButton.vue:12 +msgctxt "Popup/*/Message.Title" +msgid "Refresh was skipped" +msgstr "Refresh was skipped" -#: front/src/components/manage/users/UsersTable.vue:71 -msgid "regular user" -msgstr "regular user" +#: front/src/components/federation/FetchButton.vue:7 +msgctxt "Popup/*/Title" +msgid "Refreshing object from remote…" +msgstr "Refreshing object from remote…" + +#: front/src/components/About.vue:86 +msgctxt "*/*/*" +msgid "Registrations" +msgstr "Registrations" + +#: front/src/components/manage/users/UsersTable.vue:72 +msgctxt "Content/Admin/Table, User role" +msgid "Regular user" +msgstr "Regular user" +#: front/src/components/library/EditCard.vue:87 #: front/src/views/content/libraries/Detail.vue:51 +msgctxt "Content/Library/Button.Label" msgid "Reject" msgstr "Reject" #: front/src/components/manage/moderation/InstancePolicyCard.vue:32 #: front/src/components/manage/moderation/InstancePolicyForm.vue:123 +msgctxt "Content/Moderation/*/Verb" msgid "Reject media" msgstr "Reject media" +#: front/src/components/library/EditCard.vue:33 +#: front/src/components/manage/library/EditsCardList.vue:24 #: front/src/views/content/libraries/Detail.vue:43 +msgctxt "Content/Library/*/Short" msgid "Rejected" msgstr "Rejected" -#: front/src/views/content/libraries/FilesTable.vue:234 -msgid "Relaunch import" -msgstr "Relaunch import" +#: front/src/components/manage/library/AlbumsTable.vue:43 +#: front/src/components/mixins/Translations.vue:54 src/edits.js:43 +#: front/src/components/mixins/Translations.vue:55 +msgctxt "Content/*/*/Noun" +msgid "Release date" +msgstr "Release date" + +#: front/src/components/library/FileUpload.vue:63 +msgctxt "Content/Library/Paragraph" +msgid "Remaining storage space" +msgstr "Remaining storage space" + +#: front/src/views/Notifications.vue:18 src/views/Notifications.vue:52 +msgctxt "Content/Notifications/Label" +msgid "Remind me in:" +msgstr "Remind me in:" #: front/src/views/content/remote/Home.vue:6 +msgctxt "Content/Library/Title/Noun" msgid "Remote libraries" msgstr "Remote libraries" #: front/src/views/content/remote/Home.vue:7 +msgctxt "Content/Library/Paragraph" msgid "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." -msgstr "" -"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." +msgstr "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." #: front/src/components/library/radios/Filter.vue:59 +msgctxt "Content/Radio/Button.Label/Verb" msgid "Remove" msgstr "Remove" #: front/src/components/auth/Settings.vue:58 +msgctxt "Content/Settings/Button.Label/Verb" msgid "Remove avatar" msgstr "Remove avatar" +#: front/src/components/library/ArtistDetail.vue:12 +msgctxt "Content/Moderation/Button.Label" +msgid "Remove filter" +msgstr "Remove filter" + +#: front/src/components/manage/moderation/DomainsTable.vue:198 +#: front/src/views/admin/moderation/DomainsDetail.vue:39 +msgctxt "Content/Moderation/Action/Verb" +msgid "Remove from allow-list" +msgstr "Remove from allow-list" + #: front/src/components/favorites/TrackFavoriteIcon.vue:26 +msgctxt "Content/Track/Icon.Tooltip/Verb" msgid "Remove from favorites" msgstr "Remove from favourites" #: front/src/views/content/libraries/Quota.vue:38 +msgctxt "Popup/Library/Paragraph" msgid "Removes uploaded but yet to be processed tracks completely, adding the corresponding data to your quota." -msgstr "" -"Removes uploaded but yet to be processed tracks completely, adding the " -"corresponding data to your quota." +msgstr "Removes uploaded but yet to be processed tracks completely, adding the corresponding data to your quota." #: front/src/views/content/libraries/Quota.vue:64 +msgctxt "Popup/Library/Paragraph" msgid "Removes uploaded tracks skipped during the import processes completely, adding the corresponding data to your quota." -msgstr "" -"Removes uploaded tracks skipped during the import processes completely, " -"adding the corresponding data to your quota." +msgstr "Removes uploaded tracks skipped during the import processes completely, adding the corresponding data to your quota." #: front/src/views/content/libraries/Quota.vue:90 +msgctxt "Popup/Library/Paragraph" msgid "Removes uploaded tracks that could not be processed by the server completely, adding the corresponding data to your quota." -msgstr "" -"Removes uploaded tracks that could not be processed by the server " -"completely, adding the corresponding data to your quota." +msgstr "Removes uploaded tracks that could not be processed by the server completely, adding the corresponding data to your quota." + +#: front/src/components/audio/PlayButton.vue:94 +msgctxt "*/Queue/Dropdown/Button/Title" +msgid "Replace current queue" +msgstr "Replace current queue" + +#: front/src/components/mixins/Report.vue:6 src/components/mixins/Report.vue:7 +msgctxt "*/Moderation/*/Verb" +msgid "Report @%{ username }…" +msgstr "Report @%{ username }…" + +#: front/src/components/manage/moderation/ReportCard.vue:5 +msgctxt "Content/Moderation/Card/Short" +msgid "Report %{ id }" +msgstr "Report %{ id }" + +#: front/src/components/moderation/ReportModal.vue:139 +msgctxt "*/Moderation/Message" +msgid "Report successfully submitted, thank you" +msgstr "Report successfully submitted, thank you" + +#: front/src/components/mixins/Report.vue:36 +#: src/components/mixins/Report.vue:37 +msgctxt "*/Moderation/*/Verb" +msgid "Report this album…" +msgstr "Report this album…" + +#: front/src/components/mixins/Report.vue:50 +#: src/components/mixins/Report.vue:51 +msgctxt "*/Moderation/*/Verb" +msgid "Report this artist…" +msgstr "Report this artist…" + +#: front/src/components/mixins/Report.vue:72 +#: src/components/mixins/Report.vue:73 +msgctxt "*/Moderation/*/Verb" +msgid "Report this library…" +msgstr "Report this library…" + +#: front/src/components/mixins/Report.vue:61 +#: src/components/mixins/Report.vue:62 +msgctxt "*/Moderation/*/Verb" +msgid "Report this playlist…" +msgstr "Report this playlist…" + +#: front/src/components/mixins/Report.vue:23 +#: src/components/mixins/Report.vue:24 +msgctxt "*/Moderation/*/Verb" +msgid "Report this track…" +msgstr "Report this track…" + +#: front/src/components/audio/PlayButton.vue:95 +msgctxt "*/Moderation/*/Button/Label,Verb" +msgid "Report…" +msgstr "Report…" + +#: front/src/components/manage/moderation/ReportCard.vue:117 +msgctxt "Content/*/*/Short" +msgid "Reported object" +msgstr "Reported object" -#: front/src/components/auth/SubsonicTokenForm.vue:33 -#: front/src/components/auth/SubsonicTokenForm.vue:36 +#: front/src/views/admin/moderation/Base.vue:5 +#: front/src/views/admin/moderation/ReportsList.vue:3 +#: front/src/views/admin/moderation/ReportsList.vue:208 +msgctxt "*/Moderation/*/Noun" +msgid "Reports" +msgstr "Reports" + +#: front/src/components/auth/SubsonicTokenForm.vue:38 +#: front/src/components/auth/SubsonicTokenForm.vue:41 +msgctxt "*/Settings/Button.Label/Verb" msgid "Request a new password" msgstr "Request a new password" -#: front/src/components/auth/SubsonicTokenForm.vue:34 +#: front/src/components/auth/SubsonicTokenForm.vue:39 +msgctxt "Popup/Settings/Title" msgid "Request a new Subsonic API password?" msgstr "Request a new Subsonic API password?" -#: front/src/components/auth/SubsonicTokenForm.vue:42 +#: front/src/components/auth/SubsonicTokenForm.vue:47 +msgctxt "Content/Settings/Button.Label/Verb" msgid "Request a password" msgstr "Request a password" -#: front/src/components/auth/Login.vue:35 src/views/auth/PasswordReset.vue:4 -#: front/src/views/auth/PasswordReset.vue:53 +#: front/src/components/federation/FetchButton.vue:64 +msgctxt "Popup/*/Loading.Title" +msgid "Requesting a fetch…" +msgstr "Requesting a fetch…" + +#: front/src/components/library/EditForm.vue:94 +msgctxt "Content/Library/Button.Label" +msgid "Reset to initial value" +msgstr "Reset to initial value" + +#: front/src/components/auth/LoginForm.vue:34 +#: src/views/auth/PasswordReset.vue:4 front/src/views/auth/PasswordReset.vue:53 +msgctxt "*/Login/*/Verb" msgid "Reset your password" msgstr "Reset your password" -#: front/src/components/favorites/List.vue:38 src/components/library/Artists.vue:30 -#: front/src/components/library/Radios.vue:52 src/views/playlists/List.vue:32 +#: front/src/components/manage/moderation/ReportCard.vue:83 +msgctxt "Content/*/*/Noun" +msgid "Resolution date" +msgstr "Resolution date" + +#: front/src/components/manage/moderation/ReportCard.vue:218 +msgctxt "Content/*/Button.Label/Verb" +msgid "Resolve" +msgstr "Resolve" + +#: front/src/components/manage/moderation/ReportCard.vue:62 +#: front/src/views/admin/moderation/ReportsList.vue:20 +msgctxt "Content/*/*/Short" +msgid "Resolved" +msgstr "Resolved" + +#: front/src/views/content/libraries/FilesTable.vue:223 +msgctxt "Content/Library/Dropdown/Verb" +msgid "Restart import" +msgstr "Restart import" + +#: front/src/components/library/EditForm.vue:31 +msgctxt "Content/Library/Button.Label" +msgid "Restrict to unreviewed edits" +msgstr "Restrict to unreviewed edits" + +#: front/src/components/favorites/List.vue:39 +#: src/components/library/Albums.vue:34 +#: front/src/components/library/Artists.vue:34 +#: src/components/library/Radios.vue:52 front/src/views/playlists/List.vue:32 +msgctxt "Content/Search/Dropdown.Label/Noun" msgid "Results per page" msgstr "Results per page" #: front/src/views/auth/EmailConfirm.vue:17 +msgctxt "Content/Signup/Link/Verb" msgid "Return to login" msgstr "Return to login" +#: front/src/components/library/ArtistDetail.vue:9 +msgctxt "Content/Moderation/Link" +msgid "Review my filters" +msgstr "Review my filters" + +#: front/src/components/auth/Settings.vue:192 +msgctxt "*/*/*/Verb" +msgid "Revoke" +msgstr "Revoke" + +#: front/src/components/auth/Settings.vue:195 +msgctxt "*/Settings/Button.Label/Verb" +msgid "Revoke access" +msgstr "Revoke access" + +#: front/src/components/auth/Settings.vue:193 +msgctxt "Popup/Settings/Title" +msgid "Revoke access for application \"%{ application }\"?" +msgstr "Revoke access for application \"%{ application }\"?" + #: front/src/components/manage/moderation/InstancePolicyCard.vue:16 +msgctxt "Content/Moderation/Card.Title/Noun" msgid "Rule" msgstr "Rule" -#: front/src/components/admin/SettingsGroup.vue:67 -#: front/src/components/library/radios/Builder.vue:33 +#: front/src/components/About.vue:28 src/components/About.vue:56 +msgctxt "Content/About/Header" +msgid "Rules" +msgstr "Rules" + +#: front/src/components/admin/SettingsGroup.vue:75 +#: front/src/components/library/radios/Builder.vue:34 +msgctxt "Content/*/Button.Label/Verb" msgid "Save" msgstr "Save" -#: front/src/views/content/remote/Card.vue:165 +#: front/src/views/content/remote/Card.vue:203 +msgctxt "Content/Library/Message" msgid "Scan launched" msgstr "Scan launched" -#: front/src/views/content/remote/Card.vue:63 +#: front/src/views/content/remote/Card.vue:80 +msgctxt "Content/Library/Card.Button.Label/Verb" msgid "Scan now" msgstr "Scan now" -#: front/src/views/content/remote/Card.vue:166 +#: front/src/views/content/remote/Card.vue:48 +msgctxt "Content/Library/Card.List item" +msgid "Scan pending" +msgstr "Scan pending" + +#: front/src/views/content/remote/Card.vue:204 +msgctxt "Content/Library/Message" msgid "Scan skipped (previous scan is too recent)" msgstr "Scan skipped (previous scan is too recent)" -#: front/src/views/content/remote/Card.vue:31 -msgid "Scan waiting" -msgstr "Scan waiting" - -#: front/src/views/content/remote/Card.vue:43 +#: front/src/views/content/remote/Card.vue:60 +msgctxt "Content/Library/Card.List item" msgid "Scanned" msgstr "Scanned" -#: front/src/views/content/remote/Card.vue:47 +#: front/src/views/content/remote/Card.vue:64 +msgctxt "Content/Library/Card.List item" msgid "Scanned with errors" msgstr "Scanned with errors" -#: front/src/views/content/remote/Card.vue:35 +#: front/src/views/content/remote/Card.vue:52 +msgctxt "Content/Library/Card.List item" msgid "Scanning… (%{ progress }%)" msgstr "Scanning… (%{ progress }%)" -#: front/src/components/library/Artists.vue:10 src/components/library/Radios.vue:29 -#: front/src/components/manage/library/FilesTable.vue:5 +#: front/src/components/auth/ApplicationForm.vue:22 +#: front/src/components/auth/Settings.vue:226 +msgctxt "Content/*/*/Noun" +msgid "Scopes" +msgstr "Scopes" + +#: front/src/components/library/Albums.vue:10 +#: src/components/library/Artists.vue:10 +#: front/src/components/library/Radios.vue:29 +#: front/src/components/manage/library/AlbumsTable.vue:5 +#: front/src/components/manage/library/ArtistsTable.vue:5 +#: front/src/components/manage/library/EditsCardList.vue:6 +#: front/src/components/manage/library/LibrariesTable.vue:5 +#: front/src/components/manage/library/TagsTable.vue:5 +#: front/src/components/manage/library/TracksTable.vue:5 +#: front/src/components/manage/library/UploadsTable.vue:5 #: front/src/components/manage/moderation/AccountsTable.vue:5 #: front/src/components/manage/moderation/DomainsTable.vue:5 #: front/src/components/manage/users/InvitationsTable.vue:5 #: front/src/components/manage/users/UsersTable.vue:5 -#: front/src/views/content/libraries/FilesTable.vue:5 src/views/playlists/List.vue:13 +#: front/src/views/admin/moderation/ReportsList.vue:8 +#: front/src/views/content/libraries/FilesTable.vue:5 +#: src/views/playlists/List.vue:13 +msgctxt "Content/Search/Input.Label/Noun" msgid "Search" msgstr "Search" #: front/src/views/content/remote/ScanForm.vue:9 +msgctxt "Content/Library/Input.Label/Verb" msgid "Search a remote library" msgstr "Search a remote library" +#: front/src/components/manage/library/EditsCardList.vue:211 +#: front/src/views/admin/moderation/ReportsList.vue:207 +msgctxt "Content/Search/Input.Placeholder" +msgid "Search by account, summary, domain…" +msgstr "Search by account, summary, domain…" + +#: front/src/components/manage/library/LibrariesTable.vue:191 +msgctxt "Content/Search/Input.Placeholder" +msgid "Search by domain, actor, name, description…" +msgstr "Search by domain, actor, name, description…" + +#: front/src/components/manage/library/UploadsTable.vue:241 +msgctxt "Content/Search/Input.Placeholder" +msgid "Search by domain, actor, name, reference, source…" +msgstr "Search by domain, actor, name, reference, source…" + +#: front/src/components/manage/library/ArtistsTable.vue:164 +msgctxt "Content/Search/Input.Placeholder" +msgid "Search by domain, name, MusicBrainz ID…" +msgstr "Search by domain, name, MusicBrainz ID…" + +#: front/src/components/manage/library/TracksTable.vue:174 +msgctxt "Content/Search/Input.Placeholder" +msgid "Search by domain, title, artist, album, MusicBrainz ID…" +msgstr "Search by domain, title, artist, album, MusicBrainz ID…" + +#: front/src/components/manage/library/AlbumsTable.vue:174 +msgctxt "Content/Search/Input.Placeholder" +msgid "Search by domain, title, artist, MusicBrainz ID…" +msgstr "Search by domain, title, artist, MusicBrainz ID…" + #: front/src/components/manage/moderation/AccountsTable.vue:171 +msgctxt "Content/Search/Input.Placeholder" msgid "Search by domain, username, bio…" msgstr "Search by domain, username, bio…" -#: front/src/components/manage/moderation/DomainsTable.vue:151 +#: front/src/components/manage/library/TagsTable.vue:165 +msgctxt "Content/Search/Input.Placeholder" +msgid "Search by name" +msgstr "Search by name" + +#: front/src/components/manage/moderation/DomainsTable.vue:168 +msgctxt "Content/Search/Input.Placeholder" msgid "Search by name…" msgstr "Search by name…" -#: front/src/views/content/libraries/FilesTable.vue:201 +#: front/src/views/content/libraries/FilesTable.vue:208 +msgctxt "Content/Library/Input.Placeholder" msgid "Search by title, artist, album…" msgstr "Search by title, artist, album…" -#: front/src/components/manage/library/FilesTable.vue:176 -msgid "Search by title, artist, domain…" -msgstr "Search by title, artist, domain…" - #: front/src/components/manage/users/InvitationsTable.vue:153 +msgctxt "Content/Admin/Input.Placeholder/Verb" msgid "Search by username, e-mail address, code…" msgstr "Search by username, e-mail address, code…" -#: front/src/components/manage/users/UsersTable.vue:163 +#: front/src/components/manage/users/UsersTable.vue:164 +msgctxt "Content/Search/Input.Placeholder" msgid "Search by username, e-mail address, name…" msgstr "Search by username, e-mail address, name…" -#: front/src/components/audio/SearchBar.vue:20 +#: front/src/components/audio/SearchBar.vue:27 +msgctxt "Sidebar/Search/Input.Placeholder" msgid "Search for artists, albums, tracks…" msgstr "Search for artists, albums, tracks…" #: front/src/components/audio/Search.vue:2 +msgctxt "Content/Search/Title" msgid "Search for some music" msgstr "Search for some music" -#: front/src/components/library/Track.vue:162 -msgid "Search on lyrics.wikia.com" -msgstr "Search on lyrics.wikia.com" - -#: front/src/components/library/Album.vue:27 src/components/library/Artist.vue:31 -#: front/src/components/library/Track.vue:47 +#: front/src/components/library/TagsSelector.vue:6 +msgctxt "*/Dropdown/Placeholder/Verb" +msgid "Search for tags…" +msgstr "Search for tags…" + +#: front/src/components/library/AlbumBase.vue:66 +#: front/src/components/library/ArtistBase.vue:77 +#: front/src/components/library/TrackBase.vue:82 +msgctxt "Content/*/Button.Label/Verb" +msgid "Search on Discogs" +msgstr "Search on Discogs" + +#: front/src/components/library/AlbumBase.vue:58 +#: front/src/components/library/ArtistBase.vue:69 +#: front/src/components/library/TrackBase.vue:74 +msgctxt "Content/*/Button.Label/Verb" msgid "Search on Wikipedia" msgstr "Search on Wikipedia" -#: front/src/components/library/Library.vue:32 src/views/admin/library/Base.vue:17 -#: front/src/views/admin/moderation/Base.vue:22 src/views/admin/users/Base.vue:21 -#: front/src/views/content/Base.vue:19 +#: front/src/components/library/Library.vue:35 +#: src/views/admin/library/Base.vue:35 +#: front/src/views/admin/moderation/Base.vue:44 +#: src/views/admin/users/Base.vue:21 front/src/views/content/Base.vue:19 +msgctxt "Menu/*/Hidden text" msgid "Secondary menu" msgstr "Secondary menu" #: front/src/views/admin/Settings.vue:15 +msgctxt "Content/Admin/Menu.Title" msgid "Sections" msgstr "Sections" -#: front/src/components/library/radios/Builder.vue:45 +#: front/src/components/ShortcutsModal.vue:108 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek backwards 30s" +msgstr "Seek backwards 30s" + +#: front/src/components/ShortcutsModal.vue:100 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek backwards 5s" +msgstr "Seek backwards 5s" + +#: front/src/components/ShortcutsModal.vue:112 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek forwards 30s" +msgstr "Seek forwards 30s" + +#: front/src/components/ShortcutsModal.vue:104 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek forwards 5s" +msgstr "Seek forwards 5s" + +#: front/src/components/library/radios/Builder.vue:46 +msgctxt "Content/Radio/Dropdown.Placeholder/Verb" msgid "Select a filter" msgstr "Select a filter" -#: front/src/components/common/ActionTable.vue:77 +#: front/src/components/common/ActionTable.vue:79 +msgctxt "Content/*/Link/Verb" msgid "Select all %{ total } elements" msgid_plural "Select all %{ total } elements" msgstr[0] "Select all %{ total } elements" msgstr[1] "Select all %{ total } elements" -#: front/src/components/common/ActionTable.vue:86 +#: front/src/components/common/ActionTable.vue:88 +msgctxt "Content/*/Link/Verb" msgid "Select only current page" msgstr "Select only current page" -#: front/src/components/Sidebar.vue:43 src/components/Sidebar.vue:85 -#: front/src/components/manage/users/UsersTable.vue:181 -#: front/src/views/admin/moderation/AccountsDetail.vue:472 +#: front/src/components/Home.vue:43 +msgctxt "Content/Home/Link" +msgid "Server rules" +msgstr "Server rules" + +#: front/src/components/Sidebar.vue:43 src/components/Sidebar.vue:112 +#: front/src/components/manage/users/UsersTable.vue:182 +#: front/src/views/admin/moderation/AccountsDetail.vue:526 +msgctxt "*/*/*/Noun" msgid "Settings" msgstr "Settings" #: front/src/components/auth/Settings.vue:10 +msgctxt "Content/Settings/Message" msgid "Settings updated" msgstr "Settings updated" #: front/src/components/admin/SettingsGroup.vue:11 +msgctxt "Content/Settings/Paragraph" msgid "Settings updated successfully." msgstr "Settings updated successfully." #: front/src/components/manage/users/InvitationForm.vue:27 +msgctxt "Content/Admin/Table.Label/Noun" msgid "Share link" msgstr "Share link" #: front/src/views/content/libraries/Detail.vue:15 +msgctxt "Content/Library/Paragraph" msgid "Share this link with other users so they can request access to your library." -msgstr "" -"Share this link with other users so they can request access to your library." +msgstr "Share this link with other users so they can request access to your library." #: front/src/views/content/libraries/Detail.vue:14 -#: front/src/views/content/remote/Card.vue:73 +#: front/src/views/content/remote/Card.vue:90 +msgctxt "Content/Library/Title" msgid "Sharing link" msgstr "Sharing link" -#: front/src/components/audio/album/Card.vue:40 +#: front/src/components/audio/EmbedWizard.vue:5 +msgctxt "Content/Embed/Message" +msgid "Sharing will not work because this pod doesn't allow anonymous users to access content." +msgstr "" +"Sharing will not work because this pod doesn't allow anonymous users to " +"access content." + +#: front/src/components/About.vue:156 +msgctxt "*/*/*/Verb" +msgid "Show" +msgstr "Show" + +#: front/src/components/audio/album/Card.vue:38 +msgctxt "Content/Album/Card.Link/Verb" msgid "Show %{ count } more track" msgid_plural "Show %{ count } more tracks" msgstr[0] "Show %{ count } more track" msgstr[1] "Show %{ count } more tracks" -#: front/src/components/audio/artist/Card.vue:30 -msgid "Show 1 more album" -msgid_plural "Show %{ count } more albums" -msgstr[0] "Show 1 more album" -msgstr[1] "Show %{ count } more albums" +#: front/src/components/tags/List.vue:11 +msgctxt "Content/*/Button/Label/Verb" +msgid "Show 1 more tag" +msgid_plural "Show %{ count } more tags" +msgstr[0] "Show 1 more tag" +msgstr[1] "Show %{ count } more tags" -#: front/src/components/ShortcutsModal.vue:42 +#: front/src/components/library/EditForm.vue:21 +msgctxt "Content/Library/Button.Label" +msgid "Show all edits" +msgstr "Show all edits" + +#: front/src/components/ShortcutsModal.vue:60 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Show available keyboard shortcuts" msgstr "Show available keyboard shortcuts" -#: front/src/views/Notifications.vue:10 +#: front/src/components/common/ExpandableDiv.vue:7 +msgctxt "*/*/Button,Label" +msgid "Show less" +msgstr "Show less" + +#: front/src/components/common/ExpandableDiv.vue:8 +msgctxt "*/*/Button,Label" +msgid "Show more" +msgstr "Show more" + +#: front/src/views/Notifications.vue:72 +msgctxt "Content/Notifications/Form.Label/Verb" msgid "Show read notifications" msgstr "Show read notifications" -#: front/src/components/forms/PasswordInput.vue:26 +#: front/src/components/forms/PasswordInput.vue:42 +msgctxt "Content/Settings/Button.Tooltip/Verb" msgid "Show/hide password" msgstr "Show/hide password" -#: front/src/components/manage/library/FilesTable.vue:97 +#: front/src/components/manage/library/AlbumsTable.vue:93 +#: front/src/components/manage/library/ArtistsTable.vue:84 +#: front/src/components/manage/library/EditsCardList.vue:72 +#: front/src/components/manage/library/LibrariesTable.vue:110 +#: front/src/components/manage/library/TagsTable.vue:79 +#: front/src/components/manage/library/TracksTable.vue:95 +#: front/src/components/manage/library/UploadsTable.vue:144 #: front/src/components/manage/moderation/AccountsTable.vue:88 -#: front/src/components/manage/moderation/DomainsTable.vue:74 +#: front/src/components/manage/moderation/DomainsTable.vue:85 #: front/src/components/manage/users/InvitationsTable.vue:76 -#: front/src/components/manage/users/UsersTable.vue:87 -#: front/src/views/content/libraries/FilesTable.vue:114 +#: front/src/components/manage/users/UsersTable.vue:88 +#: front/src/views/content/libraries/FilesTable.vue:117 +msgctxt "Content/*/Paragraph" msgid "Showing results %{ start }-%{ end } on %{ total }" msgstr "Showing results %{ start }-%{ end } on %{ total }" -#: front/src/components/ShortcutsModal.vue:83 +#: front/src/components/ShortcutsModal.vue:140 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Shuffle queue" msgstr "Shuffle queue" -#: front/src/components/audio/Player.vue:365 +#: front/src/components/audio/Player.vue:667 +msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Shuffle your queue" msgstr "Shuffle your queue" -#: front/src/components/auth/Signup.vue:97 +#: front/src/components/Home.vue:103 +msgctxt "*/Signup/Title" +msgid "Sign up" +msgstr "Sign up" + +#: front/src/views/auth/Signup.vue:37 +msgctxt "*/Signup/Title" msgid "Sign Up" msgstr "Sign Up" +#: front/src/components/Home.vue:107 +msgctxt "Content/Home/Paragraph" +msgid "Sign up now to keep a track of your favorites, create playlists, discover new content and much more!" +msgstr "Sign up now to keep a track of your favourites, create playlists, discover new content and much more!" + #: front/src/components/manage/users/UsersTable.vue:40 +msgctxt "Content/Admin/Table.Label/Short, Noun (Value is a date)" msgid "Sign-up" msgstr "Sign-up" -#: front/src/components/mixins/Translations.vue:31 -#: front/src/views/admin/moderation/AccountsDetail.vue:176 -#: front/src/components/mixins/Translations.vue:32 +#: front/src/components/mixins/Translations.vue:69 +#: front/src/views/admin/moderation/AccountsDetail.vue:198 +#: front/src/components/mixins/Translations.vue:70 +msgctxt "Content/Admin/Table.Label/Noun" msgid "Sign-up date" msgstr "Sign-up date" -#: front/src/components/manage/moderation/InstancePolicyForm.vue:119 -msgid "Silence notifications" -msgstr "Silence notifications" - -#: front/src/components/library/FileUpload.vue:85 -#: front/src/components/library/Track.vue:120 -#: front/src/components/manage/library/FilesTable.vue:44 -#: front/src/components/mixins/Translations.vue:28 -#: front/src/views/content/libraries/FilesTable.vue:60 -#: front/src/components/mixins/Translations.vue:29 +#: front/src/components/library/FileUpload.vue:94 +#: front/src/components/library/TrackDetail.vue:39 +#: front/src/components/manage/library/UploadsTable.vue:65 +#: front/src/components/mixins/Translations.vue:66 +#: front/src/views/admin/library/UploadDetail.vue:219 +#: front/src/views/content/libraries/FilesTable.vue:61 +#: front/src/components/mixins/Translations.vue:67 +msgctxt "Content/*/*/Noun" msgid "Size" msgstr "Size" +#: front/src/components/manage/library/UploadsTable.vue:24 +#: front/src/components/mixins/Translations.vue:24 #: front/src/views/content/libraries/FilesTable.vue:15 -#: front/src/views/content/libraries/FilesTable.vue:204 +#: front/src/components/mixins/Translations.vue:25 +msgctxt "Content/Library/*" msgid "Skipped" msgstr "Skipped" #: front/src/views/content/libraries/Quota.vue:49 +msgctxt "Content/Library/Label" msgid "Skipped files" msgstr "Skipped files" -#: front/src/views/admin/moderation/DomainsDetail.vue:97 +#: front/src/views/admin/moderation/DomainsDetail.vue:126 +msgctxt "Content/Moderation/Table.Label" msgid "Software" msgstr "Software" -#: front/src/components/Footer.vue:49 +#: front/src/components/playlists/Editor.vue:21 +msgctxt "Content/Playlist/Paragraph" +msgid "Some tracks in your queue are already in this playlist:" +msgstr "Some tracks in your queue are already in this playlist:" + +#: front/src/components/PageNotFound.vue:10 +msgctxt "Content/*/Paragraph" +msgid "Sorry, the page you asked for does not exist:" +msgstr "Sorry, the page you asked for does not exist:" + +#: front/src/components/Footer.vue:57 +msgctxt "Footer/*/List item.Link" msgid "Source code" msgstr "Source code" #: front/src/components/auth/Profile.vue:23 -#: front/src/components/manage/users/UsersTable.vue:70 +#: front/src/components/manage/users/UsersTable.vue:71 +msgctxt "Content/Profile/User role" msgid "Staff member" msgstr "Staff member" -#: front/src/components/radios/Button.vue:4 -msgid "Start" -msgstr "Start" +#: front/src/components/audio/PlayButton.vue:27 +#: src/components/radios/Button.vue:4 +msgctxt "*/Queue/Button.Label/Short, Verb" +msgid "Start radio" +msgstr "Start radio" -#: front/src/views/admin/Settings.vue:86 +#: front/src/components/About.vue:170 src/components/Home.vue:53 +#: front/src/views/admin/Settings.vue:87 +msgctxt "Content/Home/Header" msgid "Statistics" msgstr "Statistics" -#: front/src/views/admin/moderation/AccountsDetail.vue:454 +#: front/src/views/admin/moderation/AccountsDetail.vue:510 +msgctxt "Content/Moderation/Help text" msgid "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this account" -msgstr "" -"Statistics are computed from known activity and content on your instance, " -"and do not reflect general activity for this account" +msgstr "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this account" -#: front/src/views/admin/moderation/DomainsDetail.vue:358 +#: front/src/views/admin/moderation/DomainsDetail.vue:418 +msgctxt "Content/Moderation/Help text" msgid "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this domain" -msgstr "" -"Statistics are computed from known activity and content on your instance, " -"and do not reflect general activity for this domain" - -#: front/src/components/library/FileUpload.vue:86 +msgstr "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this domain" + +#: front/src/views/admin/library/AlbumDetail.vue:346 +#: front/src/views/admin/library/ArtistDetail.vue:345 +#: front/src/views/admin/library/LibraryDetail.vue:356 +#: front/src/views/admin/library/TagDetail.vue:210 +#: front/src/views/admin/library/TrackDetail.vue:389 +#: front/src/views/admin/library/UploadDetail.vue:335 +msgctxt "Content/Moderation/Help text" +msgid "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" +msgstr "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" + +#: front/src/components/library/FileUpload.vue:95 +#: front/src/components/manage/library/EditsCardList.vue:12 +#: front/src/components/manage/moderation/ReportCard.vue:57 #: front/src/components/manage/users/InvitationsTable.vue:17 #: front/src/components/manage/users/InvitationsTable.vue:39 #: front/src/components/manage/users/UsersTable.vue:43 -#: front/src/views/admin/moderation/DomainsDetail.vue:123 +#: front/src/views/admin/moderation/DomainsDetail.vue:152 +#: front/src/views/admin/moderation/ReportsList.vue:14 #: front/src/views/content/libraries/Detail.vue:28 +msgctxt "*/*/*" msgid "Status" msgstr "Status" -#: front/src/components/radios/Button.vue:3 -msgid "Stop" -msgstr "Stop" - -#: front/src/components/Sidebar.vue:161 +#: front/src/components/Sidebar.vue:178 src/components/radios/Button.vue:3 +msgctxt "*/Player/Button.Label/Short, Verb" msgid "Stop radio" msgstr "Stop radio" -#: front/src/App.vue:22 +#: front/src/components/SetInstanceModal.vue:23 +msgctxt "*/*/Button.Label/Verb" msgid "Submit" msgstr "Submit" -#: front/src/views/admin/Settings.vue:85 +#: front/src/components/library/EditForm.vue:110 +msgctxt "Content/Library/Button.Label/Verb" +msgid "Submit and apply edit" +msgstr "Submit and apply edit" + +#: front/src/components/library/EditForm.vue:7 +msgctxt "Content/Library/Button.Label" +msgid "Submit another edit" +msgstr "Submit another edit" + +#: front/src/components/moderation/ReportModal.vue:64 +msgctxt "Popup/*/Button.Label" +msgid "Submit report" +msgstr "Submit report" + +#: front/src/components/library/EditForm.vue:111 +msgctxt "Content/Library/Button.Label/Verb" +msgid "Submit suggestion" +msgstr "Submit suggestion" + +#: front/src/components/manage/moderation/ReportCard.vue:17 +msgctxt "Content/Moderation/*" +msgid "Submitted by" +msgstr "Submitted by" + +#: front/src/views/admin/Settings.vue:86 +msgctxt "Content/Admin/Menu" msgid "Subsonic" msgstr "Subsonic" #: front/src/components/auth/SubsonicTokenForm.vue:2 +msgctxt "Content/Settings/Title" msgid "Subsonic API password" msgstr "Subsonic API password" -#: front/src/App.vue:26 +#: front/src/components/library/EditForm.vue:38 +msgctxt "Content/Library/Paragraph" +msgid "Suggest a change using the form below." +msgstr "Suggest a change using the form below." + +#: front/src/components/library/AlbumEdit.vue:5 +msgctxt "Content/*/Title" +msgid "Suggest an edit on this album" +msgstr "Suggest an edit on this album" + +#: front/src/components/library/ArtistEdit.vue:5 +msgctxt "Content/*/Title" +msgid "Suggest an edit on this artist" +msgstr "Suggest an edit on this artist" + +#: front/src/components/library/TrackEdit.vue:5 +msgctxt "Content/*/Title" +msgid "Suggest an edit on this track" +msgstr "Suggest an edit on this track" + +#: front/src/components/SetInstanceModal.vue:31 +msgctxt "Popup/Instance/List.Label" msgid "Suggested choices" msgstr "Suggested choices" #: front/src/components/library/FileUpload.vue:3 +msgctxt "Content/Library/Tab.Title/Short" msgid "Summary" msgstr "Summary" -#: front/src/components/Footer.vue:39 +#: front/src/components/library/EditForm.vue:99 +msgctxt "*/*/*" +msgid "Summary (optional)" +msgstr "Summary (optional)" + +#: front/src/components/Footer.vue:47 +msgctxt "Footer/*/Listitem.Link" msgid "Support forum" msgstr "Support forum" -#: front/src/components/library/FileUpload.vue:78 +#: front/src/views/Notifications.vue:10 +msgctxt "Content/Notifications/Header" +msgid "Support this Funkwhale pod" +msgstr "Support this Funkwhale pod" + +#: front/src/components/library/FileUpload.vue:85 +msgctxt "Content/Library/Paragraph" msgid "Supported extensions: %{ extensions }" msgstr "Supported extensions: %{ extensions }" #: front/src/components/playlists/Editor.vue:9 +msgctxt "Content/Playlist/Paragraph" msgid "Syncing changes to server…" msgstr "Syncing changes to server…" +#: front/src/components/audio/SearchBar.vue:35 +msgctxt "*/*/*/Noun" +msgid "Tag" +msgstr "Tag" + +#: front/src/views/admin/library/TagDetail.vue:61 +msgctxt "Content/Moderation/Title" +msgid "Tag data" +msgstr "Tag data" + +#: front/src/components/library/Albums.vue:23 +#: src/components/library/Artists.vue:15 +#: front/src/views/admin/library/Base.vue:23 +#: src/views/admin/library/TagsList.vue:24 front/src/edits.js:24 +#: src/edits.js:50 src/edits.js:91 src/entities.js:120 +msgctxt "*/*/*/Noun" +msgid "Tags" +msgstr "Tags" + +#: front/src/components/mixins/Translations.vue:44 +#: front/src/components/mixins/Translations.vue:45 +msgctxt "Content/Moderation/Dropdown" +msgid "Takedown request" +msgstr "Takedown request" + +#: front/src/components/About.vue:35 src/components/About.vue:61 +msgctxt "Content/About/Header" +msgid "Terms and privacy policy" +msgstr "Terms and privacy policy" + +#: front/src/components/audio/EmbedWizard.vue:35 #: front/src/components/common/CopyInput.vue:3 +msgctxt "Content/*/Paragraph" msgid "Text copied to clipboard!" msgstr "Text copied to clipboard!" -#: front/src/components/Home.vue:26 -msgid "That's simple: we loved Grooveshark and we want to build something even better." -msgstr "" -"That's simple: we loved Grooveshark and we want to build something even " -"better." +#: front/src/views/admin/library/AlbumDetail.vue:81 +msgctxt "Content/Moderation/Paragraph" +msgid "The album will be removed, as well as associated uploads, tracks, favorites and listening history. This action is irreversible." +msgstr "The album will be removed, as well as associated uploads, tracks, favourites and listening history. This action is irreversible." -#: front/src/components/Footer.vue:53 +#: front/src/components/auth/Authorize.vue:39 +msgctxt "Content/Auth/Paragraph" +msgid "The application is also requesting the following unknown permissions:" +msgstr "The application is also requesting the following unknown permissions:" + +#: front/src/views/admin/library/ArtistDetail.vue:79 +msgctxt "Content/Moderation/Paragraph" +msgid "The artist will be removed, as well as associated uploads, tracks, albums, favorites and listening history. This action is irreversible." +msgstr "The artist will be removed, as well as associated uploads, tracks, albums, favourites and listening history. This action is irreversible." + +#: front/src/components/Footer.vue:61 +msgctxt "Footer/*/List item.Link" msgid "The funkwhale logo was kindly designed and provided by Francis Gading." msgstr "The funkwhale logo was kindly designed and provided by Francis Gading." +#: front/src/components/SetInstanceModal.vue:8 +msgctxt "Popup/Instance/Error message.List item" +msgid "The given address is not a Funkwhale server" +msgstr "The given address is not a Funkwhale server" + #: front/src/views/content/libraries/Form.vue:34 +msgctxt "Popup/Library/Paragraph" msgid "The library and all its tracks will be deleted. This can not be undone." msgstr "The library and all its tracks will be deleted. This can not be undone." -#: front/src/components/library/FileUpload.vue:39 -msgid "The music files you are uploading are tagged properly:" -msgstr "The music files you are uploading are tagged properly:" +#: front/src/views/admin/library/LibraryDetail.vue:61 +msgctxt "Content/Moderation/Paragraph" +msgid "The library will be removed, as well as associated uploads, and follows. This action is irreversible." +msgstr "The library will be removed, as well as associated uploads, and follows. This action is irreversible." + +#: front/src/components/library/ImportStatusModal.vue:140 +msgctxt "Popup/Import/Error.Label" +msgid "The metadata included in the file is invalid or some mandatory fields are missing." +msgstr "The metadata included in the file is invalid or some mandatory fields are missing." -#: front/src/components/audio/Player.vue:67 +#: front/src/components/library/FileUpload.vue:38 +msgctxt "Content/Library/List item" +msgid "The music files you are uploading are tagged properly." +msgstr "The music files you are uploading are tagged properly." + +#: front/src/components/audio/Player.vue:65 +msgctxt "Sidebar/Player/Error message.Paragraph" msgid "The next track will play automatically in a few seconds…" msgstr "The next track will play automatically in a few seconds…" -#: front/src/components/Home.vue:121 -msgid "The plaform is free and open-source, you can install it and modify it without worries" -msgstr "" -"The platform is free and open-source, you can install it and modify it " -"without worries" +#: front/src/components/manage/moderation/NotesThread.vue:27 +msgctxt "Content/Moderation/Paragraph" +msgid "The note will be removed. This action is irreversible." +msgstr "The note will be removed. This action is irreversible." + +#: front/src/components/manage/moderation/ReportCard.vue:120 +msgctxt "Content/Moderation/Message" +msgid "The object associated with this report was deleted." +msgstr "The object associated with this report was deleted." + +#: front/src/components/playlists/Form.vue:14 +msgctxt "Content/Playlist/Error message.Title" +msgid "The playlist could not be created" +msgstr "The playlist could not be created" + +#: front/src/components/federation/FetchButton.vue:37 +msgctxt "*/*/Error" +msgid "The remote server answered with HTTP %{ status }" +msgstr "The remote server answered with HTTP %{ status }" + +#: front/src/components/federation/FetchButton.vue:13 +msgctxt "Popup/*/Message.Content" +msgid "The remote server answered, but returned data was unsupported by Funkwhale." +msgstr "The remote server answered, but returned data was unsupported by Funkwhale." + +#: front/src/components/federation/FetchButton.vue:44 +msgctxt "*/*/Error" +msgid "The remote server didn't respond quickly enough" +msgstr "The remote server didn't respond quickly enough" + +#: front/src/components/federation/FetchButton.vue:50 +msgctxt "*/*/Error" +msgid "The remote server returned invalid JSON or JSON-LD data" +msgstr "The remote server returned invalid JSON or JSON-LD data" + +#: front/src/components/manage/library/AlbumsTable.vue:189 +msgctxt "Popup/*/Paragraph" +msgid "The selected albums will be removed, as well as associated tracks, uploads, favorites and listening history. This action is irreversible." +msgstr "The selected albums will be removed, as well as associated tracks, uploads, favourites and listening history. This action is irreversible." + +#: front/src/components/manage/library/ArtistsTable.vue:179 +msgctxt "Popup/*/Paragraph" +msgid "The selected artist will be removed, as well as associated uploads, tracks, albums, favorites and listening history. This action is irreversible." +msgstr "The selected artist will be removed, as well as associated uploads, tracks, albums, favourites and listening history. This action is irreversible." + +#: front/src/components/manage/library/LibrariesTable.vue:206 +msgctxt "Popup/*/Paragraph" +msgid "The selected library will be removed, as well as associated uploads and follows. This action is irreversible." +msgstr "The selected library will be removed, as well as associated uploads and follows. This action is irreversible." + +#: front/src/components/manage/library/TagsTable.vue:180 +msgctxt "Popup/*/Paragraph" +msgid "The selected tag will be removed and unlinked with existing content, if any. This action is irreversible." +msgstr "The selected tag will be removed and unlinked with existing content, if any. This action is irreversible." + +#: front/src/components/manage/library/TracksTable.vue:189 +msgctxt "Popup/*/Paragraph" +msgid "The selected tracks will be removed, as well as associated uploads, favorites and listening history. This action is irreversible." +msgstr "The selected tracks will be removed, as well as associated uploads, favourites and listening history. This action is irreversible." + +#: front/src/components/manage/library/UploadsTable.vue:256 +msgctxt "Popup/*/Paragraph" +msgid "The selected upload will be removed. This action is irreversible." +msgstr "The selected upload will be removed. This action is irreversible." + +#: front/src/components/SetInstanceModal.vue:7 +msgctxt "Popup/Instance/Error message.List item" +msgid "The server might be down" +msgstr "The server might be down" #: front/src/components/auth/SubsonicTokenForm.vue:4 +msgctxt "Content/Settings/Paragraph" msgid "The Subsonic API is not available on this Funkwhale instance." msgstr "The Subsonic API is not available on this Funkwhale instance." -#: front/src/components/library/FileUpload.vue:43 +#: front/src/components/library/EditCard.vue:96 +msgctxt "Popup/Library/Paragraph" +msgid "The suggestion will be completely removed, this action is irreversible." +msgstr "The suggestion will be completely removed, this action is irreversible." + +#: front/src/views/admin/library/TagDetail.vue:44 +msgctxt "Content/Moderation/Paragraph" +msgid "The tag will be removed and unlinked from any existing entity. This action is irreversible." +msgstr "The tag will be removed and unlinked from any existing entity. This action is irreversible." + +#: front/src/components/playlists/PlaylistModal.vue:34 +msgctxt "Popup/Playlist/Error message.Title" +msgid "The track can't be added to a playlist" +msgstr "The track can't be added to a playlist" + +#: front/src/components/audio/Player.vue:62 +msgctxt "Sidebar/Player/Error message.Title" +msgid "The track cannot be loaded" +msgstr "The track cannot be loaded" + +#: front/src/views/admin/library/TrackDetail.vue:80 +msgctxt "Content/Moderation/Paragraph" +msgid "The track will be removed, as well as associated uploads, favorites and listening history. This action is irreversible." +msgstr "The track will be removed, as well as associated uploads, favourites and listening history. This action is irreversible." + +#: front/src/views/admin/library/UploadDetail.vue:68 +msgctxt "Content/Moderation/Paragraph" +msgid "The upload will be removed. This action is irreversible." +msgstr "The upload will be removed. This action is irreversible." + +#: front/src/components/library/FileUpload.vue:42 +msgctxt "Content/Library/List item" msgid "The uploaded music files are in OGG, Flac or MP3 format" msgstr "The uploaded music files are in OGG, Flac or MP3 format" #: front/src/views/content/Home.vue:4 +msgctxt "Content/Library/Paragraph" msgid "There are various ways to grab new content and make it available here." msgstr "There are various ways to grab new content and make it available here." #: front/src/components/manage/moderation/InstancePolicyForm.vue:66 +msgctxt "Popup/Moderation/Paragraph" msgid "This action is irreversible." msgstr "This action is irreversible." -#: front/src/components/library/Album.vue:85 +#: front/src/components/library/AlbumDetail.vue:29 +msgctxt "Content/Album/Paragraph" msgid "This album is present in the following libraries:" msgstr "This album is present in the following libraries:" -#: front/src/components/library/Artist.vue:63 +#: front/src/components/library/ArtistDetail.vue:42 +msgctxt "Content/Artist/Paragraph" msgid "This artist is present in the following libraries:" msgstr "This artist is present in the following libraries:" -#: front/src/views/admin/moderation/AccountsDetail.vue:55 -#: front/src/views/admin/moderation/DomainsDetail.vue:48 +#: front/src/components/manage/moderation/DomainsTable.vue:169 +msgctxt "Content/Moderation/Popup" +msgid "This domain is present in your allow-list" +msgstr "This domain is present in your allow-list" + +#: front/src/views/admin/moderation/AccountsDetail.vue:84 +#: front/src/views/admin/moderation/DomainsDetail.vue:76 +msgctxt "Content/Moderation/Card.Title" msgid "This domain is subject to specific moderation rules" msgstr "This domain is subject to specific moderation rules" +#: front/src/components/manage/moderation/InstancePolicyModal.vue:16 +msgctxt "Content/Moderation/Card.Title" +msgid "This entity is subject to specific moderation rules" +msgstr "This entity is subject to specific moderation rules" + #: front/src/views/content/Home.vue:9 +msgctxt "Content/Library/Paragraph" msgid "This instance offers up to %{quota} of storage space for every user." msgstr "This instance offers up to %{quota} of storage space for every user." +#: front/src/components/auth/Settings.vue:300 +msgctxt "Popup/Settings/Paragraph" +msgid "This is irreversible and will permanently remove your data from our servers. You will we immediatly logged out." +msgstr "This is irreversible and will permanently remove your data from our servers. You will we immediately logged out." + +#: front/src/components/auth/Settings.vue:165 +msgctxt "Content/Settings/Paragraph" +msgid "This is the list of applications that have access to your account data." +msgstr "This is the list of applications that have access to your account data." + +#: front/src/components/auth/Settings.vue:218 +msgctxt "Content/Settings/Paragraph" +msgid "This is the list of applications that you have created." +msgstr "This is the list of applications that you have created." + #: front/src/components/auth/Profile.vue:16 +msgctxt "Content/Profile/Button.Paragraph" msgid "This is you!" msgstr "This is you!" -#: front/src/views/content/libraries/Form.vue:71 +#: front/src/views/content/libraries/Form.vue:73 +msgctxt "Content/Library/Input.Placeholder" msgid "This library contains my personal music, I hope you like it." msgstr "This library contains my personal music, I hope you like it." -#: front/src/views/content/remote/Card.vue:131 +#: front/src/views/content/remote/Card.vue:169 +msgctxt "Content/Library/Card.Help text" msgid "This library is private and your approval from its owner is needed to access its content" -msgstr "" -"This library is private and approval from its owner is needed to access its " -"content" +msgstr "This library is private and your approval from its owner is needed to access its content" -#: front/src/views/content/remote/Card.vue:132 +#: front/src/views/content/remote/Card.vue:170 +msgctxt "Content/Library/Card.Help text" msgid "This library is public and you can access its content freely" msgstr "This library is public and you can access its content freely" -#: front/src/components/common/ActionTable.vue:45 +#: front/src/components/common/ActionTable.vue:47 +msgctxt "Modal/*/Paragraph" msgid "This may affect a lot of elements or have irreversible consequences, please double check this is really what you want." -msgstr "" -"This may affect a lot of elements or have irreversible consequences, please " -"double check this is really what you want." +msgstr "This may affect a lot of elements or have irreversible consequences, please double check this is really what you want." + +#: front/src/components/library/AlbumEdit.vue:8 +#: front/src/components/library/ArtistEdit.vue:8 +#: front/src/components/library/TrackEdit.vue:8 +msgctxt "Content/*/Message" +msgid "This object is managed by another server, you cannot edit it." +msgstr "This object is managed by another server, you cannot edit it." + +#: front/src/components/Home.vue:87 +msgctxt "Content/Home/Paragraph" +msgid "This pod runs Funkwhale, a community-driven project that lets you listen and share music and audio within a decentralized, open network." +msgstr "This pod runs Funkwhale, a community-driven project that lets you listen and share music and audio within a decentralised, open network." -#: front/src/components/library/FileUpload.vue:52 +#: front/src/components/library/FileUpload.vue:51 +msgctxt "Content/Library/Paragraph" msgid "This reference will be used to group imported files together." -msgstr "his reference will be used to group imported files together." +msgstr "This reference will be used to group imported files together." -#: front/src/components/audio/PlayButton.vue:73 +#: front/src/components/mixins/Translations.vue:33 +#: front/src/components/mixins/Translations.vue:34 +msgctxt "Content/Library/Help text" +msgid "This track could not be processed, please make sure it is tagged correctly" +msgstr "This track could not be processed, please make sure it is tagged correctly" + +#: front/src/components/mixins/Translations.vue:29 +#: front/src/components/mixins/Translations.vue:30 +msgctxt "Content/Library/Help text" +msgid "This track has been uploaded, but hasn't been processed by the server yet" +msgstr "This track has been uploaded, but hasn't been processed by the server yet" + +#: front/src/components/mixins/Translations.vue:25 +#: front/src/components/mixins/Translations.vue:26 +msgctxt "Content/Library/Help text" +msgid "This track is already present in one of your libraries" +msgstr "This track is already present in one of your libraries" + +#: front/src/components/audio/PlayButton.vue:103 +msgctxt "*/Queue/Button/Title" msgid "This track is not available in any library you have access to" msgstr "This track is not available in any library you have access to" -#: front/src/components/library/Track.vue:171 +#: front/src/components/library/TrackDetail.vue:82 +msgctxt "Content/Track/Paragraph" msgid "This track is present in the following libraries:" msgstr "This track is present in the following libraries:" -#: front/src/views/playlists/Detail.vue:37 +#: front/src/views/playlists/Detail.vue:46 +msgctxt "Popup/Playlist/Paragraph" msgid "This will completely delete this playlist and cannot be undone." msgstr "This will completely delete this playlist and cannot be undone." #: front/src/views/radios/Detail.vue:27 +msgctxt "Popup/Radio/Paragraph" msgid "This will completely delete this radio and cannot be undone." msgstr "This will completely delete this radio and cannot be undone." -#: front/src/components/auth/SubsonicTokenForm.vue:50 +#: front/src/components/auth/SubsonicTokenForm.vue:55 +msgctxt "Popup/Settings/Paragraph" msgid "This will completely disable access to the Subsonic API using from account." -msgstr "" -"This will completely disable access to the Subsonic API using from account." +msgstr "This will completely disable access to the Subsonic API using from account." -#: front/src/App.vue:132 src/components/Footer.vue:72 -msgid "This will erase your local data and disconnect you, do you want to continue?" -msgstr "" -"This will erase your local data and disconnect you, do you want to continue?" +#: front/src/components/manage/moderation/ReportCard.vue:359 +msgctxt "Content/Moderation/Popup,Paragraph" +msgid "This will delete the object associated with this report and mark the report as resolved. The deletion is irreversible." +msgstr "This will delete the object associated with this report and mark the report as resolved. The deletion is irreversible." -#: front/src/components/auth/SubsonicTokenForm.vue:35 +#: front/src/components/auth/SubsonicTokenForm.vue:40 +msgctxt "Popup/Settings/Paragraph" msgid "This will log you out from existing devices that use the current password." -msgstr "" -"This will log you out from existing devices that use the current password." +msgstr "This will log you out from existing devices that use the current password." + +#: front/src/components/auth/Settings.vue:253 +msgctxt "Popup/Settings/Paragraph" +msgid "This will permanently delete the application and all the associated tokens." +msgstr "This will permanently delete the application and all the associated tokens." -#: front/src/components/playlists/Editor.vue:44 +#: front/src/components/auth/Settings.vue:194 +msgctxt "Popup/Settings/Paragraph" +msgid "This will prevent this application from accessing the service on your behalf." +msgstr "This will prevent this application from accessing the service on your behalf." + +#: front/src/components/playlists/Editor.vue:54 +msgctxt "Popup/Playlist/Paragraph" msgid "This will remove all tracks from this playlist and cannot be undone." msgstr "This will remove all tracks from this playlist and cannot be undone." -#: front/src/components/audio/track/Table.vue:6 -#: front/src/components/manage/library/FilesTable.vue:37 -#: front/src/components/mixins/Translations.vue:27 -#: front/src/views/content/libraries/FilesTable.vue:54 -#: front/src/components/mixins/Translations.vue:28 +#: front/src/components/audio/track/Table.vue:7 +#: front/src/components/manage/library/AlbumsTable.vue:39 +#: front/src/components/manage/library/TracksTable.vue:39 +#: front/src/views/admin/library/AlbumDetail.vue:105 +#: front/src/views/admin/library/TrackDetail.vue:104 +#: front/src/views/content/libraries/FilesTable.vue:55 src/edits.js:36 +#: front/src/edits.js:62 +msgctxt "*/*/*/Noun" msgid "Title" msgstr "Title" -#: front/src/components/ShortcutsModal.vue:79 +#: front/src/components/SetInstanceModal.vue:16 +msgctxt "Popup/Instance/Paragraph" +msgid "To continue, please select the Funkwhale instance you want to connect to. Enter the address directly, or select one of the suggested choices." +msgstr "To continue, please select the Funkwhale instance you want to connect to. Enter the address directly, or select one of the suggested choices." + +#: front/src/components/ShortcutsModal.vue:148 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Toggle favorite" +msgstr "Toggle favourite" + +#: front/src/components/ShortcutsModal.vue:132 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Toggle mute" +msgstr "Toggle mute" + +#: front/src/components/ShortcutsModal.vue:136 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Toggle queue looping" msgstr "Toggle queue looping" -#: front/src/views/admin/moderation/AccountsDetail.vue:288 -#: front/src/views/admin/moderation/DomainsDetail.vue:225 +#: front/src/views/admin/library/AlbumDetail.vue:238 +#: front/src/views/admin/library/ArtistDetail.vue:226 +#: front/src/views/admin/library/LibraryDetail.vue:219 +#: front/src/views/admin/library/TrackDetail.vue:290 +#: front/src/views/admin/moderation/AccountsDetail.vue:329 +#: front/src/views/admin/moderation/DomainsDetail.vue:262 +msgctxt "Content/Moderation/Table.Label" msgid "Total size" msgstr "Total size" -#: front/src/views/content/libraries/Card.vue:61 +#: front/src/views/content/libraries/Card.vue:68 +msgctxt "Content/Library/Card.Help text" msgid "Total size of the files in this library" msgstr "Total size of the files in this library" -#: front/src/views/admin/moderation/DomainsDetail.vue:113 +#: front/src/views/admin/moderation/DomainsDetail.vue:142 +msgctxt "Content/*/*" msgid "Total users" msgstr "Total users" -#: front/src/components/audio/SearchBar.vue:27 src/components/library/Track.vue:262 +#: front/src/components/audio/SearchBar.vue:34 +#: front/src/components/library/TrackBase.vue:188 +#: front/src/components/library/TrackDetail.vue:128 #: front/src/components/metadata/Search.vue:138 +#: src/components/mixins/Report.vue:28 +#: front/src/views/admin/library/UploadDetail.vue:199 +#: front/src/components/mixins/Report.vue:29 +msgctxt "*/*/*/Noun" msgid "Track" msgstr "Track" -#: front/src/views/content/libraries/FilesTable.vue:205 -msgid "Track already present in one of your libraries" -msgstr "Track already present in one of your libraries" +#: front/src/components/library/EditCard.vue:13 +msgctxt "Content/Library/Card/Short" +msgid "Track #%{ id } - %{ name }" +msgstr "Track #%{ id } - %{ name }" + +#: front/src/views/admin/library/TrackDetail.vue:97 +msgctxt "Content/Moderation/Title" +msgid "Track data" +msgstr "Track data" -#: front/src/components/library/Track.vue:85 +#: front/src/components/library/TrackDetail.vue:4 +msgctxt "Content/Track/Title/Noun" msgid "Track information" msgstr "Track information" -#: front/src/components/library/radios/Filter.vue:44 -msgid "Track matching filter" -msgstr "Track matching filter" - -#: front/src/components/mixins/Translations.vue:23 -#: front/src/components/mixins/Translations.vue:24 +#: front/src/components/mixins/Translations.vue:60 +#: front/src/components/mixins/Translations.vue:61 +msgctxt "Content/*/Dropdown/Noun" msgid "Track name" msgstr "Track name" -#: front/src/views/content/libraries/FilesTable.vue:209 -msgid "Track uploaded, but not processed by the server yet" -msgstr "Track uploaded, but not processed by the server yet" - -#: front/src/components/instance/Stats.vue:54 -msgid "tracks" -msgstr "tracks" - -#: front/src/components/library/Album.vue:75 -#: front/src/components/playlists/PlaylistModal.vue:33 -#: front/src/views/admin/moderation/AccountsDetail.vue:329 -#: front/src/views/admin/moderation/DomainsDetail.vue:265 +#: front/src/components/library/AlbumDetail.vue:19 +#: front/src/components/library/TagDetail.vue:36 +#: front/src/components/manage/library/AlbumsTable.vue:42 +#: front/src/components/manage/library/ArtistsTable.vue:42 +#: front/src/components/manage/library/TagsTable.vue:44 +#: front/src/components/playlists/PlaylistModal.vue:47 +#: front/src/views/admin/library/AlbumDetail.vue:268 +#: front/src/views/admin/library/ArtistDetail.vue:266 +#: front/src/views/admin/library/Base.vue:14 +#: front/src/views/admin/library/LibraryDetail.vue:248 +#: front/src/views/admin/library/TagDetail.vue:143 +#: front/src/views/admin/library/TracksList.vue:24 +#: front/src/views/admin/moderation/AccountsDetail.vue:374 +#: front/src/views/admin/moderation/DomainsDetail.vue:311 #: front/src/views/content/Base.vue:8 src/views/content/libraries/Detail.vue:8 -#: front/src/views/playlists/Detail.vue:50 src/views/radios/Detail.vue:34 +#: front/src/views/playlists/Detail.vue:76 src/views/radios/Detail.vue:34 +msgctxt "*/*/*" msgid "Tracks" msgstr "Tracks" -#: front/src/components/library/Artist.vue:54 +#: front/src/components/library/ArtistDetail.vue:33 +msgctxt "Content/Artist/Title" msgid "Tracks by this artist" msgstr "Tracks by this artist" -#: front/src/components/instance/Stats.vue:25 -msgid "Tracks favorited" -msgstr "Tracks favourited" - -#: front/src/components/instance/Stats.vue:19 -msgid "tracks listened" -msgstr "tracks listened" - -#: front/src/components/library/Track.vue:138 -#: front/src/components/manage/library/FilesTable.vue:41 -#: front/src/views/admin/moderation/AccountsDetail.vue:151 +#: front/src/components/library/radios/Filter.vue:44 +msgctxt "Popup/Radio/Title/Noun" +msgid "Tracks matching filter" +msgstr "Tracks matching filter" + +#: front/src/components/library/TrackDetail.vue:57 +#: front/src/components/manage/moderation/ReportCard.vue:134 +#: front/src/views/admin/library/UploadDetail.vue:250 +#: front/src/views/admin/moderation/AccountsDetail.vue:181 +msgctxt "Content/Track/Table.Label/Noun" msgid "Type" msgstr "Type" #: front/src/components/manage/moderation/AccountsTable.vue:44 -#: front/src/components/manage/moderation/DomainsTable.vue:42 +#: front/src/components/manage/moderation/DomainsTable.vue:50 +msgctxt "Content/Moderation/Table.Label/Short" msgid "Under moderation rule" msgstr "Under moderation rule" -#: front/src/views/content/remote/Card.vue:100 src/views/content/remote/Card.vue:105 +#: front/src/components/ShortcutsModal.vue:68 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Unfocus searchbar" +msgstr "Unfocus searchbar" + +#: front/src/views/content/remote/Card.vue:122 +#: src/views/content/remote/Card.vue:127 +msgctxt "*/Library/Button.Label/Verb" msgid "Unfollow" msgstr "Unfollow" -#: front/src/views/content/remote/Card.vue:101 +#: front/src/views/content/remote/Card.vue:123 +msgctxt "Popup/Library/Title" msgid "Unfollow this library?" msgstr "Unfollow this library?" -#: front/src/components/About.vue:17 -msgid "Unfortunately, owners of this instance did not yet take the time to complete this page." -msgstr "" -"Unfortunately, owners of this instance did not yet take the time to complete " -"this page." - -#: front/src/components/Home.vue:37 -msgid "Unlimited music" -msgstr "Unlimited music" +#: front/src/components/federation/FetchButton.vue:54 +#: front/src/components/federation/FetchButton.vue:55 +#: front/src/components/library/ImportStatusModal.vue:144 +msgctxt "*/*/Error" +msgid "Unknown error" +msgstr "Unknown error" -#: front/src/components/audio/Player.vue:354 +#: front/src/components/audio/Player.vue:656 +msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Unmute" msgstr "Unmute" -#: front/src/components/manage/moderation/InstancePolicyCard.vue:45 +#: front/src/components/manage/moderation/ReportCard.vue:225 +msgctxt "Content/*/Button.Label" +msgid "Unresolve" +msgstr "Unresolve" + +#: front/src/components/manage/moderation/ReportCard.vue:67 +#: front/src/views/admin/moderation/ReportsList.vue:23 +msgctxt "Content/*/*/Short" +msgid "Unresolved" +msgstr "Unresolved" + #: front/src/components/manage/moderation/InstancePolicyForm.vue:57 +msgctxt "Content/Moderation/Card.Button.Label/Verb" msgid "Update" msgstr "Update" +#: front/src/components/auth/ApplicationForm.vue:64 +msgctxt "Content/Applications/Button.Label/Verb" +msgid "Update application" +msgstr "Update application" + #: front/src/components/auth/Settings.vue:50 +msgctxt "Content/Settings/Button.Label/Verb" msgid "Update avatar" msgstr "Update avatar" #: front/src/views/content/libraries/Form.vue:25 +msgctxt "Content/Library/Button.Label/Verb" msgid "Update library" msgstr "Update library" -#: front/src/components/manage/moderation/InstancePolicyForm.vue:3 -msgid "Update moderation rule" -msgstr "Update moderation rule" - #: front/src/components/playlists/Form.vue:33 +msgctxt "Content/Playlist/Button.Label/Verb" msgid "Update playlist" msgstr "Update playlist" #: front/src/components/auth/Settings.vue:27 +msgctxt "Content/Settings/Button.Label/Verb" msgid "Update settings" msgstr "Update settings" #: front/src/views/auth/PasswordResetConfirm.vue:21 +msgctxt "Content/Signup/Button.Label" msgid "Update your password" msgstr "Update your password" -#: front/src/views/content/libraries/Card.vue:44 +#: front/src/views/content/libraries/Card.vue:45 #: front/src/views/content/libraries/DetailArea.vue:24 +msgctxt "Content/Library/Card.Button.Label/Verb" msgid "Upload" msgstr "Upload" #: front/src/components/auth/Settings.vue:45 +msgctxt "Content/Settings/Title/Verb" msgid "Upload a new avatar" msgstr "Upload a new avatar" #: front/src/views/content/Home.vue:6 +msgctxt "Content/Library/Title/Verb" msgid "Upload audio content" msgstr "Upload audio content" -#: front/src/views/content/libraries/FilesTable.vue:57 +#: front/src/views/admin/library/UploadDetail.vue:85 +msgctxt "Content/Moderation/Title" +msgid "Upload data" +msgstr "Upload data" + +#: front/src/views/content/libraries/FilesTable.vue:58 +msgctxt "*/*/*/Noun" msgid "Upload date" msgstr "Upload date" -#: front/src/components/library/FileUpload.vue:220 -#: front/src/components/library/FileUpload.vue:221 +#: front/src/components/library/FileUpload.vue:258 +msgctxt "Content/Library/Help text" msgid "Upload denied, ensure the file is not too big and that you have not reached your quota" -msgstr "" -"Upload denied, ensure the file is not too big and that you have not reached " -"your quota" +msgstr "Upload denied, ensure the file is not too big and that you have not reached your quota" + +#: front/src/components/library/ImportStatusModal.vue:8 +msgctxt "Popup/Import/Message" +msgid "Upload is still pending and will soon be processed by the server." +msgstr "Upload is still pending and will soon be processed by the server." #: front/src/views/content/Home.vue:7 +msgctxt "Content/Library/Paragraph" msgid "Upload music files (MP3, OGG, FLAC, etc.) from your personal library directly from your browser to enjoy them here." -msgstr "" -"Upload music files (MP3, OGG, FLAC, etc.) from your personal library " -"directly from your browser to enjoy them here." +msgstr "Upload music files (MP3, OGG, FLAC, etc.) from your personal library directly from your browser to enjoy them here." -#: front/src/components/library/FileUpload.vue:31 +#: front/src/components/library/FileUpload.vue:30 +msgctxt "Content/Library/Title/Verb" msgid "Upload new tracks" msgstr "Upload new tracks" -#: front/src/views/admin/moderation/AccountsDetail.vue:269 +#: front/src/components/About.vue:99 +#: front/src/views/admin/moderation/AccountsDetail.vue:309 +msgctxt "*/*/*" msgid "Upload quota" msgstr "Upload quota" -#: front/src/components/library/FileUpload.vue:229 +#: front/src/components/library/FileUpload.vue:267 +msgctxt "Content/Library/Help text" msgid "Upload timeout, please try again" msgstr "Upload timeout, please try again" -#: front/src/components/library/FileUpload.vue:100 +#: front/src/components/library/ImportStatusModal.vue:14 +msgctxt "Popup/Import/Message" +msgid "Upload was skipped because a similar one is already available in one of your libraries." +msgstr "Upload was skipped because a similar one is already available in one of your libraries." + +#: front/src/components/library/ImportStatusModal.vue:11 +msgctxt "Popup/Import/Message" +msgid "Upload was successfully processed by the server." +msgstr "Upload was successfully processed by the server." + +#: front/src/components/library/FileUpload.vue:109 +msgctxt "Content/Library/Table" msgid "Uploaded" msgstr "Uploaded" #: front/src/components/library/FileUpload.vue:5 +msgctxt "Content/Library/Tab.Title/Short" msgid "Uploading" msgstr "Uploading" -#: front/src/components/library/FileUpload.vue:103 +#: front/src/components/library/FileUpload.vue:112 +msgctxt "Content/Library/Table" msgid "Uploading…" msgstr "Uploading…" +#: front/src/components/manage/library/LibrariesTable.vue:52 #: front/src/components/manage/moderation/AccountsTable.vue:41 -#: front/src/components/mixins/Translations.vue:37 -#: front/src/views/admin/moderation/AccountsDetail.vue:305 -#: front/src/views/admin/moderation/DomainsDetail.vue:241 -#: front/src/components/mixins/Translations.vue:38 +#: front/src/components/mixins/Translations.vue:75 +#: front/src/views/admin/library/AlbumDetail.vue:258 +#: front/src/views/admin/library/ArtistDetail.vue:246 +#: front/src/views/admin/library/Base.vue:20 +#: front/src/views/admin/library/LibraryDetail.vue:258 +#: front/src/views/admin/library/TrackDetail.vue:310 +#: front/src/views/admin/library/UploadsList.vue:24 +#: front/src/views/admin/moderation/AccountsDetail.vue:349 +#: front/src/views/admin/moderation/DomainsDetail.vue:281 +#: front/src/components/mixins/Translations.vue:76 +msgctxt "*/*/*" msgid "Uploads" msgstr "Uploads" +#: front/src/components/auth/ApplicationForm.vue:16 +msgctxt "Content/Applications/Help Text" +msgid "Use \"urn:ietf:wg:oauth:2.0:oob\" as a redirect URI if your application is not served on the web." +msgstr "Use \"urn:ietf:wg:oauth:2.0:oob\" as a redirect URI if your application is not served on the web." + #: front/src/components/Footer.vue:16 +msgctxt "Footer/*/List item.Link" msgid "Use another instance" msgstr "Use another instance" +#: front/src/components/Home.vue:146 +msgctxt "Content/Home/Link" +msgid "Use Funkwhale on other devices with our apps" +msgstr "Use Funkwhale on other devices with our apps" + +#: front/src/components/moderation/ReportModal.vue:44 +msgctxt "*/*/Field,Help" +msgid "Use this field to provide additional context to the moderator that will handle your report." +msgstr "Use this field to provide additional context to the moderator that will handle your report." + #: front/src/views/auth/PasswordReset.vue:12 +msgctxt "Content/Signup/Paragraph" msgid "Use this form to request a password reset. We will send an email to the given address with instructions to reset your password." -msgstr "" -"Use this form to request a password reset. We will send an email to the " -"given address with instructions to reset your password." +msgstr "Use this form to request a password reset. We will send an email to the given address with instructions to reset your password." + +#: front/src/components/moderation/ReportModal.vue:18 +msgctxt "*/Moderation/Popup,Paragraph" +msgid "Use this form to submit a report to our moderation team." +msgstr "Use this form to submit a report to our moderation team." #: front/src/components/manage/moderation/InstancePolicyForm.vue:111 +msgctxt "Content/Moderation/Help text" msgid "Use this setting to temporarily enable/disable the policy without completely removing it." -msgstr "" -"Use this setting to temporarily enable/disable the policy without completely " -"removing it." +msgstr "Use this setting to temporarily enable/disable the policy without completely removing it." #: front/src/components/manage/users/InvitationsTable.vue:49 +msgctxt "Content/Admin/Table" msgid "Used" msgstr "Used" +#: front/src/components/Home.vue:125 +msgctxt "Content/Home/Header" +msgid "Useful links" +msgstr "Useful links" + #: front/src/views/content/libraries/Detail.vue:26 +msgctxt "Content/Library/Table.Label" msgid "User" msgstr "User" -#: front/src/components/instance/Stats.vue:5 -msgid "User activity" -msgstr "User activity" +#: front/src/components/Home.vue:154 +msgctxt "Content/Home/Link" +msgid "User guides" +msgstr "User guides" -#: front/src/components/library/Album.vue:82 src/components/library/Artist.vue:60 -#: front/src/components/library/Track.vue:168 +#: front/src/views/admin/Settings.vue:88 +msgctxt "Content/Admin/Menu" +msgid "User Interface" +msgstr "User Interface" + +#: front/src/components/library/AlbumDetail.vue:26 +#: front/src/components/library/ArtistDetail.vue:39 +#: front/src/components/library/TrackDetail.vue:79 +msgctxt "Content/*/Title/Noun" msgid "User libraries" msgstr "User libraries" #: front/src/components/library/Radios.vue:20 +msgctxt "Content/Radio/Title" msgid "User radios" msgstr "User radios" -#: front/src/components/auth/Signup.vue:19 +#: front/src/components/auth/SignupForm.vue:15 #: front/src/components/manage/users/UsersTable.vue:37 -#: front/src/components/mixins/Translations.vue:33 -#: front/src/views/admin/moderation/AccountsDetail.vue:85 -#: front/src/components/mixins/Translations.vue:34 +#: front/src/components/mixins/Translations.vue:71 +#: front/src/views/admin/moderation/AccountsDetail.vue:114 +#: front/src/components/mixins/Translations.vue:72 +msgctxt "Content/*/*" msgid "Username" msgstr "Username" -#: front/src/components/auth/Login.vue:15 +#: front/src/components/auth/LoginForm.vue:11 +msgctxt "Content/Login/Input.Label/Noun" msgid "Username or email" msgstr "Username or email" -#: front/src/components/instance/Stats.vue:13 -msgid "users" -msgstr "users" - -#: front/src/components/Sidebar.vue:91 -#: front/src/components/manage/moderation/DomainsTable.vue:39 -#: front/src/components/mixins/Translations.vue:35 src/views/admin/Settings.vue:81 -#: front/src/views/admin/users/Base.vue:5 src/views/admin/users/UsersList.vue:3 -#: front/src/views/admin/users/UsersList.vue:21 -#: front/src/components/mixins/Translations.vue:36 +#: front/src/components/Sidebar.vue:106 +#: front/src/components/manage/moderation/DomainsTable.vue:47 +#: front/src/components/mixins/Translations.vue:73 +#: src/views/admin/Settings.vue:81 front/src/views/admin/users/Base.vue:5 +#: src/views/admin/users/UsersList.vue:21 +#: front/src/components/mixins/Translations.vue:74 +msgctxt "*/*/*/Noun" msgid "Users" msgstr "Users" +#: front/src/components/Home.vue:110 +msgctxt "Content/Home/Paragraph" +msgid "Users on this pod also get %{ quota } of free storage to upload their own content!" +msgstr "Users on this pod also get %{ quota } of free storage to upload their own content!" + #: front/src/components/Footer.vue:29 +msgctxt "Footer/*/Title" msgid "Using Funkwhale" msgstr "Using Funkwhale" #: front/src/components/Footer.vue:13 +msgctxt "Footer/*/List item" msgid "Version %{version}" msgstr "Version %{version}" #: front/src/views/content/libraries/Quota.vue:29 #: front/src/views/content/libraries/Quota.vue:56 #: front/src/views/content/libraries/Quota.vue:82 +msgctxt "Content/Library/Link/Verb" msgid "View files" msgstr "View files" -#: front/src/components/library/Album.vue:31 src/components/library/Artist.vue:35 -#: front/src/components/library/Track.vue:51 +#: front/src/components/library/AlbumBase.vue:95 +#: front/src/components/library/ArtistBase.vue:107 +#: front/src/components/library/TrackBase.vue:111 +#: front/src/views/admin/library/AlbumDetail.vue:48 +#: front/src/views/admin/library/ArtistDetail.vue:46 +#: front/src/views/admin/library/LibraryDetail.vue:34 +#: front/src/views/admin/library/LibraryDetail.vue:45 +#: front/src/views/admin/library/TagDetail.vue:32 +#: front/src/views/admin/library/TrackDetail.vue:47 +#: front/src/views/admin/library/UploadDetail.vue:35 +#: front/src/views/admin/library/UploadDetail.vue:46 +#: front/src/views/admin/moderation/AccountsDetail.vue:37 +#: front/src/views/admin/moderation/AccountsDetail.vue:45 +#: front/src/views/admin/moderation/DomainsDetail.vue:30 +msgctxt "Content/Moderation/Link/Verb" +msgid "View in Django's admin" +msgstr "View in Django's admin" + +#: front/src/components/Home.vue:169 +msgctxt "Content/Home/Link" +msgid "View more…" +msgstr "View more…" + +#: front/src/components/library/AlbumBase.vue:62 +#: front/src/components/library/ArtistBase.vue:73 +#: front/src/components/library/TrackBase.vue:78 #: front/src/components/metadata/ArtistCard.vue:49 #: front/src/components/metadata/ReleaseCard.vue:53 +msgctxt "Content/*/*/Clickable, Verb" msgid "View on MusicBrainz" msgstr "View on MusicBrainz" +#: front/src/components/manage/moderation/ReportCard.vue:124 +msgctxt "Content/Moderation/Link" +msgid "View public page" +msgstr "View public page" + +#: front/src/components/manage/library/LibrariesTable.vue:11 +#: front/src/components/manage/library/LibrariesTable.vue:51 +#: front/src/components/manage/library/UploadsTable.vue:11 +#: front/src/components/manage/library/UploadsTable.vue:63 +#: front/src/views/admin/library/LibraryDetail.vue:94 +#: front/src/views/admin/library/UploadDetail.vue:101 #: front/src/views/content/libraries/Form.vue:18 +msgctxt "*/*/*" msgid "Visibility" msgstr "Visibility" -#: front/src/views/content/libraries/Card.vue:59 -msgid "Visibility: everyone on this instance" -msgstr "Visibility: everyone on this instance" - -#: front/src/views/content/libraries/Card.vue:60 -msgid "Visibility: everyone, including other instances" -msgstr "Visibility: everyone, including other instances" - -#: front/src/views/content/libraries/Card.vue:58 -msgid "Visibility: nobody except me" -msgstr "Visibility: nobody except me" +#: front/src/components/Home.vue:91 +msgctxt "Content/Home/Link" +msgid "Visit funkwhale.audio" +msgstr "Visit funkwhale.audio" -#: front/src/components/library/Album.vue:61 +#: front/src/components/library/AlbumDetail.vue:4 +msgctxt "Content/Album/" msgid "Volume %{ number }" msgstr "Volume %{ number }" -#: front/src/components/playlists/PlaylistModal.vue:20 -msgid "We cannot add the track to a playlist" -msgstr "We cannot add the track to a playlist" +#: front/src/components/federation/FetchButton.vue:69 +msgctxt "Popup/*/Loading.Title" +msgid "Waiting for result…" +msgstr "Waiting for result…" -#: front/src/components/playlists/Form.vue:14 -msgid "We cannot create the playlist" -msgstr "We cannot create the playlist" - -#: front/src/components/auth/Signup.vue:13 -msgid "We cannot create your account" -msgstr "We cannot create your account" - -#: front/src/components/audio/Player.vue:64 -msgid "We cannot load this track" -msgstr "We cannot load this track" +#: front/src/components/auth/Settings.vue:285 +msgctxt "Content/Settings/Error message.Title" +msgid "We cannot delete your account" +msgstr "We cannot delete your account" -#: front/src/components/auth/Login.vue:7 +#: front/src/components/auth/LoginForm.vue:3 +msgctxt "Content/Login/Error message.Title" msgid "We cannot log you in" msgstr "We cannot log you in" -#: front/src/components/auth/Settings.vue:38 -msgid "We cannot save your avatar" -msgstr "We cannot save your avatar" +#: front/src/components/auth/ApplicationForm.vue:3 +msgctxt "Content/*/Error message.Title" +msgid "We cannot save your changes" +msgstr "We cannot save your changes" -#: front/src/components/auth/Settings.vue:14 -msgid "We cannot save your settings" -msgstr "We cannot save your settings" +#: front/src/views/Notifications.vue:39 +msgctxt "Content/Notifications/Paragraph" +msgid "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!" +msgstr "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!" -#: front/src/components/Home.vue:127 -msgid "We do not track you or bother you with ads" -msgstr "We do not track you or bother you with ads" - -#: front/src/components/library/Track.vue:95 -msgid "We don't have any copyright information for this track" -msgstr "We don't have any copyright information for this track" - -#: front/src/components/library/Track.vue:106 -msgid "We don't have any licensing information for this track" -msgstr "We don't have any licensing information for this track" - -#: front/src/components/library/FileUpload.vue:40 +#: front/src/components/library/FileUpload.vue:39 +msgctxt "Content/Library/Link" msgid "We recommend using Picard for that purpose." msgstr "We recommend using Picard for that purpose." -#: front/src/components/Home.vue:7 -msgid "We think listening to music should be simple." -msgstr "We think listening to music should be simple." +#: front/src/components/moderation/ReportModal.vue:35 +msgctxt "*/*/Field,Help" +msgid "We'll use this email if we need to contact you regarding this report." +msgstr "We'll use this email if we need to contact you regarding this report." -#: front/src/components/PageNotFound.vue:10 -msgid "We're sorry, the page you asked for does not exist:" -msgstr "We're sorry, the page you asked for does not exist:" - -#: front/src/components/Home.vue:153 +#: front/src/components/Home.vue:207 +msgctxt "Head/Home/Title" msgid "Welcome" msgstr "Welcome" #: front/src/components/Home.vue:5 -msgid "Welcome on Funkwhale" -msgstr "Welcome to Funkwhale" +msgctxt "Content/Home/Header" +msgid "Welcome to %{ podName }!" +msgstr "Welcome to %{ podName }!" -#: front/src/components/Home.vue:24 -msgid "Why funkwhale?" -msgstr "Why funkwhale?" - -#: front/src/components/audio/EmbedWizard.vue:13 +#: front/src/components/audio/EmbedWizard.vue:23 +msgctxt "Popup/Embed/Input.Label" msgid "Widget height" msgstr "Widget height" -#: front/src/components/audio/EmbedWizard.vue:6 +#: front/src/components/audio/EmbedWizard.vue:16 +msgctxt "Popup/Embed/Input.Label" msgid "Widget width" msgstr "Widget width" -#: front/src/components/Sidebar.vue:118 +#: front/src/components/auth/ApplicationForm.vue:157 +msgctxt "Content/OAuth Scopes/Label/Verb" +msgid "Write" +msgstr "Write" + +#: front/src/components/auth/Authorize.vue:21 +msgctxt "Content/Auth/Label/Noun" +msgid "Write-only" +msgstr "Write-only" + +#: front/src/components/auth/ApplicationForm.vue:158 +msgctxt "Content/OAuth Scopes/Help Text" +msgid "Write-only access to user data" +msgstr "Write-only access to user data" + +#: front/src/components/Sidebar.vue:133 #: front/src/components/manage/moderation/AccountsTable.vue:72 -#: front/src/components/manage/moderation/DomainsTable.vue:58 +#: front/src/components/manage/moderation/DomainsTable.vue:12 +#: front/src/components/manage/moderation/DomainsTable.vue:69 +#: front/src/views/admin/moderation/DomainsDetail.vue:109 +msgctxt "*/*/*" msgid "Yes" msgstr "Yes" #: front/src/components/auth/Logout.vue:8 +msgctxt "Content/Login/Button.Label" msgid "Yes, log me out!" msgstr "Yes, log me out!" #: front/src/views/content/libraries/Form.vue:19 +msgctxt "Content/Library/Paragraph" msgid "You are able to share your library with other people, regardless of its visibility." -msgstr "" -"You are able to share your library with other people, regardless of its " -"visibility." +msgstr "You are able to share your library with other people, regardless of its visibility." -#: front/src/components/library/FileUpload.vue:33 +#: front/src/components/library/FileUpload.vue:32 +msgctxt "Content/Library/Paragraph" msgid "You are about to upload music to your library. Before proceeding, please ensure that:" -msgstr "" -"You are about to upload music to your library. Before proceeding, please " -"ensure that:" +msgstr "You are about to upload music to your library. Before proceeding, please ensure that:" + +#: front/src/components/SetInstanceModal.vue:12 +msgctxt "Popup/Login/Paragraph" +msgid "You are currently connected to <a href=\"%{ url }\" target=\"_blank\">%{ hostname } <i class=\"external icon\"/></a>. If you continue, you will be disconnected from your current instance and all your local data will be deleted." +msgstr "You are currently connected to <a href=\"%{ url }\" target=\"_blank\">%{ hostname } <i class=\"external icon\"/></a>. If you continue, you will be disconnected from your current instance and all your local data will be deleted." + +#: front/src/components/library/ArtistDetail.vue:6 +msgctxt "Content/Artist/Paragraph" +msgid "You are currently hiding content related to this artist." +msgstr "You are currently hiding content related to this artist." #: front/src/components/auth/Logout.vue:7 +msgctxt "Content/Login/Paragraph" msgid "You are currently logged in as %{ username }" msgstr "You are currently logged in as %{ username }" +#: front/src/components/library/FileUpload.vue:35 +msgctxt "Content/Library/List item" +msgid "You are not uploading copyrighted content in a public library, otherwise you may be infringing the law" +msgstr "You are not uploading copyrighted content in a public library, otherwise you may be infringing the law" + +#: front/src/components/SetInstanceModal.vue:98 +msgctxt "*/Instance/Message" +msgid "You are now using the Funkwhale instance at %{ url }" +msgstr "You are now using the Funkwhale instance at %{ url }" + #: front/src/views/content/Home.vue:17 -msgid "You can follow libraries from other users to get access to new music. Public libraries can be followed immediatly, while following a private library requires approval from its owner." -msgstr "" -"You can 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." +msgctxt "Content/Library/Paragraph" +msgid "You can 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." +msgstr "You can 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." -#: front/src/components/Home.vue:133 -msgid "You can invite friends and family to your instance so they can enjoy your music" -msgstr "" -"You can invite friends and family to your instance so they can enjoy your " -"music" +#: front/src/components/moderation/FilterModal.vue:31 +msgctxt "Popup/Moderation/Paragraph" +msgid "You can manage and update your filters any time from your account settings." +msgstr "You can manage and update your filters any time from your account settings." #: front/src/views/auth/EmailConfirm.vue:24 +msgctxt "Content/Signup/Paragraph" msgid "You can now use the service without limitations." msgstr "You can now use the service without limitations." +#: front/src/components/auth/Settings.vue:278 +msgctxt "Content/Settings/Paragraph'" +msgid "You can permanently and irreversibly delete your account and all the associated data using the form below. You will be asked for confirmation." +msgstr "You can permanently and irreversibly delete your account and all the associated data using the form below. You will be asked for confirmation." + #: front/src/components/library/radios/Builder.vue:7 +msgctxt "Content/Radio/Paragraph" msgid "You can use this interface to build your own custom radio, which will play tracks according to your criteria." -msgstr "" -"You can use this interface to build your own custom radio, which will play " -"tracks according to your criteria." +msgstr "You can use this interface to build your own custom radio, which will play tracks according to your criteria." #: front/src/components/auth/SubsonicTokenForm.vue:7 +msgctxt "Content/Settings/Paragraph" msgid "You can use those to enjoy your playlist and music in offline mode, on your smartphone or tablet, for instance." -msgstr "" -"You can use those to enjoy your playlist and music in offline mode, on your " -"smartphone or tablet, for instance." +msgstr "You can use those to enjoy your playlist and music in offline mode, on your smartphone or tablet, for instance." + +#: front/src/components/auth/Settings.vue:202 +msgctxt "Content/Applications/Paragraph" +msgid "You don't have any application connected with your account." +msgstr "You don't have any application connected with your account." -#: front/src/views/admin/moderation/AccountsDetail.vue:46 +#: front/src/components/auth/Settings.vue:261 +msgctxt "Content/Applications/Paragraph" +msgid "You don't have any configured application yet." +msgstr "You don't have any configured applications yet." + +#: front/src/views/admin/moderation/AccountsDetail.vue:75 +msgctxt "Content/Moderation/Card.Title" msgid "You don't have any rule in place for this account." msgstr "You don't have any rule in place for this account." -#: front/src/views/admin/moderation/DomainsDetail.vue:39 +#: front/src/views/admin/moderation/DomainsDetail.vue:67 +msgctxt "Content/Moderation/Card.Title" msgid "You don't have any rule in place for this domain." msgstr "You don't have any rule in place for this domain." -#: front/src/components/Sidebar.vue:158 +#: front/src/components/library/EditForm.vue:52 +msgctxt "Content/Library/Paragraph" +msgid "You don't have the permission to edit this object, but you can suggest changes. Once submitted, suggestions will be reviewed before approval." +msgstr "You don't have the permission to edit this object, but you can suggest changes. Once submitted, suggestions will be reviewed before approval." + +#: front/src/components/Sidebar.vue:175 +msgctxt "Sidebar/Player/Title" msgid "You have a radio playing" msgstr "You have a radio playing" -#: front/src/components/audio/Player.vue:71 +#: front/src/components/audio/Player.vue:69 +msgctxt "Sidebar/Player/Error message.Paragraph" msgid "You may have a connectivity issue." msgstr "You may have a connectivity issue." -#: front/src/App.vue:17 -msgid "You need to select an instance in order to continue" -msgstr "You need to select an instance in order to continue" - -#: front/src/components/auth/Settings.vue:99 +#: front/src/components/auth/Settings.vue:100 +msgctxt "Popup/Settings/List item" msgid "You will be logged out from this session and have to log in with the new one" -msgstr "" -"You will be logged out from this session and have to log in with the new one" +msgstr "You will be logged out from this session and have to log in with the new one" -#: front/src/components/auth/Settings.vue:70 +#: front/src/components/auth/Authorize.vue:51 +msgctxt "Content/Auth/Paragraph" +msgid "You will be redirected to <strong>%{ url }</strong>" +msgstr "You will be redirected to <strong>%{ url }</strong>" + +#: front/src/components/auth/Authorize.vue:49 +msgctxt "Content/Auth/Paragraph" +msgid "You will be shown a code to copy-paste in the application." +msgstr "You will be shown a code to copy-paste in the application." + +#: front/src/components/auth/Settings.vue:71 +msgctxt "Content/Settings/Paragraph" msgid "You will have to update your password on your clients that use this password." -msgstr "" -"You will have to update your password on your clients that use this password." +msgstr "You will have to update your password on your clients that use this password." + +#: front/src/components/moderation/FilterModal.vue:20 +msgctxt "Popup/Moderation/Paragraph" +msgid "You will not see tracks, albums and user activity linked to this artist any more:" +msgstr "You will not see tracks, albums and user activity linked to this artist any more:" + +#: front/src/components/auth/SignupForm.vue:9 +msgctxt "Content/Signup/Form/Paragraph" +msgid "Your account cannot be created." +msgstr "Your account cannot be created." -#: front/src/components/favorites/List.vue:115 +#: front/src/components/auth/Settings.vue:281 +msgctxt "Content/Settings/Paragraph'" +msgid "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." +msgstr "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." + +#: front/src/components/auth/Settings.vue:215 +msgctxt "Content/Settings/Title/Noun" +msgid "Your applications" +msgstr "Your applications" + +#: front/src/components/auth/Settings.vue:38 +msgctxt "Content/Settings/Error message.Title" +msgid "Your avatar cannot be saved" +msgstr "Your avatar cannot be saved" + +#: front/src/components/auth/Settings.vue:527 +msgctxt "*/Auth/Message" +msgid "Your deletion request was submitted, your account and content will be deleted shortly" +msgstr "Your deletion request was submitted, your account and content will be deleted shortly" + +#: front/src/components/library/EditForm.vue:3 +msgctxt "Content/Library/Paragraph" +msgid "Your edit was successfully submitted." +msgstr "Your edit was successfully submitted." + +#: front/src/components/favorites/List.vue:116 +msgctxt "Head/Favorites/Title" msgid "Your Favorites" msgstr "Your Favourites" -#: front/src/components/Home.vue:114 -msgid "Your music, your way" -msgstr "Your music, your way" +#: front/src/views/Notifications.vue:5 +msgctxt "Content/Notifications/Title" +msgid "Your messages" +msgstr "Your messages" -#: front/src/views/Notifications.vue:7 +#: front/src/views/Notifications.vue:69 +msgctxt "Content/Notifications/Title" msgid "Your notifications" msgstr "Your notifications" +#: front/src/components/auth/Settings.vue:76 +msgctxt "Content/Settings/Error message.Title" +msgid "Your password cannot be changed" +msgstr "Your password cannot be changed" + #: front/src/views/auth/PasswordResetConfirm.vue:29 +msgctxt "Content/Signup/Card.Paragraph" msgid "Your password has been updated successfully." msgstr "Your password has been updated successfully." -#: front/src/components/auth/Settings.vue:100 +#: front/src/components/auth/Settings.vue:14 +msgctxt "Content/Settings/Error message.Title" +msgid "Your settings can't be updated" +msgstr "Your settings can't be updated" + +#: front/src/components/auth/Settings.vue:101 +msgctxt "Popup/Settings/List item" msgid "Your Subsonic password will be changed to a new, random one, logging you out from devices that used the old Subsonic password" -msgstr "" -"Your Subsonic password will be changed to a new, random one, logging you out " -"from devices that used the old Subsonic password" +msgstr "Your Subsonic password will be changed to a new, random one, logging you out from devices that used the old Subsonic password" + +#: front/src/entities.js:126 +msgctxt "*/*/*/Noun" +msgid "MusicBrainz ID" +msgstr "MusicBrainz ID" + +#: front/src/main.js:110 +msgctxt "*/Error/Paragraph" +msgid "You sent too many requests and have been rate limited, please try again in %{ delay }" +msgstr "You sent too many requests and have been rate limited, please try again in %{ delay }" + +#: front/src/main.js:113 +msgctxt "*/Error/Paragraph" +msgid "You sent too many requests and have been rate limited, please try again later" +msgstr "You sent too many requests and have been rate limited, please try again later" + +#: front/src/components/library/AlbumBase.vue:208 +msgctxt "Content/Album/Header.Title" +msgid "Album containing %{ count } track, by <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" +msgid_plural "Album containing %{ count } tracks, by <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" +msgstr[0] "Album containing %{ count } track, by <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" +msgstr[1] "Album containing %{ count } tracks, by <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" + +#: front/src/components/audio/PlayButton.vue:246 +msgctxt "*/Queue/Message" +msgid "%{ count } track was added to your queue" +msgid_plural "%{ count } tracks were added to your queue" +msgstr[0] "%{ count } track was added to your queue" +msgstr[1] "%{ count } tracks were added to your queue" diff --git a/front/locales/eo/LC_MESSAGES/app.po b/front/locales/eo/LC_MESSAGES/app.po index 31b480d5924c176acdeb98bb5ae9b0e43ad32468..7b11b54a8fa5acad6b22bb3a19138863196f4bed 100644 --- a/front/locales/eo/LC_MESSAGES/app.po +++ b/front/locales/eo/LC_MESSAGES/app.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: front 1.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-05-16 10:35+0200\n" +"POT-Creation-Date: 2019-10-01 15:15+0200\n" "PO-Revision-Date: 2019-03-19 16:47+0000\n" "Last-Translator: Mélanie Chauvel <perso@hack-libre.org>\n" "Language-Team: none\n" @@ -38,6 +38,53 @@ msgctxt "Content/Auth/Title" msgid "%{ app } wants to access your Funkwhale account" msgstr "Ensaluti en via Funkwhale konto" +#: front/src/components/About.vue:173 src/components/Home.vue:56 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } active user" +msgid_plural "%{ count } active users" +msgstr[0] "%{ count } kanto" +msgstr[1] "%{ count } kantoj" + +#: front/src/components/About.vue:182 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } albums" +msgid_plural "%{ count } albums" +msgstr[0] "%{ count } kanto" +msgstr[1] "%{ count } kantoj" + +#: front/src/components/About.vue:152 +msgctxt "*/*/*" +msgid "%{ count } allowed domains" +msgid_plural "%{ count } allowed domains" +msgstr[0] "" +msgstr[1] "" + +#: front/src/components/About.vue:179 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } artists" +msgid_plural "%{ count } artists" +msgstr[0] "%{ count } kanto" +msgstr[1] "%{ count } kantoj" + +#: front/src/components/About.vue:176 src/components/Home.vue:59 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } hour of music" +msgid_plural "%{ count } hours of music" +msgstr[0] "%{ count } kanto" +msgstr[1] "%{ count } kantoj" + +#: front/src/components/About.vue:188 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } listenings" +msgid_plural "%{ count } listenings" +msgstr[0] "%{ count } kanto" +msgstr[1] "%{ count } kantoj" + #: front/src/components/common/ActionTable.vue:68 msgctxt "Content/*/Paragraph" msgid "%{ count } on %{ total } selected" @@ -45,9 +92,9 @@ msgid_plural "%{ count } on %{ total } selected" msgstr[0] "Unu el %{ total } estas selektita" msgstr[1] "%{ count } el %{ total } estas selektitaj" -#: front/src/components/Sidebar.vue:121 src/components/audio/album/Card.vue:52 +#: front/src/components/Sidebar.vue:125 src/components/audio/album/Card.vue:52 #: front/src/views/content/libraries/Card.vue:40 -#: src/views/content/remote/Card.vue:30 +#: src/views/content/remote/Card.vue:43 #, fuzzy msgctxt "*/*/*" msgid "%{ count } track" @@ -70,7 +117,15 @@ msgid_plural "%{ count } tracks matching combined filters" msgstr[0] "%{count} kanto kongruas kun la tutaj filtriloj" msgstr[1] "%{count} kantoj kongruas kun la tutaj filtriloj" -#: front/src/components/playlists/Card.vue:18 +#: front/src/components/About.vue:185 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } tracks" +msgid_plural "%{ count } tracks" +msgstr[0] "%{ count } kanto" +msgstr[1] "%{ count } kantoj" + +#: front/src/components/playlists/Card.vue:28 msgctxt "Content/*/Card/List item" msgid "%{ count} track" msgid_plural "%{ count } tracks" @@ -114,11 +169,10 @@ msgstr "Profilo de %{username}" #: front/src/components/playlists/PlaylistModal.vue:21 msgctxt "Popup/Playlist/Paragraph" -msgid "" -"<strong>%{ track }</strong> is already in <strong>%{ playlist }</strong>." +msgid "<strong>%{ track }</strong> is already in <strong>%{ playlist }</strong>." msgstr "" -#: front/src/components/audio/artist/Card.vue:41 +#: front/src/components/audio/artist/Card.vue:11 msgctxt "Content/Artist/Card" msgid "1 album" msgid_plural "%{ count } albums" @@ -132,24 +186,44 @@ msgid_plural "%{ count } favorites" msgstr[0] "Unu stelumo" msgstr[1] "%{ count } stelumoj" -#: front/src/components/Home.vue:64 -msgctxt "Content/Home/Title" -msgid "A clean library" -msgstr "Orda muzikejo" +#: front/src/components/audio/artist/Card.vue:15 +#, fuzzy +msgctxt "Content/Artist/Card" +msgid "1 track" +msgid_plural "%{ count } tracks" +msgstr[0] "Aldoni kanton" +msgstr[1] "Aldoni kanton" + +#: front/src/views/Notifications.vue:21 src/views/Notifications.vue:55 +msgctxt "*/*/*" +msgid "30 days" +msgstr "" + +#: front/src/views/Notifications.vue:22 src/views/Notifications.vue:56 +msgctxt "*/*/*" +msgid "60 days" +msgstr "" + +#: front/src/views/Notifications.vue:23 src/views/Notifications.vue:57 +msgctxt "*/*/*" +msgid "90 days" +msgstr "" #: front/src/components/library/FileUpload.vue:264 +#, fuzzy msgctxt "Content/Library/Help text" -msgid "A network error occured while uploading this file" +msgid "A network error occurred while uploading this file" msgstr "Reta eraro okazis dum alÅuto de tiu dosiero" -#: front/src/components/library/EditForm.vue:145 +#: front/src/components/library/EditForm.vue:161 msgctxt "*/*/Placeholder" msgid "A short summary describing your changes." msgstr "Mallonga resumo priskribante viaj ÅanÄoj" #: front/src/components/About.vue:5 -msgctxt "Content/About/Title/Short, Noun" -msgid "About %{ instance }" +#, fuzzy +msgctxt "Content/Home/Header" +msgid "About %{ podName }" msgstr "Pri %{instance}" #: front/src/components/Footer.vue:6 @@ -157,7 +231,7 @@ msgctxt "Footer/About/Title" msgid "About %{instanceName}" msgstr "Pri %{instanceName}" -#: front/src/components/Footer.vue:45 +#: front/src/components/Footer.vue:53 src/components/Home.vue:85 msgctxt "Footer/*/Title/Short" msgid "About Funkwhale" msgstr "Pri Funkwhale" @@ -167,9 +241,16 @@ msgctxt "Footer/About/List item.Link" msgid "About page" msgstr "PripaÄo" -#: front/src/components/About.vue:8 src/components/About.vue:67 -msgctxt "Content/About/Title" -msgid "About this instance" +#: front/src/components/Home.vue:19 +#, fuzzy +msgctxt "Content/Home/Header" +msgid "About this Funkwhale pod" +msgstr "Pri Funkwhale" + +#: front/src/components/About.vue:21 src/components/About.vue:51 +#, fuzzy +msgctxt "Content/About/Header" +msgid "About this pod" msgstr "Pri ĉi tiu instanco" #: front/src/views/content/libraries/Detail.vue:48 @@ -182,94 +263,87 @@ msgctxt "Content/Library/Table/Short" msgid "Accepted" msgstr "Akceptita" -#: front/src/components/auth/SubsonicTokenForm.vue:110 +#: front/src/components/auth/SubsonicTokenForm.vue:117 msgctxt "Content/Settings/Message" msgid "Access disabled" msgstr "Atingo malaktivigas" -#: front/src/components/mixins/Translations.vue:73 -#: front/src/components/mixins/Translations.vue:74 +#: front/src/components/mixins/Translations.vue:85 +#: front/src/components/mixins/Translations.vue:86 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to audio files, libraries, artists, albums and tracks" msgstr "" -#: front/src/components/mixins/Translations.vue:97 -#: front/src/components/mixins/Translations.vue:98 +#: front/src/components/mixins/Translations.vue:109 +#: front/src/components/mixins/Translations.vue:110 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to content filters" msgstr "Elekti filtrilon" -#: front/src/components/mixins/Translations.vue:105 -#: front/src/components/mixins/Translations.vue:106 +#: front/src/components/mixins/Translations.vue:117 +#: front/src/components/mixins/Translations.vue:118 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to edits" msgstr "Atingo malaktivigas" -#: front/src/components/mixins/Translations.vue:69 -#: front/src/components/mixins/Translations.vue:70 +#: front/src/components/mixins/Translations.vue:81 +#: front/src/components/mixins/Translations.vue:82 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to email, username, and profile information" msgstr "" -#: front/src/components/mixins/Translations.vue:77 -#: front/src/components/mixins/Translations.vue:78 +#: front/src/components/mixins/Translations.vue:89 +#: front/src/components/mixins/Translations.vue:90 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to favorites" msgstr "Aldoni al stelumoj" -#: front/src/components/mixins/Translations.vue:85 -#: front/src/components/mixins/Translations.vue:86 +#: front/src/components/mixins/Translations.vue:97 +#: front/src/components/mixins/Translations.vue:98 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to follows" msgstr "" -#: front/src/components/mixins/Translations.vue:81 -#: front/src/components/mixins/Translations.vue:82 +#: front/src/components/mixins/Translations.vue:93 +#: front/src/components/mixins/Translations.vue:94 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to listening history" msgstr "" -#: front/src/components/mixins/Translations.vue:101 -#: front/src/components/mixins/Translations.vue:102 +#: front/src/components/mixins/Translations.vue:113 +#: front/src/components/mixins/Translations.vue:114 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to notifications" msgstr "Viaj sciigoj" -#: front/src/components/mixins/Translations.vue:89 -#: front/src/components/mixins/Translations.vue:90 +#: front/src/components/mixins/Translations.vue:101 +#: front/src/components/mixins/Translations.vue:102 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to playlists" msgstr "Aldoni al ludlisto…" -#: front/src/components/mixins/Translations.vue:93 -#: front/src/components/mixins/Translations.vue:94 +#: front/src/components/mixins/Translations.vue:105 +#: front/src/components/mixins/Translations.vue:106 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to radios" msgstr "Atingo malaktivigas" -#: front/src/components/Home.vue:101 -msgctxt "Content/Home/List item" -msgid "" -"Access your music from a clean interface that focuses on what really matters" -msgstr "Atingas vian muzikon kun pura interfaco ke koncentras Äin sur gravaĵo" - #: front/src/components/manage/library/UploadsTable.vue:67 -#: front/src/components/mixins/Translations.vue:45 +#: front/src/components/mixins/Translations.vue:55 #: front/src/views/admin/library/UploadDetail.vue:175 -#: front/src/components/mixins/Translations.vue:46 +#: front/src/components/mixins/Translations.vue:56 msgctxt "Content/*/*/Noun" msgid "Accessed date" msgstr "Atingo malaktivigas" -#: front/src/views/admin/library/LibraryDetail.vue:104 -#: front/src/views/admin/library/UploadDetail.vue:111 -msgctxt "*/*/*/Noun" -msgid "Account" -msgstr "Kontoj" - #: front/src/components/manage/library/LibrariesTable.vue:49 #: front/src/components/manage/library/UploadsTable.vue:61 -msgctxt "*/*/*" +#: front/src/components/manage/moderation/ReportCard.vue:156 +#: front/src/components/mixins/Report.vue:13 +#: front/src/views/admin/library/LibraryDetail.vue:113 +#: front/src/views/admin/library/UploadDetail.vue:111 +#: front/src/components/mixins/Report.vue:14 +msgctxt "*/*/*/Noun" msgid "Account" msgstr "Kontoj" @@ -283,7 +357,7 @@ msgctxt "Content/Settings/Title" msgid "Account settings" msgstr "Preferoj de via konto" -#: front/src/components/auth/Settings.vue:479 +#: front/src/components/auth/Settings.vue:544 msgctxt "Head/Settings/Title" msgid "Account Settings" msgstr "Preferoj de via konto" @@ -300,7 +374,7 @@ msgstr "Konta retadreso" #: front/src/views/admin/moderation/AccountsList.vue:3 #: front/src/views/admin/moderation/AccountsList.vue:24 -#: front/src/views/admin/moderation/Base.vue:8 +#: front/src/views/admin/moderation/Base.vue:11 msgctxt "*/Moderation/Title" msgid "Accounts" msgstr "Kontoj" @@ -313,29 +387,30 @@ msgstr "Ago" #: front/src/components/common/ActionTable.vue:101 msgctxt "Content/*/Paragraph" msgid "Action %{ action } was launched successfully on %{ count } element" -msgid_plural "" -"Action %{ action } was launched successfully on %{ count } elements" +msgid_plural "Action %{ action } was launched successfully on %{ count } elements" msgstr[0] "Ago %{ action } sukcese komenciÄis por %{ count } ero" msgstr[1] "Agoj %{ action } sukcese komenciÄis por %{ count } eroj" #: front/src/components/common/ActionTable.vue:22 #: front/src/components/library/radios/Builder.vue:65 +#: front/src/components/manage/moderation/ReportCard.vue:210 msgctxt "Content/*/*/Noun" msgid "Actions" msgstr "Agoj" -#: front/src/components/manage/users/UsersTable.vue:53 +#: front/src/components/manage/users/UsersTable.vue:54 msgctxt "Content/Admin/Table" msgid "Active" msgstr "Aktiva" -#: front/src/views/admin/library/AlbumDetail.vue:134 -#: front/src/views/admin/library/ArtistDetail.vue:123 -#: front/src/views/admin/library/LibraryDetail.vue:138 -#: front/src/views/admin/library/TrackDetail.vue:186 +#: front/src/views/admin/library/AlbumDetail.vue:140 +#: front/src/views/admin/library/ArtistDetail.vue:128 +#: front/src/views/admin/library/LibraryDetail.vue:147 +#: front/src/views/admin/library/TagDetail.vue:83 +#: front/src/views/admin/library/TrackDetail.vue:192 #: front/src/views/admin/library/UploadDetail.vue:160 -#: front/src/views/admin/moderation/AccountsDetail.vue:220 -#: front/src/views/admin/moderation/DomainsDetail.vue:136 +#: front/src/views/admin/moderation/AccountsDetail.vue:221 +#: front/src/views/admin/moderation/DomainsDetail.vue:173 msgctxt "Content/Moderation/Title" msgid "Activity" msgstr "Aktivo" @@ -346,7 +421,7 @@ msgctxt "Content/Settings/Dropdown.Label/Noun" msgid "Activity visibility" msgstr "Videblo de Aktivo" -#: front/src/views/admin/moderation/DomainsList.vue:18 +#: front/src/views/admin/moderation/DomainsList.vue:22 msgctxt "Content/Moderation/Button/Verb" msgid "Add" msgstr "Aldoni" @@ -392,7 +467,21 @@ msgctxt "Content/Radio/Paragraph" msgid "Add filters to customize your radio" msgstr "Aldonu filtrilojn por tajlori vian radion" -#: front/src/components/audio/PlayButton.vue:75 +#: front/src/components/manage/moderation/NoteForm.vue:12 +#, fuzzy +msgctxt "Content/Moderation/Button.Label/Verb" +msgid "Add note" +msgstr "Aldoni enhavon" + +#: front/src/components/manage/moderation/DomainsTable.vue:191 +#: front/src/views/admin/moderation/DomainsDetail.vue:46 +#: front/src/views/admin/moderation/DomainsList.vue:18 +#, fuzzy +msgctxt "Content/Moderation/Action/Verb" +msgid "Add to allow-list" +msgstr "Aldoni al ludlisto…" + +#: front/src/components/audio/PlayButton.vue:91 msgctxt "*/Queue/Dropdown/Button/Title" msgid "Add to current queue" msgstr "Aldoni al aktuala atendovico" @@ -424,7 +513,7 @@ msgctxt "Popup/Playlist/Table.Button.Label/Verb" msgid "Add track" msgstr "Aldoni kanton" -#: front/src/components/manage/users/UsersTable.vue:69 +#: front/src/components/manage/users/UsersTable.vue:70 msgctxt "Content/Admin/Table.User role" msgid "Admin" msgstr "Administranto" @@ -434,49 +523,49 @@ msgctxt "Sidebar/Admin/Title/Noun" msgid "Administration" msgstr "Administrejo" -#: front/src/views/admin/library/TrackDetail.vue:107 -msgctxt "*/*/*/Noun" -msgid "Album" -msgstr "Albumo" - -#: front/src/components/audio/SearchBar.vue:26 +#: front/src/components/audio/SearchBar.vue:33 #: src/components/audio/track/Table.vue:9 -#: front/src/components/library/AlbumBase.vue:152 -#: front/src/components/library/ArtistBase.vue:194 +#: front/src/components/library/AlbumBase.vue:170 +#: front/src/components/library/ArtistBase.vue:212 #: front/src/components/manage/library/TracksTable.vue:40 #: front/src/components/metadata/Search.vue:134 +#: src/components/mixins/Report.vue:41 +#: front/src/views/admin/library/TrackDetail.vue:113 #: front/src/views/content/libraries/FilesTable.vue:57 +#: front/src/components/mixins/Report.vue:42 msgctxt "*/*/*" msgid "Album" msgstr "Albumo" -#: front/src/views/admin/library/TrackDetail.vue:128 +#: front/src/views/admin/library/TrackDetail.vue:134 msgctxt "*/*/*/Noun" msgid "Album artist" msgstr "Albumoj je ĉi-tiu artisto" -#: front/src/views/admin/library/AlbumDetail.vue:92 +#: front/src/views/admin/library/AlbumDetail.vue:98 msgctxt "Content/Moderation/Title" msgid "Album data" msgstr "Nomo de albumo" -#: front/src/components/mixins/Translations.vue:51 -#: front/src/components/mixins/Translations.vue:52 +#: front/src/components/mixins/Translations.vue:61 +#: front/src/components/mixins/Translations.vue:62 msgctxt "Content/*/Dropdown/Noun" msgid "Album name" msgstr "Nomo de albumo" #: front/src/components/audio/Search.vue:19 -#: src/components/instance/Stats.vue:48 -#: front/src/components/library/Albums.vue:120 -#: src/components/library/Library.vue:7 +#: src/components/library/Albums.vue:129 +#: front/src/components/library/Library.vue:7 +#: src/components/library/TagDetail.vue:28 #: front/src/components/manage/library/ArtistsTable.vue:41 +#: front/src/components/manage/library/TagsTable.vue:43 #: front/src/views/admin/library/AlbumsList.vue:24 -#: front/src/views/admin/library/ArtistDetail.vue:241 +#: front/src/views/admin/library/ArtistDetail.vue:256 #: front/src/views/admin/library/Base.vue:11 -#: front/src/views/admin/library/LibraryDetail.vue:219 -#: front/src/views/admin/moderation/AccountsDetail.vue:354 -#: front/src/views/admin/moderation/DomainsDetail.vue:264 +#: front/src/views/admin/library/LibraryDetail.vue:238 +#: front/src/views/admin/library/TagDetail.vue:133 +#: front/src/views/admin/moderation/AccountsDetail.vue:366 +#: front/src/views/admin/moderation/DomainsDetail.vue:301 msgctxt "*/*/*" msgid "Albums" msgstr "Albumoj" @@ -490,7 +579,10 @@ msgstr "Albumoj je ĉi-tiu artisto" #: front/src/components/manage/library/LibrariesTable.vue:13 #: front/src/components/manage/library/UploadsTable.vue:13 #: front/src/components/manage/library/UploadsTable.vue:22 +#: front/src/components/manage/moderation/DomainsTable.vue:11 #: front/src/components/manage/users/InvitationsTable.vue:19 +#: front/src/components/moderation/ReportCategoryDropdown.vue:32 +#: front/src/views/admin/moderation/ReportsList.vue:17 #: front/src/views/content/libraries/FilesTable.vue:13 msgctxt "Content/*/Dropdown" msgid "All" @@ -508,40 +600,53 @@ msgctxt "Head/Authorize/Title" msgid "Allow application" msgstr "" +#: front/src/components/About.vue:136 +msgctxt "*/*/*" +msgid "Allow-list" +msgstr "" + +#: front/src/components/About.vue:149 +#, fuzzy +msgctxt "*/*/*" +msgid "Allowed domains" +msgstr "Aldoni domajnon" + #: front/src/components/library/ImportStatusModal.vue:17 msgctxt "Popup/Import/Message" -msgid "" -"An error occured during upload processing. You will find more information " -"below." +msgid "An error occurred during upload processing. You will find more information below." msgstr "" #: front/src/components/playlists/Editor.vue:13 +#, fuzzy msgctxt "Content/Playlist/Error message.Title" -msgid "An error occured while saving your changes" +msgid "An error occurred while saving your changes" msgstr "Eraro okazis dum konservo de viaj ÅanÄoj" #: front/src/components/federation/FetchButton.vue:21 +#, fuzzy msgctxt "Popup/*/Message.Content" -msgid "An error occured while trying to refresh data:" +msgid "An error occurred while trying to refresh data:" msgstr "Eraro okazis dum konservo de viaj ÅanÄoj" #: front/src/components/federation/FetchButton.vue:41 +#, fuzzy msgctxt "*/*/Error" -msgid "An HTTP error occured while contacting the remote server" +msgid "An HTTP error occurred while contacting the remote server" msgstr "Eraro okazis dum konservo de viaj ÅanÄoj" -#: front/src/components/auth/Login.vue:10 -msgctxt "Content/Login/Error message/List item" -msgid "" -"An unknown error happend, this can mean the server is down or cannot be " -"reached" -msgstr "" -"Nekonata eraro okazis, povus signifi ke la servilo paneas aÅ ne estas " -"atingebla" - #: front/src/components/library/ImportStatusModal.vue:145 msgctxt "Popup/Import/Error.Label" -msgid "An unkwown error occured" +msgid "An unknown error occurred" +msgstr "" + +#: front/src/components/About.vue:123 +msgctxt "*/*/*" +msgid "Anonymous access" +msgstr "" + +#: front/src/components/moderation/ReportModal.vue:54 +msgctxt "Popup/Moderation/Error message" +msgid "Anonymous reports are disabled, please sign-in to submit a report." msgstr "" #: front/src/components/auth/Settings.vue:175 @@ -562,9 +667,7 @@ msgstr "" #: front/src/components/auth/ApplicationEdit.vue:16 msgctxt "Content/Application/Paragraph/" -msgid "" -"Application ID and secret are really sensitive values and must be treated " -"like passwords. Do not share those with anyone else." +msgid "Application ID and secret are really sensitive values and must be treated like passwords. Do not share those with anyone else." msgstr "" #: front/src/components/auth/ApplicationEdit.vue:25 @@ -594,29 +697,27 @@ msgctxt "Content/Login/Title" msgid "Are you sure you want to log out?" msgstr "Ĉu vi vere volas elsaluti?" +#: front/src/components/audio/SearchBar.vue:32 +#: src/components/audio/track/Table.vue:8 #: front/src/components/manage/library/AlbumsTable.vue:40 #: front/src/components/manage/library/TracksTable.vue:41 -msgctxt "*/*/*" -msgid "Artist" -msgstr "Artisto" - -#: front/src/components/audio/SearchBar.vue:25 -#: src/components/audio/track/Table.vue:8 #: front/src/components/metadata/Search.vue:130 -#: front/src/views/admin/library/AlbumDetail.vue:108 -#: front/src/views/admin/library/TrackDetail.vue:118 -#: front/src/views/content/libraries/FilesTable.vue:56 +#: src/components/mixins/Report.vue:55 +#: front/src/views/admin/library/AlbumDetail.vue:114 +#: front/src/views/admin/library/TrackDetail.vue:124 +#: front/src/views/content/libraries/FilesTable.vue:56 src/entities.js:12 +#: front/src/components/mixins/Report.vue:56 msgctxt "*/*/*/Noun" msgid "Artist" msgstr "Artisto" -#: front/src/views/admin/library/ArtistDetail.vue:91 +#: front/src/views/admin/library/ArtistDetail.vue:96 msgctxt "Content/Moderation/Title" msgid "Artist data" msgstr "Nomo de artisto" -#: front/src/components/mixins/Translations.vue:52 -#: front/src/components/mixins/Translations.vue:53 +#: front/src/components/mixins/Translations.vue:62 +#: front/src/components/mixins/Translations.vue:63 msgctxt "Content/*/Dropdown/Noun" msgid "Artist name" msgstr "Nomo de artisto" @@ -626,36 +727,36 @@ msgctxt "*/Search/Input.Placeholder" msgid "Artist, album, track…" msgstr "Artisto, albumo, kanto…" +#: front/src/components/audio/Search.vue:10 +#: src/components/library/Artists.vue:117 +#: front/src/components/library/Library.vue:10 +#: front/src/components/library/TagDetail.vue:19 +#: front/src/components/manage/library/TagsTable.vue:42 #: front/src/views/admin/library/ArtistsList.vue:24 #: front/src/views/admin/library/Base.vue:8 -#: front/src/views/admin/library/LibraryDetail.vue:209 -msgctxt "*/*/*" -msgid "Artists" -msgstr "Artistoj" - -#: front/src/components/audio/Search.vue:10 -#: src/components/instance/Stats.vue:42 -#: front/src/components/library/Artists.vue:117 -#: src/components/library/Library.vue:10 -#: front/src/views/admin/moderation/AccountsDetail.vue:346 -#: front/src/views/admin/moderation/DomainsDetail.vue:254 +#: front/src/views/admin/library/LibraryDetail.vue:228 +#: front/src/views/admin/library/TagDetail.vue:123 +#: front/src/views/admin/moderation/AccountsDetail.vue:358 +#: front/src/views/admin/moderation/DomainsDetail.vue:291 msgctxt "*/*/*/Noun" msgid "Artists" msgstr "Artistoj" #: front/src/components/favorites/List.vue:34 -#: src/components/library/Albums.vue:25 -#: front/src/components/library/Artists.vue:25 +#: src/components/library/Albums.vue:29 +#: front/src/components/library/Artists.vue:29 #: src/components/library/Radios.vue:44 #: front/src/components/manage/library/AlbumsTable.vue:21 #: front/src/components/manage/library/ArtistsTable.vue:21 #: front/src/components/manage/library/EditsCardList.vue:39 #: front/src/components/manage/library/LibrariesTable.vue:30 +#: front/src/components/manage/library/TagsTable.vue:21 #: front/src/components/manage/library/TracksTable.vue:21 #: front/src/components/manage/library/UploadsTable.vue:40 #: front/src/components/manage/moderation/AccountsTable.vue:21 -#: front/src/components/manage/moderation/DomainsTable.vue:19 +#: front/src/components/manage/moderation/DomainsTable.vue:27 #: front/src/components/manage/users/UsersTable.vue:19 +#: front/src/views/admin/moderation/ReportsList.vue:44 #: front/src/views/content/libraries/FilesTable.vue:31 #: front/src/views/playlists/List.vue:27 msgctxt "Content/Search/Dropdown" @@ -667,18 +768,24 @@ msgctxt "Content/Signup/Button.Label/Verb" msgid "Ask for a password reset" msgstr "Demandi pasvortrenuligadon" -#: front/src/views/admin/library/AlbumDetail.vue:198 -#: front/src/views/admin/library/ArtistDetail.vue:187 -#: front/src/views/admin/library/LibraryDetail.vue:176 -#: front/src/views/admin/library/TrackDetail.vue:250 +#: front/src/components/manage/moderation/ReportCard.vue:72 +msgctxt "Content/Moderation/*" +msgid "Assigned to" +msgstr "" + +#: front/src/views/admin/library/AlbumDetail.vue:214 +#: front/src/views/admin/library/ArtistDetail.vue:202 +#: front/src/views/admin/library/LibraryDetail.vue:195 +#: front/src/views/admin/library/TagDetail.vue:113 +#: front/src/views/admin/library/TrackDetail.vue:266 #: front/src/views/admin/library/UploadDetail.vue:191 -#: front/src/views/admin/moderation/AccountsDetail.vue:274 -#: front/src/views/admin/moderation/DomainsDetail.vue:202 +#: front/src/views/admin/moderation/AccountsDetail.vue:285 +#: front/src/views/admin/moderation/DomainsDetail.vue:239 msgctxt "Content/Moderation/Title" msgid "Audio content" msgstr "Muzika datumo" -#: front/src/components/ShortcutsModal.vue:55 +#: front/src/components/ShortcutsModal.vue:92 msgctxt "Popup/Keyboard shortcuts/Title" msgid "Audio player shortcuts" msgstr "Fulmoklavoj de muzika ludilo" @@ -721,9 +828,9 @@ msgid "Back to settings" msgstr "Äœisdati agordojn" #: front/src/components/library/TrackDetail.vue:48 -#: front/src/components/mixins/Translations.vue:55 +#: front/src/components/mixins/Translations.vue:67 #: front/src/views/admin/library/UploadDetail.vue:227 -#: front/src/components/mixins/Translations.vue:56 +#: front/src/components/mixins/Translations.vue:68 msgctxt "Content/Track/*/Noun" msgid "Bitrate" msgstr "Bitrapido" @@ -736,13 +843,8 @@ msgstr "Bloki ĉiu" #: front/src/components/manage/moderation/InstancePolicyForm.vue:112 msgctxt "Content/Moderation/Help text" -msgid "" -"Block everything from this account or domain. This will prevent any " -"interaction with the entity, and purge related content (uploads, libraries, " -"follows, etc.)" -msgstr "" -"Bloki ĉiu el tiu konto aÅ domajno. Preventos interagojn kaj malaperigis Äian" -" datumon (dosieroj, muzikejoj, sekvadoj…)" +msgid "Block everything from this account or domain. This will prevent any interaction with the entity, and purge related content (uploads, libraries, follows, etc.)" +msgstr "Bloki ĉiu el tiu konto aÅ domajno. Preventos interagojn kaj malaperigis Äian datumon (dosieroj, muzikejoj, sekvadoj…)" #: front/src/components/Sidebar.vue:18 src/components/library/Library.vue:4 msgctxt "*/Library/*/Verb" @@ -754,6 +856,12 @@ msgctxt "Sidebar/Library/List item.Link/Verb" msgid "Browse library" msgstr "Folii muzikejon" +#: front/src/components/Home.vue:132 +#, fuzzy +msgctxt "Content/Home/Link" +msgid "Browse public content" +msgstr "AktualiÄi datumon de tabelo" + #: front/src/components/library/Albums.vue:4 msgctxt "Content/Album/Title" msgid "Browsing albums" @@ -784,38 +892,40 @@ msgctxt "Content/Album/Card" msgid "By %{ artist }" msgstr "Je %{artist}" -#: front/src/views/content/remote/Card.vue:112 +#: front/src/views/content/remote/Card.vue:125 msgctxt "Popup/Library/Paragraph" msgid "By unfollowing this library, you loose access to its content." msgstr "Se vi malsekvantus tiun muzikejon, vi perdus Äian muzikon." -#: front/src/views/admin/library/AlbumDetail.vue:214 -#: front/src/views/admin/library/ArtistDetail.vue:203 -#: front/src/views/admin/library/LibraryDetail.vue:192 -#: front/src/views/admin/library/TrackDetail.vue:266 +#: front/src/views/admin/library/AlbumDetail.vue:230 +#: front/src/views/admin/library/ArtistDetail.vue:218 +#: front/src/views/admin/library/LibraryDetail.vue:211 +#: front/src/views/admin/library/TrackDetail.vue:282 #: front/src/views/admin/library/UploadDetail.vue:208 -#: front/src/views/admin/moderation/AccountsDetail.vue:290 -#: front/src/views/admin/moderation/DomainsDetail.vue:217 +#: front/src/views/admin/moderation/AccountsDetail.vue:301 +#: front/src/views/admin/moderation/DomainsDetail.vue:254 msgctxt "Content/Moderation/Table.Label/Noun" msgid "Cached size" msgstr "KaÅmemora grando" #: front/src/components/SetInstanceModal.vue:37 #: front/src/components/common/DangerousButton.vue:17 -#: front/src/components/library/AlbumBase.vue:36 -#: front/src/components/library/ArtistBase.vue:47 -#: front/src/components/library/EditForm.vue:95 -#: front/src/components/library/TrackBase.vue:55 +#: front/src/components/library/AlbumBase.vue:37 +#: front/src/components/library/ArtistBase.vue:48 +#: front/src/components/library/EditForm.vue:107 +#: front/src/components/library/TrackBase.vue:53 #: front/src/components/library/radios/Filter.vue:53 #: front/src/components/manage/moderation/InstancePolicyForm.vue:54 #: front/src/components/moderation/FilterModal.vue:39 +#: front/src/components/moderation/ReportModal.vue:59 #: front/src/components/playlists/PlaylistModal.vue:26 #: front/src/components/playlists/PlaylistModal.vue:77 +#: front/src/views/playlists/Detail.vue:62 msgctxt "*/*/Button.Label/Verb" msgid "Cancel" msgstr "Nuligi" -#: front/src/views/content/remote/Card.vue:97 +#: front/src/views/content/remote/Card.vue:110 #, fuzzy msgctxt "Content/Library/Card.Paragraph" msgid "Cancel follow request" @@ -831,6 +941,14 @@ msgctxt "Content/Library/Help text" msgid "Cannot upload this file, ensure it is not too big" msgstr "Ne povis alÅuti tiun dosieron, certigi ne tro grandas" +#: front/src/components/manage/moderation/ReportCard.vue:30 +#: front/src/components/mixins/Translations.vue:42 +#: front/src/components/moderation/ReportCategoryDropdown.vue:2 +#: front/src/components/mixins/Translations.vue:43 +msgctxt "*/*/*" +msgid "Category" +msgstr "" + #: front/src/components/Footer.vue:21 msgctxt "Footer/Settings/Dropdown.Label/Short, Verb" msgid "Change language" @@ -846,6 +964,11 @@ msgctxt "Content/Settings/Button.Label" msgid "Change password" msgstr "ÅœanÄi pasvorton" +#: front/src/components/Footer.vue:37 +msgctxt "Footer/Settings/Dropdown.Label/Short, Verb" +msgid "Change theme" +msgstr "" + #: front/src/views/auth/PasswordResetConfirm.vue:62 msgctxt "*/Signup/Title" msgid "Change your password" @@ -863,28 +986,22 @@ msgstr "Konservis ÅanÄoj" #: front/src/components/auth/Settings.vue:71 msgctxt "Content/Settings/Paragraph'" -msgid "" -"Changing your password will also change your Subsonic API password if you " -"have requested one." -msgstr "" -"ÅœanÄi vian pasvorton ankaÅ ÅanÄos vian Subsonic API pasvorto se vi petis " -"tiun." +msgid "Changing your password will also change your Subsonic API password if you have requested one." +msgstr "ÅœanÄi vian pasvorton ankaÅ ÅanÄos vian Subsonic API pasvorto se vi petis tiun." #: front/src/components/auth/Settings.vue:98 msgctxt "Popup/Settings/Paragraph" msgid "Changing your password will have the following consequences:" msgstr "ÅœanÄi vian pasvorton tiel rezultigos" -#: front/src/components/Footer.vue:40 +#: front/src/components/Footer.vue:48 msgctxt "Footer/*/List item.Link" msgid "Chat room" msgstr "Babilejo" #: front/src/components/auth/ApplicationForm.vue:24 msgctxt "Content/Applications/Paragraph/" -msgid "" -"Checking the parent \"Read\" or \"Write\" scopes implies access to all the " -"corresponding children scopes." +msgid "Checking the parent \"Read\" or \"Write\" scopes implies access to all the corresponding children scopes." msgstr "" #: front/src/components/SetInstanceModal.vue:2 @@ -892,12 +1009,9 @@ msgctxt "Popup/Instance/Title" msgid "Choose your instance" msgstr "Elekti vian instanco" -#: front/src/components/manage/users/InvitationForm.vue:37 -msgctxt "Content/Admin/Button.Label/Verb" -msgid "Clear" -msgstr "Purigi" - #: front/src/components/library/EditForm.vue:75 +#: front/src/components/library/EditForm.vue:88 +#: front/src/components/manage/users/InvitationForm.vue:37 msgctxt "Content/Library/Button.Label" msgid "Clear" msgstr "Purigi" @@ -908,46 +1022,47 @@ msgctxt "*/Playlist/Button.Label/Verb" msgid "Clear playlist" msgstr "Purigi ludliston" -#: front/src/components/audio/Player.vue:642 +#: front/src/components/ShortcutsModal.vue:144 +#, fuzzy +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Clear queue" +msgstr "Purigi vian atendovico" + +#: front/src/components/audio/Player.vue:668 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Clear your queue" msgstr "Purigi vian atendovico" -#: front/src/components/Home.vue:44 -msgctxt "Content/Home/List item/Verb" -msgid "Click once, listen for hours using built-in radios" -msgstr "Alklaki unu foje, aÅskulti enkonstruitajn radiojn dum horoj" - #: front/src/components/mixins/Translations.vue:21 #: front/src/components/mixins/Translations.vue:22 msgctxt "Content/Library/Link.Title" -msgid "" -"Click to display more information about the import process for this upload" +msgid "Click to display more information about the import process for this upload" msgstr "" #: front/src/components/library/FileUpload.vue:82 msgctxt "Content/Library/Paragraph/Call to action" msgid "Click to select files to upload or drag and drop files or directories" -msgstr "" -"Alklaki por selekti elÅutontaj dosieroj, aÅ Åovi kaj demeti dosierojn aÅ " -"dosierujojn" +msgstr "Alklaki por selekti elÅutontaj dosieroj, aÅ Åovi kaj demeti dosierojn aÅ dosierujojn" +#: front/src/components/ShortcutsModal.vue:38 #: front/src/components/federation/FetchButton.vue:85 #: front/src/components/library/ImportStatusModal.vue:79 +#: front/src/components/manage/moderation/InstancePolicyModal.vue:34 msgctxt "*/*/Button.Label/Verb" msgid "Close" msgstr "Fermi" -#: front/src/components/ShortcutsModal.vue:20 -msgctxt "Popup/Keyboard shortcuts/Button.Label/Verb" -msgid "Close" -msgstr "Fermi" - #: front/src/components/federation/FetchButton.vue:88 msgctxt "*/*/Button.Label/Verb" msgid "Close and reload page" msgstr "" +#: front/src/components/About.vue:94 +#, fuzzy +msgctxt "*/*/*/State of registrations" +msgid "Closed" +msgstr "Fermi" + #: front/src/components/manage/users/InvitationForm.vue:26 #: front/src/components/manage/users/InvitationsTable.vue:42 msgctxt "Content/Admin/Table.Label/Noun" @@ -955,8 +1070,9 @@ msgid "Code" msgstr "Kodo" #: front/src/components/audio/album/Card.vue:41 -#: front/src/components/audio/artist/Card.vue:33 -msgctxt "Content/*/Card.Link/Verb" +#: front/src/components/common/CollapseLink.vue:3 +#, fuzzy +msgctxt "*/*/Button,Label" msgid "Collapse" msgstr "Malgrandigi" @@ -980,26 +1096,26 @@ msgctxt "Content/Signup/Form.Label" msgid "Confirmation code" msgstr "Konfirmada kodo" +#: front/src/components/About.vue:67 src/components/Home.vue:65 +msgctxt "Content/Home/Header/Name" +msgid "Contact" +msgstr "" + #: front/src/components/moderation/FilterModal.vue:90 msgctxt "*/Moderation/Message" msgid "Content filter successfully added" msgstr "" -#: front/src/components/mixins/Translations.vue:96 -#: front/src/components/mixins/Translations.vue:97 -msgctxt "Content/OAuth Scopes/Label" -msgid "Content filters" -msgstr "Elekti filtrilon" - #: front/src/components/auth/Settings.vue:116 +#: front/src/components/mixins/Translations.vue:108 +#: front/src/components/mixins/Translations.vue:109 msgctxt "Content/Settings/Title/Noun" msgid "Content filters" msgstr "Elekti filtrilon" #: front/src/components/auth/Settings.vue:119 msgctxt "Content/Settings/Paragraph" -msgid "" -"Content filters help you hide content you don't want to see on the service." +msgid "Content filters help you hide content you don't want to see on the service." msgstr "" #: front/src/components/common/ActionTable.vue:8 @@ -1007,13 +1123,20 @@ msgctxt "Content/*/Button.Help text.Paragraph" msgid "Content have been updated, click refresh to see up-to-date content" msgstr "Äœisdatigis datumon, alklaku aktualigi por vidi novan datumon" -#: front/src/components/Footer.vue:48 +#: front/src/components/About.vue:46 +#, fuzzy +msgctxt "Content/About/Header" +msgid "Contents" +msgstr "Elekti filtrilon" + +#: front/src/components/Footer.vue:56 msgctxt "Footer/*/List item.Link" msgid "Contribute" msgstr "Kontribui" -#: front/src/components/audio/EmbedWizard.vue:19 +#: front/src/components/audio/EmbedWizard.vue:29 #: front/src/components/common/CopyInput.vue:8 +#: front/src/components/forms/PasswordInput.vue:43 msgctxt "*/*/Button.Label/Short, Verb" msgid "Copy" msgstr "Kopii" @@ -1028,14 +1151,14 @@ msgctxt "Content/Auth/Paragraph" msgid "Copy-paste the following code in the application:" msgstr "" -#: front/src/components/audio/EmbedWizard.vue:21 +#: front/src/components/audio/EmbedWizard.vue:31 msgctxt "Popup/Embed/Paragraph" msgid "Copy/paste this code in your website HTML" msgstr "Kopi kaj alglui tiun kodon en via retejo" #: front/src/components/library/TrackDetail.vue:10 -#: front/src/views/admin/library/TrackDetail.vue:153 -msgctxt "Content/Track/Table.Label/Noun" +#: front/src/views/admin/library/TrackDetail.vue:159 src/edits.js:77 +msgctxt "Content/Track/*/Noun" msgid "Copyright" msgstr "Kopirajto" @@ -1049,29 +1172,20 @@ msgctxt "Content/Library/Error message.Title" msgid "Could not fetch remote library" msgstr "Eraro dum skano de malloka muzikejo" -#: front/src/components/Home.vue:80 -msgctxt "Content/Home/List item" -msgid "Covers, lyrics, our goal is to have them all ;)" -msgstr "Reludversioj, kantparoloj, nian celon estas havi ĉiujn ;)" - #: front/src/components/manage/moderation/InstancePolicyForm.vue:58 msgctxt "Content/Moderation/Card.Button.Label/Verb" msgid "Create" msgstr "Krei" -#: front/src/components/auth/Signup.vue:4 +#: front/src/views/auth/Signup.vue:4 msgctxt "Content/Signup/Title" msgid "Create a funkwhale account" msgstr "Krei Funkwhale konton" -#: front/src/components/auth/Settings.vue:220 -msgctxt "Content/Settings/Button.Label" -msgid "Create a new application" -msgstr "Krei novan ludliston" - #: front/src/components/auth/ApplicationNew.vue:8 #: front/src/components/auth/ApplicationNew.vue:41 -msgctxt "Content/Applications/Title" +#: front/src/components/auth/Settings.vue:220 +msgctxt "Content/Settings/Button.Label" msgid "Create a new application" msgstr "Krei novan ludliston" @@ -1085,7 +1199,7 @@ msgctxt "Popup/Playlist/Title/Verb" msgid "Create a new playlist" msgstr "Krei novan ludliston" -#: front/src/components/Sidebar.vue:57 src/components/auth/Login.vue:17 +#: front/src/components/Sidebar.vue:57 src/components/auth/LoginForm.vue:15 msgctxt "*/Signup/Link/Verb" msgid "Create an account" msgstr "Krei konton" @@ -1100,7 +1214,7 @@ msgctxt "Content/Library/Button.Label/Verb" msgid "Create library" msgstr "Krei muzikejon" -#: front/src/components/auth/Signup.vue:53 +#: front/src/components/auth/SignupForm.vue:49 msgctxt "Content/Signup/Button.Label" msgid "Create my account" msgstr "Kreu mian konton" @@ -1125,11 +1239,13 @@ msgstr "Krei vian propran radion" #: front/src/components/manage/library/AlbumsTable.vue:44 #: front/src/components/manage/library/ArtistsTable.vue:43 #: front/src/components/manage/library/LibrariesTable.vue:54 +#: front/src/components/manage/library/TagsTable.vue:45 #: front/src/components/manage/library/TracksTable.vue:44 #: front/src/components/manage/library/UploadsTable.vue:66 +#: front/src/components/manage/moderation/ReportCard.vue:43 #: front/src/components/manage/users/InvitationsTable.vue:40 -#: front/src/components/mixins/Translations.vue:43 -#: front/src/components/mixins/Translations.vue:44 +#: front/src/components/mixins/Translations.vue:53 +#: front/src/components/mixins/Translations.vue:54 msgctxt "Content/*/*/Noun" msgid "Creation date" msgstr "Kreodato" @@ -1139,6 +1255,12 @@ msgctxt "Content/Settings/Title/Noun" msgid "Current avatar" msgstr "Aktuala avataro" +#: front/src/components/admin/SettingsGroup.vue:67 +#, fuzzy +msgctxt "Content/Settings/Title/Noun" +msgid "Current image" +msgstr "Aktuala uzo" + #: front/src/views/content/libraries/DetailArea.vue:4 msgctxt "Content/Library/Title" msgid "Current library" @@ -1154,6 +1276,11 @@ msgctxt "Content/Library/Title" msgid "Current usage" msgstr "Aktuala uzo" +#: front/src/components/Footer.vue:94 +msgctxt "Footer/Settings/Dropdown.Label/Theme name" +msgid "Dark" +msgstr "" + #: front/src/components/federation/FetchButton.vue:53 msgctxt "*/*/Error" msgid "Data returned by the remote server had invalid or missing attributes" @@ -1174,7 +1301,7 @@ msgctxt "Popup/Import/Table.Label/Noun" msgid "Debug information" msgstr "Kantodatumo" -#: front/src/components/ShortcutsModal.vue:75 +#: front/src/components/ShortcutsModal.vue:128 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Decrease volume" msgstr "Malgrandigi volumo" @@ -1186,23 +1313,29 @@ msgstr "Malgrandigi volumo" #: front/src/components/manage/library/AlbumsTable.vue:188 #: front/src/components/manage/library/ArtistsTable.vue:178 #: front/src/components/manage/library/LibrariesTable.vue:205 +#: front/src/components/manage/library/TagsTable.vue:179 #: front/src/components/manage/library/TracksTable.vue:188 #: front/src/components/manage/library/UploadsTable.vue:255 #: front/src/components/manage/moderation/InstancePolicyForm.vue:61 +#: front/src/components/manage/moderation/NotesThread.vue:24 +#: front/src/components/manage/moderation/NotesThread.vue:29 +#: front/src/components/manage/moderation/ReportCard.vue:360 #: front/src/components/manage/users/InvitationsTable.vue:167 -#: front/src/views/admin/library/AlbumDetail.vue:72 -#: front/src/views/admin/library/AlbumDetail.vue:77 -#: front/src/views/admin/library/ArtistDetail.vue:71 +#: front/src/views/admin/library/AlbumDetail.vue:78 +#: front/src/views/admin/library/AlbumDetail.vue:83 #: front/src/views/admin/library/ArtistDetail.vue:76 +#: front/src/views/admin/library/ArtistDetail.vue:81 #: front/src/views/admin/library/LibraryDetail.vue:58 #: front/src/views/admin/library/LibraryDetail.vue:63 -#: front/src/views/admin/library/TrackDetail.vue:71 -#: front/src/views/admin/library/TrackDetail.vue:76 +#: front/src/views/admin/library/TagDetail.vue:41 +#: front/src/views/admin/library/TagDetail.vue:46 +#: front/src/views/admin/library/TrackDetail.vue:77 +#: front/src/views/admin/library/TrackDetail.vue:82 #: front/src/views/admin/library/UploadDetail.vue:65 #: front/src/views/admin/library/UploadDetail.vue:70 #: front/src/views/content/libraries/FilesTable.vue:222 #: front/src/views/content/libraries/Form.vue:29 -#: src/views/playlists/Detail.vue:34 +#: src/views/playlists/Detail.vue:42 msgctxt "*/*/*/Verb" msgid "Delete" msgstr "Forigi" @@ -1227,7 +1360,20 @@ msgctxt "Popup/Moderation/Button.Label/Verb" msgid "Delete moderation rule" msgstr "Forigi moderecan regulon" -#: front/src/views/playlists/Detail.vue:39 +#: front/src/components/auth/Settings.vue:274 +#: src/components/auth/Settings.vue:302 +#, fuzzy +msgctxt "*/*/Button.Label" +msgid "Delete my account" +msgstr "Kreu mian konton" + +#: front/src/components/auth/Settings.vue:297 +#, fuzzy +msgctxt "*/*/Button.Label" +msgid "Delete my account…" +msgstr "Kreu mian konton" + +#: front/src/views/playlists/Detail.vue:47 msgctxt "Popup/Playlist/Button.Label/Verb" msgid "Delete playlist" msgstr "Forigi ludliston" @@ -1237,13 +1383,23 @@ msgctxt "Popup/Radio/Button.Label/Verb" msgid "Delete radio" msgstr "Forigi radion" -#: front/src/views/admin/library/AlbumDetail.vue:73 -#: front/src/views/admin/library/TrackDetail.vue:72 +#: front/src/components/manage/moderation/ReportCard.vue:357 +msgctxt "Content/Moderation/Button/Verb" +msgid "Delete reported object" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:358 +msgctxt "Content/Moderation/Popup/Header" +msgid "Delete reported object?" +msgstr "" + +#: front/src/views/admin/library/AlbumDetail.vue:79 +#: front/src/views/admin/library/TrackDetail.vue:78 msgctxt "Popup/Library/Title" msgid "Delete this album?" msgstr "Forigi tiun muzikejon?" -#: front/src/views/admin/library/ArtistDetail.vue:72 +#: front/src/views/admin/library/ArtistDetail.vue:77 msgctxt "Popup/Library/Title" msgid "Delete this artist?" msgstr "Forigi tiun muzikejon?" @@ -1259,60 +1415,71 @@ msgctxt "Popup/Moderation/Title" msgid "Delete this moderation rule?" msgstr "Forigi tiun moderecan regulon?" +#: front/src/components/manage/moderation/NotesThread.vue:25 +#, fuzzy +msgctxt "Popup/Moderation/Title" +msgid "Delete this note?" +msgstr "Forigi tiun muzikejon?" + #: front/src/components/library/EditCard.vue:94 msgctxt "Popup/Library/Title" msgid "Delete this suggestion?" msgstr "Forigi tiun moderecan regulon?" -#: front/src/views/admin/library/UploadDetail.vue:66 +#: front/src/views/admin/library/TagDetail.vue:42 +#, fuzzy msgctxt "Popup/Library/Title" -msgid "Delete this upload?" +msgid "Delete this tag?" +msgstr "Forigi tiun muzikejon?" + +#: front/src/views/admin/library/UploadDetail.vue:66 +msgctxt "Popup/Library/Title" +msgid "Delete this upload?" msgstr "Forigi tiun muzikejon?" #: front/src/components/favorites/List.vue:35 -#: src/components/library/Albums.vue:26 -#: front/src/components/library/Artists.vue:26 +#: src/components/library/Albums.vue:30 +#: front/src/components/library/Artists.vue:30 #: src/components/library/Radios.vue:47 #: front/src/components/manage/library/AlbumsTable.vue:22 #: front/src/components/manage/library/ArtistsTable.vue:22 #: front/src/components/manage/library/EditsCardList.vue:40 #: front/src/components/manage/library/LibrariesTable.vue:31 +#: front/src/components/manage/library/TagsTable.vue:22 #: front/src/components/manage/library/TracksTable.vue:22 #: front/src/components/manage/library/UploadsTable.vue:41 #: front/src/components/manage/moderation/AccountsTable.vue:22 -#: front/src/components/manage/moderation/DomainsTable.vue:20 +#: front/src/components/manage/moderation/DomainsTable.vue:28 #: front/src/components/manage/users/UsersTable.vue:20 +#: front/src/views/admin/moderation/ReportsList.vue:45 #: front/src/views/content/libraries/FilesTable.vue:32 #: front/src/views/playlists/List.vue:28 msgctxt "Content/Search/Dropdown" msgid "Descending" msgstr "Malfoste" -#: front/src/views/admin/library/LibraryDetail.vue:123 -msgctxt "*/*/*/Noun" -msgid "Description" -msgstr "Resumo" +#: front/src/components/manage/moderation/NoteForm.vue:37 +msgctxt "Content/Moderation/Placeholder" +msgid "Describe what actions have been taken, or any other related updates…" +msgstr "" #: front/src/components/library/radios/Builder.vue:25 +#: front/src/views/admin/library/LibraryDetail.vue:132 #: front/src/views/content/libraries/Form.vue:14 -msgctxt "Content/*/Input.Label/Noun" +msgctxt "*/*/*/Noun" msgid "Description" msgstr "Resumo" #: front/src/views/content/libraries/Card.vue:48 -#: src/views/content/remote/Card.vue:54 +#: src/views/content/remote/Card.vue:67 msgctxt "Content/Library/Card.Button.Label/Noun" msgid "Details" msgstr "Detaloj" -#: front/src/views/admin/moderation/AccountsDetail.vue:491 +#: front/src/views/admin/moderation/AccountsDetail.vue:511 msgctxt "Content/Moderation/Help text" -msgid "" -"Determine how much content the user can upload. Leave empty to use the " -"default value of the instance." -msgstr "" -"Kiom da datumo la uzanto povas elÅuti. Lasi malplene por uzi la defaÅlta " -"valoro de la instanco." +msgid "Determine how much content the user can upload. Leave empty to use the default value of the instance." +msgstr "Kiom da datumo la uzanto povas elÅuti. Lasi malplene por uzi la defaÅlta valoro de la instanco." #: front/src/components/mixins/Translations.vue:8 #: front/src/components/mixins/Translations.vue:9 @@ -1321,38 +1488,51 @@ msgid "Determine the visibility level of your activity" msgstr "Kiu estas la videblo de viaj aktoj" #: front/src/components/auth/Settings.vue:104 -#: front/src/components/auth/SubsonicTokenForm.vue:51 +#: front/src/components/auth/SubsonicTokenForm.vue:56 msgctxt "Popup/Settings/Button.Label" msgid "Disable access" msgstr "Malatingeblu" -#: front/src/components/auth/SubsonicTokenForm.vue:48 +#: front/src/components/auth/SubsonicTokenForm.vue:53 msgctxt "Content/Settings/Button.Label/Verb" msgid "Disable Subsonic access" msgstr "Malatingeblu Subsonic" -#: front/src/components/auth/SubsonicTokenForm.vue:49 +#: front/src/components/auth/SubsonicTokenForm.vue:54 msgctxt "Popup/Settings/Title" msgid "Disable Subsonic API access?" msgstr "Ĉu vi volas malatingeblu la Subsonic API?" +#: front/src/components/About.vue:118 src/components/About.vue:131 +#: front/src/components/About.vue:144 #: front/src/components/manage/moderation/InstancePolicyForm.vue:18 #: front/src/views/admin/moderation/AccountsDetail.vue:157 #: front/src/views/admin/moderation/AccountsDetail.vue:161 -msgctxt "*/*/*" +#, fuzzy +msgctxt "*/*/*/State of feature" msgid "Disabled" msgstr "Malaktiva" -#: front/src/views/admin/library/TrackDetail.vue:145 +#: front/src/views/admin/library/TrackDetail.vue:151 msgctxt "*/*/*/Noun" msgid "Disc number" msgstr "" +#: front/src/components/Home.vue:157 +msgctxt "Content/Home/Link" +msgid "Discover everything you need to know about Funkwhale and its features" +msgstr "" + #: front/src/components/auth/SubsonicTokenForm.vue:13 msgctxt "Content/Settings/Link" msgid "Discover how to use Funkwhale from other apps" msgstr "Malkovri kiel vi povas uzi Funkwhale el aliaj aplikaĵoj" +#: front/src/views/Notifications.vue:45 +msgctxt "Content/Notifications/Button.Label/Verb" +msgid "Discover other ways to help" +msgstr "" + #: front/src/views/admin/moderation/AccountsDetail.vue:132 msgctxt "'Content/*/*/Noun'" msgid "Display name" @@ -1365,12 +1545,14 @@ msgstr "Publike montri" #: front/src/components/manage/moderation/InstancePolicyForm.vue:122 msgctxt "Content/Moderation/Help text" -msgid "" -"Do not download any media file (audio, album cover, account avatar…) from " -"this account or domain. This will purge existing content as well." -msgstr "" -"Neniam alÅuti aÅdovidaĵojn (muzikoj, albumbildoj, avataroj…) el tiu konto aÅ" -" domajno. AnkaÅ forigos aktualajn datumojn." +msgid "Do not download any media file (audio, album cover, account avatar…) from this account or domain. This will purge existing content as well." +msgstr "Neniam alÅuti aÅdovidaĵojn (muzikoj, albumbildoj, avataroj…) el tiu konto aÅ domajno. AnkaÅ forigos aktualajn datumojn." + +#: front/src/views/Notifications.vue:36 +#, fuzzy +msgctxt "Content/Notifications/Header" +msgid "Do you like Funkwhale?" +msgstr "Pri Funkwhale" #: front/src/components/playlists/Editor.vue:51 msgctxt "Popup/Playlist/Title" @@ -1382,7 +1564,7 @@ msgctxt "Modal/*/Title" msgid "Do you want to confirm this action?" msgstr "Ĉu vi volas konfirmi tiun akton?" -#: front/src/views/playlists/Detail.vue:35 +#: front/src/views/playlists/Detail.vue:43 msgctxt "Popup/Playlist/Title/Call to action" msgid "Do you want to delete the playlist \"%{ playlist }\"?" msgstr "Ĉu vi volas forigi la \"%{playlist}\" ludliston?" @@ -1392,6 +1574,12 @@ msgctxt "Popup/Radio/Title" msgid "Do you want to delete the radio \"%{ radio }\"?" msgstr "Ĉu vi volas forigi la \"%{radio}\" radion?" +#: front/src/components/auth/Settings.vue:298 +#, fuzzy +msgctxt "Popup/Settings/Title" +msgid "Do you want to delete your account?" +msgstr "Ĉu vi volas reÅargi vian antaÅan atendovicon?" + #: front/src/components/moderation/FilterModal.vue:3 msgctxt "Popup/Moderation/Title/Verb" msgid "Do you want to hide content from artist \"%{ name }\"?" @@ -1405,7 +1593,13 @@ msgid_plural "Do you want to launch %{ action } on %{ count } elements?" msgstr[0] "Ĉu vi volas komenci %{action} por %{count} ero?" msgstr[1] "Ĉu vi volas komenci %{action} por %{count} eroj?" -#: front/src/components/Sidebar.vue:118 +#: front/src/components/moderation/ReportModal.vue:3 +#, fuzzy +msgctxt "Popup/Moderation/Title/Verb" +msgid "Do you want to report this object?" +msgstr "Ĉu vi volas konfirmi tiun akton?" + +#: front/src/components/Sidebar.vue:122 msgctxt "Sidebar/Queue/Message" msgid "Do you want to restore your previous queue?" msgstr "Ĉu vi volas reÅargi vian antaÅan atendovicon?" @@ -1421,26 +1615,33 @@ msgstr "Dokumentaro" #: front/src/components/manage/library/TracksTable.vue:42 #: front/src/components/manage/library/UploadsTable.vue:62 #: front/src/components/manage/moderation/AccountsTable.vue:40 -#: front/src/components/mixins/Translations.vue:60 -#: front/src/views/admin/library/AlbumDetail.vue:118 -#: front/src/views/admin/library/ArtistDetail.vue:107 -#: front/src/views/admin/library/LibraryDetail.vue:114 -#: front/src/views/admin/library/TrackDetail.vue:170 +#: front/src/components/manage/moderation/ReportCard.vue:169 +#: front/src/components/manage/moderation/ReportCard.vue:179 +#: front/src/components/mixins/Translations.vue:72 +#: front/src/views/admin/library/AlbumDetail.vue:124 +#: front/src/views/admin/library/ArtistDetail.vue:112 +#: front/src/views/admin/library/LibraryDetail.vue:123 +#: front/src/views/admin/library/TrackDetail.vue:176 #: front/src/views/admin/library/UploadDetail.vue:121 #: front/src/views/admin/moderation/AccountsDetail.vue:123 -#: front/src/components/mixins/Translations.vue:61 +#: front/src/components/mixins/Translations.vue:73 msgctxt "Content/Moderation/*/Noun" msgid "Domain" msgstr "Domajno" -#: front/src/views/admin/moderation/Base.vue:5 +#: front/src/views/admin/moderation/Base.vue:8 #: front/src/views/admin/moderation/DomainsList.vue:3 -#: front/src/views/admin/moderation/DomainsList.vue:48 +#: front/src/views/admin/moderation/DomainsList.vue:54 msgctxt "*/Moderation/*/Noun" msgid "Domains" msgstr "Domajnoj" -#: front/src/components/library/TrackBase.vue:39 +#: front/src/views/Notifications.vue:42 +msgctxt "Content/Notifications/Button.Label/Verb" +msgid "Donate" +msgstr "" + +#: front/src/components/library/TrackBase.vue:37 #: front/src/views/admin/library/UploadDetail.vue:58 msgctxt "Content/Track/Link/Verb" msgid "Download" @@ -1453,10 +1654,10 @@ msgstr "Treni kaj guti horizontaloj por reordigi kantojn en la ludlisto" #: front/src/components/audio/track/Table.vue:10 #: front/src/components/library/TrackDetail.vue:30 -#: front/src/components/mixins/Translations.vue:56 +#: front/src/components/mixins/Translations.vue:68 #: front/src/views/admin/library/UploadDetail.vue:238 #: front/src/views/content/libraries/FilesTable.vue:60 -#: front/src/components/mixins/Translations.vue:57 +#: front/src/components/mixins/Translations.vue:69 msgctxt "Content/*/*" msgid "Duration" msgstr "DaÅro" @@ -1466,41 +1667,27 @@ msgctxt "Content/Signup/Message" msgid "E-mail address confirmed" msgstr "Konfirmintas retadreson" -#: front/src/components/Home.vue:88 -msgctxt "Content/Home/Title" -msgid "Easy to use" -msgstr "Facila uzo" - -#: front/src/components/library/AlbumBase.vue:68 -#: front/src/components/library/ArtistBase.vue:79 -#: front/src/components/library/TrackBase.vue:87 +#: front/src/components/auth/Settings.vue:246 +#: src/components/library/AlbumBase.vue:73 +#: front/src/components/library/ArtistBase.vue:84 +#: front/src/components/library/TrackBase.vue:89 #: front/src/components/manage/moderation/InstancePolicyCard.vue:45 #: front/src/components/radios/Card.vue:23 -#: src/views/admin/library/AlbumDetail.vue:65 -#: front/src/views/admin/library/ArtistDetail.vue:64 -#: front/src/views/admin/library/TrackDetail.vue:64 +#: src/views/admin/library/AlbumDetail.vue:71 +#: front/src/views/admin/library/ArtistDetail.vue:69 +#: front/src/views/admin/library/TrackDetail.vue:70 #: front/src/views/content/libraries/Detail.vue:9 #: src/views/playlists/Detail.vue:31 msgctxt "Content/*/Button.Label/Verb" msgid "Edit" msgstr "Redakti" -#: front/src/components/auth/Settings.vue:246 -msgctxt "Content/Settings/Button.Label" -msgid "Edit" -msgstr "Redakti" - #: front/src/components/auth/ApplicationEdit.vue:30 #: front/src/components/auth/ApplicationEdit.vue:75 msgctxt "Content/Applications/Title" msgid "Edit application" msgstr "Eraro kiam ruli akton" -#: front/src/components/About.vue:22 -msgctxt "Content/Settings/Button.Label/Verb" -msgid "Edit instance info" -msgstr "Redakti informoj de instanco" - #: front/src/components/manage/moderation/InstancePolicyForm.vue:3 msgctxt "Content/Moderation/Card.Title/Verb" msgid "Edit moderation rule" @@ -1521,23 +1708,20 @@ msgctxt "Content/*/Title" msgid "Edit this track" msgstr "Ludi tiun kanton" -#: front/src/views/admin/library/AlbumDetail.vue:182 -#: front/src/views/admin/library/ArtistDetail.vue:171 +#: front/src/components/mixins/Translations.vue:116 +#: front/src/views/admin/library/AlbumDetail.vue:198 +#: front/src/views/admin/library/ArtistDetail.vue:186 #: front/src/views/admin/library/Base.vue:5 #: src/views/admin/library/EditsList.vue:24 -#: front/src/views/admin/library/TrackDetail.vue:234 +#: front/src/views/admin/library/TrackDetail.vue:250 +#: front/src/components/mixins/Translations.vue:117 msgctxt "*/Admin/*/Noun" msgid "Edits" msgstr "Redakti" -#: front/src/components/mixins/Translations.vue:104 -#: front/src/components/mixins/Translations.vue:105 -msgctxt "Content/OAuth Scopes/Label" -msgid "Edits" -msgstr "Redakti" - -#: front/src/components/auth/Signup.vue:30 +#: front/src/components/auth/SignupForm.vue:26 #: front/src/components/manage/users/UsersTable.vue:38 +#: front/src/components/moderation/ReportModal.vue:31 msgctxt "Content/*/*/Noun" msgid "Email" msgstr "RetmesaÄo" @@ -1547,50 +1731,60 @@ msgctxt "Content/*/*" msgid "Email address" msgstr "Retadreso" -#: front/src/components/library/AlbumBase.vue:53 -#: front/src/components/library/ArtistBase.vue:64 -#: front/src/components/library/TrackBase.vue:72 +#: front/src/components/library/AlbumBase.vue:54 +#: front/src/components/library/ArtistBase.vue:65 +#: front/src/components/library/TrackBase.vue:70 +#: src/views/playlists/Detail.vue:38 msgctxt "Content/*/Button.Label/Verb" msgid "Embed" msgstr "Enkorpigi" -#: front/src/components/audio/EmbedWizard.vue:20 +#: front/src/components/audio/EmbedWizard.vue:30 msgctxt "Popup/Embed/Input.Label/Noun" msgid "Embed code" msgstr "Enkorpiga kodo" -#: front/src/components/library/AlbumBase.vue:26 +#: front/src/components/library/AlbumBase.vue:27 msgctxt "Popup/Album/Title/Verb" msgid "Embed this album on your website" msgstr "Enkorpigi tiun albumon en via retejo" -#: front/src/components/library/ArtistBase.vue:37 +#: front/src/components/library/ArtistBase.vue:38 msgctxt "Popup/Artist/Title/Verb" msgid "Embed this artist work on your website" msgstr "Enkorpigi tiun kanton en via retejo" -#: front/src/components/library/TrackBase.vue:45 +#: front/src/views/playlists/Detail.vue:52 +#, fuzzy +msgctxt "Popup/Album/Title/Verb" +msgid "Embed this playlist on your website" +msgstr "Enkorpigi tiun albumon en via retejo" + +#: front/src/components/library/TrackBase.vue:43 msgctxt "Popup/Track/Title" msgid "Embed this track on your website" msgstr "Enkorpigi tiun kanton en via retejo" -#: front/src/views/admin/moderation/AccountsDetail.vue:259 -#: front/src/views/admin/moderation/DomainsDetail.vue:187 +#: front/src/views/admin/moderation/AccountsDetail.vue:260 +#: front/src/views/admin/moderation/DomainsDetail.vue:224 msgctxt "Content/Moderation/Table.Label/Noun" msgid "Emitted library follows" msgstr "Sendintaj sekvadoj de muzikejo" -#: front/src/views/admin/moderation/AccountsDetail.vue:243 -#: front/src/views/admin/moderation/DomainsDetail.vue:171 +#: front/src/views/admin/moderation/AccountsDetail.vue:244 +#: front/src/views/admin/moderation/DomainsDetail.vue:208 msgctxt "Content/Moderation/Table.Label/Noun" msgid "Emitted messages" msgstr "Sendintaj mesaÄoj" +#: front/src/components/About.vue:114 src/components/About.vue:127 +#: front/src/components/About.vue:140 #: front/src/components/manage/moderation/InstancePolicyCard.vue:8 #: front/src/components/manage/moderation/InstancePolicyForm.vue:17 #: front/src/views/admin/moderation/AccountsDetail.vue:156 #: front/src/views/admin/moderation/AccountsDetail.vue:160 -msgctxt "*/*/*" +#, fuzzy +msgctxt "*/*/*/State of feature" msgid "Enabled" msgstr "Aktiva" @@ -1609,9 +1803,9 @@ msgctxt "Content/Search/Input.Placeholder" msgid "Enter a radio name…" msgstr "Tajpu nomon de radio…" -#: front/src/components/library/Albums.vue:119 +#: front/src/components/library/Albums.vue:128 msgctxt "Content/Search/Input.Placeholder" -msgid "Enter album title..." +msgid "Enter album title…" msgstr "" #: front/src/components/library/Artists.vue:116 @@ -1625,16 +1819,18 @@ msgid "Enter playlist name…" msgstr "Tajpu nomon de ludlisto…" #: front/src/views/auth/PasswordReset.vue:54 +#, fuzzy msgctxt "Content/Signup/Input.Placeholder" -msgid "Enter the email address binded to your account" +msgid "Enter the email address linked to your account" msgstr "Tajpu la retadreson bindanta al via konto" -#: front/src/components/auth/Signup.vue:103 +#: front/src/components/auth/SignupForm.vue:96 msgctxt "Content/Signup/Form/Placeholder" msgid "Enter your email" msgstr "Tajpu vian retadreson" -#: front/src/components/auth/Signup.vue:98 src/components/auth/Signup.vue:100 +#: front/src/components/auth/SignupForm.vue:91 +#: src/components/auth/SignupForm.vue:93 msgctxt "Content/Signup/Form/Placeholder" msgid "Enter your invitation code (case insensitive)" msgstr "Tajpu vian invitkodon (usklecoblindan)" @@ -1644,12 +1840,12 @@ msgctxt "Content/Library/Input.Placeholder/Verb" msgid "Enter your search query…" msgstr "Tajpu vian serĉon…" -#: front/src/components/auth/Signup.vue:102 +#: front/src/components/auth/SignupForm.vue:95 msgctxt "Content/Signup/Form/Placeholder" msgid "Enter your username" msgstr "Tajpu vian uzantnomon" -#: front/src/components/auth/Login.vue:83 +#: front/src/components/auth/LoginForm.vue:81 msgctxt "Content/Login/Input.Placeholder" msgid "Enter your username or email" msgstr "Tajpu vian uzantnomon aÅ retadreson" @@ -1666,7 +1862,7 @@ msgctxt "Popup/Import/Table.Label/Noun" msgid "Error detail" msgstr "Eraroraportado" -#: front/src/views/admin/Settings.vue:87 +#: front/src/views/admin/Settings.vue:89 msgctxt "Content/Admin/Menu" msgid "Error reporting" msgstr "Eraroraportado" @@ -1722,16 +1918,12 @@ msgctxt "Popup/Moderation/Error message" msgid "Error while fetching application data" msgstr "Eraro kiam krei inviton" -#: front/src/views/admin/moderation/DomainsDetail.vue:118 +#: front/src/views/admin/moderation/DomainsDetail.vue:155 msgctxt "Content/Moderation/Table" msgid "Error while fetching node info" msgstr "Eraro dum skano de malloka instanco" #: front/src/components/admin/SettingsGroup.vue:5 -msgctxt "Content/Settings/Error message.Title" -msgid "Error while saving settings" -msgstr "Eraro kiam konservi preferojn" - #: front/src/components/federation/FetchButton.vue:73 msgctxt "Content/*/Error message.Title" msgid "Error while saving settings" @@ -1742,6 +1934,18 @@ msgctxt "Content/Library/Error message.Title" msgid "Error while submitting edit" msgstr "Eraro kiam konservi preferojn" +#: front/src/components/manage/moderation/NoteForm.vue:3 +#, fuzzy +msgctxt "Content/Moderation/Error message.Title" +msgid "Error while submitting note" +msgstr "Eraro kiam konservi preferojn" + +#: front/src/components/moderation/ReportModal.vue:11 +#, fuzzy +msgctxt "Popup/Moderation/Error message" +msgid "Error while submitting report" +msgstr "Eraro kiam konservi preferojn" + #: front/src/components/mixins/Translations.vue:32 #: front/src/components/mixins/Translations.vue:33 msgctxt "Content/Library/Table/Short" @@ -1776,9 +1980,14 @@ msgctxt "Content/Radio/Table.Label/Verb" msgid "Exclude" msgstr "Ekskluzivi" +#: front/src/components/common/CollapseLink.vue:2 +msgctxt "*/*/Button,Label" +msgid "Expand" +msgstr "" + #: front/src/components/manage/users/InvitationsTable.vue:41 -#: front/src/components/mixins/Translations.vue:49 -#: front/src/components/mixins/Translations.vue:50 +#: front/src/components/mixins/Translations.vue:59 +#: front/src/components/mixins/Translations.vue:60 msgctxt "Content/Admin/Table.Label/Noun" msgid "Expiration date" msgstr "FortempiÄa dato" @@ -1795,15 +2004,8 @@ msgstr "FortempiÄis aÅ uzantiÄis" #: front/src/components/manage/moderation/InstancePolicyForm.vue:110 msgctxt "Content/Moderation/Help text" -msgid "" -"Explain why you're applying this policy. Depending on your instance " -"configuration, this will help you remember why you acted on this account or " -"domain, and may be displayed publicly to help users understand what " -"moderation rules are in place." -msgstr "" -"Ekspliku kial vi aplikas tiun regularon. Depende de la preferado de via " -"instanco, Äi helpos vin memori kial vi agis sur tiu konto aÅ domajno, kaj " -"povus esti afiÅa por helpi uzantoj kompreni kiuj moderecaj reguloj ekzistas." +msgid "Explain why you're applying this policy. Depending on your instance configuration, this will help you remember why you acted on this account or domain, and may be displayed publicly to help users understand what moderation rules are in place." +msgstr "Ekspliku kial vi aplikas tiun regularon. Depende de la preferado de via instanco, Äi helpos vin memori kial vi agis sur tiu konto aÅ domajno, kaj povus esti afiÅa por helpi uzantoj kompreni kiuj moderecaj reguloj ekzistas." #: front/src/components/manage/library/UploadsTable.vue:25 #: front/src/views/content/libraries/FilesTable.vue:16 @@ -1811,31 +2013,28 @@ msgctxt "Content/Library/Dropdown" msgid "Failed" msgstr "Eraris" -#: front/src/views/content/remote/Card.vue:62 +#: front/src/views/content/remote/Card.vue:75 msgctxt "Content/Library/Card.List item/Noun" msgid "Failed tracks:" msgstr "Erarintaj kantoj:" -#: front/src/views/admin/library/AlbumDetail.vue:165 -#: front/src/views/admin/library/ArtistDetail.vue:154 -#: front/src/views/admin/library/TrackDetail.vue:217 +#: front/src/views/admin/library/AlbumDetail.vue:171 +#: front/src/views/admin/library/ArtistDetail.vue:159 +#: front/src/views/admin/library/TrackDetail.vue:223 msgctxt "*/*/*" msgid "Favorited tracks" msgstr "Erarintaj kantoj:" #: front/src/components/Sidebar.vue:66 +#: src/components/mixins/Translations.vue:88 +#: front/src/components/mixins/Translations.vue:89 msgctxt "Sidebar/Favorites/List item.Link/Noun" msgid "Favorites" msgstr "Stelumoj" -#: front/src/components/mixins/Translations.vue:76 -#: front/src/components/mixins/Translations.vue:77 -msgctxt "Content/OAuth Scopes/Label" -msgid "Favorites" -msgstr "Stelumoj" - -#: front/src/views/admin/Settings.vue:84 -msgctxt "Content/Admin/Menu" +#: front/src/components/About.vue:110 src/views/admin/Settings.vue:84 +#, fuzzy +msgctxt "*/*/*" msgid "Federation" msgstr "Federo" @@ -1859,6 +2058,11 @@ msgctxt "Content/Radio/Table.Label/Noun" msgid "Filter name" msgstr "Filtri nomon" +#: front/src/components/Home.vue:118 +msgctxt "Content/Home/Link" +msgid "Find another pod" +msgstr "" + #: front/src/components/manage/library/UploadsTable.vue:26 #: front/src/components/mixins/Translations.vue:36 #: front/src/views/content/libraries/FilesTable.vue:17 @@ -1868,25 +2072,31 @@ msgid "Finished" msgstr "Finanto" #: front/src/components/manage/moderation/AccountsTable.vue:42 -#: front/src/components/manage/moderation/DomainsTable.vue:41 -#: front/src/views/admin/library/AlbumDetail.vue:149 -#: front/src/views/admin/library/ArtistDetail.vue:138 -#: front/src/views/admin/library/LibraryDetail.vue:153 -#: front/src/views/admin/library/TrackDetail.vue:201 +#: front/src/components/manage/moderation/DomainsTable.vue:49 +#: front/src/views/admin/library/AlbumDetail.vue:155 +#: front/src/views/admin/library/ArtistDetail.vue:143 +#: front/src/views/admin/library/LibraryDetail.vue:162 +#: front/src/views/admin/library/TagDetail.vue:98 +#: front/src/views/admin/library/TrackDetail.vue:207 #: front/src/views/admin/library/UploadDetail.vue:167 -#: front/src/views/admin/moderation/AccountsDetail.vue:235 -#: front/src/views/admin/moderation/DomainsDetail.vue:151 +#: front/src/views/admin/moderation/AccountsDetail.vue:236 +#: front/src/views/admin/moderation/DomainsDetail.vue:188 msgctxt "Content/Moderation/Table.Label/Short (Value is a date)" msgid "First seen" msgstr "Unua vido" -#: front/src/components/mixins/Translations.vue:46 -#: front/src/components/mixins/Translations.vue:47 +#: front/src/components/mixins/Translations.vue:56 +#: front/src/components/mixins/Translations.vue:57 msgctxt "Content/Moderation/Dropdown/Noun" msgid "First seen date" msgstr "Dato de unua vido" -#: front/src/views/content/remote/Card.vue:87 +#: front/src/components/ShortcutsModal.vue:64 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Focus searchbar" +msgstr "" + +#: front/src/views/content/remote/Card.vue:100 msgctxt "Content/Library/Card.Button.Label/Verb" msgid "Follow" msgstr "Sekvi" @@ -1896,40 +2106,34 @@ msgctxt "Content/Library/Title/Verb" msgid "Follow remote libraries" msgstr "Sekvi mallokajn muzikejojn" -#: front/src/views/content/remote/Card.vue:92 +#: front/src/views/content/remote/Card.vue:105 msgctxt "Content/Library/Card.Paragraph" msgid "Follow request pending approval" msgstr "Peto da sekvado atendanta konsenton" -#: front/src/components/mixins/Translations.vue:64 -#: front/src/views/admin/library/LibraryDetail.vue:161 +#: front/src/components/manage/library/LibrariesTable.vue:53 +#: front/src/components/mixins/Translations.vue:76 +#: front/src/views/admin/library/LibraryDetail.vue:170 #: front/src/views/content/libraries/Detail.vue:7 -#: front/src/components/mixins/Translations.vue:65 +#: front/src/components/mixins/Translations.vue:77 msgctxt "Content/Federation/*/Noun" msgid "Followers" msgstr "Sekvantoj" -#: front/src/components/manage/library/LibrariesTable.vue:53 -msgctxt "Content/*/*/Noun" -msgid "Followers" -msgstr "Sekvantoj" - -#: front/src/views/content/remote/Card.vue:103 +#: front/src/views/content/remote/Card.vue:116 msgctxt "Content/Library/Card.Paragraph" msgid "Following" msgstr "Sekvata" -#: front/src/components/mixins/Translations.vue:84 -#: front/src/components/mixins/Translations.vue:85 +#: front/src/components/mixins/Translations.vue:96 +#: front/src/components/mixins/Translations.vue:97 msgctxt "Content/OAuth Scopes/Label" msgid "Follows" msgstr "Sekvi" -#: front/src/components/library/TrackBase.vue:17 +#: front/src/components/library/TrackBase.vue:245 msgctxt "Content/Track/Paragraph" -msgid "" -"From album <a class=\"internal\" href=\"%{ albumUrl }\">%{ album }</a> by <a" -" class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" +msgid "From album <a class=\"internal\" href=\"%{ albumUrl }\">%{ album }</a> by <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" msgstr "" #: front/src/components/auth/Authorize.vue:28 @@ -1939,36 +2143,21 @@ msgstr "Malatingeblu" #: front/src/components/auth/SubsonicTokenForm.vue:7 msgctxt "Content/Settings/Paragraph'" -msgid "" -"Funkwhale is compatible with other music players that support the Subsonic " -"API." +msgid "Funkwhale is compatible with other music players that support the Subsonic API." msgstr "Funkwhale funkcias kun aliaj muzikludiloj ke apogas la Subsonic API." -#: front/src/components/Home.vue:90 -msgctxt "Content/Home/Paragraph" -msgid "Funkwhale is dead simple to use." -msgstr "Uzi Funkwhale facilegas." - -#: front/src/components/Home.vue:39 -msgctxt "Content/Home/Paragraph" -msgid "" -"Funkwhale is designed to make it easy to listen to music you like, or to " -"discover new artists." -msgstr "" -"Funkwhale estas dizajna tiel ke estas facile aÅskulti muzikon vi Åatas, aÅ " -"malkovri novajn artistojn." - -#: front/src/components/Home.vue:111 +#: front/src/components/Home.vue:88 +#, fuzzy msgctxt "Content/Home/Paragraph" -msgid "Funkwhale is free and gives you control on your music." +msgid "Funkwhale is free and developped by a friendly community of volunteers." msgstr "Funkwhale estas senpaga kaj lasis vin estri vian muzikon." -#: front/src/components/Home.vue:66 -msgctxt "Content/Home/Paragraph" -msgid "Funkwhale takes care of handling your music" -msgstr "Funkwhale atentas manipuli vian muzikon" +#: front/src/components/About.vue:78 +msgctxt "*/*/*" +msgid "Funkwhale version" +msgstr "" -#: front/src/components/ShortcutsModal.vue:38 +#: front/src/components/ShortcutsModal.vue:56 msgctxt "Popup/Keyboard shortcuts/Title" msgid "General shortcuts" msgstr "Generalaj fulmoklavoj" @@ -1978,35 +2167,17 @@ msgctxt "Content/Admin/Button.Label/Verb" msgid "Get a new invitation" msgstr "Akiri novan inviton" -#: front/src/components/Home.vue:13 -msgctxt "Content/Home/Button.Label/Verb" -msgid "Get me to the library" -msgstr "Iru al la muzikejo" - -#: front/src/components/Home.vue:70 -msgctxt "Content/Home/List item/Verb" -msgid "" -"Get quality metadata about your music thanks to <a href=\"%{ url }\" " -"target=\"_blank\">MusicBrainz</a>" -msgstr "" -"Akiri kvalitaj metadatumoj pri vian muzikon kun <a href=\"%{url}\" " -"target=\"_blank\">MusicBrainz</a>" - #: front/src/views/content/Home.vue:12 src/views/content/Home.vue:19 msgctxt "Content/Library/Button.Label/Verb" msgid "Get started" msgstr "Komencu" -#: front/src/components/Footer.vue:37 +#: front/src/components/Footer.vue:45 +#: src/components/library/ImportStatusModal.vue:45 msgctxt "Footer/*/Link" msgid "Getting help" msgstr "Ricevi helpon" -#: front/src/components/library/ImportStatusModal.vue:45 -msgctxt "Popup/Import/Table.Label/Noun" -msgid "Getting help" -msgstr "Ricevi helpon" - #: front/src/components/common/ActionTable.vue:35 #: front/src/components/common/ActionTable.vue:56 msgctxt "Content/*/Button.Label/Short, Verb" @@ -2018,11 +2189,21 @@ msgctxt "Content/*/Button.Label/Verb" msgid "Go to home page" msgstr "Iru hejme" +#: front/src/views/Notifications.vue:27 src/views/Notifications.vue:61 +msgctxt "Content/Notifications/Button.Label" +msgid "Got it!" +msgstr "" + #: front/src/components/auth/Settings.vue:128 msgctxt "Content/Settings/Title" msgid "Hidden artists" msgstr "Folii artistojn" +#: front/src/components/About.vue:155 +msgctxt "*/*/*/Verb" +msgid "Hide" +msgstr "" + #: front/src/components/manage/moderation/InstancePolicyForm.vue:114 msgctxt "Content/Moderation/Help text" msgid "Hide account or domain content, except from followers." @@ -2033,12 +2214,12 @@ msgctxt "Popup/*/Button.Label" msgid "Hide content" msgstr "Aldoni muzikon" -#: front/src/components/audio/PlayButton.vue:26 +#: front/src/components/audio/PlayButton.vue:31 msgctxt "*/Queue/Dropdown/Button/Label/Short" msgid "Hide content from this artist" msgstr "" -#: front/src/components/audio/Player.vue:643 +#: front/src/components/audio/Player.vue:669 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Hide content from this artist…" msgstr "" @@ -2048,37 +2229,29 @@ msgctxt "Head/Home/Title" msgid "Home" msgstr "Hejmo" -#: front/src/components/instance/Stats.vue:36 -msgctxt "Content/About/Paragraph/Unit" -msgid "Hours of music" -msgstr "Muzikhoroj" - #: front/src/components/auth/SubsonicTokenForm.vue:10 msgctxt "Content/Settings/Paragraph" -msgid "" -"However, accessing Funkwhale from those clients require a separate password " -"you can set below." -msgstr "" -"Tamen, atingi Funkwhale el tiuj aplikaĵo bezonas alian pasvorton ke vi povas" -" difini malsupre." +msgid "However, accessing Funkwhale from those clients require a separate password you can set below." +msgstr "Tamen, atingi Funkwhale el tiuj aplikaĵo bezonas alian pasvorton ke vi povas difini malsupre." #: front/src/views/auth/PasswordResetConfirm.vue:24 +#, fuzzy msgctxt "Content/Signup/Paragraph" -msgid "" -"If the email address provided in the previous step is valid and binded to a " -"user account, you should receive an email with reset instructions in the " -"next couple of minutes." -msgstr "" -"Se la retadreso provizanta dum la antaÅa etapo korektas kaj bindas al " -"uzantkonto, vi baldaÅ ricevus retmesaÄon kun renuligadaj instrukcioj." +msgid "If the email address provided in the previous step is valid and linked to a user account, you should receive an email with reset instructions in the next couple of minutes." +msgstr "Se la retadreso provizanta dum la antaÅa etapo korektas kaj bindas al uzantkonto, vi baldaÅ ricevus retmesaÄon kun renuligadaj instrukcioj." #: front/src/components/auth/Settings.vue:205 msgctxt "Content/Applications/Paragraph" -msgid "" -"If you authorize third-party applications to access your data, those " -"applications will be listed here." +msgid "If you authorize third-party applications to access your data, those applications will be listed here." msgstr "" +#: front/src/components/mixins/Translations.vue:46 +#: front/src/components/mixins/Translations.vue:47 +#, fuzzy +msgctxt "Content/Moderation/Dropdown" +msgid "Illegal content" +msgstr "Aldoni muzikon" + #: front/src/components/library/ImportStatusModal.vue:3 msgctxt "Popup/Import/Title" msgid "Import detail" @@ -2090,14 +2263,10 @@ msgid "Import reference" msgstr "Importfonto" #: front/src/components/manage/library/UploadsTable.vue:20 -#: front/src/views/content/libraries/FilesTable.vue:11 -#: front/src/views/content/libraries/FilesTable.vue:59 -msgctxt "Content/Library/*/Noun" -msgid "Import status" -msgstr "Importstato" - #: front/src/components/manage/library/UploadsTable.vue:64 #: front/src/views/admin/library/UploadDetail.vue:131 +#: front/src/views/content/libraries/FilesTable.vue:11 +#: front/src/views/content/libraries/FilesTable.vue:59 msgctxt "Content/*/*/Noun" msgid "Import status" msgstr "Importstato" @@ -2138,12 +2307,12 @@ msgctxt "Popup/Moderation/List item" msgid "In radio suggestions" msgstr "" -#: front/src/components/manage/users/UsersTable.vue:54 +#: front/src/components/manage/users/UsersTable.vue:55 msgctxt "Content/Admin/Table" msgid "Inactive" msgstr "Malaktiva" -#: front/src/components/ShortcutsModal.vue:71 +#: front/src/components/ShortcutsModal.vue:124 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Increase volume" msgstr "Pliigi volumon" @@ -2162,7 +2331,7 @@ msgctxt "Content/Settings/Dropdown/Short" msgid "Instance" msgstr "Instanca datumo" -#: front/src/views/admin/moderation/DomainsDetail.vue:71 +#: front/src/views/admin/moderation/DomainsDetail.vue:99 msgctxt "Content/Moderation/Title" msgid "Instance data" msgstr "Instanca datumo" @@ -2187,20 +2356,25 @@ msgctxt "Popup/Instance/Input.Label/Noun" msgid "Instance URL" msgstr "Instanca datumo" +#: front/src/components/manage/moderation/ReportCard.vue:92 +#: front/src/components/manage/moderation/ReportCard.vue:203 +msgctxt "Content/*/*/Noun" +msgid "Internal notes" +msgstr "" + #: front/src/components/library/FileUpload.vue:268 msgctxt "Content/Library/Help text" -msgid "" -"Invalid file type, ensure you are uploading an audio file. Supported file " -"extensions are %{ extensions }" -msgstr "" -"Malbona dosiertipo, aserti Äi estas aÅda dosiero. %{ extensions } funkcias" +msgid "Invalid file type, ensure you are uploading an audio file. Supported file extensions are %{ extensions }" +msgstr "Malbona dosiertipo, aserti Äi estas aÅda dosiero. %{ extensions } funkcias" #: front/src/components/library/ImportStatusModal.vue:139 +#: front/src/components/mixins/Translations.vue:45 +#: front/src/components/mixins/Translations.vue:46 msgctxt "Popup/Import/Error.Label" msgid "Invalid metadata" msgstr "" -#: front/src/components/auth/Signup.vue:44 +#: front/src/components/auth/SignupForm.vue:40 #: front/src/components/manage/users/InvitationForm.vue:11 msgctxt "Content/*/Input.Label" msgid "Invitation code" @@ -2212,7 +2386,13 @@ msgctxt "*/Admin/*/Noun" msgid "Invitations" msgstr "Invitoj" -#: front/src/components/Footer.vue:41 +#: front/src/components/manage/moderation/DomainsTable.vue:9 +#: front/src/views/admin/moderation/DomainsDetail.vue:106 +msgctxt "Content/Moderation/*/Adjective" +msgid "Is present on allow-list" +msgstr "" + +#: front/src/components/Footer.vue:49 msgctxt "Footer/*/List item.Link" msgid "Issue tracker" msgstr "Cimspuradilo" @@ -2222,17 +2402,18 @@ msgctxt "Popup/Instance/Error message.Title" msgid "It is not possible to connect to the given URL" msgstr "" -#: front/src/components/Home.vue:50 -msgctxt "Content/Home/List item/Verb" -msgid "Keep a track of your favorite songs" -msgstr "Konservi postsignojn de viaj preferitaj kantoj" +#: front/src/components/mixins/Translations.vue:65 +#: front/src/components/mixins/Translations.vue:66 +msgctxt "*/*/*/Noun" +msgid "Items" +msgstr "" #: front/src/components/Footer.vue:33 src/components/ShortcutsModal.vue:3 msgctxt "*/*/*/Noun" msgid "Keyboard shortcuts" msgstr "Fulmoklavo" -#: front/src/views/admin/moderation/DomainsDetail.vue:161 +#: front/src/views/admin/moderation/DomainsDetail.vue:198 msgctxt "Content/Moderation/Table.Label.Link" msgid "Known accounts" msgstr "Konataj kontoj" @@ -2243,15 +2424,15 @@ msgid "Known libraries" msgstr "Konataj muzikejoj" #: front/src/components/manage/users/UsersTable.vue:41 -#: front/src/components/mixins/Translations.vue:58 -#: front/src/views/admin/moderation/AccountsDetail.vue:205 -#: front/src/components/mixins/Translations.vue:59 +#: front/src/components/mixins/Translations.vue:70 +#: front/src/views/admin/moderation/AccountsDetail.vue:206 +#: front/src/components/mixins/Translations.vue:71 msgctxt "Content/Profile/Table.Label/Short, Noun (Value is a date)" msgid "Last activity" msgstr "Lasta akto" -#: front/src/views/admin/moderation/AccountsDetail.vue:188 -#: front/src/views/admin/moderation/DomainsDetail.vue:78 +#: front/src/views/admin/moderation/AccountsDetail.vue:189 +#: front/src/views/admin/moderation/DomainsDetail.vue:115 msgctxt "Content/*/Table.Label" msgid "Last checked" msgstr "Lasta kontrolado" @@ -2266,13 +2447,13 @@ msgctxt "Content/Moderation/Table.Label/Noun" msgid "Last seen" msgstr "Lasta vidanto" -#: front/src/components/mixins/Translations.vue:47 -#: front/src/components/mixins/Translations.vue:48 +#: front/src/components/mixins/Translations.vue:57 +#: front/src/components/mixins/Translations.vue:58 msgctxt "Content/Moderation/Dropdown/Noun" msgid "Last seen date" msgstr "Dato de lasta vido" -#: front/src/views/content/remote/Card.vue:60 +#: front/src/views/content/remote/Card.vue:73 msgctxt "Content/Library/Card.List item/Noun" msgid "Last update:" msgstr "Lasta Äisdatigo:" @@ -2282,60 +2463,60 @@ msgctxt "Modal/*/Button.Label/Short, Verb" msgid "Launch" msgstr "Lanĉi" -#: front/src/components/Home.vue:10 -msgctxt "Content/Home/Button.Label/Verb" -msgid "Learn more about this instance" -msgstr "Lerni pli pri tiu instanco" +#: front/src/components/Home.vue:35 +#, fuzzy +msgctxt "Content/Home/Link" +msgid "Learn more" +msgstr "Åœargas sekvantojn…" #: front/src/components/manage/users/InvitationForm.vue:58 msgctxt "Content/Admin/Input.Placeholder" msgid "Leave empty for a random code" msgstr "Lasu malplena por hazarda kodo" -#: front/src/components/audio/EmbedWizard.vue:7 +#: front/src/components/audio/EmbedWizard.vue:17 msgctxt "Popup/Embed/Paragraph" msgid "Leave empty for a responsive widget" msgstr "Lasu malplena por adaptiÄema fenestraĵo" -#: front/src/views/admin/library/AlbumDetail.vue:232 -#: front/src/views/admin/library/ArtistDetail.vue:221 -#: front/src/views/admin/library/TrackDetail.vue:284 -#: front/src/views/admin/moderation/AccountsDetail.vue:327 -#: front/src/views/admin/moderation/DomainsDetail.vue:234 -#: front/src/views/content/Base.vue:5 +#: front/src/components/mixins/Translations.vue:64 +#: front/src/components/mixins/Translations.vue:65 msgctxt "*/*/*/Noun" -msgid "Libraries" -msgstr "Muzikejoj" +msgid "Length" +msgstr "" +#: front/src/views/admin/library/AlbumDetail.vue:248 +#: front/src/views/admin/library/ArtistDetail.vue:236 #: front/src/views/admin/library/Base.vue:17 #: front/src/views/admin/library/LibrariesList.vue:24 -msgctxt "*/*/*" +#: front/src/views/admin/library/TrackDetail.vue:300 +#: front/src/views/admin/moderation/AccountsDetail.vue:339 +#: front/src/views/admin/moderation/DomainsDetail.vue:271 +#: front/src/views/content/Base.vue:5 +msgctxt "*/*/*/Noun" msgid "Libraries" msgstr "Muzikejoj" -#: front/src/components/mixins/Translations.vue:72 -#: front/src/components/mixins/Translations.vue:73 +#: front/src/components/mixins/Translations.vue:84 +#: front/src/components/mixins/Translations.vue:85 msgctxt "Content/OAuth Scopes/Label" msgid "Libraries and uploads" msgstr "Äœisdatigas muzikejon" #: front/src/views/content/libraries/Form.vue:2 msgctxt "Content/Library/Paragraph" -msgid "" -"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." -msgstr "" -"Muzikejoj helpas vin organizi kaj diskonigi viajn muzikarojn. Vi povas " -"elÅuti vian propran muzikaron je Funkwhale kaj diskonigi Äin kun viajn " -"amikojn kaj familio." +msgid "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." +msgstr "Muzikejoj helpas vin organizi kaj diskonigi viajn muzikarojn. Vi povas elÅuti vian propran muzikaron je Funkwhale kaj diskonigi Äin kun viajn amikojn kaj familio." -#: front/src/components/Sidebar.vue:85 src/components/instance/Stats.vue:30 +#: front/src/components/Sidebar.vue:85 #: front/src/components/manage/library/UploadsTable.vue:60 -#: front/src/components/manage/users/UsersTable.vue:173 +#: front/src/components/manage/users/UsersTable.vue:174 +#: front/src/components/mixins/Report.vue:77 #: front/src/views/admin/library/UploadDetail.vue:144 -#: front/src/views/admin/moderation/AccountsDetail.vue:498 -msgctxt "*/*/*" +#: front/src/views/admin/moderation/AccountsDetail.vue:518 src/entities.js:132 +#: front/src/components/mixins/Report.vue:78 +#, fuzzy +msgctxt "*/*/*/Noun" msgid "Library" msgstr "Muzikejo" @@ -2366,21 +2547,37 @@ msgstr "Äœisdatigas muzikejon" #: front/src/components/library/TrackDetail.vue:19 #: front/src/components/manage/library/TracksTable.vue:43 -#: front/src/views/admin/library/TrackDetail.vue:159 src/edits.js:61 +#: front/src/views/admin/library/TrackDetail.vue:165 src/edits.js:84 +#: front/src/entities.js:115 msgctxt "Content/*/*/Noun" msgid "License" msgstr "Permesilo" -#: front/src/views/admin/library/AlbumDetail.vue:157 -#: front/src/views/admin/library/ArtistDetail.vue:146 -#: front/src/views/admin/library/TrackDetail.vue:209 -msgctxt "*/*/*/Noun" -msgid "Listenings" +#: front/src/components/Footer.vue:90 +msgctxt "Footer/Settings/Dropdown.Label/Theme name" +msgid "Light" msgstr "" -#: front/src/components/mixins/Translations.vue:80 -#: front/src/components/mixins/Translations.vue:81 -msgctxt "Content/OAuth Scopes/Label" +#: front/src/views/admin/library/AlbumDetail.vue:188 +#: front/src/views/admin/library/ArtistDetail.vue:176 +#: front/src/views/admin/library/LibraryDetail.vue:179 +#: front/src/views/admin/library/TrackDetail.vue:240 +#: front/src/views/admin/moderation/AccountsDetail.vue:269 +msgctxt "Content/Moderation/Table.Label/Noun" +msgid "Linked reports" +msgstr "" + +#: front/src/components/Home.vue:135 +msgctxt "Content/Home/Link" +msgid "Listen to public albums and playlists shared on this pod" +msgstr "" + +#: front/src/components/mixins/Translations.vue:92 +#: front/src/views/admin/library/AlbumDetail.vue:163 +#: front/src/views/admin/library/ArtistDetail.vue:151 +#: front/src/views/admin/library/TrackDetail.vue:215 +#: front/src/components/mixins/Translations.vue:93 +msgctxt "*/*/*/Noun" msgid "Listenings" msgstr "" @@ -2406,7 +2603,7 @@ msgctxt "Content/Library/Paragraph" msgid "Loading library data…" msgstr "Åœargas datumon de muzikejo…" -#: front/src/views/Notifications.vue:19 +#: front/src/views/Notifications.vue:84 msgctxt "Content/Notifications/Paragraph" msgid "Loading notifications…" msgstr "ÅœarÄas sciigojn…" @@ -2431,6 +2628,7 @@ msgstr "ÅœarÄas viajn stelumojn…" #: front/src/components/manage/library/LibrariesTable.vue:75 #: front/src/components/manage/library/TracksTable.vue:71 #: front/src/components/manage/library/UploadsTable.vue:99 +#: front/src/components/manage/moderation/ReportCard.vue:173 #: front/src/views/admin/library/AlbumDetail.vue:19 #: front/src/views/admin/library/ArtistDetail.vue:18 #: front/src/views/admin/library/LibraryDetail.vue:18 @@ -2446,12 +2644,12 @@ msgctxt "Content/Moderation/*/Short, Noun" msgid "Local account" msgstr "Loka konto" -#: front/src/components/auth/Login.vue:84 +#: front/src/components/Home.vue:96 src/views/auth/Login.vue:29 msgctxt "Head/Login/Title" msgid "Log In" msgstr "Ensaluti" -#: front/src/components/auth/Login.vue:4 +#: front/src/views/auth/Login.vue:4 msgctxt "Content/Login/Title/Verb" msgid "Log in to your Funkwhale account" msgstr "Ensaluti en via Funkwhale konto" @@ -2466,7 +2664,7 @@ msgctxt "Sidebar/Profile/List item.Link" msgid "Logged in as %{ username }" msgstr "Elsuta je %{username}" -#: front/src/components/Sidebar.vue:54 src/components/auth/Login.vue:42 +#: front/src/components/Sidebar.vue:54 src/components/auth/LoginForm.vue:41 msgctxt "*/Login/*/Verb" msgid "Login" msgstr "Ensaluti" @@ -2486,35 +2684,40 @@ msgctxt "Content/Library/Paragraph" msgid "Looks like you don't have a library, it's time to create one." msgstr "Åœajni ke vi ne jam havas muzikejon, kreu unu." -#: front/src/components/audio/Player.vue:632 -#: src/components/audio/Player.vue:633 +#: front/src/components/audio/Player.vue:658 +#: src/components/audio/Player.vue:659 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Looping disabled. Click to switch to single-track looping." msgstr "Ripeto malaktivas. Alklaki por aktivi ripetado de la aktuala kanto." -#: front/src/components/audio/Player.vue:635 -#: src/components/audio/Player.vue:636 +#: front/src/components/audio/Player.vue:661 +#: src/components/audio/Player.vue:662 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Looping on a single track. Click to switch to whole queue looping." -msgstr "" -"Ripetas unu kanton. Alklaki por aktivi ripetado de la tutan atendovico." +msgstr "Ripetas unu kanton. Alklaki por aktivi ripetado de la tutan atendovico." -#: front/src/components/audio/Player.vue:638 -#: src/components/audio/Player.vue:639 +#: front/src/components/audio/Player.vue:664 +#: src/components/audio/Player.vue:665 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Looping on whole queue. Click to disable looping." msgstr "Ripetas la tutan atendovicon. Alklaki por malaktivi ripeto." -#: front/src/components/Sidebar.vue:223 +#: front/src/components/Sidebar.vue:230 msgctxt "Sidebar/*/Hidden text" msgid "Main menu" msgstr "Precipa menuo" -#: front/src/views/admin/library/Base.vue:31 +#: front/src/views/admin/library/Base.vue:34 msgctxt "Head/Admin/Title" msgid "Manage library" msgstr "Administri muzikejon" +#: front/src/components/manage/moderation/InstancePolicyModal.vue:8 +#, fuzzy +msgctxt "Popup/Moderation/Title/Verb" +msgid "Manage moderation rules for %{ obj }" +msgstr "Moderece" + #: front/src/components/playlists/PlaylistModal.vue:3 msgctxt "Popup/Playlist/Title/Verb" msgid "Manage playlists" @@ -2530,7 +2733,7 @@ msgctxt "Content/Playlist/Button.Label/Verb" msgid "Manage your playlists" msgstr "Manipuli viajn ludlistojn" -#: front/src/views/Notifications.vue:14 +#: front/src/views/Notifications.vue:79 msgctxt "Content/Notifications/Button.Label/Verb" msgid "Mark all as read" msgstr "Marki ĉiujn legata" @@ -2545,12 +2748,12 @@ msgctxt "Content/Notifications/Button.Tooltip/Verb" msgid "Mark as unread" msgstr "Marki mallegata" -#: front/src/views/admin/moderation/AccountsDetail.vue:310 +#: front/src/views/admin/moderation/AccountsDetail.vue:321 msgctxt "Content/*/*/Unit" msgid "MB" msgstr "Mb" -#: front/src/components/audio/Player.vue:625 +#: front/src/components/audio/Player.vue:651 msgctxt "Sidebar/Player/Hidden text" msgid "Media player" msgstr "AÅdilo" @@ -2560,43 +2763,59 @@ msgctxt "Content/Profile/Paragraph" msgid "Member since %{ date }" msgstr "Aligis je %{date}" +#: front/src/components/manage/moderation/ReportCard.vue:109 +#: front/src/components/moderation/ReportModal.vue:41 +msgctxt "*/*/Field.Label/Noun" +msgid "Message" +msgstr "" + #: front/src/components/Footer.vue:32 msgctxt "Footer/*/List item.Link" msgid "Mobile and desktop apps" msgstr "PoÅkomputilaj kaj komputilaj aplikaĵoj" +#: front/src/components/Home.vue:143 +#, fuzzy +msgctxt "Content/Home/Link" +msgid "Mobile apps" +msgstr "PoÅkomputilaj kaj komputilaj aplikaĵoj" + #: front/src/components/Sidebar.vue:96 -#: src/components/manage/users/UsersTable.vue:177 -#: front/src/views/admin/moderation/AccountsDetail.vue:502 -#: front/src/views/admin/moderation/Base.vue:21 +#: src/components/manage/users/UsersTable.vue:178 +#: front/src/views/admin/Settings.vue:85 +#: front/src/views/admin/moderation/AccountsDetail.vue:522 +#: front/src/views/admin/moderation/Base.vue:43 msgctxt "*/Moderation/*" msgid "Moderation" msgstr "Modereco" #: front/src/views/admin/moderation/AccountsDetail.vue:78 -#: front/src/views/admin/moderation/DomainsDetail.vue:42 +#: front/src/views/admin/moderation/DomainsDetail.vue:70 msgctxt "Content/Moderation/Card.Paragraph" -msgid "" -"Moderation policies help you control how your instance interact with a given" -" domain or account." -msgstr "" -"Moderecaj regularoj helpas vin kontroli kial via instanco interagis kun " -"domajnon aÅ konton." +msgid "Moderation policies help you control how your instance interact with a given domain or account." +msgstr "Moderecaj regularoj helpas vin kontroli kial via instanco interagis kun domajnon aÅ konton." + +#: front/src/components/manage/moderation/InstancePolicyModal.vue:4 +#, fuzzy +msgctxt "Content/Moderation/Button.Label" +msgid "Moderation rules…" +msgstr "Äœisdati moderecan regulon" #: front/src/components/library/EditCard.vue:5 msgctxt "Content/Library/Card/Short" msgid "Modification %{ id }" msgstr "Modifdato" -#: front/src/components/mixins/Translations.vue:48 -#: front/src/components/mixins/Translations.vue:49 +#: front/src/components/mixins/Translations.vue:58 +#: front/src/components/mixins/Translations.vue:59 msgctxt "Content/Playlist/Dropdown/Noun" msgid "Modification date" msgstr "Modifdato" -#: front/src/components/library/AlbumBase.vue:42 -#: front/src/components/library/ArtistBase.vue:53 -#: front/src/components/library/TrackBase.vue:61 +#: front/src/components/audio/PlayButton.vue:100 +#: front/src/components/library/AlbumBase.vue:43 +#: front/src/components/library/ArtistBase.vue:54 +#: front/src/components/library/TrackBase.vue:59 msgctxt "*/*/Button.Label/Noun" msgid "More…" msgstr "" @@ -2606,7 +2825,7 @@ msgctxt "*/*/*/Noun" msgid "Music" msgstr "Muziko" -#: front/src/components/audio/Player.vue:631 +#: front/src/components/audio/Player.vue:657 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Mute" msgstr "Silentigi" @@ -2653,8 +2872,8 @@ msgctxt "Content/Library/Title" msgid "My libraries" msgstr "Miaj muzikejoj" -#: front/src/components/audio/track/Row.vue:40 -#: src/components/library/EditCard.vue:60 +#: front/src/components/About.vue:105 src/components/audio/track/Row.vue:40 +#: front/src/components/library/EditCard.vue:60 #: front/src/components/library/EditForm.vue:70 #: front/src/components/library/TrackDetail.vue:34 #: front/src/components/library/TrackDetail.vue:43 @@ -2664,54 +2883,56 @@ msgstr "Miaj muzikejoj" #: front/src/components/manage/library/TracksTable.vue:76 #: front/src/components/manage/library/UploadsTable.vue:121 #: front/src/components/manage/library/UploadsTable.vue:128 -#: front/src/components/manage/users/UsersTable.vue:61 +#: front/src/components/manage/moderation/ReportCard.vue:78 +#: front/src/components/manage/moderation/ReportCard.vue:87 +#: front/src/components/manage/moderation/ReportCard.vue:193 +#: front/src/components/manage/users/UsersTable.vue:62 #: front/src/views/admin/library/UploadDetail.vue:179 #: front/src/views/admin/library/UploadDetail.vue:214 #: front/src/views/admin/library/UploadDetail.vue:233 #: front/src/views/admin/library/UploadDetail.vue:244 #: front/src/views/admin/library/UploadDetail.vue:257 -#: front/src/views/admin/moderation/AccountsDetail.vue:192 -#: front/src/views/admin/moderation/DomainsDetail.vue:82 +#: front/src/views/admin/moderation/AccountsDetail.vue:193 +#: front/src/views/admin/moderation/DomainsDetail.vue:119 #: front/src/views/content/libraries/FilesTable.vue:95 #: front/src/views/content/libraries/FilesTable.vue:101 msgctxt "*/*/*" msgid "N/A" msgstr "ND" -#: front/src/components/manage/library/LibrariesTable.vue:48 -#: front/src/components/manage/library/UploadsTable.vue:59 -msgctxt "*/*/*" -msgid "Name" -msgstr "Nomo" - #: front/src/components/auth/ApplicationForm.vue:9 -msgctxt "Content/Applications/Input.Label/Noun" -msgid "Name" -msgstr "Nomo" - #: front/src/components/auth/Settings.vue:133 #: front/src/components/manage/library/ArtistsTable.vue:39 +#: front/src/components/manage/library/LibrariesTable.vue:48 +#: front/src/components/manage/library/TagsTable.vue:41 +#: front/src/components/manage/library/UploadsTable.vue:59 #: front/src/components/manage/moderation/AccountsTable.vue:39 -#: front/src/components/manage/moderation/DomainsTable.vue:38 -#: front/src/components/mixins/Translations.vue:53 +#: front/src/components/manage/moderation/DomainsTable.vue:46 +#: front/src/components/mixins/Translations.vue:63 #: front/src/components/playlists/PlaylistModal.vue:45 -#: front/src/views/admin/library/ArtistDetail.vue:98 +#: front/src/views/admin/library/ArtistDetail.vue:103 #: front/src/views/admin/library/LibraryDetail.vue:85 +#: front/src/views/admin/library/TagDetail.vue:68 #: front/src/views/admin/library/UploadDetail.vue:92 -#: front/src/views/admin/moderation/DomainsDetail.vue:97 -#: front/src/views/content/libraries/Form.vue:10 src/edits.js:10 -#: front/src/components/mixins/Translations.vue:54 +#: front/src/views/admin/moderation/DomainsDetail.vue:134 +#: front/src/views/content/libraries/Form.vue:10 src/edits.js:17 +#: front/src/components/mixins/Translations.vue:64 msgctxt "*/*/*/Noun" msgid "Name" msgstr "Nomo" +#: front/src/views/Notifications.vue:24 src/views/Notifications.vue:58 +msgctxt "*/*/*" +msgid "Never" +msgstr "" + #: front/src/components/auth/Settings.vue:88 #: front/src/views/auth/PasswordResetConfirm.vue:14 msgctxt "Content/Settings/Input.Label" msgid "New password" msgstr "Nova pasvorto" -#: front/src/components/Sidebar.vue:173 +#: front/src/components/Sidebar.vue:177 msgctxt "Sidebar/Player/Paragraph" msgid "New tracks will be appended here automatically." msgstr "Novaj kantoj estos aldonataj ĉi-tie aÅtomate." @@ -2721,21 +2942,18 @@ msgctxt "Content/Library/Card.Table.Header/Short" msgid "New value" msgstr "" -#: front/src/components/audio/Player.vue:629 +#: front/src/components/audio/Player.vue:655 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Next track" msgstr "BaldaÅa kanto" -#: front/src/components/Sidebar.vue:130 +#: front/src/components/Sidebar.vue:134 +#: front/src/components/manage/moderation/DomainsTable.vue:13 +#: front/src/views/admin/moderation/DomainsDetail.vue:110 msgctxt "*/*/*" msgid "No" msgstr "Ne" -#: front/src/components/Home.vue:95 -msgctxt "Content/Home/List item" -msgid "No add-ons, no plugins : you only need a web library" -msgstr "Nek aldonaĵoj, nek kromprogramoj: vi nur bezonas retmuzikejo" - #: front/src/components/audio/Search.vue:25 msgctxt "Content/Search/Paragraph" msgid "No album matched your query" @@ -2751,6 +2969,11 @@ msgctxt "Content/Track/Table.Paragraph" msgid "No copyright information available for this track" msgstr "Nenio teksto disponeblas por tiu kanto." +#: front/src/components/About.vue:25 src/components/Home.vue:25 +msgctxt "Content/Home/Paragraph" +msgid "No description available." +msgstr "" + #: front/src/components/library/TrackDetail.vue:25 msgctxt "Content/Track/Table.Paragraph" msgid "No licensing information for this track" @@ -2761,7 +2984,7 @@ msgctxt "Content/Federation/Paragraph" msgid "No matching library." msgstr "Neniu muzikejo korespondas." -#: front/src/views/Notifications.vue:28 +#: front/src/views/Notifications.vue:93 msgctxt "Content/Notifications/Paragraph" msgid "No notification to show." msgstr "Nenio sciigoj jam." @@ -2771,6 +2994,16 @@ msgctxt "Content/*/Paragraph" msgid "No results were found." msgstr "" +#: front/src/components/About.vue:32 +msgctxt "Content/Home/Paragraph" +msgid "No rules available." +msgstr "" + +#: front/src/components/About.vue:39 +msgctxt "Content/Home/Paragraph" +msgid "No terms available." +msgstr "" + #: front/src/components/mixins/Translations.vue:10 #: front/src/components/mixins/Translations.vue:11 msgctxt "Content/Settings/Dropdown" @@ -2787,18 +3020,22 @@ msgctxt "Content/Admin/Table" msgid "Not used" msgstr "Ne uzantata" -#: front/src/components/mixins/Translations.vue:100 -#: front/src/components/mixins/Translations.vue:101 -msgctxt "Content/OAuth Scopes/Label" -msgid "Notifications" -msgstr "Sciigoj" - -#: front/src/components/Sidebar.vue:46 src/views/Notifications.vue:76 +#: front/src/components/Sidebar.vue:46 +#: src/components/mixins/Translations.vue:112 +#: front/src/views/Notifications.vue:151 +#: src/components/mixins/Translations.vue:113 msgctxt "*/Notifications/*" msgid "Notifications" msgstr "Sciigoj" -#: front/src/components/Footer.vue:47 +#: front/src/components/mixins/Translations.vue:47 +#: front/src/components/mixins/Translations.vue:48 +#, fuzzy +msgctxt "Content/Moderation/Dropdown" +msgid "Offensive content" +msgstr "Aldoni muzikon" + +#: front/src/components/Footer.vue:55 msgctxt "Footer/*/List item.Link" msgid "Official website" msgstr "Oficiala retejo" @@ -2813,6 +3050,12 @@ msgctxt "Content/Library/Card.Table.Header/Short" msgid "Old value" msgstr "" +#: front/src/components/About.vue:90 +#, fuzzy +msgctxt "*/*/*/State of registrations" +msgid "Open" +msgstr "Malferma" + #: front/src/components/manage/users/InvitationsTable.vue:20 msgctxt "Content/Admin/Dropdown/Adjective" msgid "Open" @@ -2820,27 +3063,29 @@ msgstr "Malferma" #: front/src/components/library/ImportStatusModal.vue:56 msgctxt "Popup/Import/Table.Label/Value" -msgid "" -"Open a support thread (include the debug information below in your message)" +msgid "Open a support thread (include the debug information below in your message)" msgstr "" -#: front/src/components/library/AlbumBase.vue:73 -#: front/src/components/library/ArtistBase.vue:84 -#: front/src/components/library/TrackBase.vue:92 +#: front/src/components/library/AlbumBase.vue:87 +#: front/src/components/library/ArtistBase.vue:99 +#: front/src/components/library/TagDetail.vue:11 +#: front/src/components/library/TrackBase.vue:103 +#: front/src/components/manage/moderation/ReportCard.vue:128 msgctxt "Content/Moderation/Link" msgid "Open in moderation interface" msgstr "Äœisdati moderecan regulon" -#: front/src/views/admin/library/AlbumDetail.vue:31 -#: front/src/views/admin/library/ArtistDetail.vue:30 -#: front/src/views/admin/library/TrackDetail.vue:30 +#: front/src/views/admin/library/AlbumDetail.vue:37 +#: front/src/views/admin/library/ArtistDetail.vue:35 +#: front/src/views/admin/library/TagDetail.vue:21 +#: front/src/views/admin/library/TrackDetail.vue:36 msgctxt "Content/Moderation/Link/Verb" msgid "Open local profile" msgstr "Malfermi profilon" -#: front/src/views/admin/library/AlbumDetail.vue:46 -#: front/src/views/admin/library/ArtistDetail.vue:45 -#: front/src/views/admin/library/TrackDetail.vue:45 +#: front/src/views/admin/library/AlbumDetail.vue:52 +#: front/src/views/admin/library/ArtistDetail.vue:50 +#: front/src/views/admin/library/TrackDetail.vue:51 msgctxt "Content/Moderation/Link/Verb" msgid "Open on MusicBrainz" msgstr "Vidi en MusicBrainz" @@ -2850,10 +3095,10 @@ msgctxt "Content/Moderation/Link/Verb" msgid "Open profile" msgstr "Malfermi profilon" -#: front/src/views/admin/library/AlbumDetail.vue:54 -#: front/src/views/admin/library/ArtistDetail.vue:53 +#: front/src/views/admin/library/AlbumDetail.vue:60 +#: front/src/views/admin/library/ArtistDetail.vue:58 #: front/src/views/admin/library/LibraryDetail.vue:49 -#: front/src/views/admin/library/TrackDetail.vue:53 +#: front/src/views/admin/library/TrackDetail.vue:59 #: front/src/views/admin/library/UploadDetail.vue:50 #: front/src/views/admin/moderation/AccountsDetail.vue:52 msgctxt "Content/Moderation/Link/Verb" @@ -2874,6 +3119,7 @@ msgstr "AÅ agordi vian regulon" #: src/components/library/Radios.vue:41 #: front/src/components/manage/library/EditsCardList.vue:37 #: front/src/components/manage/users/UsersTable.vue:17 +#: front/src/views/admin/moderation/ReportsList.vue:42 #: front/src/views/playlists/List.vue:25 msgctxt "Content/Search/Dropdown.Label/Noun" msgid "Order" @@ -2881,40 +3127,51 @@ msgstr "Ordo" #: front/src/components/favorites/List.vue:24 #: src/components/library/Albums.vue:15 -#: front/src/components/library/Artists.vue:15 +#: front/src/components/library/Artists.vue:19 #: src/components/library/Radios.vue:33 #: front/src/components/manage/library/AlbumsTable.vue:11 #: front/src/components/manage/library/ArtistsTable.vue:11 #: front/src/components/manage/library/EditsCardList.vue:29 #: front/src/components/manage/library/LibrariesTable.vue:20 +#: front/src/components/manage/library/TagsTable.vue:11 #: front/src/components/manage/library/TracksTable.vue:11 #: front/src/components/manage/library/UploadsTable.vue:30 #: front/src/components/manage/moderation/AccountsTable.vue:11 -#: front/src/components/manage/moderation/DomainsTable.vue:9 +#: front/src/components/manage/moderation/DomainsTable.vue:17 #: front/src/components/manage/users/InvitationsTable.vue:9 #: front/src/components/manage/users/UsersTable.vue:9 +#: front/src/views/admin/moderation/ReportsList.vue:34 #: front/src/views/content/libraries/FilesTable.vue:21 #: front/src/views/playlists/List.vue:17 msgctxt "Content/Search/Dropdown.Label/Noun" msgid "Ordering" msgstr "Ordo" -#: front/src/components/library/Albums.vue:23 -#: src/components/library/Artists.vue:23 +#: front/src/components/library/Albums.vue:27 +#: src/components/library/Artists.vue:27 #: front/src/components/manage/library/AlbumsTable.vue:19 #: front/src/components/manage/library/ArtistsTable.vue:19 #: front/src/components/manage/library/LibrariesTable.vue:28 +#: front/src/components/manage/library/TagsTable.vue:19 #: front/src/components/manage/library/TracksTable.vue:19 #: front/src/components/manage/library/UploadsTable.vue:38 #: front/src/components/manage/moderation/AccountsTable.vue:19 -#: front/src/components/manage/moderation/DomainsTable.vue:17 +#: front/src/components/manage/moderation/DomainsTable.vue:25 #: front/src/views/content/libraries/FilesTable.vue:29 msgctxt "Content/Search/Dropdown.Label/Noun" msgid "Ordering direction" msgstr "Orda direkto" +#: front/src/components/mixins/Translations.vue:48 +#: front/src/components/mixins/Translations.vue:49 +msgctxt "Content/Moderation/Dropdown" +msgid "Other" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:143 #: front/src/components/manage/users/InvitationsTable.vue:38 -msgctxt "Content/Admin/Table.Label" +#, fuzzy +msgctxt "*/*/*" msgid "Owner" msgstr "Proprietulo" @@ -2933,12 +3190,15 @@ msgctxt "Content/*/Hidden text/Noun" msgid "Pagination" msgstr "PaÄeco" -#: front/src/components/auth/Login.vue:33 src/components/auth/Signup.vue:40 -msgctxt "Content/*/Input.Label" +#: front/src/components/auth/LoginForm.vue:32 +#: src/components/auth/Settings.vue:291 +#: front/src/components/auth/SignupForm.vue:36 +#, fuzzy +msgctxt "*/*/*" msgid "Password" msgstr "Pasvorto" -#: front/src/components/auth/SubsonicTokenForm.vue:94 +#: front/src/components/auth/SubsonicTokenForm.vue:100 msgctxt "Content/Settings/Message" msgid "Password updated" msgstr "Pasvorto aktuliginta" @@ -2948,12 +3208,12 @@ msgctxt "Content/Signup/Card.Title" msgid "Password updated successfully" msgstr "Pasvorto sukcese aktualiginta" -#: front/src/components/audio/Player.vue:628 +#: front/src/components/audio/Player.vue:654 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Pause track" msgstr "PaÅzi kanton" -#: front/src/components/ShortcutsModal.vue:59 +#: front/src/components/ShortcutsModal.vue:96 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Pause/play the current track" msgstr "PaÅzi/ludi la aktualan kanton" @@ -2982,7 +3242,7 @@ msgctxt "Content/Library/Label" msgid "Pending files" msgstr "Atendantaj dosieroj" -#: front/src/components/Sidebar.vue:225 +#: front/src/components/Sidebar.vue:232 msgctxt "Sidebar/Notifications/Hidden text" msgid "Pending follow requests" msgstr "Atendantaj petoj da sekvado" @@ -2993,84 +3253,76 @@ msgctxt "Content/Admin/*/Noun" msgid "Pending review" msgstr "Atendantaj dosieroj" -#: front/src/components/Sidebar.vue:226 +#: front/src/components/Sidebar.vue:233 msgctxt "Sidebar/Moderation/Hidden text" msgid "Pending review edits" msgstr "Atendantaj dosieroj" +#: front/src/components/auth/Settings.vue:176 #: front/src/components/manage/users/UsersTable.vue:42 #: front/src/views/admin/moderation/AccountsDetail.vue:166 -msgctxt "Content/Admin/Table.Label/Noun" -msgid "Permissions" -msgstr "Rajtoj" - -#: front/src/components/auth/Settings.vue:176 msgctxt "Content/*/*/Noun" msgid "Permissions" msgstr "Rajtoj" #: front/src/components/audio/PlayButton.vue:9 -#: front/src/components/library/TrackBase.vue:26 +#: front/src/components/library/TrackBase.vue:24 msgctxt "*/Queue/Button.Label/Short, Verb" msgid "Play" msgstr "Ludi" #: front/src/components/audio/album/Card.vue:48 -#: front/src/components/audio/artist/Card.vue:44 -#: front/src/components/library/AlbumBase.vue:20 +#: front/src/components/library/AlbumBase.vue:21 #: front/src/components/library/AlbumDetail.vue:11 #: src/views/playlists/Detail.vue:24 msgctxt "Content/Queue/Button.Label/Short, Verb" msgid "Play all" msgstr "Ludi ĉiu" -#: front/src/components/library/ArtistBase.vue:31 +#: front/src/components/library/ArtistBase.vue:32 msgctxt "Content/Artist/Button.Label/Verb" msgid "Play all albums" msgstr "Ludi ĉiuj albumoj" -#: front/src/components/audio/PlayButton.vue:76 +#: front/src/components/audio/PlayButton.vue:92 msgctxt "*/Queue/Dropdown/Button/Title" msgid "Play next" msgstr "Ludi baldaÅe" -#: front/src/components/ShortcutsModal.vue:67 +#: front/src/components/ShortcutsModal.vue:120 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Play next track" msgstr "Ludi sekvan kanton" -#: front/src/components/audio/PlayButton.vue:74 +#: front/src/components/audio/PlayButton.vue:90 msgctxt "*/Queue/Dropdown/Button/Title" msgid "Play now" msgstr "Ludi tuj" -#: front/src/components/ShortcutsModal.vue:63 +#: front/src/components/ShortcutsModal.vue:116 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Play previous track" msgstr "Ludi antaÅa kanto" -#: front/src/components/audio/PlayButton.vue:77 +#: front/src/components/audio/PlayButton.vue:93 msgctxt "*/Queue/Dropdown/Button/Title" msgid "Play similar songs" msgstr "" -#: front/src/components/Sidebar.vue:224 +#: front/src/components/Sidebar.vue:231 msgctxt "Sidebar/Player/Hidden text" msgid "Play this track" msgstr "Ludi tiun kanton" -#: front/src/components/audio/Player.vue:627 +#: front/src/components/audio/Player.vue:653 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Play track" msgstr "Ludi kanton" -#: front/src/components/audio/PlayButton.vue:82 -msgctxt "*/Queue/Button/Title" -msgid "Play..." -msgstr "Ludi…" - -#: front/src/views/playlists/Detail.vue:91 -msgctxt "Head/Playlist/Title" +#: front/src/components/mixins/Report.vue:66 src/views/playlists/Detail.vue:121 +#: front/src/components/mixins/Report.vue:67 +#, fuzzy +msgctxt "*/*/*" msgid "Playlist" msgstr "Ludlisto" @@ -3107,33 +3359,30 @@ msgctxt "Content/Playlist/Dropdown.Label" msgid "Playlist visibility" msgstr "Ludlistvideblo" -#: front/src/components/mixins/Translations.vue:88 -#: front/src/components/mixins/Translations.vue:89 -msgctxt "Content/OAuth Scopes/Label" -msgid "Playlists" -msgstr "Ludlistoj" - #: front/src/components/Sidebar.vue:71 src/components/library/Home.vue:16 -#: front/src/components/library/Library.vue:16 src/views/admin/Settings.vue:83 -#: front/src/views/admin/library/AlbumDetail.vue:173 -#: front/src/views/admin/library/ArtistDetail.vue:162 -#: front/src/views/admin/library/TrackDetail.vue:225 +#: front/src/components/library/Library.vue:16 +#: front/src/components/mixins/Translations.vue:100 +#: src/views/admin/Settings.vue:83 +#: front/src/views/admin/library/AlbumDetail.vue:179 +#: front/src/views/admin/library/ArtistDetail.vue:167 +#: front/src/views/admin/library/TrackDetail.vue:231 #: src/views/playlists/List.vue:106 +#: front/src/components/mixins/Translations.vue:101 msgctxt "*/*/*" msgid "Playlists" msgstr "Ludlistoj" -#: front/src/components/Home.vue:56 -msgctxt "Content/Home/List item" -msgid "Playlists? We got them" -msgstr "Ludlistoj? Jen" +#: front/src/components/audio/EmbedWizard.vue:9 +msgctxt "Content/Embed/Message" +msgid "Please contact your admins and ask them to update the corresponding setting." +msgstr "" #: front/src/components/auth/Settings.vue:79 msgctxt "Content/Settings/Error message.List item/Call to action" msgid "Please double-check your password is correct" msgstr "Bonvolu rekontroli ke via pasvorto Äustas" -#: front/src/components/auth/Login.vue:9 +#: front/src/components/auth/LoginForm.vue:5 msgctxt "Content/Login/Error message.List item/Call to action" msgid "Please double-check your username/password couple is correct" msgstr "Bonvolu rekontroli ke vian uzantnomo kaj pasvorto Äustas" @@ -3141,28 +3390,29 @@ msgstr "Bonvolu rekontroli ke vian uzantnomo kaj pasvorto Äustas" #: front/src/components/auth/Settings.vue:46 msgctxt "Content/Settings/Paragraph" msgid "PNG, GIF or JPG. At most 2MB. Will be downscaled to 400x400px." +msgstr "PNG, GIF, aÅ JPG. Maksimume 2Mo. La bildo malgrandigos al 400×400 rastrumero." + +#: front/src/components/About.vue:72 +msgctxt "Content/About/Header/Name" +msgid "Pod configuration" msgstr "" -"PNG, GIF, aÅ JPG. Maksimume 2Mo. La bildo malgrandigos al 400×400 " -"rastrumero." -#: front/src/views/admin/library/TrackDetail.vue:137 -msgctxt "*/*/*/Noun" +#: front/src/views/admin/library/TrackDetail.vue:143 src/edits.js:70 +msgctxt "*/*/*/Short, Noun" msgid "Position" msgstr "PaÄeco" #: front/src/components/manage/moderation/InstancePolicyForm.vue:118 msgctxt "Content/Moderation/Help text" -msgid "" -"Prevent account or domain from triggering notifications, except from " -"followers." +msgid "Prevent account or domain from triggering notifications, except from followers." msgstr "Preventi konton aÅ domajno de sendi sciigoj, krom el sekvantoj." -#: front/src/components/audio/EmbedWizard.vue:33 +#: front/src/components/audio/EmbedWizard.vue:43 msgctxt "Popup/Embed/Title/Noun" msgid "Preview" msgstr "AntaÅvido" -#: front/src/components/audio/Player.vue:626 +#: front/src/components/audio/Player.vue:652 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Previous track" msgstr "AntaÅa kanto" @@ -3173,7 +3423,7 @@ msgctxt "Content/Settings/Dropdown/Short" msgid "Private" msgstr "" -#: front/src/views/content/remote/Card.vue:43 +#: front/src/views/content/remote/Card.vue:56 msgctxt "Content/Library/Card.List item" msgid "Problem during scanning" msgstr "Eraro dum skano" @@ -3194,14 +3444,20 @@ msgctxt "Content/Library/Tab.Title/Short" msgid "Processing" msgstr "Procedas" -#: front/src/components/mixins/Translations.vue:68 -#: front/src/components/mixins/Translations.vue:69 +#: front/src/components/mixins/Translations.vue:80 +#: front/src/components/mixins/Translations.vue:81 msgctxt "Content/OAuth Scopes/Label" msgid "Profile" msgstr "Malfermi profilon" +#: front/src/components/auth/SignupForm.vue:5 +#, fuzzy +msgctxt "Content/Signup/Form/Paragraph" +msgid "Public registrations are not possible on this instance. You will need an invitation code to sign up." +msgstr "Registrigadoj fermitas je tiu instanco, vi bezonos invitkodon por registrigi." + #: front/src/components/manage/moderation/AccountsTable.vue:188 -#: front/src/components/manage/moderation/DomainsTable.vue:168 +#: front/src/components/manage/moderation/DomainsTable.vue:186 #: front/src/views/content/libraries/Quota.vue:36 #: front/src/views/content/libraries/Quota.vue:39 #: front/src/views/content/libraries/Quota.vue:62 @@ -3232,7 +3488,7 @@ msgctxt "Sidebar/Queue/Tab.Title/Noun" msgid "Queue" msgstr "Atendovico" -#: front/src/components/audio/Player.vue:322 +#: front/src/components/audio/Player.vue:329 msgctxt "Content/Queue/Message" msgid "Queue shuffled!" msgstr "Atendovico miksiÄis!" @@ -3264,16 +3520,12 @@ msgstr "Äœisdatigas radion" #: front/src/components/library/Library.vue:13 #: src/components/library/Radios.vue:142 +#: front/src/components/mixins/Translations.vue:104 +#: front/src/components/mixins/Translations.vue:105 msgctxt "*/*/*" msgid "Radios" msgstr "Radioj" -#: front/src/components/mixins/Translations.vue:92 -#: front/src/components/mixins/Translations.vue:93 -msgctxt "Content/OAuth Scopes/Label" -msgid "Radios" -msgstr "Radioj" - #: front/src/components/auth/ApplicationForm.vue:151 msgctxt "Content/OAuth Scopes/Label/Verb" msgid "Read" @@ -3300,15 +3552,15 @@ msgctxt "Content/Moderation/*/Noun" msgid "Reason" msgstr "Kialo" -#: front/src/views/admin/moderation/AccountsDetail.vue:251 -#: front/src/views/admin/moderation/DomainsDetail.vue:179 +#: front/src/views/admin/moderation/AccountsDetail.vue:252 +#: front/src/views/admin/moderation/DomainsDetail.vue:216 msgctxt "Content/Moderation/Table.Label/Noun" msgid "Received library follows" msgstr "Ricevintaj sekvadoj de muzikejo" -#: front/src/components/manage/moderation/DomainsTable.vue:40 -#: front/src/components/mixins/Translations.vue:62 -#: front/src/components/mixins/Translations.vue:63 +#: front/src/components/manage/moderation/DomainsTable.vue:48 +#: front/src/components/mixins/Translations.vue:74 +#: front/src/components/mixins/Translations.vue:75 msgctxt "Content/Moderation/*/Noun" msgid "Received messages" msgstr "Ricevintaj mesaÄoj" @@ -3328,6 +3580,12 @@ msgctxt "Content/Home/Title" msgid "Recently added" msgstr "Novaj aldonoj" +#: front/src/components/Home.vue:167 +#, fuzzy +msgctxt "Content/Home/Title" +msgid "Recently added albums" +msgstr "Novaj aldonoj" + #: front/src/components/library/Home.vue:11 msgctxt "Content/Home/Title" msgid "Recently favorited" @@ -3356,14 +3614,14 @@ msgctxt "Popup/*/Message.Title" msgid "Refresh error" msgstr "Äœisdatigi" -#: front/src/views/admin/library/AlbumDetail.vue:50 -#: front/src/views/admin/library/ArtistDetail.vue:49 -#: front/src/views/admin/library/TrackDetail.vue:49 +#: front/src/views/admin/library/AlbumDetail.vue:56 +#: front/src/views/admin/library/ArtistDetail.vue:54 +#: front/src/views/admin/library/TrackDetail.vue:55 msgctxt "Content/Moderation/Button/Verb" msgid "Refresh from remote server" msgstr "" -#: front/src/views/admin/moderation/DomainsDetail.vue:127 +#: front/src/views/admin/moderation/DomainsDetail.vue:164 msgctxt "Content/Moderation/Button.Label/Verb" msgid "Refresh node info" msgstr "Aktualigi instancinformon" @@ -3375,9 +3633,7 @@ msgstr "Aktualigi instancinformon" #: front/src/components/federation/FetchButton.vue:80 msgctxt "Popup/*/Message.Content" -msgid "" -"Refresh request wasn't proceed in time by our server. It will be processed " -"later." +msgid "Refresh request wasn't proceed in time by our server. It will be processed later." msgstr "" #: front/src/components/federation/FetchButton.vue:16 @@ -3400,16 +3656,13 @@ msgctxt "Popup/*/Title" msgid "Refreshing object from remote…" msgstr "" -#: front/src/components/auth/Signup.vue:9 -msgctxt "Content/Signup/Form/Paragraph" -msgid "" -"Registration are closed on this instance, you will need an invitation code " -"to signup." -msgstr "" -"Registrigadoj fermitas je tiu instanco, vi bezonos invitkodon por " -"registrigi." +#: front/src/components/About.vue:86 +#, fuzzy +msgctxt "*/*/*" +msgid "Registrations" +msgstr "Administrejo" -#: front/src/components/manage/users/UsersTable.vue:71 +#: front/src/components/manage/users/UsersTable.vue:72 msgctxt "Content/Admin/Table, User role" msgid "Regular user" msgstr "normala uzanto" @@ -3434,8 +3687,8 @@ msgid "Rejected" msgstr "Malakceptinta" #: front/src/components/manage/library/AlbumsTable.vue:43 -#: front/src/components/mixins/Translations.vue:44 src/edits.js:28 -#: front/src/components/mixins/Translations.vue:45 +#: front/src/components/mixins/Translations.vue:54 src/edits.js:43 +#: front/src/components/mixins/Translations.vue:55 msgctxt "Content/*/*/Noun" msgid "Release date" msgstr "Dato de lasta vido" @@ -3445,6 +3698,11 @@ msgctxt "Content/Library/Paragraph" msgid "Remaining storage space" msgstr "" +#: front/src/views/Notifications.vue:18 src/views/Notifications.vue:52 +msgctxt "Content/Notifications/Label" +msgid "Remind me in:" +msgstr "" + #: front/src/views/content/remote/Home.vue:6 msgctxt "Content/Library/Title/Noun" msgid "Remote libraries" @@ -3452,12 +3710,8 @@ msgstr "Mallokaj muzikejoj" #: front/src/views/content/remote/Home.vue:7 msgctxt "Content/Library/Paragraph" -msgid "" -"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." -msgstr "" -"Mallokaj muzikejoj apartenas al aliaj uzantoj el la reto. Vi povas atingi " -"ilin se ili estas publika aÅ vi estas akceptinta." +msgid "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." +msgstr "Mallokaj muzikejoj apartenas al aliaj uzantoj el la reto. Vi povas atingi ilin se ili estas publika aÅ vi estas akceptinta." #: front/src/components/library/radios/Filter.vue:59 msgctxt "Content/Radio/Button.Label/Verb" @@ -3474,6 +3728,13 @@ msgctxt "Content/Moderation/Button.Label" msgid "Remove filter" msgstr "Forigi profilbildon" +#: front/src/components/manage/moderation/DomainsTable.vue:198 +#: front/src/views/admin/moderation/DomainsDetail.vue:39 +#, fuzzy +msgctxt "Content/Moderation/Action/Verb" +msgid "Remove from allow-list" +msgstr "Forigi el stelumoj" + #: front/src/components/favorites/TrackFavoriteIcon.vue:26 msgctxt "Content/Track/Icon.Tooltip/Verb" msgid "Remove from favorites" @@ -3481,42 +3742,104 @@ msgstr "Forigi el stelumoj" #: front/src/views/content/libraries/Quota.vue:38 msgctxt "Popup/Library/Paragraph" -msgid "" -"Removes uploaded but yet to be processed tracks completely, adding the " -"corresponding data to your quota." -msgstr "" -"Forigas elÅutatajn sed jam procezontajn kantojn, aldonante tiu datumo al via" -" kvoto." +msgid "Removes uploaded but yet to be processed tracks completely, adding the corresponding data to your quota." +msgstr "Forigas elÅutatajn sed jam procezontajn kantojn, aldonante tiu datumo al via kvoto." #: front/src/views/content/libraries/Quota.vue:64 msgctxt "Popup/Library/Paragraph" -msgid "" -"Removes uploaded tracks skipped during the import processes completely, " -"adding the corresponding data to your quota." -msgstr "" -"Forigas elÅutatajn preterlasinta kantojn, aldonante tiu datumo al via kvoto." +msgid "Removes uploaded tracks skipped during the import processes completely, adding the corresponding data to your quota." +msgstr "Forigas elÅutatajn preterlasinta kantojn, aldonante tiu datumo al via kvoto." #: front/src/views/content/libraries/Quota.vue:90 msgctxt "Popup/Library/Paragraph" -msgid "" -"Removes uploaded tracks that could not be processed by the server " -"completely, adding the corresponding data to your quota." +msgid "Removes uploaded tracks that could not be processed by the server completely, adding the corresponding data to your quota." +msgstr "Forigas elÅutatajn kantojn ke la servilo ne povis procezi, aldonante tiu datumo al via kvoto." + +#: front/src/components/audio/PlayButton.vue:94 +#, fuzzy +msgctxt "*/Queue/Dropdown/Button/Title" +msgid "Replace current queue" +msgstr "Aldoni al aktuala atendovico" + +#: front/src/components/mixins/Report.vue:6 src/components/mixins/Report.vue:7 +msgctxt "*/Moderation/*/Verb" +msgid "Report @%{ username }…" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:5 +msgctxt "Content/Moderation/Card/Short" +msgid "Report %{ id }" +msgstr "" + +#: front/src/components/moderation/ReportModal.vue:139 +msgctxt "*/Moderation/Message" +msgid "Report successfully submitted, thank you" +msgstr "" + +#: front/src/components/mixins/Report.vue:36 +#: src/components/mixins/Report.vue:37 +#, fuzzy +msgctxt "*/Moderation/*/Verb" +msgid "Report this album…" +msgstr "Ludi tiun kanton" + +#: front/src/components/mixins/Report.vue:50 +#: src/components/mixins/Report.vue:51 +#, fuzzy +msgctxt "*/Moderation/*/Verb" +msgid "Report this artist…" +msgstr "Ludi tiun kanton" + +#: front/src/components/mixins/Report.vue:72 +#: src/components/mixins/Report.vue:73 +#, fuzzy +msgctxt "*/Moderation/*/Verb" +msgid "Report this library…" +msgstr "Forigi tiun muzikejon?" + +#: front/src/components/mixins/Report.vue:61 +#: src/components/mixins/Report.vue:62 +#, fuzzy +msgctxt "*/Moderation/*/Verb" +msgid "Report this playlist…" +msgstr "Aldoni al ĉi tiu ludlisto" + +#: front/src/components/mixins/Report.vue:23 +#: src/components/mixins/Report.vue:24 +#, fuzzy +msgctxt "*/Moderation/*/Verb" +msgid "Report this track…" +msgstr "Ludi tiun kanton" + +#: front/src/components/audio/PlayButton.vue:95 +msgctxt "*/Moderation/*/Button/Label,Verb" +msgid "Report…" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:117 +msgctxt "Content/*/*/Short" +msgid "Reported object" +msgstr "" + +#: front/src/views/admin/moderation/Base.vue:5 +#: front/src/views/admin/moderation/ReportsList.vue:3 +#: front/src/views/admin/moderation/ReportsList.vue:208 +msgctxt "*/Moderation/*/Noun" +msgid "Reports" msgstr "" -"Forigas elÅutatajn kantojn ke la servilo ne povis procezi, aldonante tiu " -"datumo al via kvoto." -#: front/src/components/auth/SubsonicTokenForm.vue:33 -#: front/src/components/auth/SubsonicTokenForm.vue:36 +#: front/src/components/auth/SubsonicTokenForm.vue:38 +#: front/src/components/auth/SubsonicTokenForm.vue:41 msgctxt "*/Settings/Button.Label/Verb" msgid "Request a new password" msgstr "Demandi novan pasvorton" -#: front/src/components/auth/SubsonicTokenForm.vue:34 +#: front/src/components/auth/SubsonicTokenForm.vue:39 msgctxt "Popup/Settings/Title" msgid "Request a new Subsonic API password?" msgstr "Demandi novan Subsonic API pasvorton?" -#: front/src/components/auth/SubsonicTokenForm.vue:42 +#: front/src/components/auth/SubsonicTokenForm.vue:47 msgctxt "Content/Settings/Button.Label/Verb" msgid "Request a password" msgstr "Demandi pasvorton" @@ -3526,35 +3849,52 @@ msgctxt "Popup/*/Loading.Title" msgid "Requesting a fetch…" msgstr "" -#: front/src/components/library/EditForm.vue:82 +#: front/src/components/library/EditForm.vue:94 msgctxt "Content/Library/Button.Label" -msgid "Reset to initial value: %{ value }" +msgid "Reset to initial value" msgstr "" -#: front/src/components/auth/Login.vue:35 src/views/auth/PasswordReset.vue:4 -#: front/src/views/auth/PasswordReset.vue:53 +#: front/src/components/auth/LoginForm.vue:34 +#: src/views/auth/PasswordReset.vue:4 front/src/views/auth/PasswordReset.vue:53 msgctxt "*/Login/*/Verb" msgid "Reset your password" msgstr "Renuligadi vian pasvorton" +#: front/src/components/manage/moderation/ReportCard.vue:83 +#, fuzzy +msgctxt "Content/*/*/Noun" +msgid "Resolution date" +msgstr "Kreodato" + +#: front/src/components/manage/moderation/ReportCard.vue:218 +msgctxt "Content/*/Button.Label/Verb" +msgid "Resolve" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:62 +#: front/src/views/admin/moderation/ReportsList.vue:20 +msgctxt "Content/*/*/Short" +msgid "Resolved" +msgstr "" + #: front/src/views/content/libraries/FilesTable.vue:223 msgctxt "Content/Library/Dropdown/Verb" msgid "Restart import" msgstr "Rekomenci importadon" +#: front/src/components/library/EditForm.vue:31 +msgctxt "Content/Library/Button.Label" +msgid "Restrict to unreviewed edits" +msgstr "" + #: front/src/components/favorites/List.vue:39 -#: src/components/library/Albums.vue:30 -#: front/src/components/library/Artists.vue:30 +#: src/components/library/Albums.vue:34 +#: front/src/components/library/Artists.vue:34 #: src/components/library/Radios.vue:52 front/src/views/playlists/List.vue:32 msgctxt "Content/Search/Dropdown.Label/Noun" msgid "Results per page" msgstr "Rezultoj per paÄo" -#: front/src/components/library/EditForm.vue:31 -msgctxt "Content/Library/Button.Label" -msgid "Retrict to unreviewed edits" -msgstr "" - #: front/src/views/auth/EmailConfirm.vue:17 msgctxt "Content/Signup/Link/Verb" msgid "Return to login" @@ -3585,52 +3925,54 @@ msgctxt "Content/Moderation/Card.Title/Noun" msgid "Rule" msgstr "Regulo" -#: front/src/components/admin/SettingsGroup.vue:67 +#: front/src/components/About.vue:28 src/components/About.vue:56 +#, fuzzy +msgctxt "Content/About/Header" +msgid "Rules" +msgstr "Regulo" + +#: front/src/components/admin/SettingsGroup.vue:75 #: front/src/components/library/radios/Builder.vue:34 msgctxt "Content/*/Button.Label/Verb" msgid "Save" msgstr "Konservi" -#: front/src/views/content/remote/Card.vue:175 +#: front/src/views/content/remote/Card.vue:203 msgctxt "Content/Library/Message" msgid "Scan launched" msgstr "Skano komencis" -#: front/src/views/content/remote/Card.vue:67 +#: front/src/views/content/remote/Card.vue:80 msgctxt "Content/Library/Card.Button.Label/Verb" msgid "Scan now" msgstr "Skani nun" -#: front/src/views/content/remote/Card.vue:35 +#: front/src/views/content/remote/Card.vue:48 msgctxt "Content/Library/Card.List item" msgid "Scan pending" msgstr "Foste" -#: front/src/views/content/remote/Card.vue:176 +#: front/src/views/content/remote/Card.vue:204 msgctxt "Content/Library/Message" msgid "Scan skipped (previous scan is too recent)" msgstr "Preterlasis skanon (antaÅa skano tro junas)" -#: front/src/views/content/remote/Card.vue:47 +#: front/src/views/content/remote/Card.vue:60 msgctxt "Content/Library/Card.List item" msgid "Scanned" msgstr "Skana" -#: front/src/views/content/remote/Card.vue:51 +#: front/src/views/content/remote/Card.vue:64 msgctxt "Content/Library/Card.List item" msgid "Scanned with errors" msgstr "Malsukcese skanis" -#: front/src/views/content/remote/Card.vue:39 +#: front/src/views/content/remote/Card.vue:52 msgctxt "Content/Library/Card.List item" msgid "Scanning… (%{ progress }%)" msgstr "Skanas… (%{progress}%)" #: front/src/components/auth/ApplicationForm.vue:22 -msgctxt "Content/Applications/Input.Label/Noun" -msgid "Scopes" -msgstr "" - #: front/src/components/auth/Settings.vue:226 msgctxt "Content/*/*/Noun" msgid "Scopes" @@ -3643,12 +3985,14 @@ msgstr "" #: front/src/components/manage/library/ArtistsTable.vue:5 #: front/src/components/manage/library/EditsCardList.vue:6 #: front/src/components/manage/library/LibrariesTable.vue:5 +#: front/src/components/manage/library/TagsTable.vue:5 #: front/src/components/manage/library/TracksTable.vue:5 #: front/src/components/manage/library/UploadsTable.vue:5 #: front/src/components/manage/moderation/AccountsTable.vue:5 #: front/src/components/manage/moderation/DomainsTable.vue:5 #: front/src/components/manage/users/InvitationsTable.vue:5 #: front/src/components/manage/users/UsersTable.vue:5 +#: front/src/views/admin/moderation/ReportsList.vue:8 #: front/src/views/content/libraries/FilesTable.vue:5 #: src/views/playlists/List.vue:13 msgctxt "Content/Search/Input.Label/Noun" @@ -3661,6 +4005,7 @@ msgid "Search a remote library" msgstr "Serĉi mallokan muzikejon" #: front/src/components/manage/library/EditsCardList.vue:211 +#: front/src/views/admin/moderation/ReportsList.vue:207 msgctxt "Content/Search/Input.Placeholder" msgid "Search by account, summary, domain…" msgstr "Serĉu per titolo, artisto, domajno…" @@ -3695,7 +4040,13 @@ msgctxt "Content/Search/Input.Placeholder" msgid "Search by domain, username, bio…" msgstr "Serĉu per domajno, uzantnomo, biografio…" -#: front/src/components/manage/moderation/DomainsTable.vue:151 +#: front/src/components/manage/library/TagsTable.vue:165 +#, fuzzy +msgctxt "Content/Search/Input.Placeholder" +msgid "Search by name" +msgstr "Serĉu per nomo…" + +#: front/src/components/manage/moderation/DomainsTable.vue:168 msgctxt "Content/Search/Input.Placeholder" msgid "Search by name…" msgstr "Serĉu per nomo…" @@ -3710,12 +4061,12 @@ msgctxt "Content/Admin/Input.Placeholder/Verb" msgid "Search by username, e-mail address, code…" msgstr "Serĉu per uzantnomo, retpoÅtdreso, kodo…" -#: front/src/components/manage/users/UsersTable.vue:163 +#: front/src/components/manage/users/UsersTable.vue:164 msgctxt "Content/Search/Input.Placeholder" msgid "Search by username, e-mail address, name…" msgstr "Serĉu per uzantnomo, retpoÅtadreso, nomo…" -#: front/src/components/audio/SearchBar.vue:20 +#: front/src/components/audio/SearchBar.vue:27 msgctxt "Sidebar/Search/Input.Placeholder" msgid "Search for artists, albums, tracks…" msgstr "Serĉu artistoj, albumoj, kantoj…" @@ -3725,16 +4076,30 @@ msgctxt "Content/Search/Title" msgid "Search for some music" msgstr "Serĉi muzikon" -#: front/src/components/library/AlbumBase.vue:57 -#: front/src/components/library/ArtistBase.vue:68 -#: front/src/components/library/TrackBase.vue:76 +#: front/src/components/library/TagsSelector.vue:6 +#, fuzzy +msgctxt "*/Dropdown/Placeholder/Verb" +msgid "Search for tags…" +msgstr "Serĉu per nomo…" + +#: front/src/components/library/AlbumBase.vue:66 +#: front/src/components/library/ArtistBase.vue:77 +#: front/src/components/library/TrackBase.vue:82 +#, fuzzy +msgctxt "Content/*/Button.Label/Verb" +msgid "Search on Discogs" +msgstr "Serĉi muzikon" + +#: front/src/components/library/AlbumBase.vue:58 +#: front/src/components/library/ArtistBase.vue:69 +#: front/src/components/library/TrackBase.vue:74 msgctxt "Content/*/Button.Label/Verb" msgid "Search on Wikipedia" msgstr "Serĉi je Vikipedio" #: front/src/components/library/Library.vue:35 -#: src/views/admin/library/Base.vue:32 -#: front/src/views/admin/moderation/Base.vue:22 +#: src/views/admin/library/Base.vue:35 +#: front/src/views/admin/moderation/Base.vue:44 #: src/views/admin/users/Base.vue:21 front/src/views/content/Base.vue:19 msgctxt "Menu/*/Hidden text" msgid "Secondary menu" @@ -3745,6 +4110,26 @@ msgctxt "Content/Admin/Menu.Title" msgid "Sections" msgstr "Sekcioj" +#: front/src/components/ShortcutsModal.vue:108 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek backwards 30s" +msgstr "" + +#: front/src/components/ShortcutsModal.vue:100 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek backwards 5s" +msgstr "" + +#: front/src/components/ShortcutsModal.vue:112 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek forwards 30s" +msgstr "" + +#: front/src/components/ShortcutsModal.vue:104 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek forwards 5s" +msgstr "" + #: front/src/components/library/radios/Builder.vue:46 msgctxt "Content/Radio/Dropdown.Placeholder/Verb" msgid "Select a filter" @@ -3763,9 +4148,14 @@ msgctxt "Content/*/Link/Verb" msgid "Select only current page" msgstr "Elekti nur la aktualan uzon" -#: front/src/components/Sidebar.vue:43 src/components/Sidebar.vue:108 -#: front/src/components/manage/users/UsersTable.vue:181 -#: front/src/views/admin/moderation/AccountsDetail.vue:506 +#: front/src/components/Home.vue:43 +msgctxt "Content/Home/Link" +msgid "Server rules" +msgstr "" + +#: front/src/components/Sidebar.vue:43 src/components/Sidebar.vue:112 +#: front/src/components/manage/users/UsersTable.vue:182 +#: front/src/views/admin/moderation/AccountsDetail.vue:526 msgctxt "*/*/*/Noun" msgid "Settings" msgstr "Agordoj" @@ -3787,18 +4177,25 @@ msgstr "Diskonigi ligilon" #: front/src/views/content/libraries/Detail.vue:15 msgctxt "Content/Library/Paragraph" -msgid "" -"Share this link with other users so they can request access to your library." -msgstr "" -"Diskonigu tiu ligilo kun aliaj uzantoj, do ili povas peti atingon al via " -"muzikejo." +msgid "Share this link with other users so they can request access to your library." +msgstr "Diskonigu tiu ligilo kun aliaj uzantoj, do ili povas peti atingon al via muzikejo." #: front/src/views/content/libraries/Detail.vue:14 -#: front/src/views/content/remote/Card.vue:77 +#: front/src/views/content/remote/Card.vue:90 msgctxt "Content/Library/Title" msgid "Sharing link" msgstr "Diskoniga ligilo" +#: front/src/components/audio/EmbedWizard.vue:5 +msgctxt "Content/Embed/Message" +msgid "Sharing will not work because this pod doesn't allow anonymous users to access content." +msgstr "" + +#: front/src/components/About.vue:156 +msgctxt "*/*/*/Verb" +msgid "Show" +msgstr "" + #: front/src/components/audio/album/Card.vue:38 #, fuzzy msgctxt "Content/Album/Card.Link/Verb" @@ -3807,11 +4204,11 @@ msgid_plural "Show %{ count } more tracks" msgstr[0] "AfiÅi %{count} kanto" msgstr[1] "AfÅi %{count} kantoj" -#: front/src/components/audio/artist/Card.vue:30 +#: front/src/components/tags/List.vue:11 #, fuzzy -msgctxt "Content/Artist/Card.Link" -msgid "Show 1 more album" -msgid_plural "Show %{ count } more albums" +msgctxt "Content/*/Button/Label/Verb" +msgid "Show 1 more tag" +msgid_plural "Show %{ count } more tags" msgstr[0] "AfiÅi unu alian albumon" msgstr[1] "AfiÅi %{count} aliajn albumojn" @@ -3820,17 +4217,28 @@ msgctxt "Content/Library/Button.Label" msgid "Show all edits" msgstr "" -#: front/src/components/ShortcutsModal.vue:42 +#: front/src/components/ShortcutsModal.vue:60 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Show available keyboard shortcuts" msgstr "AfiÅi disponeblajn fulmoklavojn" -#: front/src/views/Notifications.vue:7 +#: front/src/components/common/ExpandableDiv.vue:7 +msgctxt "*/*/Button,Label" +msgid "Show less" +msgstr "" + +#: front/src/components/common/ExpandableDiv.vue:8 +#, fuzzy +msgctxt "*/*/Button,Label" +msgid "Show more" +msgstr "AfiÅi unu alian albumon" + +#: front/src/views/Notifications.vue:72 msgctxt "Content/Notifications/Form.Label/Verb" msgid "Show read notifications" msgstr "AfiÅi mallegintajn sciigojn" -#: front/src/components/forms/PasswordInput.vue:26 +#: front/src/components/forms/PasswordInput.vue:42 msgctxt "Content/Settings/Button.Tooltip/Verb" msgid "Show/hide password" msgstr "AfiÅi/kaÅi pasvorton" @@ -3839,56 +4247,64 @@ msgstr "AfiÅi/kaÅi pasvorton" #: front/src/components/manage/library/ArtistsTable.vue:84 #: front/src/components/manage/library/EditsCardList.vue:72 #: front/src/components/manage/library/LibrariesTable.vue:110 +#: front/src/components/manage/library/TagsTable.vue:79 #: front/src/components/manage/library/TracksTable.vue:95 #: front/src/components/manage/library/UploadsTable.vue:144 #: front/src/components/manage/moderation/AccountsTable.vue:88 -#: front/src/components/manage/moderation/DomainsTable.vue:74 +#: front/src/components/manage/moderation/DomainsTable.vue:85 #: front/src/components/manage/users/InvitationsTable.vue:76 -#: front/src/components/manage/users/UsersTable.vue:87 +#: front/src/components/manage/users/UsersTable.vue:88 #: front/src/views/content/libraries/FilesTable.vue:117 msgctxt "Content/*/Paragraph" msgid "Showing results %{ start }-%{ end } on %{ total }" msgstr "AfiÅas rezultoj de %{start} al %{end} de %{total}" -#: front/src/components/ShortcutsModal.vue:83 +#: front/src/components/ShortcutsModal.vue:140 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Shuffle queue" msgstr "Miksi atendocivo" -#: front/src/components/audio/Player.vue:641 +#: front/src/components/audio/Player.vue:667 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Shuffle your queue" msgstr "Miksi vian atendovico" -#: front/src/components/auth/Signup.vue:97 +#: front/src/components/Home.vue:103 +#, fuzzy +msgctxt "*/Signup/Title" +msgid "Sign up" +msgstr "RegistriÄi" + +#: front/src/views/auth/Signup.vue:37 msgctxt "*/Signup/Title" msgid "Sign Up" msgstr "RegistriÄi" +#: front/src/components/Home.vue:107 +msgctxt "Content/Home/Paragraph" +msgid "Sign up now to keep a track of your favorites, create playlists, discover new content and much more!" +msgstr "" + #: front/src/components/manage/users/UsersTable.vue:40 msgctxt "Content/Admin/Table.Label/Short, Noun (Value is a date)" msgid "Sign-up" msgstr "RegistriÄi" -#: front/src/components/mixins/Translations.vue:57 -#: front/src/views/admin/moderation/AccountsDetail.vue:197 -#: front/src/components/mixins/Translations.vue:58 +#: front/src/components/mixins/Translations.vue:69 +#: front/src/views/admin/moderation/AccountsDetail.vue:198 +#: front/src/components/mixins/Translations.vue:70 msgctxt "Content/Admin/Table.Label/Noun" msgid "Sign-up date" msgstr "Registrada dato" -#: front/src/components/manage/library/UploadsTable.vue:65 -#: front/src/views/admin/library/UploadDetail.vue:219 -msgctxt "Content/*/*/Noun" -msgid "Size" -msgstr "Grando" - #: front/src/components/library/FileUpload.vue:94 #: front/src/components/library/TrackDetail.vue:39 -#: front/src/components/mixins/Translations.vue:54 +#: front/src/components/manage/library/UploadsTable.vue:65 +#: front/src/components/mixins/Translations.vue:66 +#: front/src/views/admin/library/UploadDetail.vue:219 #: front/src/views/content/libraries/FilesTable.vue:61 -#: front/src/components/mixins/Translations.vue:55 -msgctxt "Content/Library/*/in MB" +#: front/src/components/mixins/Translations.vue:67 +msgctxt "Content/*/*/Noun" msgid "Size" msgstr "Grando" @@ -3905,7 +4321,7 @@ msgctxt "Content/Library/Label" msgid "Skipped files" msgstr "Preterlasintaj dosieroj" -#: front/src/views/admin/moderation/DomainsDetail.vue:89 +#: front/src/views/admin/moderation/DomainsDetail.vue:126 msgctxt "Content/Moderation/Table.Label" msgid "Software" msgstr "Aplikaĵo" @@ -3920,93 +4336,65 @@ msgctxt "Content/*/Paragraph" msgid "Sorry, the page you asked for does not exist:" msgstr "Pardonon, la paÄo vi petis ne ekzistas:" -#: front/src/components/Footer.vue:49 +#: front/src/components/Footer.vue:57 msgctxt "Footer/*/List item.Link" msgid "Source code" msgstr "Fontkodo" #: front/src/components/auth/Profile.vue:23 -#: front/src/components/manage/users/UsersTable.vue:70 +#: front/src/components/manage/users/UsersTable.vue:71 msgctxt "Content/Profile/User role" msgid "Staff member" msgstr "Skipano" -#: front/src/components/audio/PlayButton.vue:23 +#: front/src/components/audio/PlayButton.vue:27 #: src/components/radios/Button.vue:4 msgctxt "*/Queue/Button.Label/Short, Verb" msgid "Start radio" msgstr "Stopi radion" -#: front/src/views/admin/Settings.vue:86 -msgctxt "Content/Admin/Menu" -msgid "Statistics" +#: front/src/components/About.vue:170 src/components/Home.vue:53 +#: front/src/views/admin/Settings.vue:87 +#, fuzzy +msgctxt "Content/Home/Header" +msgid "Statistics" msgstr "Statistikoj" -#: front/src/views/admin/moderation/AccountsDetail.vue:490 +#: front/src/views/admin/moderation/AccountsDetail.vue:510 msgctxt "Content/Moderation/Help text" -msgid "" -"Statistics are computed from known activity and content on your instance, " -"and do not reflect general activity for this account" -msgstr "" -"Statistikoj estas kalkula el konata aktiveco kaj datumoj de via instanco, " -"kaj ne kongruas la generalan aktivecon de tiu konto" +msgid "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this account" +msgstr "Statistikoj estas kalkula el konata aktiveco kaj datumoj de via instanco, kaj ne kongruas la generalan aktivecon de tiu konto" -#: front/src/views/admin/moderation/DomainsDetail.vue:371 +#: front/src/views/admin/moderation/DomainsDetail.vue:418 msgctxt "Content/Moderation/Help text" -msgid "" -"Statistics are computed from known activity and content on your instance, " -"and do not reflect general activity for this domain" -msgstr "" -"Statistikoj estas kalkula el konata aktiveco kaj datumoj de via instanco, " -"kaj ne kongruas la generalan aktivecon de tiu domajno" - -#: front/src/views/admin/library/AlbumDetail.vue:329 -#: front/src/views/admin/library/ArtistDetail.vue:328 -#: front/src/views/admin/library/LibraryDetail.vue:316 -#: front/src/views/admin/library/TrackDetail.vue:371 +msgid "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this domain" +msgstr "Statistikoj estas kalkula el konata aktiveco kaj datumoj de via instanco, kaj ne kongruas la generalan aktivecon de tiu domajno" + +#: front/src/views/admin/library/AlbumDetail.vue:346 +#: front/src/views/admin/library/ArtistDetail.vue:345 +#: front/src/views/admin/library/LibraryDetail.vue:356 +#: front/src/views/admin/library/TagDetail.vue:210 +#: front/src/views/admin/library/TrackDetail.vue:389 #: front/src/views/admin/library/UploadDetail.vue:335 msgctxt "Content/Moderation/Help text" -msgid "" -"Statistics are computed from known activity and content on your instance, " -"and do not reflect general activity for this object" -msgstr "" -"Statistikoj estas kalkula el konata aktiveco kaj datumoj de via instanco, " -"kaj ne kongruas la generalan aktivecon de tiu konto" - -#: front/src/views/admin/moderation/DomainsDetail.vue:115 -msgctxt "Content/Moderation/Table.Label (Value is Error message)" -msgid "Status" -msgstr "Stato" +msgid "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" +msgstr "Statistikoj estas kalkula el konata aktiveco kaj datumoj de via instanco, kaj ne kongruas la generalan aktivecon de tiu konto" #: front/src/components/library/FileUpload.vue:95 -msgctxt "Content/Library/Table.Label (Value is Uploading/Uploaded/Error)" -msgid "Status" -msgstr "Stato" - -#: front/src/views/content/libraries/Detail.vue:28 -msgctxt "Content/Library.Federation/Table.Label (Value is Approved/Rejected)" -msgid "Status" -msgstr "Stato" - +#: front/src/components/manage/library/EditsCardList.vue:12 +#: front/src/components/manage/moderation/ReportCard.vue:57 #: front/src/components/manage/users/InvitationsTable.vue:17 #: front/src/components/manage/users/InvitationsTable.vue:39 -msgctxt "Content/Admin/*/Noun (Value is Used/Not used)" -msgid "Status" -msgstr "Stato" - #: front/src/components/manage/users/UsersTable.vue:43 -msgctxt "Content/Admin/Table.Label/Noun (Value is Regular user/Admin)" -msgid "Status" -msgstr "Stato" - -#: front/src/components/manage/library/EditsCardList.vue:12 -msgctxt "" -"Content/Search/Dropdown.Label (Value is All/Pending " -"review/Approved/Rejected)" +#: front/src/views/admin/moderation/DomainsDetail.vue:152 +#: front/src/views/admin/moderation/ReportsList.vue:14 +#: front/src/views/content/libraries/Detail.vue:28 +#, fuzzy +msgctxt "*/*/*" msgid "Status" msgstr "Stato" -#: front/src/components/Sidebar.vue:174 src/components/radios/Button.vue:3 +#: front/src/components/Sidebar.vue:178 src/components/radios/Button.vue:3 msgctxt "*/Player/Button.Label/Short, Verb" msgid "Stop radio" msgstr "Stopi radion" @@ -4016,7 +4404,7 @@ msgctxt "*/*/Button.Label/Verb" msgid "Submit" msgstr "Submeti" -#: front/src/components/library/EditForm.vue:98 +#: front/src/components/library/EditForm.vue:110 msgctxt "Content/Library/Button.Label/Verb" msgid "Submit and apply edit" msgstr "" @@ -4026,12 +4414,24 @@ msgctxt "Content/Library/Button.Label" msgid "Submit another edit" msgstr "" -#: front/src/components/library/EditForm.vue:99 +#: front/src/components/moderation/ReportModal.vue:64 +#, fuzzy +msgctxt "Popup/*/Button.Label" +msgid "Submit report" +msgstr "Submeti" + +#: front/src/components/library/EditForm.vue:111 msgctxt "Content/Library/Button.Label/Verb" msgid "Submit suggestion" msgstr "" -#: front/src/views/admin/Settings.vue:85 +#: front/src/components/manage/moderation/ReportCard.vue:17 +#, fuzzy +msgctxt "Content/Moderation/*" +msgid "Submitted by" +msgstr "Submeti" + +#: front/src/views/admin/Settings.vue:86 msgctxt "Content/Admin/Menu" msgid "Subsonic" msgstr "Subsono" @@ -4071,16 +4471,21 @@ msgctxt "Content/Library/Tab.Title/Short" msgid "Summary" msgstr "Resumo" -#: front/src/components/library/EditForm.vue:87 +#: front/src/components/library/EditForm.vue:99 msgctxt "*/*/*" msgid "Summary (optional)" msgstr "" -#: front/src/components/Footer.vue:39 +#: front/src/components/Footer.vue:47 msgctxt "Footer/*/Listitem.Link" msgid "Support forum" msgstr "Helpretejo" +#: front/src/views/Notifications.vue:10 +msgctxt "Content/Notifications/Header" +msgid "Support this Funkwhale pod" +msgstr "" + #: front/src/components/library/FileUpload.vue:85 msgctxt "Content/Library/Paragraph" msgid "Supported extensions: %{ extensions }" @@ -4091,24 +4496,47 @@ msgctxt "Content/Playlist/Paragraph" msgid "Syncing changes to server…" msgstr "Sinkronigas ÅanÄojn al servilo…" -#: front/src/components/audio/EmbedWizard.vue:25 +#: front/src/components/audio/SearchBar.vue:35 +msgctxt "*/*/*/Noun" +msgid "Tag" +msgstr "" + +#: front/src/views/admin/library/TagDetail.vue:61 +#, fuzzy +msgctxt "Content/Moderation/Title" +msgid "Tag data" +msgstr "Nomo de kanto" + +#: front/src/components/library/Albums.vue:23 +#: src/components/library/Artists.vue:15 +#: front/src/views/admin/library/Base.vue:23 +#: src/views/admin/library/TagsList.vue:24 front/src/edits.js:24 +#: src/edits.js:50 src/edits.js:91 src/entities.js:120 +msgctxt "*/*/*/Noun" +msgid "Tags" +msgstr "" + +#: front/src/components/mixins/Translations.vue:44 +#: front/src/components/mixins/Translations.vue:45 +#, fuzzy +msgctxt "Content/Moderation/Dropdown" +msgid "Takedown request" +msgstr "Atendantaj petoj da sekvado" + +#: front/src/components/About.vue:35 src/components/About.vue:61 +msgctxt "Content/About/Header" +msgid "Terms and privacy policy" +msgstr "" + +#: front/src/components/audio/EmbedWizard.vue:35 #: front/src/components/common/CopyInput.vue:3 msgctxt "Content/*/Paragraph" msgid "Text copied to clipboard!" msgstr "Kopiis teksto al tondujo!" -#: front/src/components/Home.vue:26 -msgctxt "Content/Home/Paragraph" -msgid "" -"That's simple: we loved Grooveshark and we want to build something even " -"better." -msgstr "Simplas: ni amis Grooveshark kaj ni volas konstrui iu plue bona." - -#: front/src/views/admin/library/AlbumDetail.vue:75 +#: front/src/views/admin/library/AlbumDetail.vue:81 msgctxt "Content/Moderation/Paragraph" -msgid "" -"The album will be removed, as well as associated uploads, tracks, favorites " -"and listening history. This action is irreversible." +msgid "The album will be removed, as well as associated uploads, tracks, favorites and listening history. This action is irreversible." msgstr "" #: front/src/components/auth/Authorize.vue:39 @@ -4116,18 +4544,15 @@ msgctxt "Content/Auth/Paragraph" msgid "The application is also requesting the following unknown permissions:" msgstr "" -#: front/src/views/admin/library/ArtistDetail.vue:74 +#: front/src/views/admin/library/ArtistDetail.vue:79 msgctxt "Content/Moderation/Paragraph" -msgid "" -"The artist will be removed, as well as associated uploads, tracks, albums, " -"favorites and listening history. This action is irreversible." +msgid "The artist will be removed, as well as associated uploads, tracks, albums, favorites and listening history. This action is irreversible." msgstr "" -#: front/src/components/Footer.vue:53 +#: front/src/components/Footer.vue:61 msgctxt "Footer/*/List item.Link" msgid "The funkwhale logo was kindly designed and provided by Francis Gading." -msgstr "" -"La emblemo de Funkwhale estis dizajni kaj disponigi je Francis Gading." +msgstr "La emblemo de Funkwhale estis dizajni kaj disponigi je Francis Gading." #: front/src/components/SetInstanceModal.vue:8 msgctxt "Popup/Instance/Error message.List item" @@ -4136,22 +4561,17 @@ msgstr "" #: front/src/views/content/libraries/Form.vue:34 msgctxt "Popup/Library/Paragraph" -msgid "" -"The library and all its tracks will be deleted. This can not be undone." +msgid "The library and all its tracks will be deleted. This can not be undone." msgstr "La muzikejo kaj ĉiuj Äiaj kantoj forigos. Ne povos malfari." #: front/src/views/admin/library/LibraryDetail.vue:61 msgctxt "Content/Moderation/Paragraph" -msgid "" -"The library will be removed, as well as associated uploads, and follows. " -"This action is irreversible." +msgid "The library will be removed, as well as associated uploads, and follows. This action is irreversible." msgstr "" #: front/src/components/library/ImportStatusModal.vue:140 msgctxt "Popup/Import/Error.Label" -msgid "" -"The metadata included in the file is invalid or some mandatory fields are " -"missing." +msgid "The metadata included in the file is invalid or some mandatory fields are missing." msgstr "" #: front/src/components/library/FileUpload.vue:38 @@ -4164,13 +4584,16 @@ msgctxt "Sidebar/Player/Error message.Paragraph" msgid "The next track will play automatically in a few seconds…" msgstr "La sekva kanto ludos aÅtomate je kelkajn sekundoj…" -#: front/src/components/Home.vue:116 -msgctxt "Content/Home/List item" -msgid "" -"The plaform is free and open-source, you can install it and modify it " -"without worries" +#: front/src/components/manage/moderation/NotesThread.vue:27 +#, fuzzy +msgctxt "Content/Moderation/Paragraph" +msgid "The note will be removed. This action is irreversible." +msgstr "Tiu akto ne estas malfaronta." + +#: front/src/components/manage/moderation/ReportCard.vue:120 +msgctxt "Content/Moderation/Message" +msgid "The object associated with this report was deleted." msgstr "" -"La platformo estas libera kaj malfermitkoda, vi povas instali Äin malzorge" #: front/src/components/playlists/Form.vue:14 msgctxt "Content/Playlist/Error message.Title" @@ -4184,46 +4607,43 @@ msgstr "" #: front/src/components/federation/FetchButton.vue:13 msgctxt "Popup/*/Message.Content" -msgid "" -"The remote server answered, but returned data was unsupported by Funkwhale." +msgid "The remote server answered, but returned data was unsupported by Funkwhale." msgstr "" #: front/src/components/federation/FetchButton.vue:44 msgctxt "*/*/Error" -msgid "The remote server didn't answered fast enough" +msgid "The remote server didn't respond quickly enough" msgstr "" #: front/src/components/federation/FetchButton.vue:50 msgctxt "*/*/Error" -msgid "The return server returned invalid JSON or JSON-LD data" +msgid "The remote server returned invalid JSON or JSON-LD data" msgstr "" #: front/src/components/manage/library/AlbumsTable.vue:189 msgctxt "Popup/*/Paragraph" -msgid "" -"The selected albums will be removed, as well as associated tracks, uploads, " -"favorites and listening history. This action is irreversible." +msgid "The selected albums will be removed, as well as associated tracks, uploads, favorites and listening history. This action is irreversible." msgstr "" #: front/src/components/manage/library/ArtistsTable.vue:179 msgctxt "Popup/*/Paragraph" -msgid "" -"The selected artist will be removed, as well as associated uploads, tracks, " -"albums, favorites and listening history. This action is irreversible." +msgid "The selected artist will be removed, as well as associated uploads, tracks, albums, favorites and listening history. This action is irreversible." msgstr "" #: front/src/components/manage/library/LibrariesTable.vue:206 msgctxt "Popup/*/Paragraph" -msgid "" -"The selected library will be removed, as well as associated uploads and " -"follows. This action is irreversible." +msgid "The selected library will be removed, as well as associated uploads and follows. This action is irreversible." msgstr "" +#: front/src/components/manage/library/TagsTable.vue:180 +#, fuzzy +msgctxt "Popup/*/Paragraph" +msgid "The selected tag will be removed and unlinked with existing content, if any. This action is irreversible." +msgstr "Tiu akto ne estas malfaronta." + #: front/src/components/manage/library/TracksTable.vue:189 msgctxt "Popup/*/Paragraph" -msgid "" -"The selected tracks will be removed, as well as associated uploads, " -"favorites and listening history. This action is irreversible." +msgid "The selected tracks will be removed, as well as associated uploads, favorites and listening history. This action is irreversible." msgstr "" #: front/src/components/manage/library/UploadsTable.vue:256 @@ -4243,10 +4663,15 @@ msgstr "La Subsona API ne disponeblas en tiu Funkwhale instanco." #: front/src/components/library/EditCard.vue:96 msgctxt "Popup/Library/Paragraph" -msgid "" -"The suggestion will be completely removed, this action is irreversible." +msgid "The suggestion will be completely removed, this action is irreversible." msgstr "" +#: front/src/views/admin/library/TagDetail.vue:44 +#, fuzzy +msgctxt "Content/Moderation/Paragraph" +msgid "The tag will be removed and unlinked from any existing entity. This action is irreversible." +msgstr "Tiu akto ne estas malfaronta." + #: front/src/components/playlists/PlaylistModal.vue:34 msgctxt "Popup/Playlist/Error message.Title" msgid "The track can't be added to a playlist" @@ -4257,11 +4682,9 @@ msgctxt "Sidebar/Player/Error message.Title" msgid "The track cannot be loaded" msgstr "" -#: front/src/views/admin/library/TrackDetail.vue:74 +#: front/src/views/admin/library/TrackDetail.vue:80 msgctxt "Content/Moderation/Paragraph" -msgid "" -"The track will be removed, as well as associated uploads, favorites and " -"listening history. This action is irreversible." +msgid "The track will be removed, as well as associated uploads, favorites and listening history. This action is irreversible." msgstr "" #: front/src/views/admin/library/UploadDetail.vue:68 @@ -4294,21 +4717,37 @@ msgctxt "Content/Artist/Paragraph" msgid "This artist is present in the following libraries:" msgstr "Tiu artisto estas en ĉi-tiuj muzikejoj:" +#: front/src/components/manage/moderation/DomainsTable.vue:169 +#, fuzzy +msgctxt "Content/Moderation/Popup" +msgid "This domain is present in your allow-list" +msgstr "Tiu artisto estas en ĉi-tiuj muzikejoj:" + #: front/src/views/admin/moderation/AccountsDetail.vue:84 -#: front/src/views/admin/moderation/DomainsDetail.vue:48 +#: front/src/views/admin/moderation/DomainsDetail.vue:76 msgctxt "Content/Moderation/Card.Title" msgid "This domain is subject to specific moderation rules" msgstr "Tiu domajno havas specialajn moderecajn regulojn" +#: front/src/components/manage/moderation/InstancePolicyModal.vue:16 +#, fuzzy +msgctxt "Content/Moderation/Card.Title" +msgid "This entity is subject to specific moderation rules" +msgstr "Tiu domajno havas specialajn moderecajn regulojn" + #: front/src/views/content/Home.vue:9 msgctxt "Content/Library/Paragraph" msgid "This instance offers up to %{quota} of storage space for every user." msgstr "Tiu instanco oferi Äis %{quota} de memorado per uzanto." +#: front/src/components/auth/Settings.vue:300 +msgctxt "Popup/Settings/Paragraph" +msgid "This is irreversible and will permanently remove your data from our servers. You will we immediatly logged out." +msgstr "" + #: front/src/components/auth/Settings.vue:165 msgctxt "Content/Settings/Paragraph" -msgid "" -"This is the list of applications that have access to your account data." +msgid "This is the list of applications that have access to your account data." msgstr "" #: front/src/components/auth/Settings.vue:218 @@ -4326,28 +4765,20 @@ msgctxt "Content/Library/Input.Placeholder" msgid "This library contains my personal music, I hope you like it." msgstr "Tiu muzikejo enhavas mian personan muzikon, mi esperas vi Åatas Äin." -#: front/src/views/content/remote/Card.vue:141 +#: front/src/views/content/remote/Card.vue:169 msgctxt "Content/Library/Card.Help text" -msgid "" -"This library is private and your approval from its owner is needed to access" -" its content" -msgstr "" -"Tiu muzikejo estas privata kaj vi bezonas akceptadon el Äia proprulo por " -"vidi Äia enhavo" +msgid "This library is private and your approval from its owner is needed to access its content" +msgstr "Tiu muzikejo estas privata kaj vi bezonas akceptadon el Äia proprulo por vidi Äia enhavo" -#: front/src/views/content/remote/Card.vue:142 +#: front/src/views/content/remote/Card.vue:170 msgctxt "Content/Library/Card.Help text" msgid "This library is public and you can access its content freely" msgstr "Tiu muzikejo estas publika do vi povas vidi Äia enhavo libere" #: front/src/components/common/ActionTable.vue:47 msgctxt "Modal/*/Paragraph" -msgid "" -"This may affect a lot of elements or have irreversible consequences, please " -"double check this is really what you want." -msgstr "" -"Tiu efektus multe da ero aÅ havus malfarontajn konsekvencojn, bonvolu " -"recertiÄi vi vere volas tiun." +msgid "This may affect a lot of elements or have irreversible consequences, please double check this is really what you want." +msgstr "Tiu efektus multe da ero aÅ havus malfarontajn konsekvencojn, bonvolu recertiÄi vi vere volas tiun." #: front/src/components/library/AlbumEdit.vue:8 #: front/src/components/library/ArtistEdit.vue:8 @@ -4356,6 +4787,11 @@ msgctxt "Content/*/Message" msgid "This object is managed by another server, you cannot edit it." msgstr "" +#: front/src/components/Home.vue:87 +msgctxt "Content/Home/Paragraph" +msgid "This pod runs Funkwhale, a community-driven project that lets you listen and share music and audio within a decentralized, open network." +msgstr "" + #: front/src/components/library/FileUpload.vue:51 msgctxt "Content/Library/Paragraph" msgid "This reference will be used to group imported files together." @@ -4363,15 +4799,15 @@ msgstr "Tiu referenco estus uzonta por grupigi importadajn dosierojn kune." #: front/src/components/mixins/Translations.vue:33 #: front/src/components/mixins/Translations.vue:34 +#, fuzzy msgctxt "Content/Library/Help text" -msgid "This track could not be processed, please it is tagged correctly" +msgid "This track could not be processed, please make sure it is tagged correctly" msgstr "Ne povis traktadi tiun kanton, certiÄi Äi estas bone etikedata" #: front/src/components/mixins/Translations.vue:29 #: front/src/components/mixins/Translations.vue:30 msgctxt "Content/Library/Help text" -msgid "" -"This track has been uploaded, but hasn't been processed by the server yet" +msgid "This track has been uploaded, but hasn't been processed by the server yet" msgstr "Kanto elÅutanta, sed la servilo ne jam procezis Äin" #: front/src/components/mixins/Translations.vue:25 @@ -4380,7 +4816,7 @@ msgctxt "Content/Library/Help text" msgid "This track is already present in one of your libraries" msgstr "Kanto jam estas en unu de viaj muzikejoj" -#: front/src/components/audio/PlayButton.vue:85 +#: front/src/components/audio/PlayButton.vue:103 msgctxt "*/Queue/Button/Title" msgid "This track is not available in any library you have access to" msgstr "Tiu kanto ne disponeblas en iu aj muzikejo vi povas atingi" @@ -4390,7 +4826,7 @@ msgctxt "Content/Track/Paragraph" msgid "This track is present in the following libraries:" msgstr "Tiu kanto ne estas en ĉi-tiu muzikejoj:" -#: front/src/views/playlists/Detail.vue:38 +#: front/src/views/playlists/Detail.vue:46 msgctxt "Popup/Playlist/Paragraph" msgid "This will completely delete this playlist and cannot be undone." msgstr "Tute forigos tiun ludliston kaj ne povus esti malfaronta." @@ -4400,29 +4836,29 @@ msgctxt "Popup/Radio/Paragraph" msgid "This will completely delete this radio and cannot be undone." msgstr "Tute forigos tiun radion kaj ne povus esti malfaronta." -#: front/src/components/auth/SubsonicTokenForm.vue:50 +#: front/src/components/auth/SubsonicTokenForm.vue:55 msgctxt "Popup/Settings/Paragraph" -msgid "" -"This will completely disable access to the Subsonic API using from account." +msgid "This will completely disable access to the Subsonic API using from account." msgstr "Tute malaktivas atingo al la subsona API el tiu konto." -#: front/src/components/auth/SubsonicTokenForm.vue:35 +#: front/src/components/manage/moderation/ReportCard.vue:359 +msgctxt "Content/Moderation/Popup,Paragraph" +msgid "This will delete the object associated with this report and mark the report as resolved. The deletion is irreversible." +msgstr "" + +#: front/src/components/auth/SubsonicTokenForm.vue:40 msgctxt "Popup/Settings/Paragraph" -msgid "" -"This will log you out from existing devices that use the current password." +msgid "This will log you out from existing devices that use the current password." msgstr "Elsalutos vin el ĉiu viaj aparatoj ke uzas la aktualan pasvorton." #: front/src/components/auth/Settings.vue:253 msgctxt "Popup/Settings/Paragraph" -msgid "" -"This will permanently delete the application and all the associated tokens." +msgid "This will permanently delete the application and all the associated tokens." msgstr "Tute forigos tiun ludliston kaj ne povus esti malfaronta." #: front/src/components/auth/Settings.vue:194 msgctxt "Popup/Settings/Paragraph" -msgid "" -"This will prevent this application from accessing the service on your " -"behalf." +msgid "This will prevent this application from accessing the service on your behalf." msgstr "" #: front/src/components/playlists/Editor.vue:54 @@ -4430,43 +4866,44 @@ msgctxt "Popup/Playlist/Paragraph" msgid "This will remove all tracks from this playlist and cannot be undone." msgstr "Forigos ĉiujn kantojn el tiu ludlisto kaj ne povus esti malfaronta." -#: front/src/views/admin/library/AlbumDetail.vue:99 -#: front/src/views/admin/library/TrackDetail.vue:98 src/edits.js:21 -#: src/edits.js:39 -msgctxt "*/*/*/Noun" -msgid "Title" -msgstr "Titolo" - #: front/src/components/audio/track/Table.vue:7 -#: front/src/views/content/libraries/FilesTable.vue:55 -msgctxt "Content/Track/*/Noun" -msgid "Title" -msgstr "Titolo" - #: front/src/components/manage/library/AlbumsTable.vue:39 #: front/src/components/manage/library/TracksTable.vue:39 -msgctxt "*/*/*" +#: front/src/views/admin/library/AlbumDetail.vue:105 +#: front/src/views/admin/library/TrackDetail.vue:104 +#: front/src/views/content/libraries/FilesTable.vue:55 src/edits.js:36 +#: front/src/edits.js:62 +msgctxt "*/*/*/Noun" msgid "Title" msgstr "Titolo" #: front/src/components/SetInstanceModal.vue:16 msgctxt "Popup/Instance/Paragraph" -msgid "" -"To continue, please select the Funkwhale instance you want to connect to. " -"Enter the address directly, or select one of the suggested choices." +msgid "To continue, please select the Funkwhale instance you want to connect to. Enter the address directly, or select one of the suggested choices." +msgstr "" + +#: front/src/components/ShortcutsModal.vue:148 +#, fuzzy +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Toggle favorite" +msgstr "Unu stelumo" + +#: front/src/components/ShortcutsModal.vue:132 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Toggle mute" msgstr "" -#: front/src/components/ShortcutsModal.vue:79 +#: front/src/components/ShortcutsModal.vue:136 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Toggle queue looping" msgstr "Baskuli ripetadon de la atendovico" -#: front/src/views/admin/library/AlbumDetail.vue:222 -#: front/src/views/admin/library/ArtistDetail.vue:211 -#: front/src/views/admin/library/LibraryDetail.vue:200 -#: front/src/views/admin/library/TrackDetail.vue:274 -#: front/src/views/admin/moderation/AccountsDetail.vue:317 -#: front/src/views/admin/moderation/DomainsDetail.vue:225 +#: front/src/views/admin/library/AlbumDetail.vue:238 +#: front/src/views/admin/library/ArtistDetail.vue:226 +#: front/src/views/admin/library/LibraryDetail.vue:219 +#: front/src/views/admin/library/TrackDetail.vue:290 +#: front/src/views/admin/moderation/AccountsDetail.vue:329 +#: front/src/views/admin/moderation/DomainsDetail.vue:262 msgctxt "Content/Moderation/Table.Label" msgid "Total size" msgstr "Tuta grando" @@ -4476,20 +4913,18 @@ msgctxt "Content/Library/Card.Help text" msgid "Total size of the files in this library" msgstr "Tuta grando de tiu muzikejo" -#: front/src/views/admin/moderation/DomainsDetail.vue:105 +#: front/src/views/admin/moderation/DomainsDetail.vue:142 msgctxt "Content/*/*" msgid "Total users" msgstr "Tutaj uzantoj" -#: front/src/views/admin/library/UploadDetail.vue:199 -msgctxt "*/*/*" -msgid "Track" -msgstr "Kanto" - -#: front/src/components/audio/SearchBar.vue:27 -#: front/src/components/library/TrackBase.vue:173 +#: front/src/components/audio/SearchBar.vue:34 +#: front/src/components/library/TrackBase.vue:188 #: front/src/components/library/TrackDetail.vue:128 #: front/src/components/metadata/Search.vue:138 +#: src/components/mixins/Report.vue:28 +#: front/src/views/admin/library/UploadDetail.vue:199 +#: front/src/components/mixins/Report.vue:29 msgctxt "*/*/*/Noun" msgid "Track" msgstr "Kanto" @@ -4499,7 +4934,7 @@ msgctxt "Content/Library/Card/Short" msgid "Track #%{ id } - %{ name }" msgstr "" -#: front/src/views/admin/library/TrackDetail.vue:91 +#: front/src/views/admin/library/TrackDetail.vue:97 msgctxt "Content/Moderation/Title" msgid "Track data" msgstr "Nomo de kanto" @@ -4509,30 +4944,28 @@ msgctxt "Content/Track/Title/Noun" msgid "Track information" msgstr "Kantodatumo" -#: front/src/components/mixins/Translations.vue:50 -#: front/src/components/mixins/Translations.vue:51 +#: front/src/components/mixins/Translations.vue:60 +#: front/src/components/mixins/Translations.vue:61 msgctxt "Content/*/Dropdown/Noun" msgid "Track name" msgstr "Nomo de kanto" -#: front/src/components/instance/Stats.vue:54 #: front/src/components/library/AlbumDetail.vue:19 -#: front/src/components/playlists/PlaylistModal.vue:47 -#: front/src/views/admin/moderation/AccountsDetail.vue:362 -#: front/src/views/admin/moderation/DomainsDetail.vue:274 -#: front/src/views/content/Base.vue:8 src/views/content/libraries/Detail.vue:8 -#: front/src/views/playlists/Detail.vue:51 src/views/radios/Detail.vue:34 -msgctxt "*/*/*/Noun" -msgid "Tracks" -msgstr "Kantoj" - +#: front/src/components/library/TagDetail.vue:36 #: front/src/components/manage/library/AlbumsTable.vue:42 #: front/src/components/manage/library/ArtistsTable.vue:42 -#: front/src/views/admin/library/AlbumDetail.vue:252 -#: front/src/views/admin/library/ArtistDetail.vue:251 +#: front/src/components/manage/library/TagsTable.vue:44 +#: front/src/components/playlists/PlaylistModal.vue:47 +#: front/src/views/admin/library/AlbumDetail.vue:268 +#: front/src/views/admin/library/ArtistDetail.vue:266 #: front/src/views/admin/library/Base.vue:14 -#: front/src/views/admin/library/LibraryDetail.vue:229 +#: front/src/views/admin/library/LibraryDetail.vue:248 +#: front/src/views/admin/library/TagDetail.vue:143 #: front/src/views/admin/library/TracksList.vue:24 +#: front/src/views/admin/moderation/AccountsDetail.vue:374 +#: front/src/views/admin/moderation/DomainsDetail.vue:311 +#: front/src/views/content/Base.vue:8 src/views/content/libraries/Detail.vue:8 +#: front/src/views/playlists/Detail.vue:76 src/views/radios/Detail.vue:34 msgctxt "*/*/*" msgid "Tracks" msgstr "Kantoj" @@ -4542,77 +4975,64 @@ msgctxt "Content/Artist/Title" msgid "Tracks by this artist" msgstr "Kantoj je tiu artisto" -#: front/src/components/instance/Stats.vue:25 -msgctxt "Content/About/Paragraph/Unit" -msgid "Tracks favorited" -msgstr "Stelumantaj kantoj" - -#: front/src/components/instance/Stats.vue:19 -msgctxt "Content/About/Paragraph/Unit" -msgid "tracks listened" -msgstr "aÅskultintaj kantoj" - #: front/src/components/library/radios/Filter.vue:44 msgctxt "Popup/Radio/Title/Noun" msgid "Tracks matching filter" msgstr "Kanto kongruanta filtrilo" #: front/src/components/library/TrackDetail.vue:57 +#: front/src/components/manage/moderation/ReportCard.vue:134 #: front/src/views/admin/library/UploadDetail.vue:250 +#: front/src/views/admin/moderation/AccountsDetail.vue:181 msgctxt "Content/Track/Table.Label/Noun" msgid "Type" msgstr "Tipo" -#: front/src/views/admin/moderation/AccountsDetail.vue:180 -msgctxt "Content/Moderation/Table.Label/Noun" -msgid "Type" -msgstr "Tipo" - #: front/src/components/manage/moderation/AccountsTable.vue:44 -#: front/src/components/manage/moderation/DomainsTable.vue:42 +#: front/src/components/manage/moderation/DomainsTable.vue:50 msgctxt "Content/Moderation/Table.Label/Short" msgid "Under moderation rule" msgstr "Moderece" -#: front/src/views/content/remote/Card.vue:109 -#: src/views/content/remote/Card.vue:114 +#: front/src/components/ShortcutsModal.vue:68 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Unfocus searchbar" +msgstr "" + +#: front/src/views/content/remote/Card.vue:122 +#: src/views/content/remote/Card.vue:127 msgctxt "*/Library/Button.Label/Verb" msgid "Unfollow" msgstr "Malsekvi" -#: front/src/views/content/remote/Card.vue:110 +#: front/src/views/content/remote/Card.vue:123 msgctxt "Popup/Library/Title" msgid "Unfollow this library?" msgstr "Malsekvi tiun muzikejon?" -#: front/src/components/About.vue:17 -msgctxt "Content/About/Paragraph" -msgid "" -"Unfortunately, the owners of this instance did not yet take the time to " -"complete this page." -msgstr "Malfeliĉe, proprulo de tiu instanco ne jam plenigis tiu paÄon." - #: front/src/components/federation/FetchButton.vue:54 #: front/src/components/federation/FetchButton.vue:55 -msgctxt "*/*/Error" -msgid "Unknowkn error" -msgstr "" - #: front/src/components/library/ImportStatusModal.vue:144 -msgctxt "Popup/Import/Error.Label" -msgid "Unkwown error" +msgctxt "*/*/Error" +msgid "Unknown error" msgstr "" -#: front/src/components/Home.vue:37 -msgctxt "Content/Home/Title" -msgid "Unlimited music" -msgstr "Infinita muziko" - -#: front/src/components/audio/Player.vue:630 +#: front/src/components/audio/Player.vue:656 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Unmute" msgstr "Malmutigi" +#: front/src/components/manage/moderation/ReportCard.vue:225 +msgctxt "Content/*/Button.Label" +msgid "Unresolve" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:67 +#: front/src/views/admin/moderation/ReportsList.vue:23 +msgctxt "Content/*/*/Short" +msgid "Unresolved" +msgstr "" + #: front/src/components/manage/moderation/InstancePolicyForm.vue:57 msgctxt "Content/Moderation/Card.Button.Label/Verb" msgid "Update" @@ -4676,11 +5096,8 @@ msgstr "ElÅutdato" #: front/src/components/library/FileUpload.vue:258 msgctxt "Content/Library/Help text" -msgid "" -"Upload denied, ensure the file is not too big and that you have not reached " -"your quota" -msgstr "" -"Malakcepti elÅuto, certiÄi la dosieron ne tro grandas kaj vi nur havas spaco" +msgid "Upload denied, ensure the file is not too big and that you have not reached your quota" +msgstr "Malakcepti elÅuto, certiÄi la dosieron ne tro grandas kaj vi nur havas spaco" #: front/src/components/library/ImportStatusModal.vue:8 msgctxt "Popup/Import/Message" @@ -4689,20 +5106,18 @@ msgstr "" #: front/src/views/content/Home.vue:7 msgctxt "Content/Library/Paragraph" -msgid "" -"Upload music files (MP3, OGG, FLAC, etc.) from your personal library " -"directly from your browser to enjoy them here." -msgstr "" -"ElÅuti muzikajn dosierojn (MP3, OGG, FLAC, ktp.) el via persona muzika " -"dosierujo direkte en via retumilo por Äui ilin ĉi-tie." +msgid "Upload music files (MP3, OGG, FLAC, etc.) from your personal library directly from your browser to enjoy them here." +msgstr "ElÅuti muzikajn dosierojn (MP3, OGG, FLAC, ktp.) el via persona muzika dosierujo direkte en via retumilo por Äui ilin ĉi-tie." #: front/src/components/library/FileUpload.vue:30 msgctxt "Content/Library/Title/Verb" msgid "Upload new tracks" msgstr "ElÅuti novajn kantojn" -#: front/src/views/admin/moderation/AccountsDetail.vue:298 -msgctxt "Content/Moderation/Table.Label/Noun" +#: front/src/components/About.vue:99 +#: front/src/views/admin/moderation/AccountsDetail.vue:309 +#, fuzzy +msgctxt "*/*/*" msgid "Upload quota" msgstr "ElÅutlimito" @@ -4713,9 +5128,7 @@ msgstr "ElÅuto tempolimis, bonvolu reprovi" #: front/src/components/library/ImportStatusModal.vue:14 msgctxt "Popup/Import/Message" -msgid "" -"Upload was skipped because a similar one is already available in one of your" -" libraries." +msgid "Upload was skipped because a similar one is already available in one of your libraries." msgstr "" #: front/src/components/library/ImportStatusModal.vue:11 @@ -4738,35 +5151,25 @@ msgctxt "Content/Library/Table" msgid "Uploading…" msgstr "ElÅutanta…" +#: front/src/components/manage/library/LibrariesTable.vue:52 +#: front/src/components/manage/moderation/AccountsTable.vue:41 +#: front/src/components/mixins/Translations.vue:75 +#: front/src/views/admin/library/AlbumDetail.vue:258 +#: front/src/views/admin/library/ArtistDetail.vue:246 #: front/src/views/admin/library/Base.vue:20 +#: front/src/views/admin/library/LibraryDetail.vue:258 +#: front/src/views/admin/library/TrackDetail.vue:310 #: front/src/views/admin/library/UploadsList.vue:24 +#: front/src/views/admin/moderation/AccountsDetail.vue:349 +#: front/src/views/admin/moderation/DomainsDetail.vue:281 +#: front/src/components/mixins/Translations.vue:76 msgctxt "*/*/*" msgid "Uploads" msgstr "ElÅutoj" -#: front/src/components/manage/moderation/AccountsTable.vue:41 -#: front/src/components/mixins/Translations.vue:63 -#: front/src/views/admin/library/AlbumDetail.vue:242 -#: front/src/views/admin/library/ArtistDetail.vue:231 -#: front/src/views/admin/library/LibraryDetail.vue:239 -#: front/src/views/admin/library/TrackDetail.vue:294 -#: front/src/views/admin/moderation/AccountsDetail.vue:337 -#: front/src/views/admin/moderation/DomainsDetail.vue:244 -#: front/src/components/mixins/Translations.vue:64 -msgctxt "Content/Moderation/Table.Label/Noun" -msgid "Uploads" -msgstr "ElÅutoj" - -#: front/src/components/manage/library/LibrariesTable.vue:52 -msgctxt "Content/*/*/Noun" -msgid "Uploads" -msgstr "ElÅutoj" - #: front/src/components/auth/ApplicationForm.vue:16 msgctxt "Content/Applications/Help Text" -msgid "" -"Use \"urn:ietf:wg:oauth:2.0:oob\" as a redirect URI if your application is " -"not served on the web." +msgid "Use \"urn:ietf:wg:oauth:2.0:oob\" as a redirect URI if your application is not served on the web." msgstr "" #: front/src/components/Footer.vue:16 @@ -4774,38 +5177,57 @@ msgctxt "Footer/*/List item.Link" msgid "Use another instance" msgstr "Uzi alian instancon" +#: front/src/components/Home.vue:146 +msgctxt "Content/Home/Link" +msgid "Use Funkwhale on other devices with our apps" +msgstr "" + +#: front/src/components/moderation/ReportModal.vue:44 +msgctxt "*/*/Field,Help" +msgid "Use this field to provide additional context to the moderator that will handle your report." +msgstr "" + #: front/src/views/auth/PasswordReset.vue:12 msgctxt "Content/Signup/Paragraph" -msgid "" -"Use this form to request a password reset. We will send an email to the " -"given address with instructions to reset your password." +msgid "Use this form to request a password reset. We will send an email to the given address with instructions to reset your password." +msgstr "Uzu tiun formularo por peti pasvortnuligado. Ni sendos retpoÅtmesaÄon kun instrukcioj por nuligi vian pasvorton." + +#: front/src/components/moderation/ReportModal.vue:18 +msgctxt "*/Moderation/Popup,Paragraph" +msgid "Use this form to submit a report to our moderation team." msgstr "" -"Uzu tiun formularo por peti pasvortnuligado. Ni sendos retpoÅtmesaÄon kun " -"instrukcioj por nuligi vian pasvorton." #: front/src/components/manage/moderation/InstancePolicyForm.vue:111 msgctxt "Content/Moderation/Help text" -msgid "" -"Use this setting to temporarily enable/disable the policy without completely" -" removing it." -msgstr "" -"Uzu tiun agordon por tempe aktivigi/malaktivigi la regularon sen tute forigi" -" Äin." +msgid "Use this setting to temporarily enable/disable the policy without completely removing it." +msgstr "Uzu tiun agordon por tempe aktivigi/malaktivigi la regularon sen tute forigi Äin." #: front/src/components/manage/users/InvitationsTable.vue:49 msgctxt "Content/Admin/Table" msgid "Used" msgstr "Uzinta" +#: front/src/components/Home.vue:125 +msgctxt "Content/Home/Header" +msgid "Useful links" +msgstr "" + #: front/src/views/content/libraries/Detail.vue:26 msgctxt "Content/Library/Table.Label" msgid "User" msgstr "Uzanto" -#: front/src/components/instance/Stats.vue:5 -msgctxt "Content/About/Title/Noun" -msgid "User activity" -msgstr "Uzanta aktivado" +#: front/src/components/Home.vue:154 +#, fuzzy +msgctxt "Content/Home/Link" +msgid "User guides" +msgstr "Uzantaj muzikejoj" + +#: front/src/views/admin/Settings.vue:88 +#, fuzzy +msgctxt "Content/Admin/Menu" +msgid "User Interface" +msgstr "Uzantnomo" #: front/src/components/library/AlbumDetail.vue:26 #: front/src/components/library/ArtistDetail.vue:39 @@ -4819,35 +5241,35 @@ msgctxt "Content/Radio/Title" msgid "User radios" msgstr "Uzantaj radioj" -#: front/src/components/auth/Signup.vue:19 +#: front/src/components/auth/SignupForm.vue:15 #: front/src/components/manage/users/UsersTable.vue:37 -#: front/src/components/mixins/Translations.vue:59 +#: front/src/components/mixins/Translations.vue:71 #: front/src/views/admin/moderation/AccountsDetail.vue:114 -#: front/src/components/mixins/Translations.vue:60 +#: front/src/components/mixins/Translations.vue:72 msgctxt "Content/*/*" msgid "Username" msgstr "Uzantnomo" -#: front/src/components/auth/Login.vue:15 +#: front/src/components/auth/LoginForm.vue:11 msgctxt "Content/Login/Input.Label/Noun" msgid "Username or email" msgstr "Uzantnomo aÅ retpoÅtadreso" -#: front/src/components/instance/Stats.vue:13 -msgctxt "Content/About/Paragraph/Unit" -msgid "users" -msgstr "uzantoj" - -#: front/src/components/Sidebar.vue:102 -#: front/src/components/manage/moderation/DomainsTable.vue:39 -#: front/src/components/mixins/Translations.vue:61 +#: front/src/components/Sidebar.vue:106 +#: front/src/components/manage/moderation/DomainsTable.vue:47 +#: front/src/components/mixins/Translations.vue:73 #: src/views/admin/Settings.vue:81 front/src/views/admin/users/Base.vue:5 #: src/views/admin/users/UsersList.vue:21 -#: front/src/components/mixins/Translations.vue:62 +#: front/src/components/mixins/Translations.vue:74 msgctxt "*/*/*/Noun" msgid "Users" msgstr "Uzantoj" +#: front/src/components/Home.vue:110 +msgctxt "Content/Home/Paragraph" +msgid "Users on this pod also get %{ quota } of free storage to upload their own content!" +msgstr "" + #: front/src/components/Footer.vue:29 msgctxt "Footer/*/Title" msgid "Using Funkwhale" @@ -4865,45 +5287,60 @@ msgctxt "Content/Library/Link/Verb" msgid "View files" msgstr "Vidi dosierojn" -#: front/src/components/library/AlbumBase.vue:81 -#: front/src/components/library/ArtistBase.vue:92 -#: front/src/components/library/TrackBase.vue:100 -#: front/src/views/admin/library/AlbumDetail.vue:42 -#: front/src/views/admin/library/ArtistDetail.vue:41 +#: front/src/components/library/AlbumBase.vue:95 +#: front/src/components/library/ArtistBase.vue:107 +#: front/src/components/library/TrackBase.vue:111 +#: front/src/views/admin/library/AlbumDetail.vue:48 +#: front/src/views/admin/library/ArtistDetail.vue:46 #: front/src/views/admin/library/LibraryDetail.vue:34 #: front/src/views/admin/library/LibraryDetail.vue:45 -#: front/src/views/admin/library/TrackDetail.vue:41 +#: front/src/views/admin/library/TagDetail.vue:32 +#: front/src/views/admin/library/TrackDetail.vue:47 #: front/src/views/admin/library/UploadDetail.vue:35 #: front/src/views/admin/library/UploadDetail.vue:46 #: front/src/views/admin/moderation/AccountsDetail.vue:37 #: front/src/views/admin/moderation/AccountsDetail.vue:45 +#: front/src/views/admin/moderation/DomainsDetail.vue:30 msgctxt "Content/Moderation/Link/Verb" msgid "View in Django's admin" msgstr "" -#: front/src/components/library/AlbumBase.vue:61 -#: front/src/components/library/ArtistBase.vue:72 -#: front/src/components/library/TrackBase.vue:80 +#: front/src/components/Home.vue:169 +#, fuzzy +msgctxt "Content/Home/Link" +msgid "View more…" +msgstr "Åœargas sekvantojn…" + +#: front/src/components/library/AlbumBase.vue:62 +#: front/src/components/library/ArtistBase.vue:73 +#: front/src/components/library/TrackBase.vue:78 #: front/src/components/metadata/ArtistCard.vue:49 #: front/src/components/metadata/ReleaseCard.vue:53 msgctxt "Content/*/*/Clickable, Verb" msgid "View on MusicBrainz" msgstr "Vidi en MusicBrainz" +#: front/src/components/manage/moderation/ReportCard.vue:124 +msgctxt "Content/Moderation/Link" +msgid "View public page" +msgstr "" + #: front/src/components/manage/library/LibrariesTable.vue:11 #: front/src/components/manage/library/LibrariesTable.vue:51 #: front/src/components/manage/library/UploadsTable.vue:11 #: front/src/components/manage/library/UploadsTable.vue:63 #: front/src/views/admin/library/LibraryDetail.vue:94 #: front/src/views/admin/library/UploadDetail.vue:101 +#: front/src/views/content/libraries/Form.vue:18 msgctxt "*/*/*" msgid "Visibility" msgstr "Videblo" -#: front/src/views/content/libraries/Form.vue:18 -msgctxt "Content/Library/Dropdown.Label" -msgid "Visibility" -msgstr "Videblo" +#: front/src/components/Home.vue:91 +#, fuzzy +msgctxt "Content/Home/Link" +msgid "Visit funkwhale.audio" +msgstr "Uzi Funkwhale" #: front/src/components/library/AlbumDetail.vue:4 msgctxt "Content/Album/" @@ -4915,7 +5352,13 @@ msgctxt "Popup/*/Loading.Title" msgid "Waiting for result…" msgstr "ÅœarÄas viajn stelumojn…" -#: front/src/components/auth/Login.vue:7 +#: front/src/components/auth/Settings.vue:285 +#, fuzzy +msgctxt "Content/Settings/Error message.Title" +msgid "We cannot delete your account" +msgstr "Ni ne povis ensaluti vin" + +#: front/src/components/auth/LoginForm.vue:3 msgctxt "Content/Login/Error message.Title" msgid "We cannot log you in" msgstr "Ni ne povis ensaluti vin" @@ -4925,42 +5368,37 @@ msgctxt "Content/*/Error message.Title" msgid "We cannot save your changes" msgstr "Ni ne povis krei vian konton" -#: front/src/components/Home.vue:122 -msgctxt "Content/Home/List item" -msgid "We do not track you or bother you with ads" -msgstr "Ni ne spionas vin aÅ Äenas vin kun reklamoj" +#: front/src/views/Notifications.vue:39 +msgctxt "Content/Notifications/Paragraph" +msgid "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!" +msgstr "" #: front/src/components/library/FileUpload.vue:39 msgctxt "Content/Library/Link" msgid "We recommend using Picard for that purpose." msgstr "Ni rekomendas Picard pro fari tiun." -#: front/src/components/Home.vue:7 -msgctxt "Content/Home/Title" -msgid "We think listening to music should be simple." -msgstr "Ni pensas ke aÅskulti muzikon devus simpli." +#: front/src/components/moderation/ReportModal.vue:35 +msgctxt "*/*/Field,Help" +msgid "We'll use this email if we need to contact you regarding this report." +msgstr "" -#: front/src/components/Home.vue:148 +#: front/src/components/Home.vue:207 msgctxt "Head/Home/Title" msgid "Welcome" msgstr "Bonvenon" #: front/src/components/Home.vue:5 -msgctxt "Content/Home/Title/Verb" -msgid "Welcome on Funkwhale" -msgstr "Bonvenon en Funkwhale" - -#: front/src/components/Home.vue:24 -msgctxt "Content/Home/Title" -msgid "Why funkwhale?" -msgstr "Kial Funkwhale?" +msgctxt "Content/Home/Header" +msgid "Welcome to %{ podName }!" +msgstr "" -#: front/src/components/audio/EmbedWizard.vue:13 +#: front/src/components/audio/EmbedWizard.vue:23 msgctxt "Popup/Embed/Input.Label" msgid "Widget height" msgstr "Alto de fenestraĵo" -#: front/src/components/audio/EmbedWizard.vue:6 +#: front/src/components/audio/EmbedWizard.vue:16 msgctxt "Popup/Embed/Input.Label" msgid "Widget width" msgstr "LarÄo de fenestraĵo" @@ -4980,9 +5418,11 @@ msgctxt "Content/OAuth Scopes/Help Text" msgid "Write-only access to user data" msgstr "" -#: front/src/components/Sidebar.vue:129 +#: front/src/components/Sidebar.vue:133 #: front/src/components/manage/moderation/AccountsTable.vue:72 -#: front/src/components/manage/moderation/DomainsTable.vue:58 +#: front/src/components/manage/moderation/DomainsTable.vue:12 +#: front/src/components/manage/moderation/DomainsTable.vue:69 +#: front/src/views/admin/moderation/DomainsDetail.vue:109 msgctxt "*/*/*" msgid "Yes" msgstr "Jes" @@ -4994,27 +5434,17 @@ msgstr "Jes, elsaluti min!" #: front/src/views/content/libraries/Form.vue:19 msgctxt "Content/Library/Paragraph" -msgid "" -"You are able to share your library with other people, regardless of its " -"visibility." -msgstr "" -"Vi povas diskonigi vian muzikejon kun aliaj uloj, sendepende Äia videblo." +msgid "You are able to share your library with other people, regardless of its visibility." +msgstr "Vi povas diskonigi vian muzikejon kun aliaj uloj, sendepende Äia videblo." #: front/src/components/library/FileUpload.vue:32 msgctxt "Content/Library/Paragraph" -msgid "" -"You are about to upload music to your library. Before proceeding, please " -"ensure that:" -msgstr "" -"Vi estas elÅutota muziko al via muzikejo. AntaÅ komenci, bonvolu certiÄi ke:" +msgid "You are about to upload music to your library. Before proceeding, please ensure that:" +msgstr "Vi estas elÅutota muziko al via muzikejo. AntaÅ komenci, bonvolu certiÄi ke:" #: front/src/components/SetInstanceModal.vue:12 msgctxt "Popup/Login/Paragraph" -msgid "" -"You are currently connected to <a href=\"%{ url }\" target=\"_blank\">%{ " -"hostname } <i class=\"external icon\"/></a>. If you continue, you will " -"be disconnected from your current instance and all your local data will be " -"deleted." +msgid "You are currently connected to <a href=\"%{ url }\" target=\"_blank\">%{ hostname } <i class=\"external icon\"/></a>. If you continue, you will be disconnected from your current instance and all your local data will be deleted." msgstr "" #: front/src/components/library/ArtistDetail.vue:6 @@ -5029,9 +5459,7 @@ msgstr "Vi aktuale estas ensaluta al %{username}" #: front/src/components/library/FileUpload.vue:35 msgctxt "Content/Library/List item" -msgid "" -"You are not uploading copyrighted content in a public library, otherwise you" -" may be infringing the law" +msgid "You are not uploading copyrighted content in a public library, otherwise you may be infringing the law" msgstr "" #: front/src/components/SetInstanceModal.vue:98 @@ -5040,29 +5468,14 @@ msgid "You are now using the Funkwhale instance at %{ url }" msgstr "" #: front/src/views/content/Home.vue:17 +#, fuzzy msgctxt "Content/Library/Paragraph" -msgid "" -"You can follow libraries from other users to get access to new music. Public" -" libraries can be followed immediatly, while following a private library " -"requires approval from its owner." -msgstr "" -"Vi povas sekvi muzikejoj el aliaj uzantoj por atingi novan muzikon. Publikaj" -" muzikejoj sekvadeblas rekte, sed sekvado de privataj muzikejoj bezonas " -"akceptado el Äia proprulo." - -#: front/src/components/Home.vue:128 -msgctxt "Content/Home/List item" -msgid "" -"You can invite friends and family to your instance so they can enjoy your " -"music" -msgstr "" -"Vi povas inviti amikojn kaj familio en via instanco do ili povas Äui vian " -"muzikon" +msgid "You can 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." +msgstr "Vi povas sekvi muzikejoj el aliaj uzantoj por atingi novan muzikon. Publikaj muzikejoj sekvadeblas rekte, sed sekvado de privataj muzikejoj bezonas akceptado el Äia proprulo." #: front/src/components/moderation/FilterModal.vue:31 msgctxt "Popup/Moderation/Paragraph" -msgid "" -"You can manage and update your filters anytime from your account settings." +msgid "You can manage and update your filters any time from your account settings." msgstr "" #: front/src/views/auth/EmailConfirm.vue:24 @@ -5070,23 +5483,20 @@ msgctxt "Content/Signup/Paragraph" msgid "You can now use the service without limitations." msgstr "Vi nun povas uzi la servico senlime." +#: front/src/components/auth/Settings.vue:278 +msgctxt "Content/Settings/Paragraph'" +msgid "You can permanently and irreversibly delete your account and all the associated data using the form below. You will be asked for confirmation." +msgstr "" + #: front/src/components/library/radios/Builder.vue:7 msgctxt "Content/Radio/Paragraph" -msgid "" -"You can use this interface to build your own custom radio, which will play " -"tracks according to your criteria." -msgstr "" -"Vi povas uzi tiun interfaco por konstrui viajn proprajn radiojn, ke ludos " -"kantojn laÅ viaj reguloj." +msgid "You can use this interface to build your own custom radio, which will play tracks according to your criteria." +msgstr "Vi povas uzi tiun interfaco por konstrui viajn proprajn radiojn, ke ludos kantojn laÅ viaj reguloj." #: front/src/components/auth/SubsonicTokenForm.vue:7 msgctxt "Content/Settings/Paragraph" -msgid "" -"You can use those to enjoy your playlist and music in offline mode, on your " -"smartphone or tablet, for instance." -msgstr "" -"Vi povas uzi tiujn por Äui vian muzikon kaj ludlistojn nekonektite, kun via " -"poÅtelefono aÅ tabuleto ekzemple." +msgid "You can use those to enjoy your playlist and music in offline mode, on your smartphone or tablet, for instance." +msgstr "Vi povas uzi tiujn por Äui vian muzikon kaj ludlistojn nekonektite, kun via poÅtelefono aÅ tabuleto ekzemple." #: front/src/components/auth/Settings.vue:202 msgctxt "Content/Applications/Paragraph" @@ -5103,19 +5513,17 @@ msgctxt "Content/Moderation/Card.Title" msgid "You don't have any rule in place for this account." msgstr "Vi ne havas iu ajn regulon por tiu konto." -#: front/src/views/admin/moderation/DomainsDetail.vue:39 +#: front/src/views/admin/moderation/DomainsDetail.vue:67 msgctxt "Content/Moderation/Card.Title" msgid "You don't have any rule in place for this domain." msgstr "Vi ne havas iu ajn regulon por tiu domajno." #: front/src/components/library/EditForm.vue:52 msgctxt "Content/Library/Paragraph" -msgid "" -"You don't have the permission to edit this object, but you can suggest " -"changes. Once submitted, suggestions will be reviewed before approval." +msgid "You don't have the permission to edit this object, but you can suggest changes. Once submitted, suggestions will be reviewed before approval." msgstr "" -#: front/src/components/Sidebar.vue:171 +#: front/src/components/Sidebar.vue:175 msgctxt "Sidebar/Player/Title" msgid "You have a radio playing" msgstr "Vi ludas radion" @@ -5127,8 +5535,7 @@ msgstr "Vi havus konekta problemo." #: front/src/components/auth/Settings.vue:100 msgctxt "Popup/Settings/List item" -msgid "" -"You will be logged out from this session and have to log in with the new one" +msgid "You will be logged out from this session and have to log in with the new one" msgstr "Vi estos elÅaluta el tiu seanco kaj devus ensaluti denove" #: front/src/components/auth/Authorize.vue:51 @@ -5143,23 +5550,24 @@ msgstr "" #: front/src/components/auth/Settings.vue:71 msgctxt "Content/Settings/Paragraph" -msgid "" -"You will have to update your password on your clients that use this " -"password." +msgid "You will have to update your password on your clients that use this password." msgstr "Vi devos rekte ÅanÄi vian pasvorton en la aplikaĵo ke uzas Äin." #: front/src/components/moderation/FilterModal.vue:20 msgctxt "Popup/Moderation/Paragraph" -msgid "" -"You will not see tracks, albums and user activity linked to this artist " -"anymore:" +msgid "You will not see tracks, albums and user activity linked to this artist any more:" msgstr "" -#: front/src/components/auth/Signup.vue:13 +#: front/src/components/auth/SignupForm.vue:9 msgctxt "Content/Signup/Form/Paragraph" msgid "Your account cannot be created." msgstr "Ludlisto kreiintas" +#: front/src/components/auth/Settings.vue:281 +msgctxt "Content/Settings/Paragraph'" +msgid "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." +msgstr "" + #: front/src/components/auth/Settings.vue:215 msgctxt "Content/Settings/Title/Noun" msgid "Your applications" @@ -5170,6 +5578,11 @@ msgctxt "Content/Settings/Error message.Title" msgid "Your avatar cannot be saved" msgstr "" +#: front/src/components/auth/Settings.vue:527 +msgctxt "*/Auth/Message" +msgid "Your deletion request was submitted, your account and content will be deleted shortly" +msgstr "" + #: front/src/components/library/EditForm.vue:3 msgctxt "Content/Library/Paragraph" msgid "Your edit was successfully submitted." @@ -5180,12 +5593,13 @@ msgctxt "Head/Favorites/Title" msgid "Your Favorites" msgstr "Viaj stelumoj" -#: front/src/components/Home.vue:109 -msgctxt "Content/Home/Title" -msgid "Your music, your way" -msgstr "Via muziko, via vojo" +#: front/src/views/Notifications.vue:5 +#, fuzzy +msgctxt "Content/Notifications/Title" +msgid "Your messages" +msgstr "Sendintaj mesaÄoj" -#: front/src/views/Notifications.vue:4 +#: front/src/views/Notifications.vue:69 msgctxt "Content/Notifications/Title" msgid "Your notifications" msgstr "Viaj sciigoj" @@ -5201,42 +5615,41 @@ msgid "Your password has been updated successfully." msgstr "Via pasvorto sukcese ÅanÄis." #: front/src/components/auth/Settings.vue:14 +#, fuzzy msgctxt "Content/Settings/Error message.Title" -msgid "Your settings can't be updateds" +msgid "Your settings can't be updated" msgstr "Agordoj Äisdatigas" #: front/src/components/auth/Settings.vue:101 msgctxt "Popup/Settings/List item" -msgid "" -"Your Subsonic password will be changed to a new, random one, logging you out" -" from devices that used the old Subsonic password" -msgstr "" -"Via Subsona pasvorto ÅanÄos hazarde, elsalutontas vin el aparetoj ke uzis la" -" malnovan pasvorton" +msgid "Your Subsonic password will be changed to a new, random one, logging you out from devices that used the old Subsonic password" +msgstr "Via Subsona pasvorto ÅanÄos hazarde, elsalutontas vin el aparetoj ke uzis la malnovan pasvorton" -#: front/src/edits.js:47 -msgctxt "*/*/*/Short, Noun" -msgid "Position" -msgstr "PaÄeco" +#: front/src/entities.js:126 +#, fuzzy +msgctxt "*/*/*/Noun" +msgid "MusicBrainz ID" +msgstr "Vidi en MusicBrainz" -#: front/src/edits.js:54 -msgctxt "Content/Track/*/Noun" -msgid "Copyright" -msgstr "Kopirajto" +#: front/src/main.js:110 +msgctxt "*/Error/Paragraph" +msgid "You sent too many requests and have been rate limited, please try again in %{ delay }" +msgstr "" + +#: front/src/main.js:113 +msgctxt "*/Error/Paragraph" +msgid "You sent too many requests and have been rate limited, please try again later" +msgstr "" -#: front/src/components/library/AlbumBase.vue:183 +#: front/src/components/library/AlbumBase.vue:208 #, fuzzy msgctxt "Content/Album/Header.Title" -msgid "" -"Album containing %{ count } track, by <a class=\"internal\" href=\"%{ " -"artistUrl }\">%{ artist }</a>" -msgid_plural "" -"Album containing %{ count } tracks, by <a class=\"internal\" href=\"%{ " -"artistUrl }\">%{ artist }</a>" +msgid "Album containing %{ count } track, by <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" +msgid_plural "Album containing %{ count } tracks, by <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" msgstr[0] "Albumo kun %{count} kanto, je %{artist}" msgstr[1] "Albumo kun %{count} kantoj, je %{artist}" -#: front/src/components/audio/PlayButton.vue:220 +#: front/src/components/audio/PlayButton.vue:246 #, fuzzy msgctxt "*/Queue/Message" msgid "%{ count } track was added to your queue" diff --git a/front/locales/es/LC_MESSAGES/app.po b/front/locales/es/LC_MESSAGES/app.po index 84b65b60f80ca5a923f93a9f8eb9b3ab08ae917d..ffea531fb5c61c4dd07c25571b444d85433201c0 100644 --- a/front/locales/es/LC_MESSAGES/app.po +++ b/front/locales/es/LC_MESSAGES/app.po @@ -7,9 +7,9 @@ msgid "" msgstr "" "Project-Id-Version: front 1.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-05-16 10:35+0200\n" -"PO-Revision-Date: 2019-02-25 08:45+0000\n" -"Last-Translator: Ale London <alelondon@gmail.com>\n" +"POT-Creation-Date: 2019-10-01 15:15+0200\n" +"PO-Revision-Date: 2019-06-08 19:03+0000\n" +"Last-Translator: Manuel Cortez <manuel@manuelcortez.net>\n" "Language-Team: none\n" "Language: es\n" "MIME-Version: 1.0\n" @@ -38,17 +38,63 @@ msgctxt "Content/Auth/Title" msgid "%{ app } wants to access your Funkwhale account" msgstr "Iniciar sesión con tu cuenta de Funkwhale" -#: front/src/components/common/ActionTable.vue:68 +#: front/src/components/About.vue:173 src/components/Home.vue:56 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } active user" +msgid_plural "%{ count } active users" +msgstr[0] "%{ count } canción" +msgstr[1] "%{ count } canciones" + +#: front/src/components/About.vue:182 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } albums" +msgid_plural "%{ count } albums" +msgstr[0] "%{ count } canción" +msgstr[1] "%{ count } canciones" + +#: front/src/components/About.vue:152 +msgctxt "*/*/*" +msgid "%{ count } allowed domains" +msgid_plural "%{ count } allowed domains" +msgstr[0] "" +msgstr[1] "" + +#: front/src/components/About.vue:179 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } artists" +msgid_plural "%{ count } artists" +msgstr[0] "%{ count } canción" +msgstr[1] "%{ count } canciones" + +#: front/src/components/About.vue:176 src/components/Home.vue:59 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } hour of music" +msgid_plural "%{ count } hours of music" +msgstr[0] "%{ count } canción" +msgstr[1] "%{ count } canciones" + +#: front/src/components/About.vue:188 #, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } listenings" +msgid_plural "%{ count } listenings" +msgstr[0] "%{ count } canción" +msgstr[1] "%{ count } canciones" + +#: front/src/components/common/ActionTable.vue:68 msgctxt "Content/*/Paragraph" msgid "%{ count } on %{ total } selected" msgid_plural "%{ count } on %{ total } selected" -msgstr[0] "%{ count } de %{ total } elemento seleccionado" -msgstr[1] "%{ count } de %{ total } elementos seleccionados" +msgstr[0] "Seleccionado %{ count } de %{ total }" +msgstr[1] "Seleccionados %{ count } de %{ total }" -#: front/src/components/Sidebar.vue:121 src/components/audio/album/Card.vue:52 +#: front/src/components/Sidebar.vue:125 src/components/audio/album/Card.vue:52 #: front/src/views/content/libraries/Card.vue:40 -#: src/views/content/remote/Card.vue:30 +#: src/views/content/remote/Card.vue:43 #, fuzzy msgctxt "*/*/*" msgid "%{ count } track" @@ -72,7 +118,15 @@ msgid_plural "%{ count } tracks matching combined filters" msgstr[0] "%{ count } canción coincidiendo con filtros combinados" msgstr[1] "%{ count } canciones coincidiendo con filtros combinados" -#: front/src/components/playlists/Card.vue:18 +#: front/src/components/About.vue:185 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } tracks" +msgid_plural "%{ count } tracks" +msgstr[0] "%{ count } canción" +msgstr[1] "%{ count } canciones" + +#: front/src/components/playlists/Card.vue:28 #, fuzzy msgctxt "Content/*/Card/List item" msgid "%{ count} track" @@ -117,11 +171,10 @@ msgstr "Perfil de %{ username }" #: front/src/components/playlists/PlaylistModal.vue:21 msgctxt "Popup/Playlist/Paragraph" -msgid "" -"<strong>%{ track }</strong> is already in <strong>%{ playlist }</strong>." +msgid "<strong>%{ track }</strong> is already in <strong>%{ playlist }</strong>." msgstr "" -#: front/src/components/audio/artist/Card.vue:41 +#: front/src/components/audio/artist/Card.vue:11 #, fuzzy msgctxt "Content/Artist/Card" msgid "1 album" @@ -137,24 +190,44 @@ msgid_plural "%{ count } favorites" msgstr[0] "1 favorito" msgstr[1] "%{ count } favoritos" -#: front/src/components/Home.vue:64 -msgctxt "Content/Home/Title" -msgid "A clean library" -msgstr "Una biblioteca impecable" +#: front/src/components/audio/artist/Card.vue:15 +#, fuzzy +msgctxt "Content/Artist/Card" +msgid "1 track" +msgid_plural "%{ count } tracks" +msgstr[0] "Añadir canción" +msgstr[1] "Añadir canción" + +#: front/src/views/Notifications.vue:21 src/views/Notifications.vue:55 +msgctxt "*/*/*" +msgid "30 days" +msgstr "" + +#: front/src/views/Notifications.vue:22 src/views/Notifications.vue:56 +msgctxt "*/*/*" +msgid "60 days" +msgstr "" + +#: front/src/views/Notifications.vue:23 src/views/Notifications.vue:57 +msgctxt "*/*/*" +msgid "90 days" +msgstr "" #: front/src/components/library/FileUpload.vue:264 +#, fuzzy msgctxt "Content/Library/Help text" -msgid "A network error occured while uploading this file" +msgid "A network error occurred while uploading this file" msgstr "Ha ocurrido un error al subir este archivo" -#: front/src/components/library/EditForm.vue:145 +#: front/src/components/library/EditForm.vue:161 msgctxt "*/*/Placeholder" msgid "A short summary describing your changes." msgstr "Ha ocurrido un error al guardar los cambios" #: front/src/components/About.vue:5 -msgctxt "Content/About/Title/Short, Noun" -msgid "About %{ instance }" +#, fuzzy +msgctxt "Content/Home/Header" +msgid "About %{ podName }" msgstr "Sobre %{ instance }" #: front/src/components/Footer.vue:6 @@ -162,7 +235,7 @@ msgctxt "Footer/About/Title" msgid "About %{instanceName}" msgstr "Sobre %{ instance }" -#: front/src/components/Footer.vue:45 +#: front/src/components/Footer.vue:53 src/components/Home.vue:85 msgctxt "Footer/*/Title/Short" msgid "About Funkwhale" msgstr "Acerca de Funkwhale" @@ -172,9 +245,16 @@ msgctxt "Footer/About/List item.Link" msgid "About page" msgstr "Acerca de" -#: front/src/components/About.vue:8 src/components/About.vue:67 -msgctxt "Content/About/Title" -msgid "About this instance" +#: front/src/components/Home.vue:19 +#, fuzzy +msgctxt "Content/Home/Header" +msgid "About this Funkwhale pod" +msgstr "Acerca de Funkwhale" + +#: front/src/components/About.vue:21 src/components/About.vue:51 +#, fuzzy +msgctxt "Content/About/Header" +msgid "About this pod" msgstr "Acerca de esta instancia" #: front/src/views/content/libraries/Detail.vue:48 @@ -187,96 +267,87 @@ msgctxt "Content/Library/Table/Short" msgid "Accepted" msgstr "Aceptado" -#: front/src/components/auth/SubsonicTokenForm.vue:110 +#: front/src/components/auth/SubsonicTokenForm.vue:117 msgctxt "Content/Settings/Message" msgid "Access disabled" msgstr "Acceso deshabilitado" -#: front/src/components/mixins/Translations.vue:73 -#: front/src/components/mixins/Translations.vue:74 +#: front/src/components/mixins/Translations.vue:85 +#: front/src/components/mixins/Translations.vue:86 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to audio files, libraries, artists, albums and tracks" msgstr "" -#: front/src/components/mixins/Translations.vue:97 -#: front/src/components/mixins/Translations.vue:98 +#: front/src/components/mixins/Translations.vue:109 +#: front/src/components/mixins/Translations.vue:110 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to content filters" msgstr "Seleccionar un filtro" -#: front/src/components/mixins/Translations.vue:105 -#: front/src/components/mixins/Translations.vue:106 +#: front/src/components/mixins/Translations.vue:117 +#: front/src/components/mixins/Translations.vue:118 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to edits" msgstr "Acceso deshabilitado" -#: front/src/components/mixins/Translations.vue:69 -#: front/src/components/mixins/Translations.vue:70 +#: front/src/components/mixins/Translations.vue:81 +#: front/src/components/mixins/Translations.vue:82 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to email, username, and profile information" msgstr "" -#: front/src/components/mixins/Translations.vue:77 -#: front/src/components/mixins/Translations.vue:78 +#: front/src/components/mixins/Translations.vue:89 +#: front/src/components/mixins/Translations.vue:90 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to favorites" msgstr "Añadir a favoritos" -#: front/src/components/mixins/Translations.vue:85 -#: front/src/components/mixins/Translations.vue:86 +#: front/src/components/mixins/Translations.vue:97 +#: front/src/components/mixins/Translations.vue:98 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to follows" msgstr "" -#: front/src/components/mixins/Translations.vue:81 -#: front/src/components/mixins/Translations.vue:82 +#: front/src/components/mixins/Translations.vue:93 +#: front/src/components/mixins/Translations.vue:94 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to listening history" msgstr "" -#: front/src/components/mixins/Translations.vue:101 -#: front/src/components/mixins/Translations.vue:102 +#: front/src/components/mixins/Translations.vue:113 +#: front/src/components/mixins/Translations.vue:114 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to notifications" msgstr "Silenciar notificaciones" -#: front/src/components/mixins/Translations.vue:89 -#: front/src/components/mixins/Translations.vue:90 +#: front/src/components/mixins/Translations.vue:101 +#: front/src/components/mixins/Translations.vue:102 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to playlists" msgstr "Añadir a lista de reproducción…" -#: front/src/components/mixins/Translations.vue:93 -#: front/src/components/mixins/Translations.vue:94 +#: front/src/components/mixins/Translations.vue:105 +#: front/src/components/mixins/Translations.vue:106 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to radios" msgstr "Acceso deshabilitado" -#: front/src/components/Home.vue:101 -msgctxt "Content/Home/List item" -msgid "" -"Access your music from a clean interface that focuses on what really matters" -msgstr "" -"Accede a tu música con una interfaz limpia enfocada a lo que realmente " -"importa" - #: front/src/components/manage/library/UploadsTable.vue:67 -#: front/src/components/mixins/Translations.vue:45 +#: front/src/components/mixins/Translations.vue:55 #: front/src/views/admin/library/UploadDetail.vue:175 -#: front/src/components/mixins/Translations.vue:46 +#: front/src/components/mixins/Translations.vue:56 msgctxt "Content/*/*/Noun" msgid "Accessed date" msgstr "Acceso deshabilitado" -#: front/src/views/admin/library/LibraryDetail.vue:104 -#: front/src/views/admin/library/UploadDetail.vue:111 -msgctxt "*/*/*/Noun" -msgid "Account" -msgstr "Cuentas" - #: front/src/components/manage/library/LibrariesTable.vue:49 #: front/src/components/manage/library/UploadsTable.vue:61 -msgctxt "*/*/*" +#: front/src/components/manage/moderation/ReportCard.vue:156 +#: front/src/components/mixins/Report.vue:13 +#: front/src/views/admin/library/LibraryDetail.vue:113 +#: front/src/views/admin/library/UploadDetail.vue:111 +#: front/src/components/mixins/Report.vue:14 +msgctxt "*/*/*/Noun" msgid "Account" msgstr "Cuentas" @@ -290,7 +361,7 @@ msgctxt "Content/Settings/Title" msgid "Account settings" msgstr "Configuración de cuenta" -#: front/src/components/auth/Settings.vue:479 +#: front/src/components/auth/Settings.vue:544 msgctxt "Head/Settings/Title" msgid "Account Settings" msgstr "Configuración de Cuenta" @@ -307,7 +378,7 @@ msgstr "Correo de la cuenta" #: front/src/views/admin/moderation/AccountsList.vue:3 #: front/src/views/admin/moderation/AccountsList.vue:24 -#: front/src/views/admin/moderation/Base.vue:8 +#: front/src/views/admin/moderation/Base.vue:11 msgctxt "*/Moderation/Title" msgid "Accounts" msgstr "Cuentas" @@ -321,31 +392,30 @@ msgstr "Acción" #, fuzzy msgctxt "Content/*/Paragraph" msgid "Action %{ action } was launched successfully on %{ count } element" -msgid_plural "" -"Action %{ action } was launched successfully on %{ count } elements" -msgstr[0] "" -"Acción %{ action } fue iniciado exitosamente en %{ count } elemento" -msgstr[1] "" -"Acción %{ action } fue iniciado exitosamente en %{ count } elementos" +msgid_plural "Action %{ action } was launched successfully on %{ count } elements" +msgstr[0] "Acción %{ action } fue iniciado exitosamente en %{ count } elemento" +msgstr[1] "Acción %{ action } fue iniciado exitosamente en %{ count } elementos" #: front/src/components/common/ActionTable.vue:22 #: front/src/components/library/radios/Builder.vue:65 +#: front/src/components/manage/moderation/ReportCard.vue:210 msgctxt "Content/*/*/Noun" msgid "Actions" msgstr "Acciones" -#: front/src/components/manage/users/UsersTable.vue:53 +#: front/src/components/manage/users/UsersTable.vue:54 msgctxt "Content/Admin/Table" msgid "Active" msgstr "Activo" -#: front/src/views/admin/library/AlbumDetail.vue:134 -#: front/src/views/admin/library/ArtistDetail.vue:123 -#: front/src/views/admin/library/LibraryDetail.vue:138 -#: front/src/views/admin/library/TrackDetail.vue:186 +#: front/src/views/admin/library/AlbumDetail.vue:140 +#: front/src/views/admin/library/ArtistDetail.vue:128 +#: front/src/views/admin/library/LibraryDetail.vue:147 +#: front/src/views/admin/library/TagDetail.vue:83 +#: front/src/views/admin/library/TrackDetail.vue:192 #: front/src/views/admin/library/UploadDetail.vue:160 -#: front/src/views/admin/moderation/AccountsDetail.vue:220 -#: front/src/views/admin/moderation/DomainsDetail.vue:136 +#: front/src/views/admin/moderation/AccountsDetail.vue:221 +#: front/src/views/admin/moderation/DomainsDetail.vue:173 msgctxt "Content/Moderation/Title" msgid "Activity" msgstr "Actividad" @@ -356,7 +426,7 @@ msgctxt "Content/Settings/Dropdown.Label/Noun" msgid "Activity visibility" msgstr "Mostrar mi actividad" -#: front/src/views/admin/moderation/DomainsList.vue:18 +#: front/src/views/admin/moderation/DomainsList.vue:22 msgctxt "Content/Moderation/Button/Verb" msgid "Add" msgstr "Añadir" @@ -402,7 +472,21 @@ msgctxt "Content/Radio/Paragraph" msgid "Add filters to customize your radio" msgstr "Añade filtros para personalizar tu radio" -#: front/src/components/audio/PlayButton.vue:75 +#: front/src/components/manage/moderation/NoteForm.vue:12 +#, fuzzy +msgctxt "Content/Moderation/Button.Label/Verb" +msgid "Add note" +msgstr "Añadir contenido" + +#: front/src/components/manage/moderation/DomainsTable.vue:191 +#: front/src/views/admin/moderation/DomainsDetail.vue:46 +#: front/src/views/admin/moderation/DomainsList.vue:18 +#, fuzzy +msgctxt "Content/Moderation/Action/Verb" +msgid "Add to allow-list" +msgstr "Añadir a lista de reproducción…" + +#: front/src/components/audio/PlayButton.vue:91 msgctxt "*/Queue/Dropdown/Button/Title" msgid "Add to current queue" msgstr "Añadir a la cola de reproducción actual" @@ -434,7 +518,7 @@ msgctxt "Popup/Playlist/Table.Button.Label/Verb" msgid "Add track" msgstr "Añadir canción" -#: front/src/components/manage/users/UsersTable.vue:69 +#: front/src/components/manage/users/UsersTable.vue:70 msgctxt "Content/Admin/Table.User role" msgid "Admin" msgstr "Admin" @@ -444,49 +528,49 @@ msgctxt "Sidebar/Admin/Title/Noun" msgid "Administration" msgstr "Administración" -#: front/src/views/admin/library/TrackDetail.vue:107 -msgctxt "*/*/*/Noun" -msgid "Album" -msgstr "Ãlbum" - -#: front/src/components/audio/SearchBar.vue:26 +#: front/src/components/audio/SearchBar.vue:33 #: src/components/audio/track/Table.vue:9 -#: front/src/components/library/AlbumBase.vue:152 -#: front/src/components/library/ArtistBase.vue:194 +#: front/src/components/library/AlbumBase.vue:170 +#: front/src/components/library/ArtistBase.vue:212 #: front/src/components/manage/library/TracksTable.vue:40 #: front/src/components/metadata/Search.vue:134 +#: src/components/mixins/Report.vue:41 +#: front/src/views/admin/library/TrackDetail.vue:113 #: front/src/views/content/libraries/FilesTable.vue:57 +#: front/src/components/mixins/Report.vue:42 msgctxt "*/*/*" msgid "Album" msgstr "Ãlbum" -#: front/src/views/admin/library/TrackDetail.vue:128 +#: front/src/views/admin/library/TrackDetail.vue:134 msgctxt "*/*/*/Noun" msgid "Album artist" msgstr "Ãlbumes de este artista" -#: front/src/views/admin/library/AlbumDetail.vue:92 +#: front/src/views/admin/library/AlbumDetail.vue:98 msgctxt "Content/Moderation/Title" msgid "Album data" msgstr "Ãlbum" -#: front/src/components/mixins/Translations.vue:51 -#: front/src/components/mixins/Translations.vue:52 +#: front/src/components/mixins/Translations.vue:61 +#: front/src/components/mixins/Translations.vue:62 msgctxt "Content/*/Dropdown/Noun" msgid "Album name" msgstr "Ãlbum" #: front/src/components/audio/Search.vue:19 -#: src/components/instance/Stats.vue:48 -#: front/src/components/library/Albums.vue:120 -#: src/components/library/Library.vue:7 +#: src/components/library/Albums.vue:129 +#: front/src/components/library/Library.vue:7 +#: src/components/library/TagDetail.vue:28 #: front/src/components/manage/library/ArtistsTable.vue:41 +#: front/src/components/manage/library/TagsTable.vue:43 #: front/src/views/admin/library/AlbumsList.vue:24 -#: front/src/views/admin/library/ArtistDetail.vue:241 +#: front/src/views/admin/library/ArtistDetail.vue:256 #: front/src/views/admin/library/Base.vue:11 -#: front/src/views/admin/library/LibraryDetail.vue:219 -#: front/src/views/admin/moderation/AccountsDetail.vue:354 -#: front/src/views/admin/moderation/DomainsDetail.vue:264 +#: front/src/views/admin/library/LibraryDetail.vue:238 +#: front/src/views/admin/library/TagDetail.vue:133 +#: front/src/views/admin/moderation/AccountsDetail.vue:366 +#: front/src/views/admin/moderation/DomainsDetail.vue:301 msgctxt "*/*/*" msgid "Albums" msgstr "Ãlbumes" @@ -500,7 +584,10 @@ msgstr "Ãlbumes de este artista" #: front/src/components/manage/library/LibrariesTable.vue:13 #: front/src/components/manage/library/UploadsTable.vue:13 #: front/src/components/manage/library/UploadsTable.vue:22 +#: front/src/components/manage/moderation/DomainsTable.vue:11 #: front/src/components/manage/users/InvitationsTable.vue:19 +#: front/src/components/moderation/ReportCategoryDropdown.vue:32 +#: front/src/views/admin/moderation/ReportsList.vue:17 #: front/src/views/content/libraries/FilesTable.vue:13 msgctxt "Content/*/Dropdown" msgid "All" @@ -519,40 +606,53 @@ msgctxt "Head/Authorize/Title" msgid "Allow application" msgstr "" +#: front/src/components/About.vue:136 +msgctxt "*/*/*" +msgid "Allow-list" +msgstr "" + +#: front/src/components/About.vue:149 +#, fuzzy +msgctxt "*/*/*" +msgid "Allowed domains" +msgstr "Añadir un dominio" + #: front/src/components/library/ImportStatusModal.vue:17 msgctxt "Popup/Import/Message" -msgid "" -"An error occured during upload processing. You will find more information " -"below." +msgid "An error occurred during upload processing. You will find more information below." msgstr "" #: front/src/components/playlists/Editor.vue:13 +#, fuzzy msgctxt "Content/Playlist/Error message.Title" -msgid "An error occured while saving your changes" +msgid "An error occurred while saving your changes" msgstr "Ha ocurrido un error al guardar los cambios" #: front/src/components/federation/FetchButton.vue:21 +#, fuzzy msgctxt "Popup/*/Message.Content" -msgid "An error occured while trying to refresh data:" +msgid "An error occurred while trying to refresh data:" msgstr "Ha ocurrido un error al guardar los cambios" #: front/src/components/federation/FetchButton.vue:41 +#, fuzzy msgctxt "*/*/Error" -msgid "An HTTP error occured while contacting the remote server" +msgid "An HTTP error occurred while contacting the remote server" msgstr "Ha ocurrido un error al guardar los cambios" -#: front/src/components/auth/Login.vue:10 -msgctxt "Content/Login/Error message/List item" -msgid "" -"An unknown error happend, this can mean the server is down or cannot be " -"reached" -msgstr "" -"Ha ocurrido un error desconocido, esto puede significar que el servidor está" -" fuera de servicio o no se puede conectar" - #: front/src/components/library/ImportStatusModal.vue:145 msgctxt "Popup/Import/Error.Label" -msgid "An unkwown error occured" +msgid "An unknown error occurred" +msgstr "" + +#: front/src/components/About.vue:123 +msgctxt "*/*/*" +msgid "Anonymous access" +msgstr "" + +#: front/src/components/moderation/ReportModal.vue:54 +msgctxt "Popup/Moderation/Error message" +msgid "Anonymous reports are disabled, please sign-in to submit a report." msgstr "" #: front/src/components/auth/Settings.vue:175 @@ -573,9 +673,7 @@ msgstr "" #: front/src/components/auth/ApplicationEdit.vue:16 msgctxt "Content/Application/Paragraph/" -msgid "" -"Application ID and secret are really sensitive values and must be treated " -"like passwords. Do not share those with anyone else." +msgid "Application ID and secret are really sensitive values and must be treated like passwords. Do not share those with anyone else." msgstr "" #: front/src/components/auth/ApplicationEdit.vue:25 @@ -605,29 +703,27 @@ msgctxt "Content/Login/Title" msgid "Are you sure you want to log out?" msgstr "¿Seguro que quieres cerrar la sesión?" +#: front/src/components/audio/SearchBar.vue:32 +#: src/components/audio/track/Table.vue:8 #: front/src/components/manage/library/AlbumsTable.vue:40 #: front/src/components/manage/library/TracksTable.vue:41 -msgctxt "*/*/*" -msgid "Artist" -msgstr "Artista" - -#: front/src/components/audio/SearchBar.vue:25 -#: src/components/audio/track/Table.vue:8 #: front/src/components/metadata/Search.vue:130 -#: front/src/views/admin/library/AlbumDetail.vue:108 -#: front/src/views/admin/library/TrackDetail.vue:118 -#: front/src/views/content/libraries/FilesTable.vue:56 +#: src/components/mixins/Report.vue:55 +#: front/src/views/admin/library/AlbumDetail.vue:114 +#: front/src/views/admin/library/TrackDetail.vue:124 +#: front/src/views/content/libraries/FilesTable.vue:56 src/entities.js:12 +#: front/src/components/mixins/Report.vue:56 msgctxt "*/*/*/Noun" msgid "Artist" msgstr "Artista" -#: front/src/views/admin/library/ArtistDetail.vue:91 +#: front/src/views/admin/library/ArtistDetail.vue:96 msgctxt "Content/Moderation/Title" msgid "Artist data" msgstr "Nombre del artista" -#: front/src/components/mixins/Translations.vue:52 -#: front/src/components/mixins/Translations.vue:53 +#: front/src/components/mixins/Translations.vue:62 +#: front/src/components/mixins/Translations.vue:63 msgctxt "Content/*/Dropdown/Noun" msgid "Artist name" msgstr "Nombre del artista" @@ -637,36 +733,36 @@ msgctxt "*/Search/Input.Placeholder" msgid "Artist, album, track…" msgstr "Artista, álbum, canción…" +#: front/src/components/audio/Search.vue:10 +#: src/components/library/Artists.vue:117 +#: front/src/components/library/Library.vue:10 +#: front/src/components/library/TagDetail.vue:19 +#: front/src/components/manage/library/TagsTable.vue:42 #: front/src/views/admin/library/ArtistsList.vue:24 #: front/src/views/admin/library/Base.vue:8 -#: front/src/views/admin/library/LibraryDetail.vue:209 -msgctxt "*/*/*" -msgid "Artists" -msgstr "Artistas" - -#: front/src/components/audio/Search.vue:10 -#: src/components/instance/Stats.vue:42 -#: front/src/components/library/Artists.vue:117 -#: src/components/library/Library.vue:10 -#: front/src/views/admin/moderation/AccountsDetail.vue:346 -#: front/src/views/admin/moderation/DomainsDetail.vue:254 +#: front/src/views/admin/library/LibraryDetail.vue:228 +#: front/src/views/admin/library/TagDetail.vue:123 +#: front/src/views/admin/moderation/AccountsDetail.vue:358 +#: front/src/views/admin/moderation/DomainsDetail.vue:291 msgctxt "*/*/*/Noun" msgid "Artists" msgstr "Artistas" #: front/src/components/favorites/List.vue:34 -#: src/components/library/Albums.vue:25 -#: front/src/components/library/Artists.vue:25 +#: src/components/library/Albums.vue:29 +#: front/src/components/library/Artists.vue:29 #: src/components/library/Radios.vue:44 #: front/src/components/manage/library/AlbumsTable.vue:21 #: front/src/components/manage/library/ArtistsTable.vue:21 #: front/src/components/manage/library/EditsCardList.vue:39 #: front/src/components/manage/library/LibrariesTable.vue:30 +#: front/src/components/manage/library/TagsTable.vue:21 #: front/src/components/manage/library/TracksTable.vue:21 #: front/src/components/manage/library/UploadsTable.vue:40 #: front/src/components/manage/moderation/AccountsTable.vue:21 -#: front/src/components/manage/moderation/DomainsTable.vue:19 +#: front/src/components/manage/moderation/DomainsTable.vue:27 #: front/src/components/manage/users/UsersTable.vue:19 +#: front/src/views/admin/moderation/ReportsList.vue:44 #: front/src/views/content/libraries/FilesTable.vue:31 #: front/src/views/playlists/List.vue:27 msgctxt "Content/Search/Dropdown" @@ -678,18 +774,24 @@ msgctxt "Content/Signup/Button.Label/Verb" msgid "Ask for a password reset" msgstr "Restablecer contraseña" -#: front/src/views/admin/library/AlbumDetail.vue:198 -#: front/src/views/admin/library/ArtistDetail.vue:187 -#: front/src/views/admin/library/LibraryDetail.vue:176 -#: front/src/views/admin/library/TrackDetail.vue:250 +#: front/src/components/manage/moderation/ReportCard.vue:72 +msgctxt "Content/Moderation/*" +msgid "Assigned to" +msgstr "" + +#: front/src/views/admin/library/AlbumDetail.vue:214 +#: front/src/views/admin/library/ArtistDetail.vue:202 +#: front/src/views/admin/library/LibraryDetail.vue:195 +#: front/src/views/admin/library/TagDetail.vue:113 +#: front/src/views/admin/library/TrackDetail.vue:266 #: front/src/views/admin/library/UploadDetail.vue:191 -#: front/src/views/admin/moderation/AccountsDetail.vue:274 -#: front/src/views/admin/moderation/DomainsDetail.vue:202 +#: front/src/views/admin/moderation/AccountsDetail.vue:285 +#: front/src/views/admin/moderation/DomainsDetail.vue:239 msgctxt "Content/Moderation/Title" msgid "Audio content" msgstr "Contenido de Audio" -#: front/src/components/ShortcutsModal.vue:55 +#: front/src/components/ShortcutsModal.vue:92 msgctxt "Popup/Keyboard shortcuts/Title" msgid "Audio player shortcuts" msgstr "Atajos de teclado del reproductor de Audio" @@ -732,9 +834,9 @@ msgid "Back to settings" msgstr "Actualizar ajustes" #: front/src/components/library/TrackDetail.vue:48 -#: front/src/components/mixins/Translations.vue:55 +#: front/src/components/mixins/Translations.vue:67 #: front/src/views/admin/library/UploadDetail.vue:227 -#: front/src/components/mixins/Translations.vue:56 +#: front/src/components/mixins/Translations.vue:68 msgctxt "Content/Track/*/Noun" msgid "Bitrate" msgstr "Bitrate" @@ -747,14 +849,8 @@ msgstr "Bloquear todo" #: front/src/components/manage/moderation/InstancePolicyForm.vue:112 msgctxt "Content/Moderation/Help text" -msgid "" -"Block everything from this account or domain. This will prevent any " -"interaction with the entity, and purge related content (uploads, libraries, " -"follows, etc.)" -msgstr "" -"Bloquear todo de esta cuenta o dominio. Ésto prevendrá cualquier interacción" -" con la entidad, y eliminará los contenidos relacionados (subidas, " -"librerÃas, follows, etc.)" +msgid "Block everything from this account or domain. This will prevent any interaction with the entity, and purge related content (uploads, libraries, follows, etc.)" +msgstr "Bloquear todo de esta cuenta o dominio. Ésto prevendrá cualquier interacción con la entidad, y eliminará los contenidos relacionados (subidas, librerÃas, follows, etc.)" #: front/src/components/Sidebar.vue:18 src/components/library/Library.vue:4 msgctxt "*/Library/*/Verb" @@ -766,6 +862,12 @@ msgctxt "Sidebar/Library/List item.Link/Verb" msgid "Browse library" msgstr "Explorar biblioteca" +#: front/src/components/Home.vue:132 +#, fuzzy +msgctxt "Content/Home/Link" +msgid "Browse public content" +msgstr "Actualiza el contenido de la tabla" + #: front/src/components/library/Albums.vue:4 msgctxt "Content/Album/Title" msgid "Browsing albums" @@ -796,38 +898,40 @@ msgctxt "Content/Album/Card" msgid "By %{ artist }" msgstr "De %{ artist }" -#: front/src/views/content/remote/Card.vue:112 +#: front/src/views/content/remote/Card.vue:125 msgctxt "Popup/Library/Paragraph" msgid "By unfollowing this library, you loose access to its content." msgstr "Si dejas de seguir esta biblioteca, perderás acceso a su contenido." -#: front/src/views/admin/library/AlbumDetail.vue:214 -#: front/src/views/admin/library/ArtistDetail.vue:203 -#: front/src/views/admin/library/LibraryDetail.vue:192 -#: front/src/views/admin/library/TrackDetail.vue:266 +#: front/src/views/admin/library/AlbumDetail.vue:230 +#: front/src/views/admin/library/ArtistDetail.vue:218 +#: front/src/views/admin/library/LibraryDetail.vue:211 +#: front/src/views/admin/library/TrackDetail.vue:282 #: front/src/views/admin/library/UploadDetail.vue:208 -#: front/src/views/admin/moderation/AccountsDetail.vue:290 -#: front/src/views/admin/moderation/DomainsDetail.vue:217 +#: front/src/views/admin/moderation/AccountsDetail.vue:301 +#: front/src/views/admin/moderation/DomainsDetail.vue:254 msgctxt "Content/Moderation/Table.Label/Noun" msgid "Cached size" msgstr "Tamaño en caché" #: front/src/components/SetInstanceModal.vue:37 #: front/src/components/common/DangerousButton.vue:17 -#: front/src/components/library/AlbumBase.vue:36 -#: front/src/components/library/ArtistBase.vue:47 -#: front/src/components/library/EditForm.vue:95 -#: front/src/components/library/TrackBase.vue:55 +#: front/src/components/library/AlbumBase.vue:37 +#: front/src/components/library/ArtistBase.vue:48 +#: front/src/components/library/EditForm.vue:107 +#: front/src/components/library/TrackBase.vue:53 #: front/src/components/library/radios/Filter.vue:53 #: front/src/components/manage/moderation/InstancePolicyForm.vue:54 #: front/src/components/moderation/FilterModal.vue:39 +#: front/src/components/moderation/ReportModal.vue:59 #: front/src/components/playlists/PlaylistModal.vue:26 #: front/src/components/playlists/PlaylistModal.vue:77 +#: front/src/views/playlists/Detail.vue:62 msgctxt "*/*/Button.Label/Verb" msgid "Cancel" msgstr "Cancelar" -#: front/src/views/content/remote/Card.vue:97 +#: front/src/views/content/remote/Card.vue:110 #, fuzzy msgctxt "Content/Library/Card.Paragraph" msgid "Cancel follow request" @@ -841,8 +945,15 @@ msgstr "Candidatos" #: front/src/components/library/FileUpload.vue:261 msgctxt "Content/Library/Help text" msgid "Cannot upload this file, ensure it is not too big" +msgstr "No es posible subir este archivo, asegúrate que no es demasiado grande" + +#: front/src/components/manage/moderation/ReportCard.vue:30 +#: front/src/components/mixins/Translations.vue:42 +#: front/src/components/moderation/ReportCategoryDropdown.vue:2 +#: front/src/components/mixins/Translations.vue:43 +msgctxt "*/*/*" +msgid "Category" msgstr "" -"No es posible subir este archivo, asegúrate que no es demasiado grande" #: front/src/components/Footer.vue:21 msgctxt "Footer/Settings/Dropdown.Label/Short, Verb" @@ -859,6 +970,11 @@ msgctxt "Content/Settings/Button.Label" msgid "Change password" msgstr "Cambiar contraseña" +#: front/src/components/Footer.vue:37 +msgctxt "Footer/Settings/Dropdown.Label/Short, Verb" +msgid "Change theme" +msgstr "" + #: front/src/views/auth/PasswordResetConfirm.vue:62 msgctxt "*/Signup/Title" msgid "Change your password" @@ -876,28 +992,22 @@ msgstr "Cambios sincronizados con el servidor" #: front/src/components/auth/Settings.vue:71 msgctxt "Content/Settings/Paragraph'" -msgid "" -"Changing your password will also change your Subsonic API password if you " -"have requested one." -msgstr "" -"Cambiar tu contraseña también cambiará tu contraseña Subsonic API si pediste" -" una." +msgid "Changing your password will also change your Subsonic API password if you have requested one." +msgstr "Cambiar tu contraseña también cambiará tu contraseña Subsonic API si pediste una." #: front/src/components/auth/Settings.vue:98 msgctxt "Popup/Settings/Paragraph" msgid "Changing your password will have the following consequences:" msgstr "Cambiar tu contraseña tendrá las siguientes consecuencias" -#: front/src/components/Footer.vue:40 +#: front/src/components/Footer.vue:48 msgctxt "Footer/*/List item.Link" msgid "Chat room" msgstr "Sala Chat" #: front/src/components/auth/ApplicationForm.vue:24 msgctxt "Content/Applications/Paragraph/" -msgid "" -"Checking the parent \"Read\" or \"Write\" scopes implies access to all the " -"corresponding children scopes." +msgid "Checking the parent \"Read\" or \"Write\" scopes implies access to all the corresponding children scopes." msgstr "" #: front/src/components/SetInstanceModal.vue:2 @@ -905,12 +1015,9 @@ msgctxt "Popup/Instance/Title" msgid "Choose your instance" msgstr "Escoge tu instancia" -#: front/src/components/manage/users/InvitationForm.vue:37 -msgctxt "Content/Admin/Button.Label/Verb" -msgid "Clear" -msgstr "Limpiar" - #: front/src/components/library/EditForm.vue:75 +#: front/src/components/library/EditForm.vue:88 +#: front/src/components/manage/users/InvitationForm.vue:37 msgctxt "Content/Library/Button.Label" msgid "Clear" msgstr "Limpiar" @@ -921,22 +1028,21 @@ msgctxt "*/Playlist/Button.Label/Verb" msgid "Clear playlist" msgstr "Vaciar lista de reproducción" -#: front/src/components/audio/Player.vue:642 +#: front/src/components/ShortcutsModal.vue:144 +#, fuzzy +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Clear queue" +msgstr "Vaciar cola de reproducción" + +#: front/src/components/audio/Player.vue:668 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Clear your queue" msgstr "Vaciar cola de reproducción" -#: front/src/components/Home.vue:44 -msgctxt "Content/Home/List item/Verb" -msgid "Click once, listen for hours using built-in radios" -msgstr "" -"Pulsa una sola vez y escucha durante horas, gracias a las radios integradas" - #: front/src/components/mixins/Translations.vue:21 #: front/src/components/mixins/Translations.vue:22 msgctxt "Content/Library/Link.Title" -msgid "" -"Click to display more information about the import process for this upload" +msgid "Click to display more information about the import process for this upload" msgstr "" #: front/src/components/library/FileUpload.vue:82 @@ -944,22 +1050,25 @@ msgctxt "Content/Library/Paragraph/Call to action" msgid "Click to select files to upload or drag and drop files or directories" msgstr "Haz click para seleccionar archivos o arrastralos aquà para subirlos" +#: front/src/components/ShortcutsModal.vue:38 #: front/src/components/federation/FetchButton.vue:85 #: front/src/components/library/ImportStatusModal.vue:79 +#: front/src/components/manage/moderation/InstancePolicyModal.vue:34 msgctxt "*/*/Button.Label/Verb" msgid "Close" msgstr "Cerrar" -#: front/src/components/ShortcutsModal.vue:20 -msgctxt "Popup/Keyboard shortcuts/Button.Label/Verb" -msgid "Close" -msgstr "Cerrar" - #: front/src/components/federation/FetchButton.vue:88 msgctxt "*/*/Button.Label/Verb" msgid "Close and reload page" msgstr "" +#: front/src/components/About.vue:94 +#, fuzzy +msgctxt "*/*/*/State of registrations" +msgid "Closed" +msgstr "Cerrar" + #: front/src/components/manage/users/InvitationForm.vue:26 #: front/src/components/manage/users/InvitationsTable.vue:42 msgctxt "Content/Admin/Table.Label/Noun" @@ -967,8 +1076,9 @@ msgid "Code" msgstr "Código" #: front/src/components/audio/album/Card.vue:41 -#: front/src/components/audio/artist/Card.vue:33 -msgctxt "Content/*/Card.Link/Verb" +#: front/src/components/common/CollapseLink.vue:3 +#, fuzzy +msgctxt "*/*/Button,Label" msgid "Collapse" msgstr "Contraer" @@ -992,42 +1102,47 @@ msgctxt "Content/Signup/Form.Label" msgid "Confirmation code" msgstr "Código de confirmación" +#: front/src/components/About.vue:67 src/components/Home.vue:65 +msgctxt "Content/Home/Header/Name" +msgid "Contact" +msgstr "" + #: front/src/components/moderation/FilterModal.vue:90 msgctxt "*/Moderation/Message" msgid "Content filter successfully added" msgstr "" -#: front/src/components/mixins/Translations.vue:96 -#: front/src/components/mixins/Translations.vue:97 -msgctxt "Content/OAuth Scopes/Label" -msgid "Content filters" -msgstr "Seleccionar un filtro" - #: front/src/components/auth/Settings.vue:116 +#: front/src/components/mixins/Translations.vue:108 +#: front/src/components/mixins/Translations.vue:109 msgctxt "Content/Settings/Title/Noun" msgid "Content filters" msgstr "Seleccionar un filtro" #: front/src/components/auth/Settings.vue:119 msgctxt "Content/Settings/Paragraph" -msgid "" -"Content filters help you hide content you don't want to see on the service." +msgid "Content filters help you hide content you don't want to see on the service." msgstr "" #: front/src/components/common/ActionTable.vue:8 msgctxt "Content/*/Button.Help text.Paragraph" msgid "Content have been updated, click refresh to see up-to-date content" -msgstr "" -"El contenido ha sido actualizado, haz click en refrescar para ver el " -"contenido actualizado" +msgstr "El contenido ha sido actualizado, haz click en refrescar para ver el contenido actualizado" -#: front/src/components/Footer.vue:48 +#: front/src/components/About.vue:46 +#, fuzzy +msgctxt "Content/About/Header" +msgid "Contents" +msgstr "Seleccionar un filtro" + +#: front/src/components/Footer.vue:56 msgctxt "Footer/*/List item.Link" msgid "Contribute" msgstr "Contribuye" -#: front/src/components/audio/EmbedWizard.vue:19 +#: front/src/components/audio/EmbedWizard.vue:29 #: front/src/components/common/CopyInput.vue:8 +#: front/src/components/forms/PasswordInput.vue:43 msgctxt "*/*/Button.Label/Short, Verb" msgid "Copy" msgstr "Copiar" @@ -1042,14 +1157,14 @@ msgctxt "Content/Auth/Paragraph" msgid "Copy-paste the following code in the application:" msgstr "" -#: front/src/components/audio/EmbedWizard.vue:21 +#: front/src/components/audio/EmbedWizard.vue:31 msgctxt "Popup/Embed/Paragraph" msgid "Copy/paste this code in your website HTML" msgstr "Copia/Pega este código en el HTML de tu página web" #: front/src/components/library/TrackDetail.vue:10 -#: front/src/views/admin/library/TrackDetail.vue:153 -msgctxt "Content/Track/Table.Label/Noun" +#: front/src/views/admin/library/TrackDetail.vue:159 src/edits.js:77 +msgctxt "Content/Track/*/Noun" msgid "Copyright" msgstr "Copyright" @@ -1063,29 +1178,20 @@ msgctxt "Content/Library/Error message.Title" msgid "Could not fetch remote library" msgstr "Error al importar la biblioteca remote" -#: front/src/components/Home.vue:80 -msgctxt "Content/Home/List item" -msgid "Covers, lyrics, our goal is to have them all ;)" -msgstr "Covers, letras, queremos conseguirlo todo ;)" - #: front/src/components/manage/moderation/InstancePolicyForm.vue:58 msgctxt "Content/Moderation/Card.Button.Label/Verb" msgid "Create" msgstr "Crear" -#: front/src/components/auth/Signup.vue:4 +#: front/src/views/auth/Signup.vue:4 msgctxt "Content/Signup/Title" msgid "Create a funkwhale account" msgstr "Crear una cuenta de funkwhale" -#: front/src/components/auth/Settings.vue:220 -msgctxt "Content/Settings/Button.Label" -msgid "Create a new application" -msgstr "Crear una nueva lista de reproducción" - #: front/src/components/auth/ApplicationNew.vue:8 #: front/src/components/auth/ApplicationNew.vue:41 -msgctxt "Content/Applications/Title" +#: front/src/components/auth/Settings.vue:220 +msgctxt "Content/Settings/Button.Label" msgid "Create a new application" msgstr "Crear una nueva lista de reproducción" @@ -1099,7 +1205,7 @@ msgctxt "Popup/Playlist/Title/Verb" msgid "Create a new playlist" msgstr "Crear una nueva lista de reproducción" -#: front/src/components/Sidebar.vue:57 src/components/auth/Login.vue:17 +#: front/src/components/Sidebar.vue:57 src/components/auth/LoginForm.vue:15 msgctxt "*/Signup/Link/Verb" msgid "Create an account" msgstr "Crear una cuenta" @@ -1114,7 +1220,7 @@ msgctxt "Content/Library/Button.Label/Verb" msgid "Create library" msgstr "Crear biblioteca" -#: front/src/components/auth/Signup.vue:53 +#: front/src/components/auth/SignupForm.vue:49 msgctxt "Content/Signup/Button.Label" msgid "Create my account" msgstr "Crear mi cuenta" @@ -1139,11 +1245,13 @@ msgstr "Crear tu propia radio" #: front/src/components/manage/library/AlbumsTable.vue:44 #: front/src/components/manage/library/ArtistsTable.vue:43 #: front/src/components/manage/library/LibrariesTable.vue:54 +#: front/src/components/manage/library/TagsTable.vue:45 #: front/src/components/manage/library/TracksTable.vue:44 #: front/src/components/manage/library/UploadsTable.vue:66 +#: front/src/components/manage/moderation/ReportCard.vue:43 #: front/src/components/manage/users/InvitationsTable.vue:40 -#: front/src/components/mixins/Translations.vue:43 -#: front/src/components/mixins/Translations.vue:44 +#: front/src/components/mixins/Translations.vue:53 +#: front/src/components/mixins/Translations.vue:54 msgctxt "Content/*/*/Noun" msgid "Creation date" msgstr "Fecha de creación" @@ -1153,6 +1261,12 @@ msgctxt "Content/Settings/Title/Noun" msgid "Current avatar" msgstr "Avatar actual" +#: front/src/components/admin/SettingsGroup.vue:67 +#, fuzzy +msgctxt "Content/Settings/Title/Noun" +msgid "Current image" +msgstr "Uso actual" + #: front/src/views/content/libraries/DetailArea.vue:4 msgctxt "Content/Library/Title" msgid "Current library" @@ -1168,6 +1282,11 @@ msgctxt "Content/Library/Title" msgid "Current usage" msgstr "Uso actual" +#: front/src/components/Footer.vue:94 +msgctxt "Footer/Settings/Dropdown.Label/Theme name" +msgid "Dark" +msgstr "" + #: front/src/components/federation/FetchButton.vue:53 msgctxt "*/*/Error" msgid "Data returned by the remote server had invalid or missing attributes" @@ -1188,7 +1307,7 @@ msgctxt "Popup/Import/Table.Label/Noun" msgid "Debug information" msgstr "Información de la canción" -#: front/src/components/ShortcutsModal.vue:75 +#: front/src/components/ShortcutsModal.vue:128 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Decrease volume" msgstr "Reducir volumen" @@ -1200,23 +1319,29 @@ msgstr "Reducir volumen" #: front/src/components/manage/library/AlbumsTable.vue:188 #: front/src/components/manage/library/ArtistsTable.vue:178 #: front/src/components/manage/library/LibrariesTable.vue:205 +#: front/src/components/manage/library/TagsTable.vue:179 #: front/src/components/manage/library/TracksTable.vue:188 #: front/src/components/manage/library/UploadsTable.vue:255 #: front/src/components/manage/moderation/InstancePolicyForm.vue:61 +#: front/src/components/manage/moderation/NotesThread.vue:24 +#: front/src/components/manage/moderation/NotesThread.vue:29 +#: front/src/components/manage/moderation/ReportCard.vue:360 #: front/src/components/manage/users/InvitationsTable.vue:167 -#: front/src/views/admin/library/AlbumDetail.vue:72 -#: front/src/views/admin/library/AlbumDetail.vue:77 -#: front/src/views/admin/library/ArtistDetail.vue:71 +#: front/src/views/admin/library/AlbumDetail.vue:78 +#: front/src/views/admin/library/AlbumDetail.vue:83 #: front/src/views/admin/library/ArtistDetail.vue:76 +#: front/src/views/admin/library/ArtistDetail.vue:81 #: front/src/views/admin/library/LibraryDetail.vue:58 #: front/src/views/admin/library/LibraryDetail.vue:63 -#: front/src/views/admin/library/TrackDetail.vue:71 -#: front/src/views/admin/library/TrackDetail.vue:76 +#: front/src/views/admin/library/TagDetail.vue:41 +#: front/src/views/admin/library/TagDetail.vue:46 +#: front/src/views/admin/library/TrackDetail.vue:77 +#: front/src/views/admin/library/TrackDetail.vue:82 #: front/src/views/admin/library/UploadDetail.vue:65 #: front/src/views/admin/library/UploadDetail.vue:70 #: front/src/views/content/libraries/FilesTable.vue:222 #: front/src/views/content/libraries/Form.vue:29 -#: src/views/playlists/Detail.vue:34 +#: src/views/playlists/Detail.vue:42 msgctxt "*/*/*/Verb" msgid "Delete" msgstr "Borrar" @@ -1241,7 +1366,20 @@ msgctxt "Popup/Moderation/Button.Label/Verb" msgid "Delete moderation rule" msgstr "Borrar regla de moderación" -#: front/src/views/playlists/Detail.vue:39 +#: front/src/components/auth/Settings.vue:274 +#: src/components/auth/Settings.vue:302 +#, fuzzy +msgctxt "*/*/Button.Label" +msgid "Delete my account" +msgstr "Crear mi cuenta" + +#: front/src/components/auth/Settings.vue:297 +#, fuzzy +msgctxt "*/*/Button.Label" +msgid "Delete my account…" +msgstr "Crear mi cuenta" + +#: front/src/views/playlists/Detail.vue:47 msgctxt "Popup/Playlist/Button.Label/Verb" msgid "Delete playlist" msgstr "Borrar lista de reproducción" @@ -1251,13 +1389,23 @@ msgctxt "Popup/Radio/Button.Label/Verb" msgid "Delete radio" msgstr "Borrar radio" -#: front/src/views/admin/library/AlbumDetail.vue:73 -#: front/src/views/admin/library/TrackDetail.vue:72 -msgctxt "Popup/Library/Title" -msgid "Delete this album?" -msgstr "¿Eliminar la biblioteca?" - -#: front/src/views/admin/library/ArtistDetail.vue:72 +#: front/src/components/manage/moderation/ReportCard.vue:357 +msgctxt "Content/Moderation/Button/Verb" +msgid "Delete reported object" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:358 +msgctxt "Content/Moderation/Popup/Header" +msgid "Delete reported object?" +msgstr "" + +#: front/src/views/admin/library/AlbumDetail.vue:79 +#: front/src/views/admin/library/TrackDetail.vue:78 +msgctxt "Popup/Library/Title" +msgid "Delete this album?" +msgstr "¿Eliminar la biblioteca?" + +#: front/src/views/admin/library/ArtistDetail.vue:77 msgctxt "Popup/Library/Title" msgid "Delete this artist?" msgstr "¿Eliminar la biblioteca?" @@ -1273,60 +1421,71 @@ msgctxt "Popup/Moderation/Title" msgid "Delete this moderation rule?" msgstr "¿Eliminar ésta regla de moderación?" +#: front/src/components/manage/moderation/NotesThread.vue:25 +#, fuzzy +msgctxt "Popup/Moderation/Title" +msgid "Delete this note?" +msgstr "¿Eliminar la biblioteca?" + #: front/src/components/library/EditCard.vue:94 msgctxt "Popup/Library/Title" msgid "Delete this suggestion?" msgstr "¿Eliminar ésta regla de moderación?" +#: front/src/views/admin/library/TagDetail.vue:42 +#, fuzzy +msgctxt "Popup/Library/Title" +msgid "Delete this tag?" +msgstr "¿Eliminar la biblioteca?" + #: front/src/views/admin/library/UploadDetail.vue:66 msgctxt "Popup/Library/Title" msgid "Delete this upload?" msgstr "¿Eliminar la biblioteca?" #: front/src/components/favorites/List.vue:35 -#: src/components/library/Albums.vue:26 -#: front/src/components/library/Artists.vue:26 +#: src/components/library/Albums.vue:30 +#: front/src/components/library/Artists.vue:30 #: src/components/library/Radios.vue:47 #: front/src/components/manage/library/AlbumsTable.vue:22 #: front/src/components/manage/library/ArtistsTable.vue:22 #: front/src/components/manage/library/EditsCardList.vue:40 #: front/src/components/manage/library/LibrariesTable.vue:31 +#: front/src/components/manage/library/TagsTable.vue:22 #: front/src/components/manage/library/TracksTable.vue:22 #: front/src/components/manage/library/UploadsTable.vue:41 #: front/src/components/manage/moderation/AccountsTable.vue:22 -#: front/src/components/manage/moderation/DomainsTable.vue:20 +#: front/src/components/manage/moderation/DomainsTable.vue:28 #: front/src/components/manage/users/UsersTable.vue:20 +#: front/src/views/admin/moderation/ReportsList.vue:45 #: front/src/views/content/libraries/FilesTable.vue:32 #: front/src/views/playlists/List.vue:28 msgctxt "Content/Search/Dropdown" msgid "Descending" msgstr "Descendente" -#: front/src/views/admin/library/LibraryDetail.vue:123 -msgctxt "*/*/*/Noun" -msgid "Description" -msgstr "Descripción" +#: front/src/components/manage/moderation/NoteForm.vue:37 +msgctxt "Content/Moderation/Placeholder" +msgid "Describe what actions have been taken, or any other related updates…" +msgstr "" #: front/src/components/library/radios/Builder.vue:25 +#: front/src/views/admin/library/LibraryDetail.vue:132 #: front/src/views/content/libraries/Form.vue:14 -msgctxt "Content/*/Input.Label/Noun" +msgctxt "*/*/*/Noun" msgid "Description" msgstr "Descripción" #: front/src/views/content/libraries/Card.vue:48 -#: src/views/content/remote/Card.vue:54 +#: src/views/content/remote/Card.vue:67 msgctxt "Content/Library/Card.Button.Label/Noun" msgid "Details" msgstr "Detalles" -#: front/src/views/admin/moderation/AccountsDetail.vue:491 +#: front/src/views/admin/moderation/AccountsDetail.vue:511 msgctxt "Content/Moderation/Help text" -msgid "" -"Determine how much content the user can upload. Leave empty to use the " -"default value of the instance." -msgstr "" -"Establecer cuanto contenido puede subir el usuario. Déjalo en blanco para " -"usar el valor por defecto de la instancia." +msgid "Determine how much content the user can upload. Leave empty to use the default value of the instance." +msgstr "Establecer cuanto contenido puede subir el usuario. Déjalo en blanco para usar el valor por defecto de la instancia." #: front/src/components/mixins/Translations.vue:8 #: front/src/components/mixins/Translations.vue:9 @@ -1335,38 +1494,51 @@ msgid "Determine the visibility level of your activity" msgstr "Determina el nivel de visibilidad de tu actividad" #: front/src/components/auth/Settings.vue:104 -#: front/src/components/auth/SubsonicTokenForm.vue:51 +#: front/src/components/auth/SubsonicTokenForm.vue:56 msgctxt "Popup/Settings/Button.Label" msgid "Disable access" msgstr "Desactivar acceso" -#: front/src/components/auth/SubsonicTokenForm.vue:48 +#: front/src/components/auth/SubsonicTokenForm.vue:53 msgctxt "Content/Settings/Button.Label/Verb" msgid "Disable Subsonic access" msgstr "Desactivar el acceso Subsonic" -#: front/src/components/auth/SubsonicTokenForm.vue:49 +#: front/src/components/auth/SubsonicTokenForm.vue:54 msgctxt "Popup/Settings/Title" msgid "Disable Subsonic API access?" msgstr "¿Desactivar el acceso al API de Subsonic?" +#: front/src/components/About.vue:118 src/components/About.vue:131 +#: front/src/components/About.vue:144 #: front/src/components/manage/moderation/InstancePolicyForm.vue:18 #: front/src/views/admin/moderation/AccountsDetail.vue:157 #: front/src/views/admin/moderation/AccountsDetail.vue:161 -msgctxt "*/*/*" +#, fuzzy +msgctxt "*/*/*/State of feature" msgid "Disabled" msgstr "Desactivado" -#: front/src/views/admin/library/TrackDetail.vue:145 +#: front/src/views/admin/library/TrackDetail.vue:151 msgctxt "*/*/*/Noun" msgid "Disc number" msgstr "" +#: front/src/components/Home.vue:157 +msgctxt "Content/Home/Link" +msgid "Discover everything you need to know about Funkwhale and its features" +msgstr "" + #: front/src/components/auth/SubsonicTokenForm.vue:13 msgctxt "Content/Settings/Link" msgid "Discover how to use Funkwhale from other apps" msgstr "Descubre cómo utilizar Funkwhale desde otras aplicaciones" +#: front/src/views/Notifications.vue:45 +msgctxt "Content/Notifications/Button.Label/Verb" +msgid "Discover other ways to help" +msgstr "" + #: front/src/views/admin/moderation/AccountsDetail.vue:132 msgctxt "'Content/*/*/Noun'" msgid "Display name" @@ -1379,13 +1551,14 @@ msgstr "Mostrar públicamente" #: front/src/components/manage/moderation/InstancePolicyForm.vue:122 msgctxt "Content/Moderation/Help text" -msgid "" -"Do not download any media file (audio, album cover, account avatar…) from " -"this account or domain. This will purge existing content as well." -msgstr "" -"No descargar ningún archivo media (audio, portada de album, avatar de " -"cuenta...) de ésta cuenta o dominio. Ésto borrará el contenido existente " -"también." +msgid "Do not download any media file (audio, album cover, account avatar…) from this account or domain. This will purge existing content as well." +msgstr "No descargar ningún archivo media (audio, portada de album, avatar de cuenta…) de ésta cuenta o dominio. Ésto borrará el contenido existente también." + +#: front/src/views/Notifications.vue:36 +#, fuzzy +msgctxt "Content/Notifications/Header" +msgid "Do you like Funkwhale?" +msgstr "Acerca de Funkwhale" #: front/src/components/playlists/Editor.vue:51 msgctxt "Popup/Playlist/Title" @@ -1397,7 +1570,7 @@ msgctxt "Modal/*/Title" msgid "Do you want to confirm this action?" msgstr "¿Quieres confirmar esta acción?" -#: front/src/views/playlists/Detail.vue:35 +#: front/src/views/playlists/Detail.vue:43 msgctxt "Popup/Playlist/Title/Call to action" msgid "Do you want to delete the playlist \"%{ playlist }\"?" msgstr "¿Quieres borrar la lista de reproducción \"%{ playlist }\"?" @@ -1407,6 +1580,12 @@ msgctxt "Popup/Radio/Title" msgid "Do you want to delete the radio \"%{ radio }\"?" msgstr "¿Quieres borrar la radio \"%{ radio }\"?" +#: front/src/components/auth/Settings.vue:298 +#, fuzzy +msgctxt "Popup/Settings/Title" +msgid "Do you want to delete your account?" +msgstr "¿Quieres restaurar tu cola de reproducción anterior?" + #: front/src/components/moderation/FilterModal.vue:3 msgctxt "Popup/Moderation/Title/Verb" msgid "Do you want to hide content from artist \"%{ name }\"?" @@ -1420,7 +1599,13 @@ msgid_plural "Do you want to launch %{ action } on %{ count } elements?" msgstr[0] "¿Quieres realizar la acción %{ action } en %{ count } elemento?" msgstr[1] "¿Quieres realizar la acción %{ action } en %{ count } elementos?" -#: front/src/components/Sidebar.vue:118 +#: front/src/components/moderation/ReportModal.vue:3 +#, fuzzy +msgctxt "Popup/Moderation/Title/Verb" +msgid "Do you want to report this object?" +msgstr "¿Quieres confirmar esta acción?" + +#: front/src/components/Sidebar.vue:122 msgctxt "Sidebar/Queue/Message" msgid "Do you want to restore your previous queue?" msgstr "¿Quieres restaurar tu cola de reproducción anterior?" @@ -1436,26 +1621,33 @@ msgstr "Documentación" #: front/src/components/manage/library/TracksTable.vue:42 #: front/src/components/manage/library/UploadsTable.vue:62 #: front/src/components/manage/moderation/AccountsTable.vue:40 -#: front/src/components/mixins/Translations.vue:60 -#: front/src/views/admin/library/AlbumDetail.vue:118 -#: front/src/views/admin/library/ArtistDetail.vue:107 -#: front/src/views/admin/library/LibraryDetail.vue:114 -#: front/src/views/admin/library/TrackDetail.vue:170 +#: front/src/components/manage/moderation/ReportCard.vue:169 +#: front/src/components/manage/moderation/ReportCard.vue:179 +#: front/src/components/mixins/Translations.vue:72 +#: front/src/views/admin/library/AlbumDetail.vue:124 +#: front/src/views/admin/library/ArtistDetail.vue:112 +#: front/src/views/admin/library/LibraryDetail.vue:123 +#: front/src/views/admin/library/TrackDetail.vue:176 #: front/src/views/admin/library/UploadDetail.vue:121 #: front/src/views/admin/moderation/AccountsDetail.vue:123 -#: front/src/components/mixins/Translations.vue:61 +#: front/src/components/mixins/Translations.vue:73 msgctxt "Content/Moderation/*/Noun" msgid "Domain" msgstr "Dominio" -#: front/src/views/admin/moderation/Base.vue:5 +#: front/src/views/admin/moderation/Base.vue:8 #: front/src/views/admin/moderation/DomainsList.vue:3 -#: front/src/views/admin/moderation/DomainsList.vue:48 +#: front/src/views/admin/moderation/DomainsList.vue:54 msgctxt "*/Moderation/*/Noun" msgid "Domains" msgstr "Dominios" -#: front/src/components/library/TrackBase.vue:39 +#: front/src/views/Notifications.vue:42 +msgctxt "Content/Notifications/Button.Label/Verb" +msgid "Donate" +msgstr "" + +#: front/src/components/library/TrackBase.vue:37 #: front/src/views/admin/library/UploadDetail.vue:58 msgctxt "Content/Track/Link/Verb" msgid "Download" @@ -1464,16 +1656,14 @@ msgstr "Descargar" #: front/src/components/playlists/Editor.vue:59 msgctxt "Content/Playlist/Paragraph/Call to action" msgid "Drag and drop rows to reorder tracks in the playlist" -msgstr "" -"Arrastra y suelta las filas para reordenar canciones en la lista de " -"reproducción" +msgstr "Arrastra y suelta las filas para reordenar canciones en la lista de reproducción" #: front/src/components/audio/track/Table.vue:10 #: front/src/components/library/TrackDetail.vue:30 -#: front/src/components/mixins/Translations.vue:56 +#: front/src/components/mixins/Translations.vue:68 #: front/src/views/admin/library/UploadDetail.vue:238 #: front/src/views/content/libraries/FilesTable.vue:60 -#: front/src/components/mixins/Translations.vue:57 +#: front/src/components/mixins/Translations.vue:69 msgctxt "Content/*/*" msgid "Duration" msgstr "Duración" @@ -1483,41 +1673,27 @@ msgctxt "Content/Signup/Message" msgid "E-mail address confirmed" msgstr "Dirección e-mail confirmada" -#: front/src/components/Home.vue:88 -msgctxt "Content/Home/Title" -msgid "Easy to use" -msgstr "Fácil de usar" - -#: front/src/components/library/AlbumBase.vue:68 -#: front/src/components/library/ArtistBase.vue:79 -#: front/src/components/library/TrackBase.vue:87 +#: front/src/components/auth/Settings.vue:246 +#: src/components/library/AlbumBase.vue:73 +#: front/src/components/library/ArtistBase.vue:84 +#: front/src/components/library/TrackBase.vue:89 #: front/src/components/manage/moderation/InstancePolicyCard.vue:45 #: front/src/components/radios/Card.vue:23 -#: src/views/admin/library/AlbumDetail.vue:65 -#: front/src/views/admin/library/ArtistDetail.vue:64 -#: front/src/views/admin/library/TrackDetail.vue:64 +#: src/views/admin/library/AlbumDetail.vue:71 +#: front/src/views/admin/library/ArtistDetail.vue:69 +#: front/src/views/admin/library/TrackDetail.vue:70 #: front/src/views/content/libraries/Detail.vue:9 #: src/views/playlists/Detail.vue:31 msgctxt "Content/*/Button.Label/Verb" msgid "Edit" msgstr "Editar" -#: front/src/components/auth/Settings.vue:246 -msgctxt "Content/Settings/Button.Label" -msgid "Edit" -msgstr "Editar" - #: front/src/components/auth/ApplicationEdit.vue:30 #: front/src/components/auth/ApplicationEdit.vue:75 msgctxt "Content/Applications/Title" msgid "Edit application" msgstr "Error al aplicar la acción" -#: front/src/components/About.vue:22 -msgctxt "Content/Settings/Button.Label/Verb" -msgid "Edit instance info" -msgstr "Editar la información de esta instancia" - #: front/src/components/manage/moderation/InstancePolicyForm.vue:3 msgctxt "Content/Moderation/Card.Title/Verb" msgid "Edit moderation rule" @@ -1538,23 +1714,20 @@ msgctxt "Content/*/Title" msgid "Edit this track" msgstr "Reproducir canción" -#: front/src/views/admin/library/AlbumDetail.vue:182 -#: front/src/views/admin/library/ArtistDetail.vue:171 +#: front/src/components/mixins/Translations.vue:116 +#: front/src/views/admin/library/AlbumDetail.vue:198 +#: front/src/views/admin/library/ArtistDetail.vue:186 #: front/src/views/admin/library/Base.vue:5 #: src/views/admin/library/EditsList.vue:24 -#: front/src/views/admin/library/TrackDetail.vue:234 +#: front/src/views/admin/library/TrackDetail.vue:250 +#: front/src/components/mixins/Translations.vue:117 msgctxt "*/Admin/*/Noun" msgid "Edits" msgstr "Editar" -#: front/src/components/mixins/Translations.vue:104 -#: front/src/components/mixins/Translations.vue:105 -msgctxt "Content/OAuth Scopes/Label" -msgid "Edits" -msgstr "Editar" - -#: front/src/components/auth/Signup.vue:30 +#: front/src/components/auth/SignupForm.vue:26 #: front/src/components/manage/users/UsersTable.vue:38 +#: front/src/components/moderation/ReportModal.vue:31 msgctxt "Content/*/*/Noun" msgid "Email" msgstr "Correo electrónico" @@ -1564,50 +1737,60 @@ msgctxt "Content/*/*" msgid "Email address" msgstr "Dirección de correo electrónico" -#: front/src/components/library/AlbumBase.vue:53 -#: front/src/components/library/ArtistBase.vue:64 -#: front/src/components/library/TrackBase.vue:72 +#: front/src/components/library/AlbumBase.vue:54 +#: front/src/components/library/ArtistBase.vue:65 +#: front/src/components/library/TrackBase.vue:70 +#: src/views/playlists/Detail.vue:38 msgctxt "Content/*/Button.Label/Verb" msgid "Embed" msgstr "Incrustar" -#: front/src/components/audio/EmbedWizard.vue:20 +#: front/src/components/audio/EmbedWizard.vue:30 msgctxt "Popup/Embed/Input.Label/Noun" msgid "Embed code" msgstr "Código empotrado" -#: front/src/components/library/AlbumBase.vue:26 +#: front/src/components/library/AlbumBase.vue:27 msgctxt "Popup/Album/Title/Verb" msgid "Embed this album on your website" msgstr "Inserta éste álbum en tu página web" -#: front/src/components/library/ArtistBase.vue:37 +#: front/src/components/library/ArtistBase.vue:38 msgctxt "Popup/Artist/Title/Verb" msgid "Embed this artist work on your website" msgstr "Inserta esta canción en tu página web" -#: front/src/components/library/TrackBase.vue:45 +#: front/src/views/playlists/Detail.vue:52 +#, fuzzy +msgctxt "Popup/Album/Title/Verb" +msgid "Embed this playlist on your website" +msgstr "Inserta éste álbum en tu página web" + +#: front/src/components/library/TrackBase.vue:43 msgctxt "Popup/Track/Title" msgid "Embed this track on your website" msgstr "Inserta esta canción en tu página web" -#: front/src/views/admin/moderation/AccountsDetail.vue:259 -#: front/src/views/admin/moderation/DomainsDetail.vue:187 +#: front/src/views/admin/moderation/AccountsDetail.vue:260 +#: front/src/views/admin/moderation/DomainsDetail.vue:224 msgctxt "Content/Moderation/Table.Label/Noun" msgid "Emitted library follows" msgstr "La biblioteca emitida sigue" -#: front/src/views/admin/moderation/AccountsDetail.vue:243 -#: front/src/views/admin/moderation/DomainsDetail.vue:171 +#: front/src/views/admin/moderation/AccountsDetail.vue:244 +#: front/src/views/admin/moderation/DomainsDetail.vue:208 msgctxt "Content/Moderation/Table.Label/Noun" msgid "Emitted messages" msgstr "Mensajes emitidos" +#: front/src/components/About.vue:114 src/components/About.vue:127 +#: front/src/components/About.vue:140 #: front/src/components/manage/moderation/InstancePolicyCard.vue:8 #: front/src/components/manage/moderation/InstancePolicyForm.vue:17 #: front/src/views/admin/moderation/AccountsDetail.vue:156 #: front/src/views/admin/moderation/AccountsDetail.vue:160 -msgctxt "*/*/*" +#, fuzzy +msgctxt "*/*/*/State of feature" msgid "Enabled" msgstr "Habilitado" @@ -1626,9 +1809,9 @@ msgctxt "Content/Search/Input.Placeholder" msgid "Enter a radio name…" msgstr "Introducir un nombre de radio…" -#: front/src/components/library/Albums.vue:119 +#: front/src/components/library/Albums.vue:128 msgctxt "Content/Search/Input.Placeholder" -msgid "Enter album title..." +msgid "Enter album title…" msgstr "" #: front/src/components/library/Artists.vue:116 @@ -1642,32 +1825,33 @@ msgid "Enter playlist name…" msgstr "Introduce un nombre de lista de reproducción…" #: front/src/views/auth/PasswordReset.vue:54 +#, fuzzy msgctxt "Content/Signup/Input.Placeholder" -msgid "Enter the email address binded to your account" +msgid "Enter the email address linked to your account" msgstr "Ingresa la dirección de correo electrónico vinculada a tu cuenta" -#: front/src/components/auth/Signup.vue:103 +#: front/src/components/auth/SignupForm.vue:96 msgctxt "Content/Signup/Form/Placeholder" msgid "Enter your email" msgstr "Introducir tu correo electrónico" -#: front/src/components/auth/Signup.vue:98 src/components/auth/Signup.vue:100 +#: front/src/components/auth/SignupForm.vue:91 +#: src/components/auth/SignupForm.vue:93 msgctxt "Content/Signup/Form/Placeholder" msgid "Enter your invitation code (case insensitive)" -msgstr "" -"Introducir tu código de invitación (no distingue mayúsculas de minúsculas)" +msgstr "Introducir tu código de invitación (no distingue mayúsculas de minúsculas)" #: front/src/components/metadata/Search.vue:114 msgctxt "Content/Library/Input.Placeholder/Verb" msgid "Enter your search query…" msgstr "Introduce tu búsqueda…" -#: front/src/components/auth/Signup.vue:102 +#: front/src/components/auth/SignupForm.vue:95 msgctxt "Content/Signup/Form/Placeholder" msgid "Enter your username" msgstr "Introduce tu nombre de usuario" -#: front/src/components/auth/Login.vue:83 +#: front/src/components/auth/LoginForm.vue:81 msgctxt "Content/Login/Input.Placeholder" msgid "Enter your username or email" msgstr "Introduce tu nombre de usuario o correo electrónico" @@ -1684,7 +1868,7 @@ msgctxt "Popup/Import/Table.Label/Noun" msgid "Error detail" msgstr "Informes de error" -#: front/src/views/admin/Settings.vue:87 +#: front/src/views/admin/Settings.vue:89 msgctxt "Content/Admin/Menu" msgid "Error reporting" msgstr "Informes de error" @@ -1740,16 +1924,12 @@ msgctxt "Popup/Moderation/Error message" msgid "Error while fetching application data" msgstr "Error al crear la invitación" -#: front/src/views/admin/moderation/DomainsDetail.vue:118 +#: front/src/views/admin/moderation/DomainsDetail.vue:155 msgctxt "Content/Moderation/Table" msgid "Error while fetching node info" msgstr "Error al obtener información del nodo" #: front/src/components/admin/SettingsGroup.vue:5 -msgctxt "Content/Settings/Error message.Title" -msgid "Error while saving settings" -msgstr "Error al guardar los cambios" - #: front/src/components/federation/FetchButton.vue:73 msgctxt "Content/*/Error message.Title" msgid "Error while saving settings" @@ -1760,6 +1940,18 @@ msgctxt "Content/Library/Error message.Title" msgid "Error while submitting edit" msgstr "Error al guardar los cambios" +#: front/src/components/manage/moderation/NoteForm.vue:3 +#, fuzzy +msgctxt "Content/Moderation/Error message.Title" +msgid "Error while submitting note" +msgstr "Error al guardar los cambios" + +#: front/src/components/moderation/ReportModal.vue:11 +#, fuzzy +msgctxt "Popup/Moderation/Error message" +msgid "Error while submitting report" +msgstr "Error al guardar los cambios" + #: front/src/components/mixins/Translations.vue:32 #: front/src/components/mixins/Translations.vue:33 msgctxt "Content/Library/Table/Short" @@ -1794,9 +1986,14 @@ msgctxt "Content/Radio/Table.Label/Verb" msgid "Exclude" msgstr "Excluir" +#: front/src/components/common/CollapseLink.vue:2 +msgctxt "*/*/Button,Label" +msgid "Expand" +msgstr "" + #: front/src/components/manage/users/InvitationsTable.vue:41 -#: front/src/components/mixins/Translations.vue:49 -#: front/src/components/mixins/Translations.vue:50 +#: front/src/components/mixins/Translations.vue:59 +#: front/src/components/mixins/Translations.vue:60 msgctxt "Content/Admin/Table.Label/Noun" msgid "Expiration date" msgstr "Fecha de caducidad" @@ -1813,16 +2010,8 @@ msgstr "Caducada/usada" #: front/src/components/manage/moderation/InstancePolicyForm.vue:110 msgctxt "Content/Moderation/Help text" -msgid "" -"Explain why you're applying this policy. Depending on your instance " -"configuration, this will help you remember why you acted on this account or " -"domain, and may be displayed publicly to help users understand what " -"moderation rules are in place." -msgstr "" -"Explique por qué está aplicando esta polÃtica. Dependiendo de la " -"configuración de su instancia, esto le ayudará a recordar por qué actuó en " -"esta cuenta o dominio, y puede mostrarse públicamente para ayudar a los " -"usuarios a comprender qué reglas de moderación existen." +msgid "Explain why you're applying this policy. Depending on your instance configuration, this will help you remember why you acted on this account or domain, and may be displayed publicly to help users understand what moderation rules are in place." +msgstr "Explique por qué está aplicando esta polÃtica. Dependiendo de la configuración de su instancia, esto le ayudará a recordar por qué actuó en esta cuenta o dominio, y puede mostrarse públicamente para ayudar a los usuarios a comprender qué reglas de moderación existen." #: front/src/components/manage/library/UploadsTable.vue:25 #: front/src/views/content/libraries/FilesTable.vue:16 @@ -1830,31 +2019,28 @@ msgctxt "Content/Library/Dropdown" msgid "Failed" msgstr "Ha fallado" -#: front/src/views/content/remote/Card.vue:62 +#: front/src/views/content/remote/Card.vue:75 msgctxt "Content/Library/Card.List item/Noun" msgid "Failed tracks:" msgstr "Pistas fallidas:" -#: front/src/views/admin/library/AlbumDetail.vue:165 -#: front/src/views/admin/library/ArtistDetail.vue:154 -#: front/src/views/admin/library/TrackDetail.vue:217 +#: front/src/views/admin/library/AlbumDetail.vue:171 +#: front/src/views/admin/library/ArtistDetail.vue:159 +#: front/src/views/admin/library/TrackDetail.vue:223 msgctxt "*/*/*" msgid "Favorited tracks" msgstr "Pistas fallidas:" #: front/src/components/Sidebar.vue:66 +#: src/components/mixins/Translations.vue:88 +#: front/src/components/mixins/Translations.vue:89 msgctxt "Sidebar/Favorites/List item.Link/Noun" msgid "Favorites" msgstr "Favoritos" -#: front/src/components/mixins/Translations.vue:76 -#: front/src/components/mixins/Translations.vue:77 -msgctxt "Content/OAuth Scopes/Label" -msgid "Favorites" -msgstr "Favoritos" - -#: front/src/views/admin/Settings.vue:84 -msgctxt "Content/Admin/Menu" +#: front/src/components/About.vue:110 src/views/admin/Settings.vue:84 +#, fuzzy +msgctxt "*/*/*" msgid "Federation" msgstr "Federación" @@ -1878,6 +2064,11 @@ msgctxt "Content/Radio/Table.Label/Noun" msgid "Filter name" msgstr "Nombre del filtro" +#: front/src/components/Home.vue:118 +msgctxt "Content/Home/Link" +msgid "Find another pod" +msgstr "" + #: front/src/components/manage/library/UploadsTable.vue:26 #: front/src/components/mixins/Translations.vue:36 #: front/src/views/content/libraries/FilesTable.vue:17 @@ -1887,25 +2078,31 @@ msgid "Finished" msgstr "Terminado" #: front/src/components/manage/moderation/AccountsTable.vue:42 -#: front/src/components/manage/moderation/DomainsTable.vue:41 -#: front/src/views/admin/library/AlbumDetail.vue:149 -#: front/src/views/admin/library/ArtistDetail.vue:138 -#: front/src/views/admin/library/LibraryDetail.vue:153 -#: front/src/views/admin/library/TrackDetail.vue:201 +#: front/src/components/manage/moderation/DomainsTable.vue:49 +#: front/src/views/admin/library/AlbumDetail.vue:155 +#: front/src/views/admin/library/ArtistDetail.vue:143 +#: front/src/views/admin/library/LibraryDetail.vue:162 +#: front/src/views/admin/library/TagDetail.vue:98 +#: front/src/views/admin/library/TrackDetail.vue:207 #: front/src/views/admin/library/UploadDetail.vue:167 -#: front/src/views/admin/moderation/AccountsDetail.vue:235 -#: front/src/views/admin/moderation/DomainsDetail.vue:151 +#: front/src/views/admin/moderation/AccountsDetail.vue:236 +#: front/src/views/admin/moderation/DomainsDetail.vue:188 msgctxt "Content/Moderation/Table.Label/Short (Value is a date)" msgid "First seen" msgstr "Primera vista" -#: front/src/components/mixins/Translations.vue:46 -#: front/src/components/mixins/Translations.vue:47 +#: front/src/components/mixins/Translations.vue:56 +#: front/src/components/mixins/Translations.vue:57 msgctxt "Content/Moderation/Dropdown/Noun" msgid "First seen date" msgstr "Primera fecha de visualización" -#: front/src/views/content/remote/Card.vue:87 +#: front/src/components/ShortcutsModal.vue:64 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Focus searchbar" +msgstr "" + +#: front/src/views/content/remote/Card.vue:100 msgctxt "Content/Library/Card.Button.Label/Verb" msgid "Follow" msgstr "Seguir" @@ -1915,40 +2112,34 @@ msgctxt "Content/Library/Title/Verb" msgid "Follow remote libraries" msgstr "Seguir bibliotecas remotas" -#: front/src/views/content/remote/Card.vue:92 +#: front/src/views/content/remote/Card.vue:105 msgctxt "Content/Library/Card.Paragraph" msgid "Follow request pending approval" msgstr "Solicitud de seguimiento pendiente de aprobación" -#: front/src/components/mixins/Translations.vue:64 -#: front/src/views/admin/library/LibraryDetail.vue:161 +#: front/src/components/manage/library/LibrariesTable.vue:53 +#: front/src/components/mixins/Translations.vue:76 +#: front/src/views/admin/library/LibraryDetail.vue:170 #: front/src/views/content/libraries/Detail.vue:7 -#: front/src/components/mixins/Translations.vue:65 +#: front/src/components/mixins/Translations.vue:77 msgctxt "Content/Federation/*/Noun" msgid "Followers" msgstr "Seguidores" -#: front/src/components/manage/library/LibrariesTable.vue:53 -msgctxt "Content/*/*/Noun" -msgid "Followers" -msgstr "Seguidores" - -#: front/src/views/content/remote/Card.vue:103 +#: front/src/views/content/remote/Card.vue:116 msgctxt "Content/Library/Card.Paragraph" msgid "Following" msgstr "Siguiendo" -#: front/src/components/mixins/Translations.vue:84 -#: front/src/components/mixins/Translations.vue:85 +#: front/src/components/mixins/Translations.vue:96 +#: front/src/components/mixins/Translations.vue:97 msgctxt "Content/OAuth Scopes/Label" msgid "Follows" msgstr "Seguir" -#: front/src/components/library/TrackBase.vue:17 +#: front/src/components/library/TrackBase.vue:245 msgctxt "Content/Track/Paragraph" -msgid "" -"From album <a class=\"internal\" href=\"%{ albumUrl }\">%{ album }</a> by <a" -" class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" +msgid "From album <a class=\"internal\" href=\"%{ albumUrl }\">%{ album }</a> by <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" msgstr "" #: front/src/components/auth/Authorize.vue:28 @@ -1958,38 +2149,21 @@ msgstr "Desactivar acceso" #: front/src/components/auth/SubsonicTokenForm.vue:7 msgctxt "Content/Settings/Paragraph'" -msgid "" -"Funkwhale is compatible with other music players that support the Subsonic " -"API." -msgstr "" -"Funkwhale es compatible con otros reproductores de música que soportan la " -"API Subsonic." - -#: front/src/components/Home.vue:90 -msgctxt "Content/Home/Paragraph" -msgid "Funkwhale is dead simple to use." -msgstr "Funkwhale es facilÃsimo de usar." - -#: front/src/components/Home.vue:39 -msgctxt "Content/Home/Paragraph" -msgid "" -"Funkwhale is designed to make it easy to listen to music you like, or to " -"discover new artists." -msgstr "" -"Funkwhale está diseñado para que sea fácil escuchar la música que te gusta, " -"o descubrir nuevos artistas." +msgid "Funkwhale is compatible with other music players that support the Subsonic API." +msgstr "Funkwhale es compatible con otros reproductores de música que soportan la API Subsonic." -#: front/src/components/Home.vue:111 +#: front/src/components/Home.vue:88 +#, fuzzy msgctxt "Content/Home/Paragraph" -msgid "Funkwhale is free and gives you control on your music." +msgid "Funkwhale is free and developped by a friendly community of volunteers." msgstr "Funkwhale es gratis y te da el control de tu música." -#: front/src/components/Home.vue:66 -msgctxt "Content/Home/Paragraph" -msgid "Funkwhale takes care of handling your music" -msgstr "Funkwhale te ayuda a gestionar tu música" +#: front/src/components/About.vue:78 +msgctxt "*/*/*" +msgid "Funkwhale version" +msgstr "" -#: front/src/components/ShortcutsModal.vue:38 +#: front/src/components/ShortcutsModal.vue:56 msgctxt "Popup/Keyboard shortcuts/Title" msgid "General shortcuts" msgstr "Atajos generales" @@ -1999,35 +2173,17 @@ msgctxt "Content/Admin/Button.Label/Verb" msgid "Get a new invitation" msgstr "Obtener una nueva invitación" -#: front/src/components/Home.vue:13 -msgctxt "Content/Home/Button.Label/Verb" -msgid "Get me to the library" -msgstr "Llévame a la biblioteca" - -#: front/src/components/Home.vue:70 -msgctxt "Content/Home/List item/Verb" -msgid "" -"Get quality metadata about your music thanks to <a href=\"%{ url }\" " -"target=\"_blank\">MusicBrainz</a>" -msgstr "" -"Obtén metadatos de calidad para tu música con <a href=\"%{ url }\" " -"target=\"_blank\">MusicBrainz</a>" - #: front/src/views/content/Home.vue:12 src/views/content/Home.vue:19 msgctxt "Content/Library/Button.Label/Verb" msgid "Get started" msgstr "Comenzar" -#: front/src/components/Footer.vue:37 +#: front/src/components/Footer.vue:45 +#: src/components/library/ImportStatusModal.vue:45 msgctxt "Footer/*/Link" msgid "Getting help" msgstr "Obteniendo ayuda" -#: front/src/components/library/ImportStatusModal.vue:45 -msgctxt "Popup/Import/Table.Label/Noun" -msgid "Getting help" -msgstr "Obteniendo ayuda" - #: front/src/components/common/ActionTable.vue:35 #: front/src/components/common/ActionTable.vue:56 msgctxt "Content/*/Button.Label/Short, Verb" @@ -2039,11 +2195,21 @@ msgctxt "Content/*/Button.Label/Verb" msgid "Go to home page" msgstr "Ir a la página principal" +#: front/src/views/Notifications.vue:27 src/views/Notifications.vue:61 +msgctxt "Content/Notifications/Button.Label" +msgid "Got it!" +msgstr "" + #: front/src/components/auth/Settings.vue:128 msgctxt "Content/Settings/Title" msgid "Hidden artists" msgstr "Explorando artistas" +#: front/src/components/About.vue:155 +msgctxt "*/*/*/Verb" +msgid "Hide" +msgstr "" + #: front/src/components/manage/moderation/InstancePolicyForm.vue:114 msgctxt "Content/Moderation/Help text" msgid "Hide account or domain content, except from followers." @@ -2054,12 +2220,12 @@ msgctxt "Popup/*/Button.Label" msgid "Hide content" msgstr "Añadir contenido" -#: front/src/components/audio/PlayButton.vue:26 +#: front/src/components/audio/PlayButton.vue:31 msgctxt "*/Queue/Dropdown/Button/Label/Short" msgid "Hide content from this artist" msgstr "" -#: front/src/components/audio/Player.vue:643 +#: front/src/components/audio/Player.vue:669 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Hide content from this artist…" msgstr "" @@ -2069,39 +2235,29 @@ msgctxt "Head/Home/Title" msgid "Home" msgstr "Inicio" -#: front/src/components/instance/Stats.vue:36 -msgctxt "Content/About/Paragraph/Unit" -msgid "Hours of music" -msgstr "Horas de música" - #: front/src/components/auth/SubsonicTokenForm.vue:10 msgctxt "Content/Settings/Paragraph" -msgid "" -"However, accessing Funkwhale from those clients require a separate password " -"you can set below." -msgstr "" -"Sin embargo, acceder a Funkwhale desde estos clientes requiere una " -"contraseña distinta que podrás configurar a continuación." +msgid "However, accessing Funkwhale from those clients require a separate password you can set below." +msgstr "Sin embargo, acceder a Funkwhale desde estos clientes requiere una contraseña distinta que podrás configurar a continuación." #: front/src/views/auth/PasswordResetConfirm.vue:24 +#, fuzzy msgctxt "Content/Signup/Paragraph" -msgid "" -"If the email address provided in the previous step is valid and binded to a " -"user account, you should receive an email with reset instructions in the " -"next couple of minutes." -msgstr "" -"Si la dirección de correo electrónico proporcionada en el paso anterior es " -"válida y asociada a una cuenta de usuario, deberÃas recibir un correo " -"electrónico con las instrucciones de restablecimiento dentro de unos " -"minutos." +msgid "If the email address provided in the previous step is valid and linked to a user account, you should receive an email with reset instructions in the next couple of minutes." +msgstr "Si la dirección de correo electrónico proporcionada en el paso anterior es válida y asociada a una cuenta de usuario, deberÃas recibir un correo electrónico con las instrucciones de restablecimiento dentro de unos minutos." #: front/src/components/auth/Settings.vue:205 msgctxt "Content/Applications/Paragraph" -msgid "" -"If you authorize third-party applications to access your data, those " -"applications will be listed here." +msgid "If you authorize third-party applications to access your data, those applications will be listed here." msgstr "" +#: front/src/components/mixins/Translations.vue:46 +#: front/src/components/mixins/Translations.vue:47 +#, fuzzy +msgctxt "Content/Moderation/Dropdown" +msgid "Illegal content" +msgstr "Añadir contenido" + #: front/src/components/library/ImportStatusModal.vue:3 msgctxt "Popup/Import/Title" msgid "Import detail" @@ -2113,14 +2269,10 @@ msgid "Import reference" msgstr "Fuente de la importación" #: front/src/components/manage/library/UploadsTable.vue:20 -#: front/src/views/content/libraries/FilesTable.vue:11 -#: front/src/views/content/libraries/FilesTable.vue:59 -msgctxt "Content/Library/*/Noun" -msgid "Import status" -msgstr "Estado de la importación" - #: front/src/components/manage/library/UploadsTable.vue:64 #: front/src/views/admin/library/UploadDetail.vue:131 +#: front/src/views/content/libraries/FilesTable.vue:11 +#: front/src/views/content/libraries/FilesTable.vue:59 msgctxt "Content/*/*/Noun" msgid "Import status" msgstr "Estado de la importación" @@ -2161,12 +2313,12 @@ msgctxt "Popup/Moderation/List item" msgid "In radio suggestions" msgstr "" -#: front/src/components/manage/users/UsersTable.vue:54 +#: front/src/components/manage/users/UsersTable.vue:55 msgctxt "Content/Admin/Table" msgid "Inactive" msgstr "Inactivo" -#: front/src/components/ShortcutsModal.vue:71 +#: front/src/components/ShortcutsModal.vue:124 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Increase volume" msgstr "Aumentar volument" @@ -2185,7 +2337,7 @@ msgctxt "Content/Settings/Dropdown/Short" msgid "Instance" msgstr "Datos de Instancia" -#: front/src/views/admin/moderation/DomainsDetail.vue:71 +#: front/src/views/admin/moderation/DomainsDetail.vue:99 msgctxt "Content/Moderation/Title" msgid "Instance data" msgstr "Datos de Instancia" @@ -2210,21 +2362,25 @@ msgctxt "Popup/Instance/Input.Label/Noun" msgid "Instance URL" msgstr "Datos de Instancia" +#: front/src/components/manage/moderation/ReportCard.vue:92 +#: front/src/components/manage/moderation/ReportCard.vue:203 +msgctxt "Content/*/*/Noun" +msgid "Internal notes" +msgstr "" + #: front/src/components/library/FileUpload.vue:268 msgctxt "Content/Library/Help text" -msgid "" -"Invalid file type, ensure you are uploading an audio file. Supported file " -"extensions are %{ extensions }" -msgstr "" -"Tipo de archivo no válido, asegúrese de que está cargando un archivo de " -"audio. Las extensiones de archivo admitidas son %{ extensions }" +msgid "Invalid file type, ensure you are uploading an audio file. Supported file extensions are %{ extensions }" +msgstr "Tipo de archivo no válido, asegúrese de que está cargando un archivo de audio. Las extensiones de archivo admitidas son %{ extensions }" #: front/src/components/library/ImportStatusModal.vue:139 +#: front/src/components/mixins/Translations.vue:45 +#: front/src/components/mixins/Translations.vue:46 msgctxt "Popup/Import/Error.Label" msgid "Invalid metadata" msgstr "" -#: front/src/components/auth/Signup.vue:44 +#: front/src/components/auth/SignupForm.vue:40 #: front/src/components/manage/users/InvitationForm.vue:11 msgctxt "Content/*/Input.Label" msgid "Invitation code" @@ -2236,7 +2392,13 @@ msgctxt "*/Admin/*/Noun" msgid "Invitations" msgstr "Invitaciones" -#: front/src/components/Footer.vue:41 +#: front/src/components/manage/moderation/DomainsTable.vue:9 +#: front/src/views/admin/moderation/DomainsDetail.vue:106 +msgctxt "Content/Moderation/*/Adjective" +msgid "Is present on allow-list" +msgstr "" + +#: front/src/components/Footer.vue:49 msgctxt "Footer/*/List item.Link" msgid "Issue tracker" msgstr "Sistema de seguimiento de incidentes" @@ -2246,17 +2408,18 @@ msgctxt "Popup/Instance/Error message.Title" msgid "It is not possible to connect to the given URL" msgstr "" -#: front/src/components/Home.vue:50 -msgctxt "Content/Home/List item/Verb" -msgid "Keep a track of your favorite songs" -msgstr "Apunta tus canciones favoritas" +#: front/src/components/mixins/Translations.vue:65 +#: front/src/components/mixins/Translations.vue:66 +msgctxt "*/*/*/Noun" +msgid "Items" +msgstr "" #: front/src/components/Footer.vue:33 src/components/ShortcutsModal.vue:3 msgctxt "*/*/*/Noun" msgid "Keyboard shortcuts" msgstr "Atajos de teclado" -#: front/src/views/admin/moderation/DomainsDetail.vue:161 +#: front/src/views/admin/moderation/DomainsDetail.vue:198 msgctxt "Content/Moderation/Table.Label.Link" msgid "Known accounts" msgstr "Cuentas conocidas" @@ -2267,15 +2430,15 @@ msgid "Known libraries" msgstr "Bibliotecas conocidas" #: front/src/components/manage/users/UsersTable.vue:41 -#: front/src/components/mixins/Translations.vue:58 -#: front/src/views/admin/moderation/AccountsDetail.vue:205 -#: front/src/components/mixins/Translations.vue:59 +#: front/src/components/mixins/Translations.vue:70 +#: front/src/views/admin/moderation/AccountsDetail.vue:206 +#: front/src/components/mixins/Translations.vue:71 msgctxt "Content/Profile/Table.Label/Short, Noun (Value is a date)" msgid "Last activity" msgstr "Última actividad" -#: front/src/views/admin/moderation/AccountsDetail.vue:188 -#: front/src/views/admin/moderation/DomainsDetail.vue:78 +#: front/src/views/admin/moderation/AccountsDetail.vue:189 +#: front/src/views/admin/moderation/DomainsDetail.vue:115 msgctxt "Content/*/Table.Label" msgid "Last checked" msgstr "Última comprobación" @@ -2290,13 +2453,13 @@ msgctxt "Content/Moderation/Table.Label/Noun" msgid "Last seen" msgstr "Visto por última vez" -#: front/src/components/mixins/Translations.vue:47 -#: front/src/components/mixins/Translations.vue:48 +#: front/src/components/mixins/Translations.vue:57 +#: front/src/components/mixins/Translations.vue:58 msgctxt "Content/Moderation/Dropdown/Noun" msgid "Last seen date" msgstr "Última visualización" -#: front/src/views/content/remote/Card.vue:60 +#: front/src/views/content/remote/Card.vue:73 msgctxt "Content/Library/Card.List item/Noun" msgid "Last update:" msgstr "Última actualización:" @@ -2306,60 +2469,60 @@ msgctxt "Modal/*/Button.Label/Short, Verb" msgid "Launch" msgstr "Iniciar" -#: front/src/components/Home.vue:10 -msgctxt "Content/Home/Button.Label/Verb" -msgid "Learn more about this instance" -msgstr "Aprender más acerca de esta instancia" +#: front/src/components/Home.vue:35 +#, fuzzy +msgctxt "Content/Home/Link" +msgid "Learn more" +msgstr "Cargando seguidores…" #: front/src/components/manage/users/InvitationForm.vue:58 msgctxt "Content/Admin/Input.Placeholder" msgid "Leave empty for a random code" msgstr "Dejar en blanco para un código aleatorio" -#: front/src/components/audio/EmbedWizard.vue:7 +#: front/src/components/audio/EmbedWizard.vue:17 msgctxt "Popup/Embed/Paragraph" msgid "Leave empty for a responsive widget" msgstr "Dejar en blanco para widget responsive" -#: front/src/views/admin/library/AlbumDetail.vue:232 -#: front/src/views/admin/library/ArtistDetail.vue:221 -#: front/src/views/admin/library/TrackDetail.vue:284 -#: front/src/views/admin/moderation/AccountsDetail.vue:327 -#: front/src/views/admin/moderation/DomainsDetail.vue:234 -#: front/src/views/content/Base.vue:5 +#: front/src/components/mixins/Translations.vue:64 +#: front/src/components/mixins/Translations.vue:65 msgctxt "*/*/*/Noun" -msgid "Libraries" -msgstr "Bibliotecas" +msgid "Length" +msgstr "" +#: front/src/views/admin/library/AlbumDetail.vue:248 +#: front/src/views/admin/library/ArtistDetail.vue:236 #: front/src/views/admin/library/Base.vue:17 #: front/src/views/admin/library/LibrariesList.vue:24 -msgctxt "*/*/*" +#: front/src/views/admin/library/TrackDetail.vue:300 +#: front/src/views/admin/moderation/AccountsDetail.vue:339 +#: front/src/views/admin/moderation/DomainsDetail.vue:271 +#: front/src/views/content/Base.vue:5 +msgctxt "*/*/*/Noun" msgid "Libraries" msgstr "Bibliotecas" -#: front/src/components/mixins/Translations.vue:72 -#: front/src/components/mixins/Translations.vue:73 +#: front/src/components/mixins/Translations.vue:84 +#: front/src/components/mixins/Translations.vue:85 msgctxt "Content/OAuth Scopes/Label" msgid "Libraries and uploads" msgstr "Biblioteca actualizada" #: front/src/views/content/libraries/Form.vue:2 msgctxt "Content/Library/Paragraph" -msgid "" -"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." -msgstr "" -"Las bibliotecas te ayudan a organizar tu colección de música. Puedes subir " -"tu propia colección de musica a Funkwhale y compartirla con tus familiares y" -" amigos." +msgid "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." +msgstr "Las bibliotecas te ayudan a organizar tu colección de música. Puedes subir tu propia colección de musica a Funkwhale y compartirla con tus familiares y amigos." -#: front/src/components/Sidebar.vue:85 src/components/instance/Stats.vue:30 +#: front/src/components/Sidebar.vue:85 #: front/src/components/manage/library/UploadsTable.vue:60 -#: front/src/components/manage/users/UsersTable.vue:173 +#: front/src/components/manage/users/UsersTable.vue:174 +#: front/src/components/mixins/Report.vue:77 #: front/src/views/admin/library/UploadDetail.vue:144 -#: front/src/views/admin/moderation/AccountsDetail.vue:498 -msgctxt "*/*/*" +#: front/src/views/admin/moderation/AccountsDetail.vue:518 src/entities.js:132 +#: front/src/components/mixins/Report.vue:78 +#, fuzzy +msgctxt "*/*/*/Noun" msgid "Library" msgstr "Biblioteca" @@ -2390,21 +2553,37 @@ msgstr "Biblioteca actualizada" #: front/src/components/library/TrackDetail.vue:19 #: front/src/components/manage/library/TracksTable.vue:43 -#: front/src/views/admin/library/TrackDetail.vue:159 src/edits.js:61 +#: front/src/views/admin/library/TrackDetail.vue:165 src/edits.js:84 +#: front/src/entities.js:115 msgctxt "Content/*/*/Noun" msgid "License" msgstr "Licencia" -#: front/src/views/admin/library/AlbumDetail.vue:157 -#: front/src/views/admin/library/ArtistDetail.vue:146 -#: front/src/views/admin/library/TrackDetail.vue:209 -msgctxt "*/*/*/Noun" -msgid "Listenings" +#: front/src/components/Footer.vue:90 +msgctxt "Footer/Settings/Dropdown.Label/Theme name" +msgid "Light" msgstr "" -#: front/src/components/mixins/Translations.vue:80 -#: front/src/components/mixins/Translations.vue:81 -msgctxt "Content/OAuth Scopes/Label" +#: front/src/views/admin/library/AlbumDetail.vue:188 +#: front/src/views/admin/library/ArtistDetail.vue:176 +#: front/src/views/admin/library/LibraryDetail.vue:179 +#: front/src/views/admin/library/TrackDetail.vue:240 +#: front/src/views/admin/moderation/AccountsDetail.vue:269 +msgctxt "Content/Moderation/Table.Label/Noun" +msgid "Linked reports" +msgstr "" + +#: front/src/components/Home.vue:135 +msgctxt "Content/Home/Link" +msgid "Listen to public albums and playlists shared on this pod" +msgstr "" + +#: front/src/components/mixins/Translations.vue:92 +#: front/src/views/admin/library/AlbumDetail.vue:163 +#: front/src/views/admin/library/ArtistDetail.vue:151 +#: front/src/views/admin/library/TrackDetail.vue:215 +#: front/src/components/mixins/Translations.vue:93 +msgctxt "*/*/*/Noun" msgid "Listenings" msgstr "" @@ -2430,7 +2609,7 @@ msgctxt "Content/Library/Paragraph" msgid "Loading library data…" msgstr "Cargando datos de la biblioteca…" -#: front/src/views/Notifications.vue:19 +#: front/src/views/Notifications.vue:84 msgctxt "Content/Notifications/Paragraph" msgid "Loading notifications…" msgstr "Cargando notificaciones…" @@ -2455,6 +2634,7 @@ msgstr "Cargando tus favoritos…" #: front/src/components/manage/library/LibrariesTable.vue:75 #: front/src/components/manage/library/TracksTable.vue:71 #: front/src/components/manage/library/UploadsTable.vue:99 +#: front/src/components/manage/moderation/ReportCard.vue:173 #: front/src/views/admin/library/AlbumDetail.vue:19 #: front/src/views/admin/library/ArtistDetail.vue:18 #: front/src/views/admin/library/LibraryDetail.vue:18 @@ -2470,12 +2650,12 @@ msgctxt "Content/Moderation/*/Short, Noun" msgid "Local account" msgstr "Mi cuenta" -#: front/src/components/auth/Login.vue:84 +#: front/src/components/Home.vue:96 src/views/auth/Login.vue:29 msgctxt "Head/Login/Title" msgid "Log In" msgstr "Iniciar sesión" -#: front/src/components/auth/Login.vue:4 +#: front/src/views/auth/Login.vue:4 msgctxt "Content/Login/Title/Verb" msgid "Log in to your Funkwhale account" msgstr "Iniciar sesión con tu cuenta de Funkwhale" @@ -2490,7 +2670,7 @@ msgctxt "Sidebar/Profile/List item.Link" msgid "Logged in as %{ username }" msgstr "Sesión iniciada como %{ username }" -#: front/src/components/Sidebar.vue:54 src/components/auth/Login.vue:42 +#: front/src/components/Sidebar.vue:54 src/components/auth/LoginForm.vue:41 msgctxt "*/Login/*/Verb" msgid "Login" msgstr "Iniciar sesión" @@ -2510,40 +2690,40 @@ msgctxt "Content/Library/Paragraph" msgid "Looks like you don't have a library, it's time to create one." msgstr "Parece que aún no tienes ninguna biblioteca, Es hora de crear una!" -#: front/src/components/audio/Player.vue:632 -#: src/components/audio/Player.vue:633 +#: front/src/components/audio/Player.vue:658 +#: src/components/audio/Player.vue:659 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Looping disabled. Click to switch to single-track looping." -msgstr "" -"Bucle deshabilitado. Pulsa para cambiar a reproducción en bucle de la " -"canción actual." +msgstr "Bucle deshabilitado. Pulsa para cambiar a reproducción en bucle de la canción actual." -#: front/src/components/audio/Player.vue:635 -#: src/components/audio/Player.vue:636 +#: front/src/components/audio/Player.vue:661 +#: src/components/audio/Player.vue:662 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Looping on a single track. Click to switch to whole queue looping." -msgstr "" -"Bucle de la canción actual. Pulsa para cambiar a la reproducción en bucle de" -" la cola de reproducción entera." +msgstr "Bucle de la canción actual. Pulsa para cambiar a la reproducción en bucle de la cola de reproducción entera." -#: front/src/components/audio/Player.vue:638 -#: src/components/audio/Player.vue:639 +#: front/src/components/audio/Player.vue:664 +#: src/components/audio/Player.vue:665 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Looping on whole queue. Click to disable looping." -msgstr "" -"Bucle de la cola de reproducción entera. Pulsa para desactivar la " -"reproducción en bucle." +msgstr "Bucle de la cola de reproducción entera. Pulsa para desactivar la reproducción en bucle." -#: front/src/components/Sidebar.vue:223 +#: front/src/components/Sidebar.vue:230 msgctxt "Sidebar/*/Hidden text" msgid "Main menu" msgstr "Menú principal" -#: front/src/views/admin/library/Base.vue:31 +#: front/src/views/admin/library/Base.vue:34 msgctxt "Head/Admin/Title" msgid "Manage library" msgstr "Gestionar biblioteca" +#: front/src/components/manage/moderation/InstancePolicyModal.vue:8 +#, fuzzy +msgctxt "Popup/Moderation/Title/Verb" +msgid "Manage moderation rules for %{ obj }" +msgstr "Bajo regla de moderación" + #: front/src/components/playlists/PlaylistModal.vue:3 msgctxt "Popup/Playlist/Title/Verb" msgid "Manage playlists" @@ -2559,7 +2739,7 @@ msgctxt "Content/Playlist/Button.Label/Verb" msgid "Manage your playlists" msgstr "Gestionar tus listas de reproducción" -#: front/src/views/Notifications.vue:14 +#: front/src/views/Notifications.vue:79 msgctxt "Content/Notifications/Button.Label/Verb" msgid "Mark all as read" msgstr "Marcar todo como leÃdo" @@ -2574,12 +2754,12 @@ msgctxt "Content/Notifications/Button.Tooltip/Verb" msgid "Mark as unread" msgstr "Marcar como leÃdo" -#: front/src/views/admin/moderation/AccountsDetail.vue:310 +#: front/src/views/admin/moderation/AccountsDetail.vue:321 msgctxt "Content/*/*/Unit" msgid "MB" msgstr "MB" -#: front/src/components/audio/Player.vue:625 +#: front/src/components/audio/Player.vue:651 msgctxt "Sidebar/Player/Hidden text" msgid "Media player" msgstr "Reproductor multimedia" @@ -2589,43 +2769,59 @@ msgctxt "Content/Profile/Paragraph" msgid "Member since %{ date }" msgstr "Miembro desde %{ date }" +#: front/src/components/manage/moderation/ReportCard.vue:109 +#: front/src/components/moderation/ReportModal.vue:41 +msgctxt "*/*/Field.Label/Noun" +msgid "Message" +msgstr "" + #: front/src/components/Footer.vue:32 msgctxt "Footer/*/List item.Link" msgid "Mobile and desktop apps" msgstr "Apps móviles y de escritorio" +#: front/src/components/Home.vue:143 +#, fuzzy +msgctxt "Content/Home/Link" +msgid "Mobile apps" +msgstr "Apps móviles y de escritorio" + #: front/src/components/Sidebar.vue:96 -#: src/components/manage/users/UsersTable.vue:177 -#: front/src/views/admin/moderation/AccountsDetail.vue:502 -#: front/src/views/admin/moderation/Base.vue:21 +#: src/components/manage/users/UsersTable.vue:178 +#: front/src/views/admin/Settings.vue:85 +#: front/src/views/admin/moderation/AccountsDetail.vue:522 +#: front/src/views/admin/moderation/Base.vue:43 msgctxt "*/Moderation/*" msgid "Moderation" msgstr "Moderación" #: front/src/views/admin/moderation/AccountsDetail.vue:78 -#: front/src/views/admin/moderation/DomainsDetail.vue:42 +#: front/src/views/admin/moderation/DomainsDetail.vue:70 msgctxt "Content/Moderation/Card.Paragraph" -msgid "" -"Moderation policies help you control how your instance interact with a given" -" domain or account." -msgstr "" -"Las polÃticas de moderación te ayudan a controlar cómo tu instancia " -"interactúa con un dominio o cuenta concretos." +msgid "Moderation policies help you control how your instance interact with a given domain or account." +msgstr "Las polÃticas de moderación te ayudan a controlar cómo tu instancia interactúa con un dominio o cuenta concretos." + +#: front/src/components/manage/moderation/InstancePolicyModal.vue:4 +#, fuzzy +msgctxt "Content/Moderation/Button.Label" +msgid "Moderation rules…" +msgstr "Actualizar regla de moderación" #: front/src/components/library/EditCard.vue:5 msgctxt "Content/Library/Card/Short" msgid "Modification %{ id }" msgstr "Fecha de modificación" -#: front/src/components/mixins/Translations.vue:48 -#: front/src/components/mixins/Translations.vue:49 +#: front/src/components/mixins/Translations.vue:58 +#: front/src/components/mixins/Translations.vue:59 msgctxt "Content/Playlist/Dropdown/Noun" msgid "Modification date" msgstr "Fecha de modificación" -#: front/src/components/library/AlbumBase.vue:42 -#: front/src/components/library/ArtistBase.vue:53 -#: front/src/components/library/TrackBase.vue:61 +#: front/src/components/audio/PlayButton.vue:100 +#: front/src/components/library/AlbumBase.vue:43 +#: front/src/components/library/ArtistBase.vue:54 +#: front/src/components/library/TrackBase.vue:59 msgctxt "*/*/Button.Label/Noun" msgid "More…" msgstr "" @@ -2635,7 +2831,7 @@ msgctxt "*/*/*/Noun" msgid "Music" msgstr "Música" -#: front/src/components/audio/Player.vue:631 +#: front/src/components/audio/Player.vue:657 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Mute" msgstr "Silencio" @@ -2682,8 +2878,8 @@ msgctxt "Content/Library/Title" msgid "My libraries" msgstr "Mis bibliotecas" -#: front/src/components/audio/track/Row.vue:40 -#: src/components/library/EditCard.vue:60 +#: front/src/components/About.vue:105 src/components/audio/track/Row.vue:40 +#: front/src/components/library/EditCard.vue:60 #: front/src/components/library/EditForm.vue:70 #: front/src/components/library/TrackDetail.vue:34 #: front/src/components/library/TrackDetail.vue:43 @@ -2693,54 +2889,56 @@ msgstr "Mis bibliotecas" #: front/src/components/manage/library/TracksTable.vue:76 #: front/src/components/manage/library/UploadsTable.vue:121 #: front/src/components/manage/library/UploadsTable.vue:128 -#: front/src/components/manage/users/UsersTable.vue:61 +#: front/src/components/manage/moderation/ReportCard.vue:78 +#: front/src/components/manage/moderation/ReportCard.vue:87 +#: front/src/components/manage/moderation/ReportCard.vue:193 +#: front/src/components/manage/users/UsersTable.vue:62 #: front/src/views/admin/library/UploadDetail.vue:179 #: front/src/views/admin/library/UploadDetail.vue:214 #: front/src/views/admin/library/UploadDetail.vue:233 #: front/src/views/admin/library/UploadDetail.vue:244 #: front/src/views/admin/library/UploadDetail.vue:257 -#: front/src/views/admin/moderation/AccountsDetail.vue:192 -#: front/src/views/admin/moderation/DomainsDetail.vue:82 +#: front/src/views/admin/moderation/AccountsDetail.vue:193 +#: front/src/views/admin/moderation/DomainsDetail.vue:119 #: front/src/views/content/libraries/FilesTable.vue:95 #: front/src/views/content/libraries/FilesTable.vue:101 msgctxt "*/*/*" msgid "N/A" msgstr "N/A" -#: front/src/components/manage/library/LibrariesTable.vue:48 -#: front/src/components/manage/library/UploadsTable.vue:59 -msgctxt "*/*/*" -msgid "Name" -msgstr "Nombre" - #: front/src/components/auth/ApplicationForm.vue:9 -msgctxt "Content/Applications/Input.Label/Noun" -msgid "Name" -msgstr "Nombre" - #: front/src/components/auth/Settings.vue:133 #: front/src/components/manage/library/ArtistsTable.vue:39 +#: front/src/components/manage/library/LibrariesTable.vue:48 +#: front/src/components/manage/library/TagsTable.vue:41 +#: front/src/components/manage/library/UploadsTable.vue:59 #: front/src/components/manage/moderation/AccountsTable.vue:39 -#: front/src/components/manage/moderation/DomainsTable.vue:38 -#: front/src/components/mixins/Translations.vue:53 +#: front/src/components/manage/moderation/DomainsTable.vue:46 +#: front/src/components/mixins/Translations.vue:63 #: front/src/components/playlists/PlaylistModal.vue:45 -#: front/src/views/admin/library/ArtistDetail.vue:98 +#: front/src/views/admin/library/ArtistDetail.vue:103 #: front/src/views/admin/library/LibraryDetail.vue:85 +#: front/src/views/admin/library/TagDetail.vue:68 #: front/src/views/admin/library/UploadDetail.vue:92 -#: front/src/views/admin/moderation/DomainsDetail.vue:97 -#: front/src/views/content/libraries/Form.vue:10 src/edits.js:10 -#: front/src/components/mixins/Translations.vue:54 +#: front/src/views/admin/moderation/DomainsDetail.vue:134 +#: front/src/views/content/libraries/Form.vue:10 src/edits.js:17 +#: front/src/components/mixins/Translations.vue:64 msgctxt "*/*/*/Noun" msgid "Name" msgstr "Nombre" +#: front/src/views/Notifications.vue:24 src/views/Notifications.vue:58 +msgctxt "*/*/*" +msgid "Never" +msgstr "" + #: front/src/components/auth/Settings.vue:88 #: front/src/views/auth/PasswordResetConfirm.vue:14 msgctxt "Content/Settings/Input.Label" msgid "New password" msgstr "Nueva contraseña" -#: front/src/components/Sidebar.vue:173 +#: front/src/components/Sidebar.vue:177 msgctxt "Sidebar/Player/Paragraph" msgid "New tracks will be appended here automatically." msgstr "Las nuevas canciones se agregarán aquà de forma automática." @@ -2750,41 +2948,38 @@ msgctxt "Content/Library/Card.Table.Header/Short" msgid "New value" msgstr "" -#: front/src/components/audio/Player.vue:629 +#: front/src/components/audio/Player.vue:655 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Next track" msgstr "Próxima canción" -#: front/src/components/Sidebar.vue:130 +#: front/src/components/Sidebar.vue:134 +#: front/src/components/manage/moderation/DomainsTable.vue:13 +#: front/src/views/admin/moderation/DomainsDetail.vue:110 msgctxt "*/*/*" msgid "No" msgstr "No" -#: front/src/components/Home.vue:95 -msgctxt "Content/Home/List item" -msgid "No add-ons, no plugins : you only need a web library" -msgstr "" -"Sin complementos, sin extensiones : basta con una biblioteca en la web" - #: front/src/components/audio/Search.vue:25 msgctxt "Content/Search/Paragraph" msgid "No album matched your query" -msgstr "" -"Lo sentimos, no hemos encontrado ningún álbum que corresponda con tu " -"búsqueda" +msgstr "Lo sentimos, no hemos encontrado ningún álbum que corresponda con tu búsqueda" #: front/src/components/audio/Search.vue:16 msgctxt "Content/Search/Paragraph" msgid "No artist matched your query" -msgstr "" -"Lo sentimos, no hemos encontrado ningún artista que corresponda con tu " -"búsqueda" +msgstr "Lo sentimos, no hemos encontrado ningún artista que corresponda con tu búsqueda" #: front/src/components/library/TrackDetail.vue:14 msgctxt "Content/Track/Table.Paragraph" msgid "No copyright information available for this track" msgstr "No hay letra disponible para esta canción." +#: front/src/components/About.vue:25 src/components/Home.vue:25 +msgctxt "Content/Home/Paragraph" +msgid "No description available." +msgstr "" + #: front/src/components/library/TrackDetail.vue:25 msgctxt "Content/Track/Table.Paragraph" msgid "No licensing information for this track" @@ -2795,7 +2990,7 @@ msgctxt "Content/Federation/Paragraph" msgid "No matching library." msgstr "Biblioteca no encontrada." -#: front/src/views/Notifications.vue:28 +#: front/src/views/Notifications.vue:93 msgctxt "Content/Notifications/Paragraph" msgid "No notification to show." msgstr "No hay notificaciones para mostrar." @@ -2805,6 +3000,16 @@ msgctxt "Content/*/Paragraph" msgid "No results were found." msgstr "" +#: front/src/components/About.vue:32 +msgctxt "Content/Home/Paragraph" +msgid "No rules available." +msgstr "" + +#: front/src/components/About.vue:39 +msgctxt "Content/Home/Paragraph" +msgid "No terms available." +msgstr "" + #: front/src/components/mixins/Translations.vue:10 #: front/src/components/mixins/Translations.vue:11 msgctxt "Content/Settings/Dropdown" @@ -2821,18 +3026,22 @@ msgctxt "Content/Admin/Table" msgid "Not used" msgstr "No usado" -#: front/src/components/mixins/Translations.vue:100 -#: front/src/components/mixins/Translations.vue:101 -msgctxt "Content/OAuth Scopes/Label" -msgid "Notifications" -msgstr "Notificaciones" - -#: front/src/components/Sidebar.vue:46 src/views/Notifications.vue:76 +#: front/src/components/Sidebar.vue:46 +#: src/components/mixins/Translations.vue:112 +#: front/src/views/Notifications.vue:151 +#: src/components/mixins/Translations.vue:113 msgctxt "*/Notifications/*" msgid "Notifications" msgstr "Notificaciones" -#: front/src/components/Footer.vue:47 +#: front/src/components/mixins/Translations.vue:47 +#: front/src/components/mixins/Translations.vue:48 +#, fuzzy +msgctxt "Content/Moderation/Dropdown" +msgid "Offensive content" +msgstr "Añadir contenido" + +#: front/src/components/Footer.vue:55 msgctxt "Footer/*/List item.Link" msgid "Official website" msgstr "Página oficial" @@ -2847,6 +3056,12 @@ msgctxt "Content/Library/Card.Table.Header/Short" msgid "Old value" msgstr "" +#: front/src/components/About.vue:90 +#, fuzzy +msgctxt "*/*/*/State of registrations" +msgid "Open" +msgstr "Abierta" + #: front/src/components/manage/users/InvitationsTable.vue:20 msgctxt "Content/Admin/Dropdown/Adjective" msgid "Open" @@ -2854,27 +3069,29 @@ msgstr "Abierta" #: front/src/components/library/ImportStatusModal.vue:56 msgctxt "Popup/Import/Table.Label/Value" -msgid "" -"Open a support thread (include the debug information below in your message)" +msgid "Open a support thread (include the debug information below in your message)" msgstr "" -#: front/src/components/library/AlbumBase.vue:73 -#: front/src/components/library/ArtistBase.vue:84 -#: front/src/components/library/TrackBase.vue:92 +#: front/src/components/library/AlbumBase.vue:87 +#: front/src/components/library/ArtistBase.vue:99 +#: front/src/components/library/TagDetail.vue:11 +#: front/src/components/library/TrackBase.vue:103 +#: front/src/components/manage/moderation/ReportCard.vue:128 msgctxt "Content/Moderation/Link" msgid "Open in moderation interface" msgstr "Actualizar regla de moderación" -#: front/src/views/admin/library/AlbumDetail.vue:31 -#: front/src/views/admin/library/ArtistDetail.vue:30 -#: front/src/views/admin/library/TrackDetail.vue:30 +#: front/src/views/admin/library/AlbumDetail.vue:37 +#: front/src/views/admin/library/ArtistDetail.vue:35 +#: front/src/views/admin/library/TagDetail.vue:21 +#: front/src/views/admin/library/TrackDetail.vue:36 msgctxt "Content/Moderation/Link/Verb" msgid "Open local profile" msgstr "Abrir perfil" -#: front/src/views/admin/library/AlbumDetail.vue:46 -#: front/src/views/admin/library/ArtistDetail.vue:45 -#: front/src/views/admin/library/TrackDetail.vue:45 +#: front/src/views/admin/library/AlbumDetail.vue:52 +#: front/src/views/admin/library/ArtistDetail.vue:50 +#: front/src/views/admin/library/TrackDetail.vue:51 msgctxt "Content/Moderation/Link/Verb" msgid "Open on MusicBrainz" msgstr "Ver en MusicBrainz" @@ -2884,10 +3101,10 @@ msgctxt "Content/Moderation/Link/Verb" msgid "Open profile" msgstr "Abrir perfil" -#: front/src/views/admin/library/AlbumDetail.vue:54 -#: front/src/views/admin/library/ArtistDetail.vue:53 +#: front/src/views/admin/library/AlbumDetail.vue:60 +#: front/src/views/admin/library/ArtistDetail.vue:58 #: front/src/views/admin/library/LibraryDetail.vue:49 -#: front/src/views/admin/library/TrackDetail.vue:53 +#: front/src/views/admin/library/TrackDetail.vue:59 #: front/src/views/admin/library/UploadDetail.vue:50 #: front/src/views/admin/moderation/AccountsDetail.vue:52 msgctxt "Content/Moderation/Link/Verb" @@ -2908,6 +3125,7 @@ msgstr "Añade filtros para personalizar tus reglas" #: src/components/library/Radios.vue:41 #: front/src/components/manage/library/EditsCardList.vue:37 #: front/src/components/manage/users/UsersTable.vue:17 +#: front/src/views/admin/moderation/ReportsList.vue:42 #: front/src/views/playlists/List.vue:25 msgctxt "Content/Search/Dropdown.Label/Noun" msgid "Order" @@ -2915,40 +3133,51 @@ msgstr "Orden" #: front/src/components/favorites/List.vue:24 #: src/components/library/Albums.vue:15 -#: front/src/components/library/Artists.vue:15 +#: front/src/components/library/Artists.vue:19 #: src/components/library/Radios.vue:33 #: front/src/components/manage/library/AlbumsTable.vue:11 #: front/src/components/manage/library/ArtistsTable.vue:11 #: front/src/components/manage/library/EditsCardList.vue:29 #: front/src/components/manage/library/LibrariesTable.vue:20 +#: front/src/components/manage/library/TagsTable.vue:11 #: front/src/components/manage/library/TracksTable.vue:11 #: front/src/components/manage/library/UploadsTable.vue:30 #: front/src/components/manage/moderation/AccountsTable.vue:11 -#: front/src/components/manage/moderation/DomainsTable.vue:9 +#: front/src/components/manage/moderation/DomainsTable.vue:17 #: front/src/components/manage/users/InvitationsTable.vue:9 #: front/src/components/manage/users/UsersTable.vue:9 +#: front/src/views/admin/moderation/ReportsList.vue:34 #: front/src/views/content/libraries/FilesTable.vue:21 #: front/src/views/playlists/List.vue:17 msgctxt "Content/Search/Dropdown.Label/Noun" msgid "Ordering" msgstr "Orden" -#: front/src/components/library/Albums.vue:23 -#: src/components/library/Artists.vue:23 +#: front/src/components/library/Albums.vue:27 +#: src/components/library/Artists.vue:27 #: front/src/components/manage/library/AlbumsTable.vue:19 #: front/src/components/manage/library/ArtistsTable.vue:19 #: front/src/components/manage/library/LibrariesTable.vue:28 +#: front/src/components/manage/library/TagsTable.vue:19 #: front/src/components/manage/library/TracksTable.vue:19 #: front/src/components/manage/library/UploadsTable.vue:38 #: front/src/components/manage/moderation/AccountsTable.vue:19 -#: front/src/components/manage/moderation/DomainsTable.vue:17 +#: front/src/components/manage/moderation/DomainsTable.vue:25 #: front/src/views/content/libraries/FilesTable.vue:29 msgctxt "Content/Search/Dropdown.Label/Noun" msgid "Ordering direction" msgstr "Dirección del orden" +#: front/src/components/mixins/Translations.vue:48 +#: front/src/components/mixins/Translations.vue:49 +msgctxt "Content/Moderation/Dropdown" +msgid "Other" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:143 #: front/src/components/manage/users/InvitationsTable.vue:38 -msgctxt "Content/Admin/Table.Label" +#, fuzzy +msgctxt "*/*/*" msgid "Owner" msgstr "Propietario" @@ -2967,12 +3196,15 @@ msgctxt "Content/*/Hidden text/Noun" msgid "Pagination" msgstr "Paginación" -#: front/src/components/auth/Login.vue:33 src/components/auth/Signup.vue:40 -msgctxt "Content/*/Input.Label" +#: front/src/components/auth/LoginForm.vue:32 +#: src/components/auth/Settings.vue:291 +#: front/src/components/auth/SignupForm.vue:36 +#, fuzzy +msgctxt "*/*/*" msgid "Password" msgstr "Contraseña" -#: front/src/components/auth/SubsonicTokenForm.vue:94 +#: front/src/components/auth/SubsonicTokenForm.vue:100 msgctxt "Content/Settings/Message" msgid "Password updated" msgstr "Contraseña actualizada" @@ -2982,12 +3214,12 @@ msgctxt "Content/Signup/Card.Title" msgid "Password updated successfully" msgstr "Contraseña actualizada con éxito" -#: front/src/components/audio/Player.vue:628 +#: front/src/components/audio/Player.vue:654 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Pause track" msgstr "Pausar la canción" -#: front/src/components/ShortcutsModal.vue:59 +#: front/src/components/ShortcutsModal.vue:96 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Pause/play the current track" msgstr "Pausar / reproducir la pista actual" @@ -3016,7 +3248,7 @@ msgctxt "Content/Library/Label" msgid "Pending files" msgstr "Archivos pendientes" -#: front/src/components/Sidebar.vue:225 +#: front/src/components/Sidebar.vue:232 msgctxt "Sidebar/Notifications/Hidden text" msgid "Pending follow requests" msgstr "Solicitudes de seguimiento pendientes" @@ -3027,84 +3259,76 @@ msgctxt "Content/Admin/*/Noun" msgid "Pending review" msgstr "Archivos pendientes" -#: front/src/components/Sidebar.vue:226 +#: front/src/components/Sidebar.vue:233 msgctxt "Sidebar/Moderation/Hidden text" msgid "Pending review edits" msgstr "Archivos pendientes" +#: front/src/components/auth/Settings.vue:176 #: front/src/components/manage/users/UsersTable.vue:42 #: front/src/views/admin/moderation/AccountsDetail.vue:166 -msgctxt "Content/Admin/Table.Label/Noun" -msgid "Permissions" -msgstr "Permisos" - -#: front/src/components/auth/Settings.vue:176 msgctxt "Content/*/*/Noun" msgid "Permissions" msgstr "Permisos" #: front/src/components/audio/PlayButton.vue:9 -#: front/src/components/library/TrackBase.vue:26 +#: front/src/components/library/TrackBase.vue:24 msgctxt "*/Queue/Button.Label/Short, Verb" msgid "Play" msgstr "Reproducir" #: front/src/components/audio/album/Card.vue:48 -#: front/src/components/audio/artist/Card.vue:44 -#: front/src/components/library/AlbumBase.vue:20 +#: front/src/components/library/AlbumBase.vue:21 #: front/src/components/library/AlbumDetail.vue:11 #: src/views/playlists/Detail.vue:24 msgctxt "Content/Queue/Button.Label/Short, Verb" msgid "Play all" msgstr "Reproducir todo" -#: front/src/components/library/ArtistBase.vue:31 +#: front/src/components/library/ArtistBase.vue:32 msgctxt "Content/Artist/Button.Label/Verb" msgid "Play all albums" msgstr "Reproducir todos los álbumes" -#: front/src/components/audio/PlayButton.vue:76 +#: front/src/components/audio/PlayButton.vue:92 msgctxt "*/Queue/Dropdown/Button/Title" msgid "Play next" msgstr "Reproducir siguiente" -#: front/src/components/ShortcutsModal.vue:67 +#: front/src/components/ShortcutsModal.vue:120 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Play next track" msgstr "Reproducir siguiente canción" -#: front/src/components/audio/PlayButton.vue:74 +#: front/src/components/audio/PlayButton.vue:90 msgctxt "*/Queue/Dropdown/Button/Title" msgid "Play now" msgstr "Reproducir ahora" -#: front/src/components/ShortcutsModal.vue:63 +#: front/src/components/ShortcutsModal.vue:116 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Play previous track" msgstr "Canción anterior" -#: front/src/components/audio/PlayButton.vue:77 +#: front/src/components/audio/PlayButton.vue:93 msgctxt "*/Queue/Dropdown/Button/Title" msgid "Play similar songs" msgstr "" -#: front/src/components/Sidebar.vue:224 +#: front/src/components/Sidebar.vue:231 msgctxt "Sidebar/Player/Hidden text" msgid "Play this track" msgstr "Reproducir canción" -#: front/src/components/audio/Player.vue:627 +#: front/src/components/audio/Player.vue:653 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Play track" msgstr "Reproducir canción" -#: front/src/components/audio/PlayButton.vue:82 -msgctxt "*/Queue/Button/Title" -msgid "Play..." -msgstr "Reproducir..." - -#: front/src/views/playlists/Detail.vue:91 -msgctxt "Head/Playlist/Title" +#: front/src/components/mixins/Report.vue:66 src/views/playlists/Detail.vue:121 +#: front/src/components/mixins/Report.vue:67 +#, fuzzy +msgctxt "*/*/*" msgid "Playlist" msgstr "Lista de reproducción" @@ -3141,63 +3365,60 @@ msgctxt "Content/Playlist/Dropdown.Label" msgid "Playlist visibility" msgstr "Visibilidad de lista de reproducción" -#: front/src/components/mixins/Translations.vue:88 -#: front/src/components/mixins/Translations.vue:89 -msgctxt "Content/OAuth Scopes/Label" -msgid "Playlists" -msgstr "Listas de reproducción" - #: front/src/components/Sidebar.vue:71 src/components/library/Home.vue:16 -#: front/src/components/library/Library.vue:16 src/views/admin/Settings.vue:83 -#: front/src/views/admin/library/AlbumDetail.vue:173 -#: front/src/views/admin/library/ArtistDetail.vue:162 -#: front/src/views/admin/library/TrackDetail.vue:225 +#: front/src/components/library/Library.vue:16 +#: front/src/components/mixins/Translations.vue:100 +#: src/views/admin/Settings.vue:83 +#: front/src/views/admin/library/AlbumDetail.vue:179 +#: front/src/views/admin/library/ArtistDetail.vue:167 +#: front/src/views/admin/library/TrackDetail.vue:231 #: src/views/playlists/List.vue:106 +#: front/src/components/mixins/Translations.vue:101 msgctxt "*/*/*" msgid "Playlists" msgstr "Listas de reproducción" -#: front/src/components/Home.vue:56 -msgctxt "Content/Home/List item" -msgid "Playlists? We got them" -msgstr "¿Listas de reproducción? Las tenemos" +#: front/src/components/audio/EmbedWizard.vue:9 +msgctxt "Content/Embed/Message" +msgid "Please contact your admins and ask them to update the corresponding setting." +msgstr "" #: front/src/components/auth/Settings.vue:79 msgctxt "Content/Settings/Error message.List item/Call to action" msgid "Please double-check your password is correct" msgstr "Por favor, comprueba que tu contraseña es correcta" -#: front/src/components/auth/Login.vue:9 +#: front/src/components/auth/LoginForm.vue:5 msgctxt "Content/Login/Error message.List item/Call to action" msgid "Please double-check your username/password couple is correct" -msgstr "" -"Por favor, comprueba que tu nombre de usuario y contraseña son correctos" +msgstr "Por favor, comprueba que tu nombre de usuario y contraseña son correctos" #: front/src/components/auth/Settings.vue:46 msgctxt "Content/Settings/Paragraph" msgid "PNG, GIF or JPG. At most 2MB. Will be downscaled to 400x400px." msgstr "PNG, GIF o JPG. Máximo de 2MB. La imagen será reducida a 400x400px." -#: front/src/views/admin/library/TrackDetail.vue:137 -msgctxt "*/*/*/Noun" +#: front/src/components/About.vue:72 +msgctxt "Content/About/Header/Name" +msgid "Pod configuration" +msgstr "" + +#: front/src/views/admin/library/TrackDetail.vue:143 src/edits.js:70 +msgctxt "*/*/*/Short, Noun" msgid "Position" msgstr "Paginación" #: front/src/components/manage/moderation/InstancePolicyForm.vue:118 msgctxt "Content/Moderation/Help text" -msgid "" -"Prevent account or domain from triggering notifications, except from " -"followers." -msgstr "" -"Evita que la cuenta o el dominio activen notificaciones, excepto de los " -"seguidores." +msgid "Prevent account or domain from triggering notifications, except from followers." +msgstr "Evita que la cuenta o el dominio activen notificaciones, excepto de los seguidores." -#: front/src/components/audio/EmbedWizard.vue:33 +#: front/src/components/audio/EmbedWizard.vue:43 msgctxt "Popup/Embed/Title/Noun" msgid "Preview" msgstr "Previsualización" -#: front/src/components/audio/Player.vue:626 +#: front/src/components/audio/Player.vue:652 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Previous track" msgstr "Canción anterior" @@ -3208,7 +3429,7 @@ msgctxt "Content/Settings/Dropdown/Short" msgid "Private" msgstr "" -#: front/src/views/content/remote/Card.vue:43 +#: front/src/views/content/remote/Card.vue:56 msgctxt "Content/Library/Card.List item" msgid "Problem during scanning" msgstr "Error durante el análisis" @@ -3229,14 +3450,20 @@ msgctxt "Content/Library/Tab.Title/Short" msgid "Processing" msgstr "Procesando" -#: front/src/components/mixins/Translations.vue:68 -#: front/src/components/mixins/Translations.vue:69 +#: front/src/components/mixins/Translations.vue:80 +#: front/src/components/mixins/Translations.vue:81 msgctxt "Content/OAuth Scopes/Label" msgid "Profile" msgstr "Abrir perfil" +#: front/src/components/auth/SignupForm.vue:5 +#, fuzzy +msgctxt "Content/Signup/Form/Paragraph" +msgid "Public registrations are not possible on this instance. You will need an invitation code to sign up." +msgstr "La inscripción a esta instancia está cerrada, necesitarás un código de invitación para inscribirte." + #: front/src/components/manage/moderation/AccountsTable.vue:188 -#: front/src/components/manage/moderation/DomainsTable.vue:168 +#: front/src/components/manage/moderation/DomainsTable.vue:186 #: front/src/views/content/libraries/Quota.vue:36 #: front/src/views/content/libraries/Quota.vue:39 #: front/src/views/content/libraries/Quota.vue:62 @@ -3267,7 +3494,7 @@ msgctxt "Sidebar/Queue/Tab.Title/Noun" msgid "Queue" msgstr "Cola de reproducción" -#: front/src/components/audio/Player.vue:322 +#: front/src/components/audio/Player.vue:329 msgctxt "Content/Queue/Message" msgid "Queue shuffled!" msgstr "¡Cola de reproducción mezclada!" @@ -3299,16 +3526,12 @@ msgstr "Radio actualizada" #: front/src/components/library/Library.vue:13 #: src/components/library/Radios.vue:142 +#: front/src/components/mixins/Translations.vue:104 +#: front/src/components/mixins/Translations.vue:105 msgctxt "*/*/*" msgid "Radios" msgstr "Radios" -#: front/src/components/mixins/Translations.vue:92 -#: front/src/components/mixins/Translations.vue:93 -msgctxt "Content/OAuth Scopes/Label" -msgid "Radios" -msgstr "Radios" - #: front/src/components/auth/ApplicationForm.vue:151 msgctxt "Content/OAuth Scopes/Label/Verb" msgid "Read" @@ -3335,15 +3558,15 @@ msgctxt "Content/Moderation/*/Noun" msgid "Reason" msgstr "Razón" -#: front/src/views/admin/moderation/AccountsDetail.vue:251 -#: front/src/views/admin/moderation/DomainsDetail.vue:179 +#: front/src/views/admin/moderation/AccountsDetail.vue:252 +#: front/src/views/admin/moderation/DomainsDetail.vue:216 msgctxt "Content/Moderation/Table.Label/Noun" msgid "Received library follows" msgstr "Seguidores recibidos en la biblioteca" -#: front/src/components/manage/moderation/DomainsTable.vue:40 -#: front/src/components/mixins/Translations.vue:62 -#: front/src/components/mixins/Translations.vue:63 +#: front/src/components/manage/moderation/DomainsTable.vue:48 +#: front/src/components/mixins/Translations.vue:74 +#: front/src/components/mixins/Translations.vue:75 msgctxt "Content/Moderation/*/Noun" msgid "Received messages" msgstr "Mensajes recibidos" @@ -3363,6 +3586,12 @@ msgctxt "Content/Home/Title" msgid "Recently added" msgstr "Añadidos recientemente" +#: front/src/components/Home.vue:167 +#, fuzzy +msgctxt "Content/Home/Title" +msgid "Recently added albums" +msgstr "Añadidos recientemente" + #: front/src/components/library/Home.vue:11 msgctxt "Content/Home/Title" msgid "Recently favorited" @@ -3391,14 +3620,14 @@ msgctxt "Popup/*/Message.Title" msgid "Refresh error" msgstr "Recargar" -#: front/src/views/admin/library/AlbumDetail.vue:50 -#: front/src/views/admin/library/ArtistDetail.vue:49 -#: front/src/views/admin/library/TrackDetail.vue:49 +#: front/src/views/admin/library/AlbumDetail.vue:56 +#: front/src/views/admin/library/ArtistDetail.vue:54 +#: front/src/views/admin/library/TrackDetail.vue:55 msgctxt "Content/Moderation/Button/Verb" msgid "Refresh from remote server" msgstr "" -#: front/src/views/admin/moderation/DomainsDetail.vue:127 +#: front/src/views/admin/moderation/DomainsDetail.vue:164 msgctxt "Content/Moderation/Button.Label/Verb" msgid "Refresh node info" msgstr "Actualizar la información del nodo" @@ -3410,9 +3639,7 @@ msgstr "Actualizar la información del nodo" #: front/src/components/federation/FetchButton.vue:80 msgctxt "Popup/*/Message.Content" -msgid "" -"Refresh request wasn't proceed in time by our server. It will be processed " -"later." +msgid "Refresh request wasn't proceed in time by our server. It will be processed later." msgstr "" #: front/src/components/federation/FetchButton.vue:16 @@ -3435,16 +3662,13 @@ msgctxt "Popup/*/Title" msgid "Refreshing object from remote…" msgstr "" -#: front/src/components/auth/Signup.vue:9 -msgctxt "Content/Signup/Form/Paragraph" -msgid "" -"Registration are closed on this instance, you will need an invitation code " -"to signup." -msgstr "" -"La inscripción a esta instancia está cerrada, necesitarás un código de " -"invitación para inscribirte." +#: front/src/components/About.vue:86 +#, fuzzy +msgctxt "*/*/*" +msgid "Registrations" +msgstr "Administración" -#: front/src/components/manage/users/UsersTable.vue:71 +#: front/src/components/manage/users/UsersTable.vue:72 msgctxt "Content/Admin/Table, User role" msgid "Regular user" msgstr "Usuario estándar" @@ -3469,8 +3693,8 @@ msgid "Rejected" msgstr "Rechazada" #: front/src/components/manage/library/AlbumsTable.vue:43 -#: front/src/components/mixins/Translations.vue:44 src/edits.js:28 -#: front/src/components/mixins/Translations.vue:45 +#: front/src/components/mixins/Translations.vue:54 src/edits.js:43 +#: front/src/components/mixins/Translations.vue:55 msgctxt "Content/*/*/Noun" msgid "Release date" msgstr "Última visualización" @@ -3480,6 +3704,11 @@ msgctxt "Content/Library/Paragraph" msgid "Remaining storage space" msgstr "" +#: front/src/views/Notifications.vue:18 src/views/Notifications.vue:52 +msgctxt "Content/Notifications/Label" +msgid "Remind me in:" +msgstr "" + #: front/src/views/content/remote/Home.vue:6 msgctxt "Content/Library/Title/Noun" msgid "Remote libraries" @@ -3487,12 +3716,8 @@ msgstr "Bibliotecas remotas" #: front/src/views/content/remote/Home.vue:7 msgctxt "Content/Library/Paragraph" -msgid "" -"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." -msgstr "" -"Las bibliotecas remotas pertenecen a otros usuarios de internet. Podrás " -"acceder a ellas cuando sean públicas o cuando te permitan el acceso." +msgid "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." +msgstr "Las bibliotecas remotas pertenecen a otros usuarios de internet. Podrás acceder a ellas cuando sean públicas o cuando te permitan el acceso." #: front/src/components/library/radios/Filter.vue:59 msgctxt "Content/Radio/Button.Label/Verb" @@ -3509,6 +3734,13 @@ msgctxt "Content/Moderation/Button.Label" msgid "Remove filter" msgstr "Quitar avatar" +#: front/src/components/manage/moderation/DomainsTable.vue:198 +#: front/src/views/admin/moderation/DomainsDetail.vue:39 +#, fuzzy +msgctxt "Content/Moderation/Action/Verb" +msgid "Remove from allow-list" +msgstr "Quitar de favoritos" + #: front/src/components/favorites/TrackFavoriteIcon.vue:26 msgctxt "Content/Track/Icon.Tooltip/Verb" msgid "Remove from favorites" @@ -3516,43 +3748,104 @@ msgstr "Quitar de favoritos" #: front/src/views/content/libraries/Quota.vue:38 msgctxt "Popup/Library/Paragraph" -msgid "" -"Removes uploaded but yet to be processed tracks completely, adding the " -"corresponding data to your quota." -msgstr "" -"Elimina las pistas cargadas pero aún no procesadas, agregando los datos " -"correspondientes a su cuota." +msgid "Removes uploaded but yet to be processed tracks completely, adding the corresponding data to your quota." +msgstr "Elimina las pistas cargadas pero aún no procesadas, agregando los datos correspondientes a su cuota." #: front/src/views/content/libraries/Quota.vue:64 msgctxt "Popup/Library/Paragraph" -msgid "" -"Removes uploaded tracks skipped during the import processes completely, " -"adding the corresponding data to your quota." -msgstr "" -"Esto borrará las pistas que fueron subidas pero se omitieron por alguna " -"razón. Se borrarán completamente y recuperarás la cuota correspondiente." +msgid "Removes uploaded tracks skipped during the import processes completely, adding the corresponding data to your quota." +msgstr "Esto borrará las pistas que fueron subidas pero se omitieron por alguna razón. Se borrarán completamente y recuperarás la cuota correspondiente." #: front/src/views/content/libraries/Quota.vue:90 msgctxt "Popup/Library/Paragraph" -msgid "" -"Removes uploaded tracks that could not be processed by the server " -"completely, adding the corresponding data to your quota." +msgid "Removes uploaded tracks that could not be processed by the server completely, adding the corresponding data to your quota." +msgstr "Esto borrará las pistas que fueron subidas pero no se procesaron en el servidor. Se borrarán completamente y recuperarás la cuota correspondiente." + +#: front/src/components/audio/PlayButton.vue:94 +#, fuzzy +msgctxt "*/Queue/Dropdown/Button/Title" +msgid "Replace current queue" +msgstr "Añadir a la cola de reproducción actual" + +#: front/src/components/mixins/Report.vue:6 src/components/mixins/Report.vue:7 +msgctxt "*/Moderation/*/Verb" +msgid "Report @%{ username }…" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:5 +msgctxt "Content/Moderation/Card/Short" +msgid "Report %{ id }" +msgstr "" + +#: front/src/components/moderation/ReportModal.vue:139 +msgctxt "*/Moderation/Message" +msgid "Report successfully submitted, thank you" msgstr "" -"Esto borrará las pistas que fueron subidas pero no se procesaron en el " -"servidor. Se borrarán completamente y recuperarás la cuota correspondiente." -#: front/src/components/auth/SubsonicTokenForm.vue:33 -#: front/src/components/auth/SubsonicTokenForm.vue:36 +#: front/src/components/mixins/Report.vue:36 +#: src/components/mixins/Report.vue:37 +#, fuzzy +msgctxt "*/Moderation/*/Verb" +msgid "Report this album…" +msgstr "Reproducir canción" + +#: front/src/components/mixins/Report.vue:50 +#: src/components/mixins/Report.vue:51 +#, fuzzy +msgctxt "*/Moderation/*/Verb" +msgid "Report this artist…" +msgstr "Reproducir canción" + +#: front/src/components/mixins/Report.vue:72 +#: src/components/mixins/Report.vue:73 +#, fuzzy +msgctxt "*/Moderation/*/Verb" +msgid "Report this library…" +msgstr "¿Eliminar la biblioteca?" + +#: front/src/components/mixins/Report.vue:61 +#: src/components/mixins/Report.vue:62 +#, fuzzy +msgctxt "*/Moderation/*/Verb" +msgid "Report this playlist…" +msgstr "Añadir a esta lista de reproducción" + +#: front/src/components/mixins/Report.vue:23 +#: src/components/mixins/Report.vue:24 +#, fuzzy +msgctxt "*/Moderation/*/Verb" +msgid "Report this track…" +msgstr "Reproducir canción" + +#: front/src/components/audio/PlayButton.vue:95 +msgctxt "*/Moderation/*/Button/Label,Verb" +msgid "Report…" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:117 +msgctxt "Content/*/*/Short" +msgid "Reported object" +msgstr "" + +#: front/src/views/admin/moderation/Base.vue:5 +#: front/src/views/admin/moderation/ReportsList.vue:3 +#: front/src/views/admin/moderation/ReportsList.vue:208 +msgctxt "*/Moderation/*/Noun" +msgid "Reports" +msgstr "" + +#: front/src/components/auth/SubsonicTokenForm.vue:38 +#: front/src/components/auth/SubsonicTokenForm.vue:41 msgctxt "*/Settings/Button.Label/Verb" msgid "Request a new password" msgstr "Solicitar una nueva contraseña" -#: front/src/components/auth/SubsonicTokenForm.vue:34 +#: front/src/components/auth/SubsonicTokenForm.vue:39 msgctxt "Popup/Settings/Title" msgid "Request a new Subsonic API password?" msgstr "¿Solicitar una nueva contraseña de la API Subsonic?" -#: front/src/components/auth/SubsonicTokenForm.vue:42 +#: front/src/components/auth/SubsonicTokenForm.vue:47 msgctxt "Content/Settings/Button.Label/Verb" msgid "Request a password" msgstr "Solicitar una contraseña" @@ -3562,35 +3855,52 @@ msgctxt "Popup/*/Loading.Title" msgid "Requesting a fetch…" msgstr "" -#: front/src/components/library/EditForm.vue:82 +#: front/src/components/library/EditForm.vue:94 msgctxt "Content/Library/Button.Label" -msgid "Reset to initial value: %{ value }" +msgid "Reset to initial value" msgstr "" -#: front/src/components/auth/Login.vue:35 src/views/auth/PasswordReset.vue:4 -#: front/src/views/auth/PasswordReset.vue:53 +#: front/src/components/auth/LoginForm.vue:34 +#: src/views/auth/PasswordReset.vue:4 front/src/views/auth/PasswordReset.vue:53 msgctxt "*/Login/*/Verb" msgid "Reset your password" msgstr "Restablecer tu contraseña" +#: front/src/components/manage/moderation/ReportCard.vue:83 +#, fuzzy +msgctxt "Content/*/*/Noun" +msgid "Resolution date" +msgstr "Fecha de creación" + +#: front/src/components/manage/moderation/ReportCard.vue:218 +msgctxt "Content/*/Button.Label/Verb" +msgid "Resolve" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:62 +#: front/src/views/admin/moderation/ReportsList.vue:20 +msgctxt "Content/*/*/Short" +msgid "Resolved" +msgstr "" + #: front/src/views/content/libraries/FilesTable.vue:223 msgctxt "Content/Library/Dropdown/Verb" msgid "Restart import" msgstr "Reiniciar importación" +#: front/src/components/library/EditForm.vue:31 +msgctxt "Content/Library/Button.Label" +msgid "Restrict to unreviewed edits" +msgstr "" + #: front/src/components/favorites/List.vue:39 -#: src/components/library/Albums.vue:30 -#: front/src/components/library/Artists.vue:30 +#: src/components/library/Albums.vue:34 +#: front/src/components/library/Artists.vue:34 #: src/components/library/Radios.vue:52 front/src/views/playlists/List.vue:32 msgctxt "Content/Search/Dropdown.Label/Noun" msgid "Results per page" msgstr "Resultados por página" -#: front/src/components/library/EditForm.vue:31 -msgctxt "Content/Library/Button.Label" -msgid "Retrict to unreviewed edits" -msgstr "" - #: front/src/views/auth/EmailConfirm.vue:17 msgctxt "Content/Signup/Link/Verb" msgid "Return to login" @@ -3621,52 +3931,54 @@ msgctxt "Content/Moderation/Card.Title/Noun" msgid "Rule" msgstr "Regla" -#: front/src/components/admin/SettingsGroup.vue:67 +#: front/src/components/About.vue:28 src/components/About.vue:56 +#, fuzzy +msgctxt "Content/About/Header" +msgid "Rules" +msgstr "Regla" + +#: front/src/components/admin/SettingsGroup.vue:75 #: front/src/components/library/radios/Builder.vue:34 msgctxt "Content/*/Button.Label/Verb" msgid "Save" msgstr "Guardar" -#: front/src/views/content/remote/Card.vue:175 +#: front/src/views/content/remote/Card.vue:203 msgctxt "Content/Library/Message" msgid "Scan launched" msgstr "Análisis iniciado" -#: front/src/views/content/remote/Card.vue:67 +#: front/src/views/content/remote/Card.vue:80 msgctxt "Content/Library/Card.Button.Label/Verb" msgid "Scan now" msgstr "Analizar ahora" -#: front/src/views/content/remote/Card.vue:35 +#: front/src/views/content/remote/Card.vue:48 msgctxt "Content/Library/Card.List item" msgid "Scan pending" msgstr "Ascendente" -#: front/src/views/content/remote/Card.vue:176 +#: front/src/views/content/remote/Card.vue:204 msgctxt "Content/Library/Message" msgid "Scan skipped (previous scan is too recent)" msgstr "Análisis omitido (el anterior análisis es demasiado reciente)" -#: front/src/views/content/remote/Card.vue:47 +#: front/src/views/content/remote/Card.vue:60 msgctxt "Content/Library/Card.List item" msgid "Scanned" msgstr "Análisis finalizado" -#: front/src/views/content/remote/Card.vue:51 +#: front/src/views/content/remote/Card.vue:64 msgctxt "Content/Library/Card.List item" msgid "Scanned with errors" msgstr "Análisis erróneo" -#: front/src/views/content/remote/Card.vue:39 +#: front/src/views/content/remote/Card.vue:52 msgctxt "Content/Library/Card.List item" msgid "Scanning… (%{ progress }%)" msgstr "Analizando…(%{ progress }%)" #: front/src/components/auth/ApplicationForm.vue:22 -msgctxt "Content/Applications/Input.Label/Noun" -msgid "Scopes" -msgstr "" - #: front/src/components/auth/Settings.vue:226 msgctxt "Content/*/*/Noun" msgid "Scopes" @@ -3679,12 +3991,14 @@ msgstr "" #: front/src/components/manage/library/ArtistsTable.vue:5 #: front/src/components/manage/library/EditsCardList.vue:6 #: front/src/components/manage/library/LibrariesTable.vue:5 +#: front/src/components/manage/library/TagsTable.vue:5 #: front/src/components/manage/library/TracksTable.vue:5 #: front/src/components/manage/library/UploadsTable.vue:5 #: front/src/components/manage/moderation/AccountsTable.vue:5 #: front/src/components/manage/moderation/DomainsTable.vue:5 #: front/src/components/manage/users/InvitationsTable.vue:5 #: front/src/components/manage/users/UsersTable.vue:5 +#: front/src/views/admin/moderation/ReportsList.vue:8 #: front/src/views/content/libraries/FilesTable.vue:5 #: src/views/playlists/List.vue:13 msgctxt "Content/Search/Input.Label/Noun" @@ -3697,6 +4011,7 @@ msgid "Search a remote library" msgstr "Buscar una biblioteca externa" #: front/src/components/manage/library/EditsCardList.vue:211 +#: front/src/views/admin/moderation/ReportsList.vue:207 msgctxt "Content/Search/Input.Placeholder" msgid "Search by account, summary, domain…" msgstr "Buscar por tÃtulo, artista, dominio…" @@ -3731,7 +4046,13 @@ msgctxt "Content/Search/Input.Placeholder" msgid "Search by domain, username, bio…" msgstr "Buscar por dominio, nombre de usuario, bio…" -#: front/src/components/manage/moderation/DomainsTable.vue:151 +#: front/src/components/manage/library/TagsTable.vue:165 +#, fuzzy +msgctxt "Content/Search/Input.Placeholder" +msgid "Search by name" +msgstr "Buscar por nombre…" + +#: front/src/components/manage/moderation/DomainsTable.vue:168 msgctxt "Content/Search/Input.Placeholder" msgid "Search by name…" msgstr "Buscar por nombre…" @@ -3746,12 +4067,12 @@ msgctxt "Content/Admin/Input.Placeholder/Verb" msgid "Search by username, e-mail address, code…" msgstr "Buscar por nombre de usuario, correo electrónico, código…" -#: front/src/components/manage/users/UsersTable.vue:163 +#: front/src/components/manage/users/UsersTable.vue:164 msgctxt "Content/Search/Input.Placeholder" msgid "Search by username, e-mail address, name…" msgstr "Buscar por usuario, correo electrónico, nombre…" -#: front/src/components/audio/SearchBar.vue:20 +#: front/src/components/audio/SearchBar.vue:27 msgctxt "Sidebar/Search/Input.Placeholder" msgid "Search for artists, albums, tracks…" msgstr "Buscar artistas, álbumes, canciones…" @@ -3761,16 +4082,30 @@ msgctxt "Content/Search/Title" msgid "Search for some music" msgstr "Buscar música" -#: front/src/components/library/AlbumBase.vue:57 -#: front/src/components/library/ArtistBase.vue:68 -#: front/src/components/library/TrackBase.vue:76 +#: front/src/components/library/TagsSelector.vue:6 +#, fuzzy +msgctxt "*/Dropdown/Placeholder/Verb" +msgid "Search for tags…" +msgstr "Buscar por nombre…" + +#: front/src/components/library/AlbumBase.vue:66 +#: front/src/components/library/ArtistBase.vue:77 +#: front/src/components/library/TrackBase.vue:82 +#, fuzzy +msgctxt "Content/*/Button.Label/Verb" +msgid "Search on Discogs" +msgstr "Buscar música" + +#: front/src/components/library/AlbumBase.vue:58 +#: front/src/components/library/ArtistBase.vue:69 +#: front/src/components/library/TrackBase.vue:74 msgctxt "Content/*/Button.Label/Verb" msgid "Search on Wikipedia" msgstr "Buscar en Wikipedia" #: front/src/components/library/Library.vue:35 -#: src/views/admin/library/Base.vue:32 -#: front/src/views/admin/moderation/Base.vue:22 +#: src/views/admin/library/Base.vue:35 +#: front/src/views/admin/moderation/Base.vue:44 #: src/views/admin/users/Base.vue:21 front/src/views/content/Base.vue:19 msgctxt "Menu/*/Hidden text" msgid "Secondary menu" @@ -3781,6 +4116,26 @@ msgctxt "Content/Admin/Menu.Title" msgid "Sections" msgstr "Secciones" +#: front/src/components/ShortcutsModal.vue:108 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek backwards 30s" +msgstr "" + +#: front/src/components/ShortcutsModal.vue:100 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek backwards 5s" +msgstr "" + +#: front/src/components/ShortcutsModal.vue:112 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek forwards 30s" +msgstr "" + +#: front/src/components/ShortcutsModal.vue:104 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek forwards 5s" +msgstr "" + #: front/src/components/library/radios/Builder.vue:46 msgctxt "Content/Radio/Dropdown.Placeholder/Verb" msgid "Select a filter" @@ -3799,9 +4154,14 @@ msgctxt "Content/*/Link/Verb" msgid "Select only current page" msgstr "Seleccionar solo la página actual" -#: front/src/components/Sidebar.vue:43 src/components/Sidebar.vue:108 -#: front/src/components/manage/users/UsersTable.vue:181 -#: front/src/views/admin/moderation/AccountsDetail.vue:506 +#: front/src/components/Home.vue:43 +msgctxt "Content/Home/Link" +msgid "Server rules" +msgstr "" + +#: front/src/components/Sidebar.vue:43 src/components/Sidebar.vue:112 +#: front/src/components/manage/users/UsersTable.vue:182 +#: front/src/views/admin/moderation/AccountsDetail.vue:526 msgctxt "*/*/*/Noun" msgid "Settings" msgstr "Ajustes" @@ -3823,18 +4183,25 @@ msgstr "Compartir enlace" #: front/src/views/content/libraries/Detail.vue:15 msgctxt "Content/Library/Paragraph" -msgid "" -"Share this link with other users so they can request access to your library." -msgstr "" -"Comparte este link con otros usuarios para que puedan pedir acceso a tu " -"biblioteca." +msgid "Share this link with other users so they can request access to your library." +msgstr "Comparte este link con otros usuarios para que puedan pedir acceso a tu biblioteca." #: front/src/views/content/libraries/Detail.vue:14 -#: front/src/views/content/remote/Card.vue:77 +#: front/src/views/content/remote/Card.vue:90 msgctxt "Content/Library/Title" msgid "Sharing link" msgstr "Compartir enlace" +#: front/src/components/audio/EmbedWizard.vue:5 +msgctxt "Content/Embed/Message" +msgid "Sharing will not work because this pod doesn't allow anonymous users to access content." +msgstr "" + +#: front/src/components/About.vue:156 +msgctxt "*/*/*/Verb" +msgid "Show" +msgstr "" + #: front/src/components/audio/album/Card.vue:38 #, fuzzy msgctxt "Content/Album/Card.Link/Verb" @@ -3843,11 +4210,11 @@ msgid_plural "Show %{ count } more tracks" msgstr[0] "Mostrar %{ count } canción más" msgstr[1] "Mostrar %{ count } canciones más" -#: front/src/components/audio/artist/Card.vue:30 +#: front/src/components/tags/List.vue:11 #, fuzzy -msgctxt "Content/Artist/Card.Link" -msgid "Show 1 more album" -msgid_plural "Show %{ count } more albums" +msgctxt "Content/*/Button/Label/Verb" +msgid "Show 1 more tag" +msgid_plural "Show %{ count } more tags" msgstr[0] "Mostrar 1 álbum adicional" msgstr[1] "Mostrar %{ count } álbumes adicionales" @@ -3856,17 +4223,28 @@ msgctxt "Content/Library/Button.Label" msgid "Show all edits" msgstr "" -#: front/src/components/ShortcutsModal.vue:42 +#: front/src/components/ShortcutsModal.vue:60 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Show available keyboard shortcuts" msgstr "Mostrar atajos de teclado disponibles" -#: front/src/views/Notifications.vue:7 +#: front/src/components/common/ExpandableDiv.vue:7 +msgctxt "*/*/Button,Label" +msgid "Show less" +msgstr "" + +#: front/src/components/common/ExpandableDiv.vue:8 +#, fuzzy +msgctxt "*/*/Button,Label" +msgid "Show more" +msgstr "Mostrar 1 álbum adicional" + +#: front/src/views/Notifications.vue:72 msgctxt "Content/Notifications/Form.Label/Verb" msgid "Show read notifications" msgstr "Mostrar notificaciones leÃdas" -#: front/src/components/forms/PasswordInput.vue:26 +#: front/src/components/forms/PasswordInput.vue:42 msgctxt "Content/Settings/Button.Tooltip/Verb" msgid "Show/hide password" msgstr "Mostrar/ocultar contraseña" @@ -3875,56 +4253,64 @@ msgstr "Mostrar/ocultar contraseña" #: front/src/components/manage/library/ArtistsTable.vue:84 #: front/src/components/manage/library/EditsCardList.vue:72 #: front/src/components/manage/library/LibrariesTable.vue:110 +#: front/src/components/manage/library/TagsTable.vue:79 #: front/src/components/manage/library/TracksTable.vue:95 #: front/src/components/manage/library/UploadsTable.vue:144 #: front/src/components/manage/moderation/AccountsTable.vue:88 -#: front/src/components/manage/moderation/DomainsTable.vue:74 +#: front/src/components/manage/moderation/DomainsTable.vue:85 #: front/src/components/manage/users/InvitationsTable.vue:76 -#: front/src/components/manage/users/UsersTable.vue:87 +#: front/src/components/manage/users/UsersTable.vue:88 #: front/src/views/content/libraries/FilesTable.vue:117 msgctxt "Content/*/Paragraph" msgid "Showing results %{ start }-%{ end } on %{ total }" msgstr "Mostrando resultados %{ start }-%{ end } de %{ total }" -#: front/src/components/ShortcutsModal.vue:83 +#: front/src/components/ShortcutsModal.vue:140 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Shuffle queue" msgstr "Mezclar tu cola de reproducción" -#: front/src/components/audio/Player.vue:641 +#: front/src/components/audio/Player.vue:667 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Shuffle your queue" msgstr "Mezclar tu cola de reproducción" -#: front/src/components/auth/Signup.vue:97 +#: front/src/components/Home.vue:103 +#, fuzzy +msgctxt "*/Signup/Title" +msgid "Sign up" +msgstr "Inscripción" + +#: front/src/views/auth/Signup.vue:37 msgctxt "*/Signup/Title" msgid "Sign Up" msgstr "Inscripción" -#: front/src/components/manage/users/UsersTable.vue:40 +#: front/src/components/Home.vue:107 +msgctxt "Content/Home/Paragraph" +msgid "Sign up now to keep a track of your favorites, create playlists, discover new content and much more!" +msgstr "" + +#: front/src/components/manage/users/UsersTable.vue:40 msgctxt "Content/Admin/Table.Label/Short, Noun (Value is a date)" msgid "Sign-up" msgstr "Inscripción" -#: front/src/components/mixins/Translations.vue:57 -#: front/src/views/admin/moderation/AccountsDetail.vue:197 -#: front/src/components/mixins/Translations.vue:58 +#: front/src/components/mixins/Translations.vue:69 +#: front/src/views/admin/moderation/AccountsDetail.vue:198 +#: front/src/components/mixins/Translations.vue:70 msgctxt "Content/Admin/Table.Label/Noun" msgid "Sign-up date" msgstr "Fecha de inscripción" -#: front/src/components/manage/library/UploadsTable.vue:65 -#: front/src/views/admin/library/UploadDetail.vue:219 -msgctxt "Content/*/*/Noun" -msgid "Size" -msgstr "Tamaño" - #: front/src/components/library/FileUpload.vue:94 #: front/src/components/library/TrackDetail.vue:39 -#: front/src/components/mixins/Translations.vue:54 +#: front/src/components/manage/library/UploadsTable.vue:65 +#: front/src/components/mixins/Translations.vue:66 +#: front/src/views/admin/library/UploadDetail.vue:219 #: front/src/views/content/libraries/FilesTable.vue:61 -#: front/src/components/mixins/Translations.vue:55 -msgctxt "Content/Library/*/in MB" +#: front/src/components/mixins/Translations.vue:67 +msgctxt "Content/*/*/Noun" msgid "Size" msgstr "Tamaño" @@ -3941,7 +4327,7 @@ msgctxt "Content/Library/Label" msgid "Skipped files" msgstr "Archivos omitidos" -#: front/src/views/admin/moderation/DomainsDetail.vue:89 +#: front/src/views/admin/moderation/DomainsDetail.vue:126 msgctxt "Content/Moderation/Table.Label" msgid "Software" msgstr "Software" @@ -3956,93 +4342,65 @@ msgctxt "Content/*/Paragraph" msgid "Sorry, the page you asked for does not exist:" msgstr "Lo sentimos, la página solicitada no existe:" -#: front/src/components/Footer.vue:49 +#: front/src/components/Footer.vue:57 msgctxt "Footer/*/List item.Link" msgid "Source code" msgstr "Código fuente" #: front/src/components/auth/Profile.vue:23 -#: front/src/components/manage/users/UsersTable.vue:70 +#: front/src/components/manage/users/UsersTable.vue:71 msgctxt "Content/Profile/User role" msgid "Staff member" msgstr "Miembro del equipo" -#: front/src/components/audio/PlayButton.vue:23 +#: front/src/components/audio/PlayButton.vue:27 #: src/components/radios/Button.vue:4 msgctxt "*/Queue/Button.Label/Short, Verb" msgid "Start radio" msgstr "Parar radio" -#: front/src/views/admin/Settings.vue:86 -msgctxt "Content/Admin/Menu" +#: front/src/components/About.vue:170 src/components/Home.vue:53 +#: front/src/views/admin/Settings.vue:87 +#, fuzzy +msgctxt "Content/Home/Header" msgid "Statistics" msgstr "EstadÃsticas" -#: front/src/views/admin/moderation/AccountsDetail.vue:490 +#: front/src/views/admin/moderation/AccountsDetail.vue:510 msgctxt "Content/Moderation/Help text" -msgid "" -"Statistics are computed from known activity and content on your instance, " -"and do not reflect general activity for this account" -msgstr "" -"Las estadÃsticas se calculan a partir de la actividad y el contenido " -"conocidos en tu instancia y no reflejan la actividad general de esta cuenta" +msgid "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this account" +msgstr "Las estadÃsticas se calculan a partir de la actividad y el contenido conocidos en tu instancia y no reflejan la actividad general de esta cuenta" -#: front/src/views/admin/moderation/DomainsDetail.vue:371 +#: front/src/views/admin/moderation/DomainsDetail.vue:418 msgctxt "Content/Moderation/Help text" -msgid "" -"Statistics are computed from known activity and content on your instance, " -"and do not reflect general activity for this domain" -msgstr "" -"Las estadÃsticas se calculan a partir de la actividad y el contenido " -"conocidos en tu instancia y no reflejan la actividad general de éste dominio" - -#: front/src/views/admin/library/AlbumDetail.vue:329 -#: front/src/views/admin/library/ArtistDetail.vue:328 -#: front/src/views/admin/library/LibraryDetail.vue:316 -#: front/src/views/admin/library/TrackDetail.vue:371 +msgid "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this domain" +msgstr "Las estadÃsticas se calculan a partir de la actividad y el contenido conocidos en tu instancia y no reflejan la actividad general de éste dominio" + +#: front/src/views/admin/library/AlbumDetail.vue:346 +#: front/src/views/admin/library/ArtistDetail.vue:345 +#: front/src/views/admin/library/LibraryDetail.vue:356 +#: front/src/views/admin/library/TagDetail.vue:210 +#: front/src/views/admin/library/TrackDetail.vue:389 #: front/src/views/admin/library/UploadDetail.vue:335 msgctxt "Content/Moderation/Help text" -msgid "" -"Statistics are computed from known activity and content on your instance, " -"and do not reflect general activity for this object" -msgstr "" -"Las estadÃsticas se calculan a partir de la actividad y el contenido " -"conocidos en tu instancia y no reflejan la actividad general de esta cuenta" - -#: front/src/views/admin/moderation/DomainsDetail.vue:115 -msgctxt "Content/Moderation/Table.Label (Value is Error message)" -msgid "Status" -msgstr "Estado" +msgid "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" +msgstr "Las estadÃsticas se calculan a partir de la actividad y el contenido conocidos en tu instancia y no reflejan la actividad general de esta cuenta" #: front/src/components/library/FileUpload.vue:95 -msgctxt "Content/Library/Table.Label (Value is Uploading/Uploaded/Error)" -msgid "Status" -msgstr "Estado" - -#: front/src/views/content/libraries/Detail.vue:28 -msgctxt "Content/Library.Federation/Table.Label (Value is Approved/Rejected)" -msgid "Status" -msgstr "Estado" - +#: front/src/components/manage/library/EditsCardList.vue:12 +#: front/src/components/manage/moderation/ReportCard.vue:57 #: front/src/components/manage/users/InvitationsTable.vue:17 #: front/src/components/manage/users/InvitationsTable.vue:39 -msgctxt "Content/Admin/*/Noun (Value is Used/Not used)" -msgid "Status" -msgstr "Estado" - #: front/src/components/manage/users/UsersTable.vue:43 -msgctxt "Content/Admin/Table.Label/Noun (Value is Regular user/Admin)" -msgid "Status" -msgstr "Estado" - -#: front/src/components/manage/library/EditsCardList.vue:12 -msgctxt "" -"Content/Search/Dropdown.Label (Value is All/Pending " -"review/Approved/Rejected)" +#: front/src/views/admin/moderation/DomainsDetail.vue:152 +#: front/src/views/admin/moderation/ReportsList.vue:14 +#: front/src/views/content/libraries/Detail.vue:28 +#, fuzzy +msgctxt "*/*/*" msgid "Status" msgstr "Estado" -#: front/src/components/Sidebar.vue:174 src/components/radios/Button.vue:3 +#: front/src/components/Sidebar.vue:178 src/components/radios/Button.vue:3 msgctxt "*/Player/Button.Label/Short, Verb" msgid "Stop radio" msgstr "Parar radio" @@ -4052,7 +4410,7 @@ msgctxt "*/*/Button.Label/Verb" msgid "Submit" msgstr "Enviar" -#: front/src/components/library/EditForm.vue:98 +#: front/src/components/library/EditForm.vue:110 msgctxt "Content/Library/Button.Label/Verb" msgid "Submit and apply edit" msgstr "" @@ -4062,12 +4420,24 @@ msgctxt "Content/Library/Button.Label" msgid "Submit another edit" msgstr "" -#: front/src/components/library/EditForm.vue:99 +#: front/src/components/moderation/ReportModal.vue:64 +#, fuzzy +msgctxt "Popup/*/Button.Label" +msgid "Submit report" +msgstr "Enviar" + +#: front/src/components/library/EditForm.vue:111 msgctxt "Content/Library/Button.Label/Verb" msgid "Submit suggestion" msgstr "" -#: front/src/views/admin/Settings.vue:85 +#: front/src/components/manage/moderation/ReportCard.vue:17 +#, fuzzy +msgctxt "Content/Moderation/*" +msgid "Submitted by" +msgstr "Enviar" + +#: front/src/views/admin/Settings.vue:86 msgctxt "Content/Admin/Menu" msgid "Subsonic" msgstr "Subsonic" @@ -4107,16 +4477,21 @@ msgctxt "Content/Library/Tab.Title/Short" msgid "Summary" msgstr "Resumen" -#: front/src/components/library/EditForm.vue:87 +#: front/src/components/library/EditForm.vue:99 msgctxt "*/*/*" msgid "Summary (optional)" msgstr "" -#: front/src/components/Footer.vue:39 +#: front/src/components/Footer.vue:47 msgctxt "Footer/*/Listitem.Link" msgid "Support forum" msgstr "Foro de soporte" +#: front/src/views/Notifications.vue:10 +msgctxt "Content/Notifications/Header" +msgid "Support this Funkwhale pod" +msgstr "" + #: front/src/components/library/FileUpload.vue:85 msgctxt "Content/Library/Paragraph" msgid "Supported extensions: %{ extensions }" @@ -4127,25 +4502,47 @@ msgctxt "Content/Playlist/Paragraph" msgid "Syncing changes to server…" msgstr "Sincronizando los cambios con el servidor…" -#: front/src/components/audio/EmbedWizard.vue:25 +#: front/src/components/audio/SearchBar.vue:35 +msgctxt "*/*/*/Noun" +msgid "Tag" +msgstr "" + +#: front/src/views/admin/library/TagDetail.vue:61 +#, fuzzy +msgctxt "Content/Moderation/Title" +msgid "Tag data" +msgstr "Nombre" + +#: front/src/components/library/Albums.vue:23 +#: src/components/library/Artists.vue:15 +#: front/src/views/admin/library/Base.vue:23 +#: src/views/admin/library/TagsList.vue:24 front/src/edits.js:24 +#: src/edits.js:50 src/edits.js:91 src/entities.js:120 +msgctxt "*/*/*/Noun" +msgid "Tags" +msgstr "" + +#: front/src/components/mixins/Translations.vue:44 +#: front/src/components/mixins/Translations.vue:45 +#, fuzzy +msgctxt "Content/Moderation/Dropdown" +msgid "Takedown request" +msgstr "Solicitudes de seguimiento pendientes" + +#: front/src/components/About.vue:35 src/components/About.vue:61 +msgctxt "Content/About/Header" +msgid "Terms and privacy policy" +msgstr "" + +#: front/src/components/audio/EmbedWizard.vue:35 #: front/src/components/common/CopyInput.vue:3 msgctxt "Content/*/Paragraph" msgid "Text copied to clipboard!" msgstr "¡Texto copiado al portapapeles!" -#: front/src/components/Home.vue:26 -msgctxt "Content/Home/Paragraph" -msgid "" -"That's simple: we loved Grooveshark and we want to build something even " -"better." -msgstr "" -"Asà de simple: nos encantó Grooveshark y quisimos hacer algo incluso mejor." - -#: front/src/views/admin/library/AlbumDetail.vue:75 +#: front/src/views/admin/library/AlbumDetail.vue:81 msgctxt "Content/Moderation/Paragraph" -msgid "" -"The album will be removed, as well as associated uploads, tracks, favorites " -"and listening history. This action is irreversible." +msgid "The album will be removed, as well as associated uploads, tracks, favorites and listening history. This action is irreversible." msgstr "" #: front/src/components/auth/Authorize.vue:39 @@ -4153,19 +4550,15 @@ msgctxt "Content/Auth/Paragraph" msgid "The application is also requesting the following unknown permissions:" msgstr "" -#: front/src/views/admin/library/ArtistDetail.vue:74 +#: front/src/views/admin/library/ArtistDetail.vue:79 msgctxt "Content/Moderation/Paragraph" -msgid "" -"The artist will be removed, as well as associated uploads, tracks, albums, " -"favorites and listening history. This action is irreversible." +msgid "The artist will be removed, as well as associated uploads, tracks, albums, favorites and listening history. This action is irreversible." msgstr "" -#: front/src/components/Footer.vue:53 +#: front/src/components/Footer.vue:61 msgctxt "Footer/*/List item.Link" msgid "The funkwhale logo was kindly designed and provided by Francis Gading." -msgstr "" -"El logotipo de Funkwhale fue generosamente diseñado y suplido por Francis " -"Gading." +msgstr "El logotipo de Funkwhale fue generosamente diseñado y suplido por Francis Gading." #: front/src/components/SetInstanceModal.vue:8 msgctxt "Popup/Instance/Error message.List item" @@ -4174,24 +4567,17 @@ msgstr "" #: front/src/views/content/libraries/Form.vue:34 msgctxt "Popup/Library/Paragraph" -msgid "" -"The library and all its tracks will be deleted. This can not be undone." -msgstr "" -"La biblioteca y todas sus pistas serán borradas. Esta acción es " -"irreversible." +msgid "The library and all its tracks will be deleted. This can not be undone." +msgstr "La biblioteca y todas sus pistas serán borradas. Esta acción es irreversible." #: front/src/views/admin/library/LibraryDetail.vue:61 msgctxt "Content/Moderation/Paragraph" -msgid "" -"The library will be removed, as well as associated uploads, and follows. " -"This action is irreversible." +msgid "The library will be removed, as well as associated uploads, and follows. This action is irreversible." msgstr "" #: front/src/components/library/ImportStatusModal.vue:140 msgctxt "Popup/Import/Error.Label" -msgid "" -"The metadata included in the file is invalid or some mandatory fields are " -"missing." +msgid "The metadata included in the file is invalid or some mandatory fields are missing." msgstr "" #: front/src/components/library/FileUpload.vue:38 @@ -4204,14 +4590,16 @@ msgctxt "Sidebar/Player/Error message.Paragraph" msgid "The next track will play automatically in a few seconds…" msgstr "La siguiente pista se reproducirá automáticamente en unos segundos…" -#: front/src/components/Home.vue:116 -msgctxt "Content/Home/List item" -msgid "" -"The plaform is free and open-source, you can install it and modify it " -"without worries" +#: front/src/components/manage/moderation/NotesThread.vue:27 +#, fuzzy +msgctxt "Content/Moderation/Paragraph" +msgid "The note will be removed. This action is irreversible." +msgstr "Ésta acción es irreversible." + +#: front/src/components/manage/moderation/ReportCard.vue:120 +msgctxt "Content/Moderation/Message" +msgid "The object associated with this report was deleted." msgstr "" -"La plataforma es gratuita y de código fuente libre, puedes instalarla y " -"modificarla sin restricciones" #: front/src/components/playlists/Form.vue:14 msgctxt "Content/Playlist/Error message.Title" @@ -4225,46 +4613,43 @@ msgstr "" #: front/src/components/federation/FetchButton.vue:13 msgctxt "Popup/*/Message.Content" -msgid "" -"The remote server answered, but returned data was unsupported by Funkwhale." +msgid "The remote server answered, but returned data was unsupported by Funkwhale." msgstr "" #: front/src/components/federation/FetchButton.vue:44 msgctxt "*/*/Error" -msgid "The remote server didn't answered fast enough" +msgid "The remote server didn't respond quickly enough" msgstr "" #: front/src/components/federation/FetchButton.vue:50 msgctxt "*/*/Error" -msgid "The return server returned invalid JSON or JSON-LD data" +msgid "The remote server returned invalid JSON or JSON-LD data" msgstr "" #: front/src/components/manage/library/AlbumsTable.vue:189 msgctxt "Popup/*/Paragraph" -msgid "" -"The selected albums will be removed, as well as associated tracks, uploads, " -"favorites and listening history. This action is irreversible." +msgid "The selected albums will be removed, as well as associated tracks, uploads, favorites and listening history. This action is irreversible." msgstr "" #: front/src/components/manage/library/ArtistsTable.vue:179 msgctxt "Popup/*/Paragraph" -msgid "" -"The selected artist will be removed, as well as associated uploads, tracks, " -"albums, favorites and listening history. This action is irreversible." +msgid "The selected artist will be removed, as well as associated uploads, tracks, albums, favorites and listening history. This action is irreversible." msgstr "" #: front/src/components/manage/library/LibrariesTable.vue:206 msgctxt "Popup/*/Paragraph" -msgid "" -"The selected library will be removed, as well as associated uploads and " -"follows. This action is irreversible." +msgid "The selected library will be removed, as well as associated uploads and follows. This action is irreversible." msgstr "" +#: front/src/components/manage/library/TagsTable.vue:180 +#, fuzzy +msgctxt "Popup/*/Paragraph" +msgid "The selected tag will be removed and unlinked with existing content, if any. This action is irreversible." +msgstr "Ésta acción es irreversible." + #: front/src/components/manage/library/TracksTable.vue:189 msgctxt "Popup/*/Paragraph" -msgid "" -"The selected tracks will be removed, as well as associated uploads, " -"favorites and listening history. This action is irreversible." +msgid "The selected tracks will be removed, as well as associated uploads, favorites and listening history. This action is irreversible." msgstr "" #: front/src/components/manage/library/UploadsTable.vue:256 @@ -4284,10 +4669,15 @@ msgstr "La API Subsonic no está disponible en esta instancia de Funkwhale." #: front/src/components/library/EditCard.vue:96 msgctxt "Popup/Library/Paragraph" -msgid "" -"The suggestion will be completely removed, this action is irreversible." +msgid "The suggestion will be completely removed, this action is irreversible." msgstr "" +#: front/src/views/admin/library/TagDetail.vue:44 +#, fuzzy +msgctxt "Content/Moderation/Paragraph" +msgid "The tag will be removed and unlinked from any existing entity. This action is irreversible." +msgstr "Ésta acción es irreversible." + #: front/src/components/playlists/PlaylistModal.vue:34 msgctxt "Popup/Playlist/Error message.Title" msgid "The track can't be added to a playlist" @@ -4298,11 +4688,9 @@ msgctxt "Sidebar/Player/Error message.Title" msgid "The track cannot be loaded" msgstr "" -#: front/src/views/admin/library/TrackDetail.vue:74 +#: front/src/views/admin/library/TrackDetail.vue:80 msgctxt "Content/Moderation/Paragraph" -msgid "" -"The track will be removed, as well as associated uploads, favorites and " -"listening history. This action is irreversible." +msgid "The track will be removed, as well as associated uploads, favorites and listening history. This action is irreversible." msgstr "" #: front/src/views/admin/library/UploadDetail.vue:68 @@ -4318,9 +4706,7 @@ msgstr "Las canciones subidas estén en formato OGG, Flac o MP3" #: front/src/views/content/Home.vue:4 msgctxt "Content/Library/Paragraph" msgid "There are various ways to grab new content and make it available here." -msgstr "" -"Ofrecemos varias formas de obtener nuevo contenido para hacerlo disponible " -"aquÃ." +msgstr "Ofrecemos varias formas de obtener nuevo contenido para hacerlo disponible aquÃ." #: front/src/components/manage/moderation/InstancePolicyForm.vue:66 msgctxt "Popup/Moderation/Paragraph" @@ -4337,21 +4723,37 @@ msgctxt "Content/Artist/Paragraph" msgid "This artist is present in the following libraries:" msgstr "Este artista ya está en las siguientes bibliotecas:" +#: front/src/components/manage/moderation/DomainsTable.vue:169 +#, fuzzy +msgctxt "Content/Moderation/Popup" +msgid "This domain is present in your allow-list" +msgstr "Este artista ya está en las siguientes bibliotecas:" + #: front/src/views/admin/moderation/AccountsDetail.vue:84 -#: front/src/views/admin/moderation/DomainsDetail.vue:48 +#: front/src/views/admin/moderation/DomainsDetail.vue:76 msgctxt "Content/Moderation/Card.Title" msgid "This domain is subject to specific moderation rules" msgstr "Este dominio está sujeto a reglas de moderación especÃficas" +#: front/src/components/manage/moderation/InstancePolicyModal.vue:16 +#, fuzzy +msgctxt "Content/Moderation/Card.Title" +msgid "This entity is subject to specific moderation rules" +msgstr "Este dominio está sujeto a reglas de moderación especÃficas" + #: front/src/views/content/Home.vue:9 msgctxt "Content/Library/Paragraph" msgid "This instance offers up to %{quota} of storage space for every user." msgstr "Esta instancia ofrece %{ quota } de almacenamiento a cada usuario." +#: front/src/components/auth/Settings.vue:300 +msgctxt "Popup/Settings/Paragraph" +msgid "This is irreversible and will permanently remove your data from our servers. You will we immediatly logged out." +msgstr "" + #: front/src/components/auth/Settings.vue:165 msgctxt "Content/Settings/Paragraph" -msgid "" -"This is the list of applications that have access to your account data." +msgid "This is the list of applications that have access to your account data." msgstr "" #: front/src/components/auth/Settings.vue:218 @@ -4369,28 +4771,20 @@ msgctxt "Content/Library/Input.Placeholder" msgid "This library contains my personal music, I hope you like it." msgstr "Esta biblioteca contiene mi música personal, ¡espero que te guste!" -#: front/src/views/content/remote/Card.vue:141 +#: front/src/views/content/remote/Card.vue:169 msgctxt "Content/Library/Card.Help text" -msgid "" -"This library is private and your approval from its owner is needed to access" -" its content" -msgstr "" -"Esta biblioteca es privada y se necesita la aprobación de su propietario " -"para acceder a su contenido" +msgid "This library is private and your approval from its owner is needed to access its content" +msgstr "Esta biblioteca es privada y se necesita la aprobación de su propietario para acceder a su contenido" -#: front/src/views/content/remote/Card.vue:142 +#: front/src/views/content/remote/Card.vue:170 msgctxt "Content/Library/Card.Help text" msgid "This library is public and you can access its content freely" msgstr "Esta biblioteca es pública y puedes acceder a su contenido libremente" #: front/src/components/common/ActionTable.vue:47 msgctxt "Modal/*/Paragraph" -msgid "" -"This may affect a lot of elements or have irreversible consequences, please " -"double check this is really what you want." -msgstr "" -"Esto puede afectar a muchos elementos, por favor comprueba si esto es " -"realmente lo que quieres." +msgid "This may affect a lot of elements or have irreversible consequences, please double check this is really what you want." +msgstr "Esto puede afectar a muchos elementos, por favor comprueba si esto es realmente lo que quieres." #: front/src/components/library/AlbumEdit.vue:8 #: front/src/components/library/ArtistEdit.vue:8 @@ -4399,6 +4793,11 @@ msgctxt "Content/*/Message" msgid "This object is managed by another server, you cannot edit it." msgstr "" +#: front/src/components/Home.vue:87 +msgctxt "Content/Home/Paragraph" +msgid "This pod runs Funkwhale, a community-driven project that lets you listen and share music and audio within a decentralized, open network." +msgstr "" + #: front/src/components/library/FileUpload.vue:51 msgctxt "Content/Library/Paragraph" msgid "This reference will be used to group imported files together." @@ -4406,17 +4805,15 @@ msgstr "Esta referencia será usada para agrupar los archivos subidos." #: front/src/components/mixins/Translations.vue:33 #: front/src/components/mixins/Translations.vue:34 +#, fuzzy msgctxt "Content/Library/Help text" -msgid "This track could not be processed, please it is tagged correctly" -msgstr "" -"Ha ocurrido un error al procesar esta pista, asegúrate que está etiquetada " -"correctamente" +msgid "This track could not be processed, please make sure it is tagged correctly" +msgstr "Ha ocurrido un error al procesar esta pista, asegúrate que está etiquetada correctamente" #: front/src/components/mixins/Translations.vue:29 #: front/src/components/mixins/Translations.vue:30 msgctxt "Content/Library/Help text" -msgid "" -"This track has been uploaded, but hasn't been processed by the server yet" +msgid "This track has been uploaded, but hasn't been processed by the server yet" msgstr "La pista se ha subido pero aún no la ha procesado el servidor" #: front/src/components/mixins/Translations.vue:25 @@ -4425,100 +4822,94 @@ msgctxt "Content/Library/Help text" msgid "This track is already present in one of your libraries" msgstr "La pista ya está en alguna de tus bibliotecas" -#: front/src/components/audio/PlayButton.vue:85 +#: front/src/components/audio/PlayButton.vue:103 msgctxt "*/Queue/Button/Title" msgid "This track is not available in any library you have access to" -msgstr "" -"Esta pista no está disponible en ninguna biblioteca a la que tenga acceso" +msgstr "Esta pista no está disponible en ninguna biblioteca a la que tenga acceso" #: front/src/components/library/TrackDetail.vue:82 msgctxt "Content/Track/Paragraph" msgid "This track is present in the following libraries:" msgstr "Esta canción ya está en las siguientes bibliotecas:" -#: front/src/views/playlists/Detail.vue:38 +#: front/src/views/playlists/Detail.vue:46 msgctxt "Popup/Playlist/Paragraph" msgid "This will completely delete this playlist and cannot be undone." -msgstr "" -"Esto borrará por completo esta lista de reproducción y no se podrá deshacer." +msgstr "Esto borrará por completo esta lista de reproducción y no se podrá deshacer." #: front/src/views/radios/Detail.vue:27 msgctxt "Popup/Radio/Paragraph" msgid "This will completely delete this radio and cannot be undone." msgstr "Esto borrará por completo esta radio y no se podrá deshacer." -#: front/src/components/auth/SubsonicTokenForm.vue:50 +#: front/src/components/auth/SubsonicTokenForm.vue:55 msgctxt "Popup/Settings/Paragraph" -msgid "" -"This will completely disable access to the Subsonic API using from account." +msgid "This will completely disable access to the Subsonic API using from account." +msgstr "Esto desactivará por completo el acceso a la API Subsonic desde esta cuenta." + +#: front/src/components/manage/moderation/ReportCard.vue:359 +msgctxt "Content/Moderation/Popup,Paragraph" +msgid "This will delete the object associated with this report and mark the report as resolved. The deletion is irreversible." msgstr "" -"Esto desactivará por completo el acceso a la API Subsonic desde esta cuenta." -#: front/src/components/auth/SubsonicTokenForm.vue:35 +#: front/src/components/auth/SubsonicTokenForm.vue:40 msgctxt "Popup/Settings/Paragraph" -msgid "" -"This will log you out from existing devices that use the current password." -msgstr "" -"Esto cerrará tus sesiones en todos los dispositivos que usan esa contraseña." +msgid "This will log you out from existing devices that use the current password." +msgstr "Esto cerrará tus sesiones en todos los dispositivos que usan esa contraseña." #: front/src/components/auth/Settings.vue:253 msgctxt "Popup/Settings/Paragraph" -msgid "" -"This will permanently delete the application and all the associated tokens." -msgstr "" -"Esto borrará por completo esta lista de reproducción y no se podrá deshacer." +msgid "This will permanently delete the application and all the associated tokens." +msgstr "Esto borrará por completo esta lista de reproducción y no se podrá deshacer." #: front/src/components/auth/Settings.vue:194 msgctxt "Popup/Settings/Paragraph" -msgid "" -"This will prevent this application from accessing the service on your " -"behalf." +msgid "This will prevent this application from accessing the service on your behalf." msgstr "" #: front/src/components/playlists/Editor.vue:54 msgctxt "Popup/Playlist/Paragraph" msgid "This will remove all tracks from this playlist and cannot be undone." -msgstr "" -"Esto borrará todas las canciones de esta lista de reproducción y no se podrá" -" deshacer." - -#: front/src/views/admin/library/AlbumDetail.vue:99 -#: front/src/views/admin/library/TrackDetail.vue:98 src/edits.js:21 -#: src/edits.js:39 -msgctxt "*/*/*/Noun" -msgid "Title" -msgstr "TÃtulo" +msgstr "Esto borrará todas las canciones de esta lista de reproducción y no se podrá deshacer." #: front/src/components/audio/track/Table.vue:7 -#: front/src/views/content/libraries/FilesTable.vue:55 -msgctxt "Content/Track/*/Noun" -msgid "Title" -msgstr "TÃtulo" - #: front/src/components/manage/library/AlbumsTable.vue:39 #: front/src/components/manage/library/TracksTable.vue:39 -msgctxt "*/*/*" +#: front/src/views/admin/library/AlbumDetail.vue:105 +#: front/src/views/admin/library/TrackDetail.vue:104 +#: front/src/views/content/libraries/FilesTable.vue:55 src/edits.js:36 +#: front/src/edits.js:62 +msgctxt "*/*/*/Noun" msgid "Title" msgstr "TÃtulo" #: front/src/components/SetInstanceModal.vue:16 msgctxt "Popup/Instance/Paragraph" -msgid "" -"To continue, please select the Funkwhale instance you want to connect to. " -"Enter the address directly, or select one of the suggested choices." +msgid "To continue, please select the Funkwhale instance you want to connect to. Enter the address directly, or select one of the suggested choices." +msgstr "" + +#: front/src/components/ShortcutsModal.vue:148 +#, fuzzy +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Toggle favorite" +msgstr "1 favorito" + +#: front/src/components/ShortcutsModal.vue:132 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Toggle mute" msgstr "" -#: front/src/components/ShortcutsModal.vue:79 +#: front/src/components/ShortcutsModal.vue:136 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Toggle queue looping" msgstr "Alternar cola en bucle" -#: front/src/views/admin/library/AlbumDetail.vue:222 -#: front/src/views/admin/library/ArtistDetail.vue:211 -#: front/src/views/admin/library/LibraryDetail.vue:200 -#: front/src/views/admin/library/TrackDetail.vue:274 -#: front/src/views/admin/moderation/AccountsDetail.vue:317 -#: front/src/views/admin/moderation/DomainsDetail.vue:225 +#: front/src/views/admin/library/AlbumDetail.vue:238 +#: front/src/views/admin/library/ArtistDetail.vue:226 +#: front/src/views/admin/library/LibraryDetail.vue:219 +#: front/src/views/admin/library/TrackDetail.vue:290 +#: front/src/views/admin/moderation/AccountsDetail.vue:329 +#: front/src/views/admin/moderation/DomainsDetail.vue:262 msgctxt "Content/Moderation/Table.Label" msgid "Total size" msgstr "Tamaño total" @@ -4528,20 +4919,18 @@ msgctxt "Content/Library/Card.Help text" msgid "Total size of the files in this library" msgstr "Tamaño total de la biblioteca" -#: front/src/views/admin/moderation/DomainsDetail.vue:105 +#: front/src/views/admin/moderation/DomainsDetail.vue:142 msgctxt "Content/*/*" msgid "Total users" msgstr "Usuarios totales" -#: front/src/views/admin/library/UploadDetail.vue:199 -msgctxt "*/*/*" -msgid "Track" -msgstr "Canción" - -#: front/src/components/audio/SearchBar.vue:27 -#: front/src/components/library/TrackBase.vue:173 +#: front/src/components/audio/SearchBar.vue:34 +#: front/src/components/library/TrackBase.vue:188 #: front/src/components/library/TrackDetail.vue:128 #: front/src/components/metadata/Search.vue:138 +#: src/components/mixins/Report.vue:28 +#: front/src/views/admin/library/UploadDetail.vue:199 +#: front/src/components/mixins/Report.vue:29 msgctxt "*/*/*/Noun" msgid "Track" msgstr "Canción" @@ -4551,7 +4940,7 @@ msgctxt "Content/Library/Card/Short" msgid "Track #%{ id } - %{ name }" msgstr "" -#: front/src/views/admin/library/TrackDetail.vue:91 +#: front/src/views/admin/library/TrackDetail.vue:97 msgctxt "Content/Moderation/Title" msgid "Track data" msgstr "Nombre" @@ -4561,30 +4950,28 @@ msgctxt "Content/Track/Title/Noun" msgid "Track information" msgstr "Información de la canción" -#: front/src/components/mixins/Translations.vue:50 -#: front/src/components/mixins/Translations.vue:51 +#: front/src/components/mixins/Translations.vue:60 +#: front/src/components/mixins/Translations.vue:61 msgctxt "Content/*/Dropdown/Noun" msgid "Track name" msgstr "Nombre" -#: front/src/components/instance/Stats.vue:54 #: front/src/components/library/AlbumDetail.vue:19 -#: front/src/components/playlists/PlaylistModal.vue:47 -#: front/src/views/admin/moderation/AccountsDetail.vue:362 -#: front/src/views/admin/moderation/DomainsDetail.vue:274 -#: front/src/views/content/Base.vue:8 src/views/content/libraries/Detail.vue:8 -#: front/src/views/playlists/Detail.vue:51 src/views/radios/Detail.vue:34 -msgctxt "*/*/*/Noun" -msgid "Tracks" -msgstr "Canciones" - +#: front/src/components/library/TagDetail.vue:36 #: front/src/components/manage/library/AlbumsTable.vue:42 #: front/src/components/manage/library/ArtistsTable.vue:42 -#: front/src/views/admin/library/AlbumDetail.vue:252 -#: front/src/views/admin/library/ArtistDetail.vue:251 +#: front/src/components/manage/library/TagsTable.vue:44 +#: front/src/components/playlists/PlaylistModal.vue:47 +#: front/src/views/admin/library/AlbumDetail.vue:268 +#: front/src/views/admin/library/ArtistDetail.vue:266 #: front/src/views/admin/library/Base.vue:14 -#: front/src/views/admin/library/LibraryDetail.vue:229 +#: front/src/views/admin/library/LibraryDetail.vue:248 +#: front/src/views/admin/library/TagDetail.vue:143 #: front/src/views/admin/library/TracksList.vue:24 +#: front/src/views/admin/moderation/AccountsDetail.vue:374 +#: front/src/views/admin/moderation/DomainsDetail.vue:311 +#: front/src/views/content/Base.vue:8 src/views/content/libraries/Detail.vue:8 +#: front/src/views/playlists/Detail.vue:76 src/views/radios/Detail.vue:34 msgctxt "*/*/*" msgid "Tracks" msgstr "Canciones" @@ -4594,79 +4981,64 @@ msgctxt "Content/Artist/Title" msgid "Tracks by this artist" msgstr "Canciones de este artista" -#: front/src/components/instance/Stats.vue:25 -msgctxt "Content/About/Paragraph/Unit" -msgid "Tracks favorited" -msgstr "Canciones en favoritos" - -#: front/src/components/instance/Stats.vue:19 -msgctxt "Content/About/Paragraph/Unit" -msgid "tracks listened" -msgstr "Canciones escuchadas" - #: front/src/components/library/radios/Filter.vue:44 msgctxt "Popup/Radio/Title/Noun" msgid "Tracks matching filter" msgstr "Canción correspondiente al filtro" #: front/src/components/library/TrackDetail.vue:57 +#: front/src/components/manage/moderation/ReportCard.vue:134 #: front/src/views/admin/library/UploadDetail.vue:250 +#: front/src/views/admin/moderation/AccountsDetail.vue:181 msgctxt "Content/Track/Table.Label/Noun" msgid "Type" msgstr "Tipo" -#: front/src/views/admin/moderation/AccountsDetail.vue:180 -msgctxt "Content/Moderation/Table.Label/Noun" -msgid "Type" -msgstr "Tipo" - #: front/src/components/manage/moderation/AccountsTable.vue:44 -#: front/src/components/manage/moderation/DomainsTable.vue:42 +#: front/src/components/manage/moderation/DomainsTable.vue:50 msgctxt "Content/Moderation/Table.Label/Short" msgid "Under moderation rule" msgstr "Bajo regla de moderación" -#: front/src/views/content/remote/Card.vue:109 -#: src/views/content/remote/Card.vue:114 +#: front/src/components/ShortcutsModal.vue:68 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Unfocus searchbar" +msgstr "" + +#: front/src/views/content/remote/Card.vue:122 +#: src/views/content/remote/Card.vue:127 msgctxt "*/Library/Button.Label/Verb" msgid "Unfollow" msgstr "Dejar de seguir" -#: front/src/views/content/remote/Card.vue:110 +#: front/src/views/content/remote/Card.vue:123 msgctxt "Popup/Library/Title" msgid "Unfollow this library?" msgstr "¿Dejar de seguir esta biblioteca?" -#: front/src/components/About.vue:17 -msgctxt "Content/About/Paragraph" -msgid "" -"Unfortunately, the owners of this instance did not yet take the time to " -"complete this page." -msgstr "" -"Desafortunadamente, lxs propietarixs de esta instancia aún no han tomado el " -"tiempo para completar esta página." - #: front/src/components/federation/FetchButton.vue:54 #: front/src/components/federation/FetchButton.vue:55 -msgctxt "*/*/Error" -msgid "Unknowkn error" -msgstr "" - #: front/src/components/library/ImportStatusModal.vue:144 -msgctxt "Popup/Import/Error.Label" -msgid "Unkwown error" +msgctxt "*/*/Error" +msgid "Unknown error" msgstr "" -#: front/src/components/Home.vue:37 -msgctxt "Content/Home/Title" -msgid "Unlimited music" -msgstr "Música ilimitada" - -#: front/src/components/audio/Player.vue:630 +#: front/src/components/audio/Player.vue:656 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Unmute" msgstr "Activar sonido" +#: front/src/components/manage/moderation/ReportCard.vue:225 +msgctxt "Content/*/Button.Label" +msgid "Unresolve" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:67 +#: front/src/views/admin/moderation/ReportsList.vue:23 +msgctxt "Content/*/*/Short" +msgid "Unresolved" +msgstr "" + #: front/src/components/manage/moderation/InstancePolicyForm.vue:57 msgctxt "Content/Moderation/Card.Button.Label/Verb" msgid "Update" @@ -4730,12 +5102,8 @@ msgstr "Fecha de subida" #: front/src/components/library/FileUpload.vue:258 msgctxt "Content/Library/Help text" -msgid "" -"Upload denied, ensure the file is not too big and that you have not reached " -"your quota" -msgstr "" -"Subida rechazada, asegúrate que el archivo no es demasiado grande y que no " -"has alcanzado tu cuota" +msgid "Upload denied, ensure the file is not too big and that you have not reached your quota" +msgstr "Subida rechazada, asegúrate que el archivo no es demasiado grande y que no has alcanzado tu cuota" #: front/src/components/library/ImportStatusModal.vue:8 msgctxt "Popup/Import/Message" @@ -4744,20 +5112,18 @@ msgstr "" #: front/src/views/content/Home.vue:7 msgctxt "Content/Library/Paragraph" -msgid "" -"Upload music files (MP3, OGG, FLAC, etc.) from your personal library " -"directly from your browser to enjoy them here." -msgstr "" -"Sube archivos de música (mp3, OGG, Flac, etc…) de tu biblioteca personal a " -"tu navegador y disfrútala aquÃ." +msgid "Upload music files (MP3, OGG, FLAC, etc.) from your personal library directly from your browser to enjoy them here." +msgstr "Sube archivos de música (mp3, OGG, Flac, etc…) de tu biblioteca personal a tu navegador y disfrútala aquÃ." #: front/src/components/library/FileUpload.vue:30 msgctxt "Content/Library/Title/Verb" msgid "Upload new tracks" msgstr "Subir nuevas pistas" -#: front/src/views/admin/moderation/AccountsDetail.vue:298 -msgctxt "Content/Moderation/Table.Label/Noun" +#: front/src/components/About.vue:99 +#: front/src/views/admin/moderation/AccountsDetail.vue:309 +#, fuzzy +msgctxt "*/*/*" msgid "Upload quota" msgstr "Cuota de subida" @@ -4768,9 +5134,7 @@ msgstr "Timeout en la subida, intentalo de nuevo" #: front/src/components/library/ImportStatusModal.vue:14 msgctxt "Popup/Import/Message" -msgid "" -"Upload was skipped because a similar one is already available in one of your" -" libraries." +msgid "Upload was skipped because a similar one is already available in one of your libraries." msgstr "" #: front/src/components/library/ImportStatusModal.vue:11 @@ -4793,35 +5157,25 @@ msgctxt "Content/Library/Table" msgid "Uploading…" msgstr "Subiendo…" +#: front/src/components/manage/library/LibrariesTable.vue:52 +#: front/src/components/manage/moderation/AccountsTable.vue:41 +#: front/src/components/mixins/Translations.vue:75 +#: front/src/views/admin/library/AlbumDetail.vue:258 +#: front/src/views/admin/library/ArtistDetail.vue:246 #: front/src/views/admin/library/Base.vue:20 +#: front/src/views/admin/library/LibraryDetail.vue:258 +#: front/src/views/admin/library/TrackDetail.vue:310 #: front/src/views/admin/library/UploadsList.vue:24 +#: front/src/views/admin/moderation/AccountsDetail.vue:349 +#: front/src/views/admin/moderation/DomainsDetail.vue:281 +#: front/src/components/mixins/Translations.vue:76 msgctxt "*/*/*" msgid "Uploads" msgstr "Subidas" -#: front/src/components/manage/moderation/AccountsTable.vue:41 -#: front/src/components/mixins/Translations.vue:63 -#: front/src/views/admin/library/AlbumDetail.vue:242 -#: front/src/views/admin/library/ArtistDetail.vue:231 -#: front/src/views/admin/library/LibraryDetail.vue:239 -#: front/src/views/admin/library/TrackDetail.vue:294 -#: front/src/views/admin/moderation/AccountsDetail.vue:337 -#: front/src/views/admin/moderation/DomainsDetail.vue:244 -#: front/src/components/mixins/Translations.vue:64 -msgctxt "Content/Moderation/Table.Label/Noun" -msgid "Uploads" -msgstr "Subidas" - -#: front/src/components/manage/library/LibrariesTable.vue:52 -msgctxt "Content/*/*/Noun" -msgid "Uploads" -msgstr "Subidas" - #: front/src/components/auth/ApplicationForm.vue:16 msgctxt "Content/Applications/Help Text" -msgid "" -"Use \"urn:ietf:wg:oauth:2.0:oob\" as a redirect URI if your application is " -"not served on the web." +msgid "Use \"urn:ietf:wg:oauth:2.0:oob\" as a redirect URI if your application is not served on the web." msgstr "" #: front/src/components/Footer.vue:16 @@ -4829,39 +5183,57 @@ msgctxt "Footer/*/List item.Link" msgid "Use another instance" msgstr "Usar otra instancia" +#: front/src/components/Home.vue:146 +msgctxt "Content/Home/Link" +msgid "Use Funkwhale on other devices with our apps" +msgstr "" + +#: front/src/components/moderation/ReportModal.vue:44 +msgctxt "*/*/Field,Help" +msgid "Use this field to provide additional context to the moderator that will handle your report." +msgstr "" + #: front/src/views/auth/PasswordReset.vue:12 msgctxt "Content/Signup/Paragraph" -msgid "" -"Use this form to request a password reset. We will send an email to the " -"given address with instructions to reset your password." +msgid "Use this form to request a password reset. We will send an email to the given address with instructions to reset your password." +msgstr "Usa este formulario para solicitar un restablecimiento de contraseña. Te mandaremos un correo electrónico a la dirección proporcionada con instrucciones para restablecer tu contraseña." + +#: front/src/components/moderation/ReportModal.vue:18 +msgctxt "*/Moderation/Popup,Paragraph" +msgid "Use this form to submit a report to our moderation team." msgstr "" -"Usa este formulario para solicitar un restablecimiento de contraseña. Te " -"mandaremos un correo electrónico a la dirección proporcionada con " -"instrucciones para restablecer tu contraseña." #: front/src/components/manage/moderation/InstancePolicyForm.vue:111 msgctxt "Content/Moderation/Help text" -msgid "" -"Use this setting to temporarily enable/disable the policy without completely" -" removing it." -msgstr "" -"Use esta configuración para habilitar / deshabilitar temporalmente la " -"polÃtica sin eliminarla por completo." +msgid "Use this setting to temporarily enable/disable the policy without completely removing it." +msgstr "Use esta configuración para habilitar / deshabilitar temporalmente la polÃtica sin eliminarla por completo." #: front/src/components/manage/users/InvitationsTable.vue:49 msgctxt "Content/Admin/Table" msgid "Used" msgstr "Usado" +#: front/src/components/Home.vue:125 +msgctxt "Content/Home/Header" +msgid "Useful links" +msgstr "" + #: front/src/views/content/libraries/Detail.vue:26 msgctxt "Content/Library/Table.Label" msgid "User" msgstr "Usuario" -#: front/src/components/instance/Stats.vue:5 -msgctxt "Content/About/Title/Noun" -msgid "User activity" -msgstr "Actividad de usuario" +#: front/src/components/Home.vue:154 +#, fuzzy +msgctxt "Content/Home/Link" +msgid "User guides" +msgstr "Bibliotecas de usuarios" + +#: front/src/views/admin/Settings.vue:88 +#, fuzzy +msgctxt "Content/Admin/Menu" +msgid "User Interface" +msgstr "Nombre de usuario" #: front/src/components/library/AlbumDetail.vue:26 #: front/src/components/library/ArtistDetail.vue:39 @@ -4875,35 +5247,35 @@ msgctxt "Content/Radio/Title" msgid "User radios" msgstr "Radios de los usuarios" -#: front/src/components/auth/Signup.vue:19 +#: front/src/components/auth/SignupForm.vue:15 #: front/src/components/manage/users/UsersTable.vue:37 -#: front/src/components/mixins/Translations.vue:59 +#: front/src/components/mixins/Translations.vue:71 #: front/src/views/admin/moderation/AccountsDetail.vue:114 -#: front/src/components/mixins/Translations.vue:60 +#: front/src/components/mixins/Translations.vue:72 msgctxt "Content/*/*" msgid "Username" msgstr "Nombre de usuario" -#: front/src/components/auth/Login.vue:15 +#: front/src/components/auth/LoginForm.vue:11 msgctxt "Content/Login/Input.Label/Noun" msgid "Username or email" msgstr "Nombre de usuario o correo electónico" -#: front/src/components/instance/Stats.vue:13 -msgctxt "Content/About/Paragraph/Unit" -msgid "users" -msgstr "usuario" - -#: front/src/components/Sidebar.vue:102 -#: front/src/components/manage/moderation/DomainsTable.vue:39 -#: front/src/components/mixins/Translations.vue:61 +#: front/src/components/Sidebar.vue:106 +#: front/src/components/manage/moderation/DomainsTable.vue:47 +#: front/src/components/mixins/Translations.vue:73 #: src/views/admin/Settings.vue:81 front/src/views/admin/users/Base.vue:5 #: src/views/admin/users/UsersList.vue:21 -#: front/src/components/mixins/Translations.vue:62 +#: front/src/components/mixins/Translations.vue:74 msgctxt "*/*/*/Noun" msgid "Users" msgstr "Usuario" +#: front/src/components/Home.vue:110 +msgctxt "Content/Home/Paragraph" +msgid "Users on this pod also get %{ quota } of free storage to upload their own content!" +msgstr "" + #: front/src/components/Footer.vue:29 msgctxt "Footer/*/Title" msgid "Using Funkwhale" @@ -4921,45 +5293,60 @@ msgctxt "Content/Library/Link/Verb" msgid "View files" msgstr "Ver archivos" -#: front/src/components/library/AlbumBase.vue:81 -#: front/src/components/library/ArtistBase.vue:92 -#: front/src/components/library/TrackBase.vue:100 -#: front/src/views/admin/library/AlbumDetail.vue:42 -#: front/src/views/admin/library/ArtistDetail.vue:41 +#: front/src/components/library/AlbumBase.vue:95 +#: front/src/components/library/ArtistBase.vue:107 +#: front/src/components/library/TrackBase.vue:111 +#: front/src/views/admin/library/AlbumDetail.vue:48 +#: front/src/views/admin/library/ArtistDetail.vue:46 #: front/src/views/admin/library/LibraryDetail.vue:34 #: front/src/views/admin/library/LibraryDetail.vue:45 -#: front/src/views/admin/library/TrackDetail.vue:41 +#: front/src/views/admin/library/TagDetail.vue:32 +#: front/src/views/admin/library/TrackDetail.vue:47 #: front/src/views/admin/library/UploadDetail.vue:35 #: front/src/views/admin/library/UploadDetail.vue:46 #: front/src/views/admin/moderation/AccountsDetail.vue:37 #: front/src/views/admin/moderation/AccountsDetail.vue:45 +#: front/src/views/admin/moderation/DomainsDetail.vue:30 msgctxt "Content/Moderation/Link/Verb" msgid "View in Django's admin" msgstr "" -#: front/src/components/library/AlbumBase.vue:61 -#: front/src/components/library/ArtistBase.vue:72 -#: front/src/components/library/TrackBase.vue:80 +#: front/src/components/Home.vue:169 +#, fuzzy +msgctxt "Content/Home/Link" +msgid "View more…" +msgstr "Cargando seguidores…" + +#: front/src/components/library/AlbumBase.vue:62 +#: front/src/components/library/ArtistBase.vue:73 +#: front/src/components/library/TrackBase.vue:78 #: front/src/components/metadata/ArtistCard.vue:49 #: front/src/components/metadata/ReleaseCard.vue:53 msgctxt "Content/*/*/Clickable, Verb" msgid "View on MusicBrainz" msgstr "Ver en MusicBrainz" +#: front/src/components/manage/moderation/ReportCard.vue:124 +msgctxt "Content/Moderation/Link" +msgid "View public page" +msgstr "" + #: front/src/components/manage/library/LibrariesTable.vue:11 #: front/src/components/manage/library/LibrariesTable.vue:51 #: front/src/components/manage/library/UploadsTable.vue:11 #: front/src/components/manage/library/UploadsTable.vue:63 #: front/src/views/admin/library/LibraryDetail.vue:94 #: front/src/views/admin/library/UploadDetail.vue:101 +#: front/src/views/content/libraries/Form.vue:18 msgctxt "*/*/*" msgid "Visibility" msgstr "Visibilidad" -#: front/src/views/content/libraries/Form.vue:18 -msgctxt "Content/Library/Dropdown.Label" -msgid "Visibility" -msgstr "Visibilidad" +#: front/src/components/Home.vue:91 +#, fuzzy +msgctxt "Content/Home/Link" +msgid "Visit funkwhale.audio" +msgstr "Usando Funkwhale" #: front/src/components/library/AlbumDetail.vue:4 msgctxt "Content/Album/" @@ -4971,7 +5358,13 @@ msgctxt "Popup/*/Loading.Title" msgid "Waiting for result…" msgstr "Cargando tus favoritos…" -#: front/src/components/auth/Login.vue:7 +#: front/src/components/auth/Settings.vue:285 +#, fuzzy +msgctxt "Content/Settings/Error message.Title" +msgid "We cannot delete your account" +msgstr "No se puede iniciar la sesión" + +#: front/src/components/auth/LoginForm.vue:3 msgctxt "Content/Login/Error message.Title" msgid "We cannot log you in" msgstr "No se puede iniciar la sesión" @@ -4981,42 +5374,37 @@ msgctxt "Content/*/Error message.Title" msgid "We cannot save your changes" msgstr "No podemos crear tu cuenta" -#: front/src/components/Home.vue:122 -msgctxt "Content/Home/List item" -msgid "We do not track you or bother you with ads" -msgstr "No te rastreamos y no te molestamos con anuncios" +#: front/src/views/Notifications.vue:39 +msgctxt "Content/Notifications/Paragraph" +msgid "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!" +msgstr "" #: front/src/components/library/FileUpload.vue:39 msgctxt "Content/Library/Link" msgid "We recommend using Picard for that purpose." msgstr "Recomendamos usar Picard para este propósito." -#: front/src/components/Home.vue:7 -msgctxt "Content/Home/Title" -msgid "We think listening to music should be simple." -msgstr "Pensamos que debe ser simple escuchar música." +#: front/src/components/moderation/ReportModal.vue:35 +msgctxt "*/*/Field,Help" +msgid "We'll use this email if we need to contact you regarding this report." +msgstr "" -#: front/src/components/Home.vue:148 +#: front/src/components/Home.vue:207 msgctxt "Head/Home/Title" msgid "Welcome" msgstr "Bienvenido" #: front/src/components/Home.vue:5 -msgctxt "Content/Home/Title/Verb" -msgid "Welcome on Funkwhale" -msgstr "Bienvenidx a Funkwhale" - -#: front/src/components/Home.vue:24 -msgctxt "Content/Home/Title" -msgid "Why funkwhale?" -msgstr "¿Por qué funkwhale?" +msgctxt "Content/Home/Header" +msgid "Welcome to %{ podName }!" +msgstr "" -#: front/src/components/audio/EmbedWizard.vue:13 +#: front/src/components/audio/EmbedWizard.vue:23 msgctxt "Popup/Embed/Input.Label" msgid "Widget height" msgstr "Altura del widget" -#: front/src/components/audio/EmbedWizard.vue:6 +#: front/src/components/audio/EmbedWizard.vue:16 msgctxt "Popup/Embed/Input.Label" msgid "Widget width" msgstr "Ancho del widget" @@ -5036,9 +5424,11 @@ msgctxt "Content/OAuth Scopes/Help Text" msgid "Write-only access to user data" msgstr "" -#: front/src/components/Sidebar.vue:129 +#: front/src/components/Sidebar.vue:133 #: front/src/components/manage/moderation/AccountsTable.vue:72 -#: front/src/components/manage/moderation/DomainsTable.vue:58 +#: front/src/components/manage/moderation/DomainsTable.vue:12 +#: front/src/components/manage/moderation/DomainsTable.vue:69 +#: front/src/views/admin/moderation/DomainsDetail.vue:109 msgctxt "*/*/*" msgid "Yes" msgstr "SÃ" @@ -5050,29 +5440,17 @@ msgstr "SÃ, cierra mi sesión!" #: front/src/views/content/libraries/Form.vue:19 msgctxt "Content/Library/Paragraph" -msgid "" -"You are able to share your library with other people, regardless of its " -"visibility." -msgstr "" -"Puedes compartir tu biblioteca con otras personas, independientemente de su " -"vilibilidad." +msgid "You are able to share your library with other people, regardless of its visibility." +msgstr "Puedes compartir tu biblioteca con otras personas, independientemente de su vilibilidad." #: front/src/components/library/FileUpload.vue:32 msgctxt "Content/Library/Paragraph" -msgid "" -"You are about to upload music to your library. Before proceeding, please " -"ensure that:" -msgstr "" -"Estás a punto de subir música a tu biblioteca. Antes de continuar asegúrate " -"que:" +msgid "You are about to upload music to your library. Before proceeding, please ensure that:" +msgstr "Estás a punto de subir música a tu biblioteca. Antes de continuar asegúrate que:" #: front/src/components/SetInstanceModal.vue:12 msgctxt "Popup/Login/Paragraph" -msgid "" -"You are currently connected to <a href=\"%{ url }\" target=\"_blank\">%{ " -"hostname } <i class=\"external icon\"/></a>. If you continue, you will " -"be disconnected from your current instance and all your local data will be " -"deleted." +msgid "You are currently connected to <a href=\"%{ url }\" target=\"_blank\">%{ hostname } <i class=\"external icon\"/></a>. If you continue, you will be disconnected from your current instance and all your local data will be deleted." msgstr "" #: front/src/components/library/ArtistDetail.vue:6 @@ -5087,9 +5465,7 @@ msgstr "Tienes iniciada actualmente sesión como %{ username }" #: front/src/components/library/FileUpload.vue:35 msgctxt "Content/Library/List item" -msgid "" -"You are not uploading copyrighted content in a public library, otherwise you" -" may be infringing the law" +msgid "You are not uploading copyrighted content in a public library, otherwise you may be infringing the law" msgstr "" #: front/src/components/SetInstanceModal.vue:98 @@ -5098,29 +5474,14 @@ msgid "You are now using the Funkwhale instance at %{ url }" msgstr "" #: front/src/views/content/Home.vue:17 +#, fuzzy msgctxt "Content/Library/Paragraph" -msgid "" -"You can follow libraries from other users to get access to new music. Public" -" libraries can be followed immediatly, while following a private library " -"requires approval from its owner." -msgstr "" -"Puedes seguir bibliotecas de otros usuarios para obtener nueva música. " -"Puedes seguir bibliotecas públicas instantáneamente, mientras que las " -"biliotecas privadas necesitan aprovación por parte de su dueño." - -#: front/src/components/Home.vue:128 -msgctxt "Content/Home/List item" -msgid "" -"You can invite friends and family to your instance so they can enjoy your " -"music" -msgstr "" -"Puedes invitar a tus amigxs y tu familia a tu instancia para que ellxs " -"puedan disfrutar de tu música" +msgid "You can 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." +msgstr "Puedes seguir bibliotecas de otros usuarios para obtener nueva música. Puedes seguir bibliotecas públicas instantáneamente, mientras que las biliotecas privadas necesitan aprovación por parte de su dueño." #: front/src/components/moderation/FilterModal.vue:31 msgctxt "Popup/Moderation/Paragraph" -msgid "" -"You can manage and update your filters anytime from your account settings." +msgid "You can manage and update your filters any time from your account settings." msgstr "" #: front/src/views/auth/EmailConfirm.vue:24 @@ -5128,23 +5489,20 @@ msgctxt "Content/Signup/Paragraph" msgid "You can now use the service without limitations." msgstr "Ahora puede utilizar el servicio sin limitaciones." +#: front/src/components/auth/Settings.vue:278 +msgctxt "Content/Settings/Paragraph'" +msgid "You can permanently and irreversibly delete your account and all the associated data using the form below. You will be asked for confirmation." +msgstr "" + #: front/src/components/library/radios/Builder.vue:7 msgctxt "Content/Radio/Paragraph" -msgid "" -"You can use this interface to build your own custom radio, which will play " -"tracks according to your criteria." -msgstr "" -"Puedes usar esta interfaz para hacer tu propia radio personalizada, que " -"reproducirá canciones según tus criterios." +msgid "You can use this interface to build your own custom radio, which will play tracks according to your criteria." +msgstr "Puedes usar esta interfaz para hacer tu propia radio personalizada, que reproducirá canciones según tus criterios." #: front/src/components/auth/SubsonicTokenForm.vue:7 msgctxt "Content/Settings/Paragraph" -msgid "" -"You can use those to enjoy your playlist and music in offline mode, on your " -"smartphone or tablet, for instance." -msgstr "" -"Puedes usarlos para disfrutar de tus listas de reproducción y tu música en " -"modo sin conexión, en tu smartphone o tu tablet, por ejemplo." +msgid "You can use those to enjoy your playlist and music in offline mode, on your smartphone or tablet, for instance." +msgstr "Puedes usarlos para disfrutar de tus listas de reproducción y tu música en modo sin conexión, en tu smartphone o tu tablet, por ejemplo." #: front/src/components/auth/Settings.vue:202 msgctxt "Content/Applications/Paragraph" @@ -5161,19 +5519,17 @@ msgctxt "Content/Moderation/Card.Title" msgid "You don't have any rule in place for this account." msgstr "No tienes ninguna regla para esta cuenta." -#: front/src/views/admin/moderation/DomainsDetail.vue:39 +#: front/src/views/admin/moderation/DomainsDetail.vue:67 msgctxt "Content/Moderation/Card.Title" msgid "You don't have any rule in place for this domain." msgstr "No tienes ninguna regla para este dominio." #: front/src/components/library/EditForm.vue:52 msgctxt "Content/Library/Paragraph" -msgid "" -"You don't have the permission to edit this object, but you can suggest " -"changes. Once submitted, suggestions will be reviewed before approval." +msgid "You don't have the permission to edit this object, but you can suggest changes. Once submitted, suggestions will be reviewed before approval." msgstr "" -#: front/src/components/Sidebar.vue:171 +#: front/src/components/Sidebar.vue:175 msgctxt "Sidebar/Player/Title" msgid "You have a radio playing" msgstr "Estás escuchando una radio" @@ -5185,11 +5541,8 @@ msgstr "Puede tener un problema de conectividad." #: front/src/components/auth/Settings.vue:100 msgctxt "Popup/Settings/List item" -msgid "" -"You will be logged out from this session and have to log in with the new one" -msgstr "" -"Se cerrará esta sesión y tendrás que reiniciar sesión con la nueva " -"contraseña" +msgid "You will be logged out from this session and have to log in with the new one" +msgstr "Se cerrará esta sesión y tendrás que reiniciar sesión con la nueva contraseña" #: front/src/components/auth/Authorize.vue:51 msgctxt "Content/Auth/Paragraph" @@ -5203,25 +5556,24 @@ msgstr "" #: front/src/components/auth/Settings.vue:71 msgctxt "Content/Settings/Paragraph" -msgid "" -"You will have to update your password on your clients that use this " -"password." -msgstr "" -"Tendrás que actualizar tu contraseña en los clientes que usan esta " -"contraseña." +msgid "You will have to update your password on your clients that use this password." +msgstr "Tendrás que actualizar tu contraseña en los clientes que usan esta contraseña." #: front/src/components/moderation/FilterModal.vue:20 msgctxt "Popup/Moderation/Paragraph" -msgid "" -"You will not see tracks, albums and user activity linked to this artist " -"anymore:" +msgid "You will not see tracks, albums and user activity linked to this artist any more:" msgstr "" -#: front/src/components/auth/Signup.vue:13 +#: front/src/components/auth/SignupForm.vue:9 msgctxt "Content/Signup/Form/Paragraph" msgid "Your account cannot be created." msgstr "Lista de reproducción creada" +#: front/src/components/auth/Settings.vue:281 +msgctxt "Content/Settings/Paragraph'" +msgid "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." +msgstr "" + #: front/src/components/auth/Settings.vue:215 msgctxt "Content/Settings/Title/Noun" msgid "Your applications" @@ -5232,6 +5584,11 @@ msgctxt "Content/Settings/Error message.Title" msgid "Your avatar cannot be saved" msgstr "" +#: front/src/components/auth/Settings.vue:527 +msgctxt "*/Auth/Message" +msgid "Your deletion request was submitted, your account and content will be deleted shortly" +msgstr "" + #: front/src/components/library/EditForm.vue:3 msgctxt "Content/Library/Paragraph" msgid "Your edit was successfully submitted." @@ -5242,12 +5599,13 @@ msgctxt "Head/Favorites/Title" msgid "Your Favorites" msgstr "Tus favoritos" -#: front/src/components/Home.vue:109 -msgctxt "Content/Home/Title" -msgid "Your music, your way" -msgstr "Tu música, a tu manera" +#: front/src/views/Notifications.vue:5 +#, fuzzy +msgctxt "Content/Notifications/Title" +msgid "Your messages" +msgstr "Mensajes emitidos" -#: front/src/views/Notifications.vue:4 +#: front/src/views/Notifications.vue:69 msgctxt "Content/Notifications/Title" msgid "Your notifications" msgstr "Tus notificaciones" @@ -5263,43 +5621,41 @@ msgid "Your password has been updated successfully." msgstr "Tu contraseña ha sido cambiada con éxito." #: front/src/components/auth/Settings.vue:14 +#, fuzzy msgctxt "Content/Settings/Error message.Title" -msgid "Your settings can't be updateds" +msgid "Your settings can't be updated" msgstr "Ajustes actualizados" #: front/src/components/auth/Settings.vue:101 msgctxt "Popup/Settings/List item" -msgid "" -"Your Subsonic password will be changed to a new, random one, logging you out" -" from devices that used the old Subsonic password" -msgstr "" -"Tu contraseña Subsonic se cambiará a una nueva contraseña aleatoria, " -"cerrando tus sesiones en los dispositivos que usaban la antigua contraseña " -"Subsonic" +msgid "Your Subsonic password will be changed to a new, random one, logging you out from devices that used the old Subsonic password" +msgstr "Tu contraseña Subsonic se cambiará a una nueva contraseña aleatoria, cerrando tus sesiones en los dispositivos que usaban la antigua contraseña Subsonic" -#: front/src/edits.js:47 -msgctxt "*/*/*/Short, Noun" -msgid "Position" -msgstr "Paginación" +#: front/src/entities.js:126 +#, fuzzy +msgctxt "*/*/*/Noun" +msgid "MusicBrainz ID" +msgstr "Ver en MusicBrainz" -#: front/src/edits.js:54 -msgctxt "Content/Track/*/Noun" -msgid "Copyright" -msgstr "Copyright" +#: front/src/main.js:110 +msgctxt "*/Error/Paragraph" +msgid "You sent too many requests and have been rate limited, please try again in %{ delay }" +msgstr "" -#: front/src/components/library/AlbumBase.vue:183 +#: front/src/main.js:113 +msgctxt "*/Error/Paragraph" +msgid "You sent too many requests and have been rate limited, please try again later" +msgstr "" + +#: front/src/components/library/AlbumBase.vue:208 #, fuzzy msgctxt "Content/Album/Header.Title" -msgid "" -"Album containing %{ count } track, by <a class=\"internal\" href=\"%{ " -"artistUrl }\">%{ artist }</a>" -msgid_plural "" -"Album containing %{ count } tracks, by <a class=\"internal\" href=\"%{ " -"artistUrl }\">%{ artist }</a>" +msgid "Album containing %{ count } track, by <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" +msgid_plural "Album containing %{ count } tracks, by <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" msgstr[0] "Ãlbum que contiene %{ count } canción, de %{ artist }" msgstr[1] "Ãlbum que contiene %{ count } canciones, de %{ artist }" -#: front/src/components/audio/PlayButton.vue:220 +#: front/src/components/audio/PlayButton.vue:246 #, fuzzy msgctxt "*/Queue/Message" msgid "%{ count } track was added to your queue" diff --git a/front/locales/eu/LC_MESSAGES/app.po b/front/locales/eu/LC_MESSAGES/app.po index 833a9b4dc698d3eb3beae5aa8b44e4648958e794..69f9bbaf2aedfb01f118c5227b66f85a0a0da06d 100644 --- a/front/locales/eu/LC_MESSAGES/app.po +++ b/front/locales/eu/LC_MESSAGES/app.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: front 0.1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-05-16 10:35+0200\n" +"POT-Creation-Date: 2019-10-01 15:15+0200\n" "PO-Revision-Date: 2019-01-22 08:45+0000\n" "Last-Translator: Urtzi Odriozola <uodriozola@codesyntax.com>\n" "Language-Team: none\n" @@ -39,6 +39,53 @@ msgctxt "Content/Auth/Title" msgid "%{ app } wants to access your Funkwhale account" msgstr "Sartu zure Funkwhale kontura" +#: front/src/components/About.vue:173 src/components/Home.vue:56 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } active user" +msgid_plural "%{ count } active users" +msgstr[0] "abesti %{ count }" +msgstr[1] "%{ count } abesti" + +#: front/src/components/About.vue:182 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } albums" +msgid_plural "%{ count } albums" +msgstr[0] "abesti %{ count }" +msgstr[1] "%{ count } abesti" + +#: front/src/components/About.vue:152 +msgctxt "*/*/*" +msgid "%{ count } allowed domains" +msgid_plural "%{ count } allowed domains" +msgstr[0] "" +msgstr[1] "" + +#: front/src/components/About.vue:179 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } artists" +msgid_plural "%{ count } artists" +msgstr[0] "abesti %{ count }" +msgstr[1] "%{ count } abesti" + +#: front/src/components/About.vue:176 src/components/Home.vue:59 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } hour of music" +msgid_plural "%{ count } hours of music" +msgstr[0] "abesti %{ count }" +msgstr[1] "%{ count } abesti" + +#: front/src/components/About.vue:188 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } listenings" +msgid_plural "%{ count } listenings" +msgstr[0] "abesti %{ count }" +msgstr[1] "%{ count } abesti" + #: front/src/components/common/ActionTable.vue:68 #, fuzzy msgctxt "Content/*/Paragraph" @@ -47,9 +94,9 @@ msgid_plural "%{ count } on %{ total } selected" msgstr[0] "%{ count } aukeratutako %{ total }-(e)tik" msgstr[1] "%{ count } aukeratutako %{ total }-(e)tik" -#: front/src/components/Sidebar.vue:121 src/components/audio/album/Card.vue:52 +#: front/src/components/Sidebar.vue:125 src/components/audio/album/Card.vue:52 #: front/src/views/content/libraries/Card.vue:40 -#: src/views/content/remote/Card.vue:30 +#: src/views/content/remote/Card.vue:43 #, fuzzy msgctxt "*/*/*" msgid "%{ count } track" @@ -73,7 +120,15 @@ msgid_plural "%{ count } tracks matching combined filters" msgstr[0] "abesti %{ count } dator bat iragazki konbinatuekin" msgstr[1] "%{ count } abesti datoz bat iragazki konbinatuekin" -#: front/src/components/playlists/Card.vue:18 +#: front/src/components/About.vue:185 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } tracks" +msgid_plural "%{ count } tracks" +msgstr[0] "abesti %{ count }" +msgstr[1] "%{ count } abesti" + +#: front/src/components/playlists/Card.vue:28 #, fuzzy msgctxt "Content/*/Card/List item" msgid "%{ count} track" @@ -118,11 +173,10 @@ msgstr "" #: front/src/components/playlists/PlaylistModal.vue:21 msgctxt "Popup/Playlist/Paragraph" -msgid "" -"<strong>%{ track }</strong> is already in <strong>%{ playlist }</strong>." +msgid "<strong>%{ track }</strong> is already in <strong>%{ playlist }</strong>." msgstr "" -#: front/src/components/audio/artist/Card.vue:41 +#: front/src/components/audio/artist/Card.vue:11 #, fuzzy msgctxt "Content/Artist/Card" msgid "1 album" @@ -138,27 +192,45 @@ msgid_plural "%{ count } favorites" msgstr[0] "gogoko 1" msgstr[1] "%{ count } gogoko" -#: front/src/components/Home.vue:64 +#: front/src/components/audio/artist/Card.vue:15 #, fuzzy -msgctxt "Content/Home/Title" -msgid "A clean library" -msgstr "Garbitu liburutegia" +msgctxt "Content/Artist/Card" +msgid "1 track" +msgid_plural "%{ count } tracks" +msgstr[0] "Abestia sartu" +msgstr[1] "Abestia sartu" + +#: front/src/views/Notifications.vue:21 src/views/Notifications.vue:55 +msgctxt "*/*/*" +msgid "30 days" +msgstr "" + +#: front/src/views/Notifications.vue:22 src/views/Notifications.vue:56 +msgctxt "*/*/*" +msgid "60 days" +msgstr "" + +#: front/src/views/Notifications.vue:23 src/views/Notifications.vue:57 +msgctxt "*/*/*" +msgid "90 days" +msgstr "" #: front/src/components/library/FileUpload.vue:264 #, fuzzy msgctxt "Content/Library/Help text" -msgid "A network error occured while uploading this file" +msgid "A network error occurred while uploading this file" msgstr "Errorea aldaketak gordetzerakoan" -#: front/src/components/library/EditForm.vue:145 +#: front/src/components/library/EditForm.vue:161 #, fuzzy msgctxt "*/*/Placeholder" msgid "A short summary describing your changes." msgstr "Errorea aldaketak gordetzerakoan" #: front/src/components/About.vue:5 -msgctxt "Content/About/Title/Short, Noun" -msgid "About %{ instance }" +#, fuzzy +msgctxt "Content/Home/Header" +msgid "About %{ podName }" msgstr "%{ instance }-ri buruz" #: front/src/components/Footer.vue:6 @@ -167,7 +239,7 @@ msgctxt "Footer/About/Title" msgid "About %{instanceName}" msgstr "%{ instance }-ri buruz" -#: front/src/components/Footer.vue:45 +#: front/src/components/Footer.vue:53 src/components/Home.vue:85 msgctxt "Footer/*/Title/Short" msgid "About Funkwhale" msgstr "Funkwhale-ri buruz" @@ -178,9 +250,16 @@ msgctxt "Footer/About/List item.Link" msgid "About page" msgstr "Album orria" -#: front/src/components/About.vue:8 src/components/About.vue:67 -msgctxt "Content/About/Title" -msgid "About this instance" +#: front/src/components/Home.vue:19 +#, fuzzy +msgctxt "Content/Home/Header" +msgid "About this Funkwhale pod" +msgstr "Funkwhale-ri buruz" + +#: front/src/components/About.vue:21 src/components/About.vue:51 +#, fuzzy +msgctxt "Content/About/Header" +msgid "About this pod" msgstr "Instantzia honi buruz" #: front/src/views/content/libraries/Detail.vue:48 @@ -193,103 +272,92 @@ msgctxt "Content/Library/Table/Short" msgid "Accepted" msgstr "Onartuta" -#: front/src/components/auth/SubsonicTokenForm.vue:110 +#: front/src/components/auth/SubsonicTokenForm.vue:117 msgctxt "Content/Settings/Message" msgid "Access disabled" msgstr "" -#: front/src/components/mixins/Translations.vue:73 -#: front/src/components/mixins/Translations.vue:74 +#: front/src/components/mixins/Translations.vue:85 +#: front/src/components/mixins/Translations.vue:86 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to audio files, libraries, artists, albums and tracks" msgstr "" -#: front/src/components/mixins/Translations.vue:97 -#: front/src/components/mixins/Translations.vue:98 +#: front/src/components/mixins/Translations.vue:109 +#: front/src/components/mixins/Translations.vue:110 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to content filters" msgstr "" -#: front/src/components/mixins/Translations.vue:105 -#: front/src/components/mixins/Translations.vue:106 +#: front/src/components/mixins/Translations.vue:117 +#: front/src/components/mixins/Translations.vue:118 #, fuzzy msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to edits" msgstr "Onartuta" -#: front/src/components/mixins/Translations.vue:69 -#: front/src/components/mixins/Translations.vue:70 +#: front/src/components/mixins/Translations.vue:81 +#: front/src/components/mixins/Translations.vue:82 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to email, username, and profile information" msgstr "" -#: front/src/components/mixins/Translations.vue:77 -#: front/src/components/mixins/Translations.vue:78 +#: front/src/components/mixins/Translations.vue:89 +#: front/src/components/mixins/Translations.vue:90 #, fuzzy msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to favorites" msgstr "Gogokoetan sartu" -#: front/src/components/mixins/Translations.vue:85 -#: front/src/components/mixins/Translations.vue:86 +#: front/src/components/mixins/Translations.vue:97 +#: front/src/components/mixins/Translations.vue:98 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to follows" msgstr "" -#: front/src/components/mixins/Translations.vue:81 -#: front/src/components/mixins/Translations.vue:82 +#: front/src/components/mixins/Translations.vue:93 +#: front/src/components/mixins/Translations.vue:94 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to listening history" msgstr "" -#: front/src/components/mixins/Translations.vue:101 -#: front/src/components/mixins/Translations.vue:102 +#: front/src/components/mixins/Translations.vue:113 +#: front/src/components/mixins/Translations.vue:114 #, fuzzy msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to notifications" msgstr "Jakinarazpenak" -#: front/src/components/mixins/Translations.vue:89 -#: front/src/components/mixins/Translations.vue:90 +#: front/src/components/mixins/Translations.vue:101 +#: front/src/components/mixins/Translations.vue:102 #, fuzzy msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to playlists" -msgstr "Zerrendan sartu..." +msgstr "Zerrendan sartu…" -#: front/src/components/mixins/Translations.vue:93 -#: front/src/components/mixins/Translations.vue:94 +#: front/src/components/mixins/Translations.vue:105 +#: front/src/components/mixins/Translations.vue:106 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to radios" msgstr "" -#: front/src/components/Home.vue:101 -#, fuzzy -msgctxt "Content/Home/List item" -msgid "" -"Access your music from a clean interface that focuses on what really matters" -msgstr "" -"Lortu zure musika benetan axola duen lekuan zentratzen den interfaze garbi " -"batetik" - #: front/src/components/manage/library/UploadsTable.vue:67 -#: front/src/components/mixins/Translations.vue:45 +#: front/src/components/mixins/Translations.vue:55 #: front/src/views/admin/library/UploadDetail.vue:175 -#: front/src/components/mixins/Translations.vue:46 +#: front/src/components/mixins/Translations.vue:56 msgctxt "Content/*/*/Noun" msgid "Accessed date" msgstr "" -#: front/src/views/admin/library/LibraryDetail.vue:104 -#: front/src/views/admin/library/UploadDetail.vue:111 -#, fuzzy -msgctxt "*/*/*/Noun" -msgid "Account" -msgstr "Nire kontua" - #: front/src/components/manage/library/LibrariesTable.vue:49 #: front/src/components/manage/library/UploadsTable.vue:61 +#: front/src/components/manage/moderation/ReportCard.vue:156 +#: front/src/components/mixins/Report.vue:13 +#: front/src/views/admin/library/LibraryDetail.vue:113 +#: front/src/views/admin/library/UploadDetail.vue:111 +#: front/src/components/mixins/Report.vue:14 #, fuzzy -msgctxt "*/*/*" +msgctxt "*/*/*/Noun" msgid "Account" msgstr "Nire kontua" @@ -304,7 +372,7 @@ msgctxt "Content/Settings/Title" msgid "Account settings" msgstr "Kontuaren ezarpenak" -#: front/src/components/auth/Settings.vue:479 +#: front/src/components/auth/Settings.vue:544 #, fuzzy msgctxt "Head/Settings/Title" msgid "Account Settings" @@ -322,7 +390,7 @@ msgstr "Kontuaren e-maila" #: front/src/views/admin/moderation/AccountsList.vue:3 #: front/src/views/admin/moderation/AccountsList.vue:24 -#: front/src/views/admin/moderation/Base.vue:8 +#: front/src/views/admin/moderation/Base.vue:11 #, fuzzy msgctxt "*/Moderation/Title" msgid "Accounts" @@ -337,29 +405,30 @@ msgstr "Akzioa" #, fuzzy msgctxt "Content/*/Paragraph" msgid "Action %{ action } was launched successfully on %{ count } element" -msgid_plural "" -"Action %{ action } was launched successfully on %{ count } elements" +msgid_plural "Action %{ action } was launched successfully on %{ count } elements" msgstr[0] "%{ action } akzioa arrakastaz gauzatu da elementu %{ count }ean" msgstr[1] "%{ action } akzioa arrakastaz gauzatu da %{ count } elementutan" #: front/src/components/common/ActionTable.vue:22 #: front/src/components/library/radios/Builder.vue:65 +#: front/src/components/manage/moderation/ReportCard.vue:210 msgctxt "Content/*/*/Noun" msgid "Actions" msgstr "Akzioak" -#: front/src/components/manage/users/UsersTable.vue:53 +#: front/src/components/manage/users/UsersTable.vue:54 msgctxt "Content/Admin/Table" msgid "Active" msgstr "Aktibo" -#: front/src/views/admin/library/AlbumDetail.vue:134 -#: front/src/views/admin/library/ArtistDetail.vue:123 -#: front/src/views/admin/library/LibraryDetail.vue:138 -#: front/src/views/admin/library/TrackDetail.vue:186 +#: front/src/views/admin/library/AlbumDetail.vue:140 +#: front/src/views/admin/library/ArtistDetail.vue:128 +#: front/src/views/admin/library/LibraryDetail.vue:147 +#: front/src/views/admin/library/TagDetail.vue:83 +#: front/src/views/admin/library/TrackDetail.vue:192 #: front/src/views/admin/library/UploadDetail.vue:160 -#: front/src/views/admin/moderation/AccountsDetail.vue:220 -#: front/src/views/admin/moderation/DomainsDetail.vue:136 +#: front/src/views/admin/moderation/AccountsDetail.vue:221 +#: front/src/views/admin/moderation/DomainsDetail.vue:173 msgctxt "Content/Moderation/Title" msgid "Activity" msgstr "Jarduera" @@ -371,7 +440,7 @@ msgctxt "Content/Settings/Dropdown.Label/Noun" msgid "Activity visibility" msgstr "Zerrenda ikuspena" -#: front/src/views/admin/moderation/DomainsList.vue:18 +#: front/src/views/admin/moderation/DomainsList.vue:22 msgctxt "Content/Moderation/Button/Verb" msgid "Add" msgstr "" @@ -418,7 +487,21 @@ msgctxt "Content/Radio/Paragraph" msgid "Add filters to customize your radio" msgstr "Iragazkiak sortu zure irratia pertsonalizatzeko" -#: front/src/components/audio/PlayButton.vue:75 +#: front/src/components/manage/moderation/NoteForm.vue:12 +#, fuzzy +msgctxt "Content/Moderation/Button.Label/Verb" +msgid "Add note" +msgstr "Edukia sartu" + +#: front/src/components/manage/moderation/DomainsTable.vue:191 +#: front/src/views/admin/moderation/DomainsDetail.vue:46 +#: front/src/views/admin/moderation/DomainsList.vue:18 +#, fuzzy +msgctxt "Content/Moderation/Action/Verb" +msgid "Add to allow-list" +msgstr "Zerrendan sartu…" + +#: front/src/components/audio/PlayButton.vue:91 #, fuzzy msgctxt "*/Queue/Dropdown/Button/Title" msgid "Add to current queue" @@ -435,7 +518,7 @@ msgstr "Gogokoetan sartu" #, fuzzy msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Add to playlist…" -msgstr "Zerrendan sartu..." +msgstr "Zerrendan sartu…" #: front/src/components/audio/PlayButton.vue:15 msgctxt "*/Queue/Dropdown/Button/Label/Short" @@ -446,14 +529,14 @@ msgstr "Ilaran gehitu" #, fuzzy msgctxt "Popup/Playlist/Table.Button.Tooltip/Verb" msgid "Add to this playlist" -msgstr "Zerrendan sartu..." +msgstr "Zerrendan sartu…" #: front/src/components/playlists/PlaylistModal.vue:68 msgctxt "Popup/Playlist/Table.Button.Label/Verb" msgid "Add track" msgstr "Abestia sartu" -#: front/src/components/manage/users/UsersTable.vue:69 +#: front/src/components/manage/users/UsersTable.vue:70 msgctxt "Content/Admin/Table.User role" msgid "Admin" msgstr "Admin" @@ -463,52 +546,52 @@ msgctxt "Sidebar/Admin/Title/Noun" msgid "Administration" msgstr "Administrazioa" -#: front/src/views/admin/library/TrackDetail.vue:107 -msgctxt "*/*/*/Noun" -msgid "Album" -msgstr "Albuma" - -#: front/src/components/audio/SearchBar.vue:26 +#: front/src/components/audio/SearchBar.vue:33 #: src/components/audio/track/Table.vue:9 -#: front/src/components/library/AlbumBase.vue:152 -#: front/src/components/library/ArtistBase.vue:194 +#: front/src/components/library/AlbumBase.vue:170 +#: front/src/components/library/ArtistBase.vue:212 #: front/src/components/manage/library/TracksTable.vue:40 #: front/src/components/metadata/Search.vue:134 +#: src/components/mixins/Report.vue:41 +#: front/src/views/admin/library/TrackDetail.vue:113 #: front/src/views/content/libraries/FilesTable.vue:57 +#: front/src/components/mixins/Report.vue:42 msgctxt "*/*/*" msgid "Album" msgstr "Albuma" -#: front/src/views/admin/library/TrackDetail.vue:128 +#: front/src/views/admin/library/TrackDetail.vue:134 #, fuzzy msgctxt "*/*/*/Noun" msgid "Album artist" msgstr "Artista honen albumak" -#: front/src/views/admin/library/AlbumDetail.vue:92 +#: front/src/views/admin/library/AlbumDetail.vue:98 #, fuzzy msgctxt "Content/Moderation/Title" msgid "Album data" msgstr "Album orria" -#: front/src/components/mixins/Translations.vue:51 -#: front/src/components/mixins/Translations.vue:52 +#: front/src/components/mixins/Translations.vue:61 +#: front/src/components/mixins/Translations.vue:62 #, fuzzy msgctxt "Content/*/Dropdown/Noun" msgid "Album name" msgstr "Album orria" #: front/src/components/audio/Search.vue:19 -#: src/components/instance/Stats.vue:48 -#: front/src/components/library/Albums.vue:120 -#: src/components/library/Library.vue:7 +#: src/components/library/Albums.vue:129 +#: front/src/components/library/Library.vue:7 +#: src/components/library/TagDetail.vue:28 #: front/src/components/manage/library/ArtistsTable.vue:41 +#: front/src/components/manage/library/TagsTable.vue:43 #: front/src/views/admin/library/AlbumsList.vue:24 -#: front/src/views/admin/library/ArtistDetail.vue:241 +#: front/src/views/admin/library/ArtistDetail.vue:256 #: front/src/views/admin/library/Base.vue:11 -#: front/src/views/admin/library/LibraryDetail.vue:219 -#: front/src/views/admin/moderation/AccountsDetail.vue:354 -#: front/src/views/admin/moderation/DomainsDetail.vue:264 +#: front/src/views/admin/library/LibraryDetail.vue:238 +#: front/src/views/admin/library/TagDetail.vue:133 +#: front/src/views/admin/moderation/AccountsDetail.vue:366 +#: front/src/views/admin/moderation/DomainsDetail.vue:301 msgctxt "*/*/*" msgid "Albums" msgstr "Albumak" @@ -522,7 +605,10 @@ msgstr "Artista honen albumak" #: front/src/components/manage/library/LibrariesTable.vue:13 #: front/src/components/manage/library/UploadsTable.vue:13 #: front/src/components/manage/library/UploadsTable.vue:22 +#: front/src/components/manage/moderation/DomainsTable.vue:11 #: front/src/components/manage/users/InvitationsTable.vue:19 +#: front/src/components/moderation/ReportCategoryDropdown.vue:32 +#: front/src/views/admin/moderation/ReportsList.vue:17 #: front/src/views/content/libraries/FilesTable.vue:13 msgctxt "Content/*/Dropdown" msgid "All" @@ -541,42 +627,52 @@ msgctxt "Head/Authorize/Title" msgid "Allow application" msgstr "" +#: front/src/components/About.vue:136 +msgctxt "*/*/*" +msgid "Allow-list" +msgstr "" + +#: front/src/components/About.vue:149 +msgctxt "*/*/*" +msgid "Allowed domains" +msgstr "" + #: front/src/components/library/ImportStatusModal.vue:17 msgctxt "Popup/Import/Message" -msgid "" -"An error occured during upload processing. You will find more information " -"below." +msgid "An error occurred during upload processing. You will find more information below." msgstr "" #: front/src/components/playlists/Editor.vue:13 +#, fuzzy msgctxt "Content/Playlist/Error message.Title" -msgid "An error occured while saving your changes" +msgid "An error occurred while saving your changes" msgstr "Errorea aldaketak gordetzerakoan" #: front/src/components/federation/FetchButton.vue:21 #, fuzzy msgctxt "Popup/*/Message.Content" -msgid "An error occured while trying to refresh data:" +msgid "An error occurred while trying to refresh data:" msgstr "Errorea aldaketak gordetzerakoan" #: front/src/components/federation/FetchButton.vue:41 #, fuzzy msgctxt "*/*/Error" -msgid "An HTTP error occured while contacting the remote server" +msgid "An HTTP error occurred while contacting the remote server" msgstr "Errorea aldaketak gordetzerakoan" -#: front/src/components/auth/Login.vue:10 -msgctxt "Content/Login/Error message/List item" -msgid "" -"An unknown error happend, this can mean the server is down or cannot be " -"reached" -msgstr "" -"Errore ezezaguna gertatu da. Honek, zerbitzaria erori dela edota ezin dela " -"atzeman esan nahi du" - #: front/src/components/library/ImportStatusModal.vue:145 msgctxt "Popup/Import/Error.Label" -msgid "An unkwown error occured" +msgid "An unknown error occurred" +msgstr "" + +#: front/src/components/About.vue:123 +msgctxt "*/*/*" +msgid "Anonymous access" +msgstr "" + +#: front/src/components/moderation/ReportModal.vue:54 +msgctxt "Popup/Moderation/Error message" +msgid "Anonymous reports are disabled, please sign-in to submit a report." msgstr "" #: front/src/components/auth/Settings.vue:175 @@ -599,9 +695,7 @@ msgstr "Akzioa" #: front/src/components/auth/ApplicationEdit.vue:16 msgctxt "Content/Application/Paragraph/" -msgid "" -"Application ID and secret are really sensitive values and must be treated " -"like passwords. Do not share those with anyone else." +msgid "Application ID and secret are really sensitive values and must be treated like passwords. Do not share those with anyone else." msgstr "" #: front/src/components/auth/ApplicationEdit.vue:25 @@ -631,30 +725,28 @@ msgctxt "Content/Login/Title" msgid "Are you sure you want to log out?" msgstr "Zir al zaude saioa itxi nahi duzula?" +#: front/src/components/audio/SearchBar.vue:32 +#: src/components/audio/track/Table.vue:8 #: front/src/components/manage/library/AlbumsTable.vue:40 #: front/src/components/manage/library/TracksTable.vue:41 -msgctxt "*/*/*" -msgid "Artist" -msgstr "Artista" - -#: front/src/components/audio/SearchBar.vue:25 -#: src/components/audio/track/Table.vue:8 #: front/src/components/metadata/Search.vue:130 -#: front/src/views/admin/library/AlbumDetail.vue:108 -#: front/src/views/admin/library/TrackDetail.vue:118 -#: front/src/views/content/libraries/FilesTable.vue:56 +#: src/components/mixins/Report.vue:55 +#: front/src/views/admin/library/AlbumDetail.vue:114 +#: front/src/views/admin/library/TrackDetail.vue:124 +#: front/src/views/content/libraries/FilesTable.vue:56 src/entities.js:12 +#: front/src/components/mixins/Report.vue:56 msgctxt "*/*/*/Noun" msgid "Artist" msgstr "Artista" -#: front/src/views/admin/library/ArtistDetail.vue:91 +#: front/src/views/admin/library/ArtistDetail.vue:96 #, fuzzy msgctxt "Content/Moderation/Title" msgid "Artist data" msgstr "Artistaren izena" -#: front/src/components/mixins/Translations.vue:52 -#: front/src/components/mixins/Translations.vue:53 +#: front/src/components/mixins/Translations.vue:62 +#: front/src/components/mixins/Translations.vue:63 msgctxt "Content/*/Dropdown/Noun" msgid "Artist name" msgstr "Artistaren izena" @@ -664,36 +756,36 @@ msgctxt "*/Search/Input.Placeholder" msgid "Artist, album, track…" msgstr "" +#: front/src/components/audio/Search.vue:10 +#: src/components/library/Artists.vue:117 +#: front/src/components/library/Library.vue:10 +#: front/src/components/library/TagDetail.vue:19 +#: front/src/components/manage/library/TagsTable.vue:42 #: front/src/views/admin/library/ArtistsList.vue:24 #: front/src/views/admin/library/Base.vue:8 -#: front/src/views/admin/library/LibraryDetail.vue:209 -msgctxt "*/*/*" -msgid "Artists" -msgstr "Artistak" - -#: front/src/components/audio/Search.vue:10 -#: src/components/instance/Stats.vue:42 -#: front/src/components/library/Artists.vue:117 -#: src/components/library/Library.vue:10 -#: front/src/views/admin/moderation/AccountsDetail.vue:346 -#: front/src/views/admin/moderation/DomainsDetail.vue:254 +#: front/src/views/admin/library/LibraryDetail.vue:228 +#: front/src/views/admin/library/TagDetail.vue:123 +#: front/src/views/admin/moderation/AccountsDetail.vue:358 +#: front/src/views/admin/moderation/DomainsDetail.vue:291 msgctxt "*/*/*/Noun" msgid "Artists" msgstr "Artistak" #: front/src/components/favorites/List.vue:34 -#: src/components/library/Albums.vue:25 -#: front/src/components/library/Artists.vue:25 +#: src/components/library/Albums.vue:29 +#: front/src/components/library/Artists.vue:29 #: src/components/library/Radios.vue:44 #: front/src/components/manage/library/AlbumsTable.vue:21 #: front/src/components/manage/library/ArtistsTable.vue:21 #: front/src/components/manage/library/EditsCardList.vue:39 #: front/src/components/manage/library/LibrariesTable.vue:30 +#: front/src/components/manage/library/TagsTable.vue:21 #: front/src/components/manage/library/TracksTable.vue:21 #: front/src/components/manage/library/UploadsTable.vue:40 #: front/src/components/manage/moderation/AccountsTable.vue:21 -#: front/src/components/manage/moderation/DomainsTable.vue:19 +#: front/src/components/manage/moderation/DomainsTable.vue:27 #: front/src/components/manage/users/UsersTable.vue:19 +#: front/src/views/admin/moderation/ReportsList.vue:44 #: front/src/views/content/libraries/FilesTable.vue:31 #: front/src/views/playlists/List.vue:27 msgctxt "Content/Search/Dropdown" @@ -705,19 +797,25 @@ msgctxt "Content/Signup/Button.Label/Verb" msgid "Ask for a password reset" msgstr "Eskatu pasahitza berrezartzeko" -#: front/src/views/admin/library/AlbumDetail.vue:198 -#: front/src/views/admin/library/ArtistDetail.vue:187 -#: front/src/views/admin/library/LibraryDetail.vue:176 -#: front/src/views/admin/library/TrackDetail.vue:250 +#: front/src/components/manage/moderation/ReportCard.vue:72 +msgctxt "Content/Moderation/*" +msgid "Assigned to" +msgstr "" + +#: front/src/views/admin/library/AlbumDetail.vue:214 +#: front/src/views/admin/library/ArtistDetail.vue:202 +#: front/src/views/admin/library/LibraryDetail.vue:195 +#: front/src/views/admin/library/TagDetail.vue:113 +#: front/src/views/admin/library/TrackDetail.vue:266 #: front/src/views/admin/library/UploadDetail.vue:191 -#: front/src/views/admin/moderation/AccountsDetail.vue:274 -#: front/src/views/admin/moderation/DomainsDetail.vue:202 +#: front/src/views/admin/moderation/AccountsDetail.vue:285 +#: front/src/views/admin/moderation/DomainsDetail.vue:239 #, fuzzy msgctxt "Content/Moderation/Title" msgid "Audio content" msgstr "Edukia sartu" -#: front/src/components/ShortcutsModal.vue:55 +#: front/src/components/ShortcutsModal.vue:92 msgctxt "Popup/Keyboard shortcuts/Title" msgid "Audio player shortcuts" msgstr "" @@ -761,9 +859,9 @@ msgid "Back to settings" msgstr "Itzuli sarrerara" #: front/src/components/library/TrackDetail.vue:48 -#: front/src/components/mixins/Translations.vue:55 +#: front/src/components/mixins/Translations.vue:67 #: front/src/views/admin/library/UploadDetail.vue:227 -#: front/src/components/mixins/Translations.vue:56 +#: front/src/components/mixins/Translations.vue:68 msgctxt "Content/Track/*/Noun" msgid "Bitrate" msgstr "Bitrate" @@ -776,10 +874,7 @@ msgstr "" #: front/src/components/manage/moderation/InstancePolicyForm.vue:112 msgctxt "Content/Moderation/Help text" -msgid "" -"Block everything from this account or domain. This will prevent any " -"interaction with the entity, and purge related content (uploads, libraries, " -"follows, etc.)" +msgid "Block everything from this account or domain. This will prevent any interaction with the entity, and purge related content (uploads, libraries, follows, etc.)" msgstr "" #: front/src/components/Sidebar.vue:18 src/components/library/Library.vue:4 @@ -792,6 +887,11 @@ msgctxt "Sidebar/Library/List item.Link/Verb" msgid "Browse library" msgstr "Bilatu liburutegia" +#: front/src/components/Home.vue:132 +msgctxt "Content/Home/Link" +msgid "Browse public content" +msgstr "" + #: front/src/components/library/Albums.vue:4 #, fuzzy msgctxt "Content/Album/Title" @@ -823,40 +923,41 @@ msgctxt "Content/Album/Card" msgid "By %{ artist }" msgstr "Artista: %{ artist }" -#: front/src/views/content/remote/Card.vue:112 +#: front/src/views/content/remote/Card.vue:125 #, fuzzy msgctxt "Popup/Library/Paragraph" msgid "By unfollowing this library, you loose access to its content." -msgstr "" -"Liburutegi hau jarraitzeari utzita, bere edukirako sarbidea galduko duzu." +msgstr "Liburutegi hau jarraitzeari utzita, bere edukirako sarbidea galduko duzu." -#: front/src/views/admin/library/AlbumDetail.vue:214 -#: front/src/views/admin/library/ArtistDetail.vue:203 -#: front/src/views/admin/library/LibraryDetail.vue:192 -#: front/src/views/admin/library/TrackDetail.vue:266 +#: front/src/views/admin/library/AlbumDetail.vue:230 +#: front/src/views/admin/library/ArtistDetail.vue:218 +#: front/src/views/admin/library/LibraryDetail.vue:211 +#: front/src/views/admin/library/TrackDetail.vue:282 #: front/src/views/admin/library/UploadDetail.vue:208 -#: front/src/views/admin/moderation/AccountsDetail.vue:290 -#: front/src/views/admin/moderation/DomainsDetail.vue:217 +#: front/src/views/admin/moderation/AccountsDetail.vue:301 +#: front/src/views/admin/moderation/DomainsDetail.vue:254 msgctxt "Content/Moderation/Table.Label/Noun" msgid "Cached size" msgstr "" #: front/src/components/SetInstanceModal.vue:37 #: front/src/components/common/DangerousButton.vue:17 -#: front/src/components/library/AlbumBase.vue:36 -#: front/src/components/library/ArtistBase.vue:47 -#: front/src/components/library/EditForm.vue:95 -#: front/src/components/library/TrackBase.vue:55 +#: front/src/components/library/AlbumBase.vue:37 +#: front/src/components/library/ArtistBase.vue:48 +#: front/src/components/library/EditForm.vue:107 +#: front/src/components/library/TrackBase.vue:53 #: front/src/components/library/radios/Filter.vue:53 #: front/src/components/manage/moderation/InstancePolicyForm.vue:54 #: front/src/components/moderation/FilterModal.vue:39 +#: front/src/components/moderation/ReportModal.vue:59 #: front/src/components/playlists/PlaylistModal.vue:26 #: front/src/components/playlists/PlaylistModal.vue:77 +#: front/src/views/playlists/Detail.vue:62 msgctxt "*/*/Button.Label/Verb" msgid "Cancel" msgstr "Ezeztatu" -#: front/src/views/content/remote/Card.vue:97 +#: front/src/views/content/remote/Card.vue:110 msgctxt "Content/Library/Card.Paragraph" msgid "Cancel follow request" msgstr "" @@ -871,6 +972,14 @@ msgctxt "Content/Library/Help text" msgid "Cannot upload this file, ensure it is not too big" msgstr "" +#: front/src/components/manage/moderation/ReportCard.vue:30 +#: front/src/components/mixins/Translations.vue:42 +#: front/src/components/moderation/ReportCategoryDropdown.vue:2 +#: front/src/components/mixins/Translations.vue:43 +msgctxt "*/*/*" +msgid "Category" +msgstr "" + #: front/src/components/Footer.vue:21 msgctxt "Footer/Settings/Dropdown.Label/Short, Verb" msgid "Change language" @@ -886,6 +995,11 @@ msgctxt "Content/Settings/Button.Label" msgid "Change password" msgstr "Pasahitza aldatu" +#: front/src/components/Footer.vue:37 +msgctxt "Footer/Settings/Dropdown.Label/Short, Verb" +msgid "Change theme" +msgstr "" + #: front/src/views/auth/PasswordResetConfirm.vue:62 msgctxt "*/Signup/Title" msgid "Change your password" @@ -903,12 +1017,8 @@ msgstr "Aldaketak zerbitzariarekin sinkronizatuta" #: front/src/components/auth/Settings.vue:71 msgctxt "Content/Settings/Paragraph'" -msgid "" -"Changing your password will also change your Subsonic API password if you " -"have requested one." -msgstr "" -"Zure pasahitza aldatzeak Subsonic APIko pasahitza ere aldatuko du, baten bat" -" eskatuta baduzu." +msgid "Changing your password will also change your Subsonic API password if you have requested one." +msgstr "Zure pasahitza aldatzeak Subsonic APIko pasahitza ere aldatuko du, baten bat eskatuta baduzu." #: front/src/components/auth/Settings.vue:98 #, fuzzy @@ -916,16 +1026,14 @@ msgctxt "Popup/Settings/Paragraph" msgid "Changing your password will have the following consequences:" msgstr "Pasahitza aldatzeak hurrengo ondorioak izango ditu" -#: front/src/components/Footer.vue:40 +#: front/src/components/Footer.vue:48 msgctxt "Footer/*/List item.Link" msgid "Chat room" msgstr "" #: front/src/components/auth/ApplicationForm.vue:24 msgctxt "Content/Applications/Paragraph/" -msgid "" -"Checking the parent \"Read\" or \"Write\" scopes implies access to all the " -"corresponding children scopes." +msgid "Checking the parent \"Read\" or \"Write\" scopes implies access to all the corresponding children scopes." msgstr "" #: front/src/components/SetInstanceModal.vue:2 @@ -933,12 +1041,9 @@ msgctxt "Popup/Instance/Title" msgid "Choose your instance" msgstr "Zure instantzia hautatu" -#: front/src/components/manage/users/InvitationForm.vue:37 -msgctxt "Content/Admin/Button.Label/Verb" -msgid "Clear" -msgstr "Garbitu" - #: front/src/components/library/EditForm.vue:75 +#: front/src/components/library/EditForm.vue:88 +#: front/src/components/manage/users/InvitationForm.vue:37 msgctxt "Content/Library/Button.Label" msgid "Clear" msgstr "Garbitu" @@ -949,46 +1054,46 @@ msgctxt "*/Playlist/Button.Label/Verb" msgid "Clear playlist" msgstr "Garbitu zerrenda" -#: front/src/components/audio/Player.vue:642 +#: front/src/components/ShortcutsModal.vue:144 +#, fuzzy +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Clear queue" +msgstr "Garbitu" + +#: front/src/components/audio/Player.vue:668 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Clear your queue" msgstr "" -#: front/src/components/Home.vue:44 -msgctxt "Content/Home/List item/Verb" -msgid "Click once, listen for hours using built-in radios" -msgstr "Klik egin behin, entzun orduetan irratiak erabiliz" - #: front/src/components/mixins/Translations.vue:21 #: front/src/components/mixins/Translations.vue:22 msgctxt "Content/Library/Link.Title" -msgid "" -"Click to display more information about the import process for this upload" +msgid "Click to display more information about the import process for this upload" msgstr "" #: front/src/components/library/FileUpload.vue:82 msgctxt "Content/Library/Paragraph/Call to action" msgid "Click to select files to upload or drag and drop files or directories" -msgstr "" -"Klik egin igotzeko fitxategiak aukeratzeko edo arrastatu eta jaregin " -"fitxategi edo karpetak" +msgstr "Klik egin igotzeko fitxategiak aukeratzeko edo arrastatu eta jaregin fitxategi edo karpetak" +#: front/src/components/ShortcutsModal.vue:38 #: front/src/components/federation/FetchButton.vue:85 #: front/src/components/library/ImportStatusModal.vue:79 +#: front/src/components/manage/moderation/InstancePolicyModal.vue:34 msgctxt "*/*/Button.Label/Verb" msgid "Close" msgstr "" -#: front/src/components/ShortcutsModal.vue:20 -msgctxt "Popup/Keyboard shortcuts/Button.Label/Verb" -msgid "Close" -msgstr "" - #: front/src/components/federation/FetchButton.vue:88 msgctxt "*/*/Button.Label/Verb" msgid "Close and reload page" msgstr "" +#: front/src/components/About.vue:94 +msgctxt "*/*/*/State of registrations" +msgid "Closed" +msgstr "" + #: front/src/components/manage/users/InvitationForm.vue:26 #: front/src/components/manage/users/InvitationsTable.vue:42 msgctxt "Content/Admin/Table.Label/Noun" @@ -996,8 +1101,9 @@ msgid "Code" msgstr "Kodea" #: front/src/components/audio/album/Card.vue:41 -#: front/src/components/audio/artist/Card.vue:33 -msgctxt "Content/*/Card.Link/Verb" +#: front/src/components/common/CollapseLink.vue:3 +#, fuzzy +msgctxt "*/*/Button,Label" msgid "Collapse" msgstr "Itxi" @@ -1022,20 +1128,20 @@ msgctxt "Content/Signup/Form.Label" msgid "Confirmation code" msgstr "Baieztapen kodea" +#: front/src/components/About.vue:67 src/components/Home.vue:65 +msgctxt "Content/Home/Header/Name" +msgid "Contact" +msgstr "" + #: front/src/components/moderation/FilterModal.vue:90 #, fuzzy msgctxt "*/Moderation/Message" msgid "Content filter successfully added" msgstr "Arrakastaz eskaneatuta" -#: front/src/components/mixins/Translations.vue:96 -#: front/src/components/mixins/Translations.vue:97 -#, fuzzy -msgctxt "Content/OAuth Scopes/Label" -msgid "Content filters" -msgstr "Aukeratu filtroa" - #: front/src/components/auth/Settings.vue:116 +#: front/src/components/mixins/Translations.vue:108 +#: front/src/components/mixins/Translations.vue:109 #, fuzzy msgctxt "Content/Settings/Title/Noun" msgid "Content filters" @@ -1043,8 +1149,7 @@ msgstr "Aukeratu filtroa" #: front/src/components/auth/Settings.vue:119 msgctxt "Content/Settings/Paragraph" -msgid "" -"Content filters help you hide content you don't want to see on the service." +msgid "Content filters help you hide content you don't want to see on the service." msgstr "" #: front/src/components/common/ActionTable.vue:8 @@ -1052,13 +1157,20 @@ msgctxt "Content/*/Button.Help text.Paragraph" msgid "Content have been updated, click refresh to see up-to-date content" msgstr "" -#: front/src/components/Footer.vue:48 +#: front/src/components/About.vue:46 +#, fuzzy +msgctxt "Content/About/Header" +msgid "Contents" +msgstr "Aukeratu filtroa" + +#: front/src/components/Footer.vue:56 msgctxt "Footer/*/List item.Link" msgid "Contribute" msgstr "" -#: front/src/components/audio/EmbedWizard.vue:19 +#: front/src/components/audio/EmbedWizard.vue:29 #: front/src/components/common/CopyInput.vue:8 +#: front/src/components/forms/PasswordInput.vue:43 msgctxt "*/*/Button.Label/Short, Verb" msgid "Copy" msgstr "Kopiatu" @@ -1073,15 +1185,15 @@ msgctxt "Content/Auth/Paragraph" msgid "Copy-paste the following code in the application:" msgstr "" -#: front/src/components/audio/EmbedWizard.vue:21 +#: front/src/components/audio/EmbedWizard.vue:31 msgctxt "Popup/Embed/Paragraph" msgid "Copy/paste this code in your website HTML" msgstr "" #: front/src/components/library/TrackDetail.vue:10 -#: front/src/views/admin/library/TrackDetail.vue:153 +#: front/src/views/admin/library/TrackDetail.vue:159 src/edits.js:77 #, fuzzy -msgctxt "Content/Track/Table.Label/Noun" +msgctxt "Content/Track/*/Noun" msgid "Copyright" msgstr "Kopiatu" @@ -1097,32 +1209,22 @@ msgctxt "Content/Library/Error message.Title" msgid "Could not fetch remote library" msgstr "Errorea urruneko liburutegia atzitzean" -#: front/src/components/Home.vue:80 -msgctxt "Content/Home/List item" -msgid "Covers, lyrics, our goal is to have them all ;)" -msgstr "Azalak, letrak, gure helburua horiek denak edukitzea da ;)" - #: front/src/components/manage/moderation/InstancePolicyForm.vue:58 #, fuzzy msgctxt "Content/Moderation/Card.Button.Label/Verb" msgid "Create" msgstr "Inportazioa sortu" -#: front/src/components/auth/Signup.vue:4 +#: front/src/views/auth/Signup.vue:4 msgctxt "Content/Signup/Title" msgid "Create a funkwhale account" msgstr "Sortu funkwhale kontua" -#: front/src/components/auth/Settings.vue:220 -#, fuzzy -msgctxt "Content/Settings/Button.Label" -msgid "Create a new application" -msgstr "Zerrenda berria sortu" - #: front/src/components/auth/ApplicationNew.vue:8 #: front/src/components/auth/ApplicationNew.vue:41 +#: front/src/components/auth/Settings.vue:220 #, fuzzy -msgctxt "Content/Applications/Title" +msgctxt "Content/Settings/Button.Label" msgid "Create a new application" msgstr "Zerrenda berria sortu" @@ -1136,7 +1238,7 @@ msgctxt "Popup/Playlist/Title/Verb" msgid "Create a new playlist" msgstr "Zerrenda berria sortu" -#: front/src/components/Sidebar.vue:57 src/components/auth/Login.vue:17 +#: front/src/components/Sidebar.vue:57 src/components/auth/LoginForm.vue:15 msgctxt "*/Signup/Link/Verb" msgid "Create an account" msgstr "Kontua sortu" @@ -1152,7 +1254,7 @@ msgctxt "Content/Library/Button.Label/Verb" msgid "Create library" msgstr "Liburutegia sortu" -#: front/src/components/auth/Signup.vue:53 +#: front/src/components/auth/SignupForm.vue:49 msgctxt "Content/Signup/Button.Label" msgid "Create my account" msgstr "Sortu nire kontua" @@ -1177,11 +1279,13 @@ msgstr "Sortu zure irrati propioa" #: front/src/components/manage/library/AlbumsTable.vue:44 #: front/src/components/manage/library/ArtistsTable.vue:43 #: front/src/components/manage/library/LibrariesTable.vue:54 +#: front/src/components/manage/library/TagsTable.vue:45 #: front/src/components/manage/library/TracksTable.vue:44 #: front/src/components/manage/library/UploadsTable.vue:66 +#: front/src/components/manage/moderation/ReportCard.vue:43 #: front/src/components/manage/users/InvitationsTable.vue:40 -#: front/src/components/mixins/Translations.vue:43 -#: front/src/components/mixins/Translations.vue:44 +#: front/src/components/mixins/Translations.vue:53 +#: front/src/components/mixins/Translations.vue:54 msgctxt "Content/*/*/Noun" msgid "Creation date" msgstr "Sortze data" @@ -1191,6 +1295,12 @@ msgctxt "Content/Settings/Title/Noun" msgid "Current avatar" msgstr "Oraingo irudia" +#: front/src/components/admin/SettingsGroup.vue:67 +#, fuzzy +msgctxt "Content/Settings/Title/Noun" +msgid "Current image" +msgstr "Oraingo erabilera" + #: front/src/views/content/libraries/DetailArea.vue:4 msgctxt "Content/Library/Title" msgid "Current library" @@ -1206,6 +1316,11 @@ msgctxt "Content/Library/Title" msgid "Current usage" msgstr "Oraingo erabilera" +#: front/src/components/Footer.vue:94 +msgctxt "Footer/Settings/Dropdown.Label/Theme name" +msgid "Dark" +msgstr "" + #: front/src/components/federation/FetchButton.vue:53 msgctxt "*/*/Error" msgid "Data returned by the remote server had invalid or missing attributes" @@ -1227,7 +1342,7 @@ msgctxt "Popup/Import/Table.Label/Noun" msgid "Debug information" msgstr "Iraupena" -#: front/src/components/ShortcutsModal.vue:75 +#: front/src/components/ShortcutsModal.vue:128 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Decrease volume" msgstr "" @@ -1239,23 +1354,29 @@ msgstr "" #: front/src/components/manage/library/AlbumsTable.vue:188 #: front/src/components/manage/library/ArtistsTable.vue:178 #: front/src/components/manage/library/LibrariesTable.vue:205 +#: front/src/components/manage/library/TagsTable.vue:179 #: front/src/components/manage/library/TracksTable.vue:188 #: front/src/components/manage/library/UploadsTable.vue:255 #: front/src/components/manage/moderation/InstancePolicyForm.vue:61 +#: front/src/components/manage/moderation/NotesThread.vue:24 +#: front/src/components/manage/moderation/NotesThread.vue:29 +#: front/src/components/manage/moderation/ReportCard.vue:360 #: front/src/components/manage/users/InvitationsTable.vue:167 -#: front/src/views/admin/library/AlbumDetail.vue:72 -#: front/src/views/admin/library/AlbumDetail.vue:77 -#: front/src/views/admin/library/ArtistDetail.vue:71 +#: front/src/views/admin/library/AlbumDetail.vue:78 +#: front/src/views/admin/library/AlbumDetail.vue:83 #: front/src/views/admin/library/ArtistDetail.vue:76 +#: front/src/views/admin/library/ArtistDetail.vue:81 #: front/src/views/admin/library/LibraryDetail.vue:58 #: front/src/views/admin/library/LibraryDetail.vue:63 -#: front/src/views/admin/library/TrackDetail.vue:71 -#: front/src/views/admin/library/TrackDetail.vue:76 +#: front/src/views/admin/library/TagDetail.vue:41 +#: front/src/views/admin/library/TagDetail.vue:46 +#: front/src/views/admin/library/TrackDetail.vue:77 +#: front/src/views/admin/library/TrackDetail.vue:82 #: front/src/views/admin/library/UploadDetail.vue:65 #: front/src/views/admin/library/UploadDetail.vue:70 #: front/src/views/content/libraries/FilesTable.vue:222 #: front/src/views/content/libraries/Form.vue:29 -#: src/views/playlists/Detail.vue:34 +#: src/views/playlists/Detail.vue:42 msgctxt "*/*/*/Verb" msgid "Delete" msgstr "Ezabatu" @@ -1282,7 +1403,20 @@ msgctxt "Popup/Moderation/Button.Label/Verb" msgid "Delete moderation rule" msgstr "Irratia ezabatu" -#: front/src/views/playlists/Detail.vue:39 +#: front/src/components/auth/Settings.vue:274 +#: src/components/auth/Settings.vue:302 +#, fuzzy +msgctxt "*/*/Button.Label" +msgid "Delete my account" +msgstr "Sortu nire kontua" + +#: front/src/components/auth/Settings.vue:297 +#, fuzzy +msgctxt "*/*/Button.Label" +msgid "Delete my account…" +msgstr "Sortu nire kontua" + +#: front/src/views/playlists/Detail.vue:47 msgctxt "Popup/Playlist/Button.Label/Verb" msgid "Delete playlist" msgstr "Zerrenda ezabatu" @@ -1292,14 +1426,24 @@ msgctxt "Popup/Radio/Button.Label/Verb" msgid "Delete radio" msgstr "Irratia ezabatu" -#: front/src/views/admin/library/AlbumDetail.vue:73 -#: front/src/views/admin/library/TrackDetail.vue:72 +#: front/src/components/manage/moderation/ReportCard.vue:357 +msgctxt "Content/Moderation/Button/Verb" +msgid "Delete reported object" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:358 +msgctxt "Content/Moderation/Popup/Header" +msgid "Delete reported object?" +msgstr "" + +#: front/src/views/admin/library/AlbumDetail.vue:79 +#: front/src/views/admin/library/TrackDetail.vue:78 #, fuzzy msgctxt "Popup/Library/Title" msgid "Delete this album?" msgstr "Liburutegi hau ezabatu?" -#: front/src/views/admin/library/ArtistDetail.vue:72 +#: front/src/views/admin/library/ArtistDetail.vue:77 #, fuzzy msgctxt "Popup/Library/Title" msgid "Delete this artist?" @@ -1317,59 +1461,72 @@ msgctxt "Popup/Moderation/Title" msgid "Delete this moderation rule?" msgstr "Liburutegi hau ezabatu?" +#: front/src/components/manage/moderation/NotesThread.vue:25 +#, fuzzy +msgctxt "Popup/Moderation/Title" +msgid "Delete this note?" +msgstr "Liburutegi hau ezabatu?" + #: front/src/components/library/EditCard.vue:94 #, fuzzy msgctxt "Popup/Library/Title" msgid "Delete this suggestion?" msgstr "Liburutegi hau ezabatu?" -#: front/src/views/admin/library/UploadDetail.vue:66 +#: front/src/views/admin/library/TagDetail.vue:42 #, fuzzy msgctxt "Popup/Library/Title" -msgid "Delete this upload?" +msgid "Delete this tag?" msgstr "Liburutegi hau ezabatu?" -#: front/src/components/favorites/List.vue:35 -#: src/components/library/Albums.vue:26 -#: front/src/components/library/Artists.vue:26 +#: front/src/views/admin/library/UploadDetail.vue:66 +#, fuzzy +msgctxt "Popup/Library/Title" +msgid "Delete this upload?" +msgstr "Liburutegi hau ezabatu?" + +#: front/src/components/favorites/List.vue:35 +#: src/components/library/Albums.vue:30 +#: front/src/components/library/Artists.vue:30 #: src/components/library/Radios.vue:47 #: front/src/components/manage/library/AlbumsTable.vue:22 #: front/src/components/manage/library/ArtistsTable.vue:22 #: front/src/components/manage/library/EditsCardList.vue:40 #: front/src/components/manage/library/LibrariesTable.vue:31 +#: front/src/components/manage/library/TagsTable.vue:22 #: front/src/components/manage/library/TracksTable.vue:22 #: front/src/components/manage/library/UploadsTable.vue:41 #: front/src/components/manage/moderation/AccountsTable.vue:22 -#: front/src/components/manage/moderation/DomainsTable.vue:20 +#: front/src/components/manage/moderation/DomainsTable.vue:28 #: front/src/components/manage/users/UsersTable.vue:20 +#: front/src/views/admin/moderation/ReportsList.vue:45 #: front/src/views/content/libraries/FilesTable.vue:32 #: front/src/views/playlists/List.vue:28 msgctxt "Content/Search/Dropdown" msgid "Descending" msgstr "Beheranzkoa" -#: front/src/views/admin/library/LibraryDetail.vue:123 -msgctxt "*/*/*/Noun" -msgid "Description" -msgstr "Deskribapena" +#: front/src/components/manage/moderation/NoteForm.vue:37 +msgctxt "Content/Moderation/Placeholder" +msgid "Describe what actions have been taken, or any other related updates…" +msgstr "" #: front/src/components/library/radios/Builder.vue:25 +#: front/src/views/admin/library/LibraryDetail.vue:132 #: front/src/views/content/libraries/Form.vue:14 -msgctxt "Content/*/Input.Label/Noun" +msgctxt "*/*/*/Noun" msgid "Description" msgstr "Deskribapena" #: front/src/views/content/libraries/Card.vue:48 -#: src/views/content/remote/Card.vue:54 +#: src/views/content/remote/Card.vue:67 msgctxt "Content/Library/Card.Button.Label/Noun" msgid "Details" msgstr "Xehetasunak" -#: front/src/views/admin/moderation/AccountsDetail.vue:491 +#: front/src/views/admin/moderation/AccountsDetail.vue:511 msgctxt "Content/Moderation/Help text" -msgid "" -"Determine how much content the user can upload. Leave empty to use the " -"default value of the instance." +msgid "Determine how much content the user can upload. Leave empty to use the default value of the instance." msgstr "" #: front/src/components/mixins/Translations.vue:8 @@ -1379,39 +1536,51 @@ msgid "Determine the visibility level of your activity" msgstr "" #: front/src/components/auth/Settings.vue:104 -#: front/src/components/auth/SubsonicTokenForm.vue:51 +#: front/src/components/auth/SubsonicTokenForm.vue:56 msgctxt "Popup/Settings/Button.Label" msgid "Disable access" msgstr "Sarbidea ezgaitu" -#: front/src/components/auth/SubsonicTokenForm.vue:48 +#: front/src/components/auth/SubsonicTokenForm.vue:53 msgctxt "Content/Settings/Button.Label/Verb" msgid "Disable Subsonic access" msgstr "Subsonic sarbidea ezgaitu" -#: front/src/components/auth/SubsonicTokenForm.vue:49 +#: front/src/components/auth/SubsonicTokenForm.vue:54 msgctxt "Popup/Settings/Title" msgid "Disable Subsonic API access?" msgstr "Subsonic API sarbidea ezgaitu?" +#: front/src/components/About.vue:118 src/components/About.vue:131 +#: front/src/components/About.vue:144 #: front/src/components/manage/moderation/InstancePolicyForm.vue:18 #: front/src/views/admin/moderation/AccountsDetail.vue:157 #: front/src/views/admin/moderation/AccountsDetail.vue:161 #, fuzzy -msgctxt "*/*/*" +msgctxt "*/*/*/State of feature" msgid "Disabled" msgstr "Sarbidea ezgaitu" -#: front/src/views/admin/library/TrackDetail.vue:145 +#: front/src/views/admin/library/TrackDetail.vue:151 msgctxt "*/*/*/Noun" msgid "Disc number" msgstr "" +#: front/src/components/Home.vue:157 +msgctxt "Content/Home/Link" +msgid "Discover everything you need to know about Funkwhale and its features" +msgstr "" + #: front/src/components/auth/SubsonicTokenForm.vue:13 msgctxt "Content/Settings/Link" msgid "Discover how to use Funkwhale from other apps" msgstr "Ezagutu nola erabili Funkwhale beste aplikazio batzuetatik" +#: front/src/views/Notifications.vue:45 +msgctxt "Content/Notifications/Button.Label/Verb" +msgid "Discover other ways to help" +msgstr "" + #: front/src/views/admin/moderation/AccountsDetail.vue:132 #, fuzzy msgctxt "'Content/*/*/Noun'" @@ -1425,11 +1594,15 @@ msgstr "Erakutsi publikoki" #: front/src/components/manage/moderation/InstancePolicyForm.vue:122 msgctxt "Content/Moderation/Help text" -msgid "" -"Do not download any media file (audio, album cover, account avatar…) from " -"this account or domain. This will purge existing content as well." +msgid "Do not download any media file (audio, album cover, account avatar…) from this account or domain. This will purge existing content as well." msgstr "" +#: front/src/views/Notifications.vue:36 +#, fuzzy +msgctxt "Content/Notifications/Header" +msgid "Do you like Funkwhale?" +msgstr "Funkwhale-ri buruz" + #: front/src/components/playlists/Editor.vue:51 msgctxt "Popup/Playlist/Title" msgid "Do you want to clear the playlist \"%{ playlist }\"?" @@ -1440,7 +1613,7 @@ msgctxt "Modal/*/Title" msgid "Do you want to confirm this action?" msgstr "Nahi duzu akzio hau baieztatzea?" -#: front/src/views/playlists/Detail.vue:35 +#: front/src/views/playlists/Detail.vue:43 msgctxt "Popup/Playlist/Title/Call to action" msgid "Do you want to delete the playlist \"%{ playlist }\"?" msgstr "Nahi duzu \"%{ playlist }\" zerrenda ezabatzea?" @@ -1450,6 +1623,12 @@ msgctxt "Popup/Radio/Title" msgid "Do you want to delete the radio \"%{ radio }\"?" msgstr "Nahi duzu \"%{ radio }\" irratia ezabatzea?" +#: front/src/components/auth/Settings.vue:298 +#, fuzzy +msgctxt "Popup/Settings/Title" +msgid "Do you want to delete your account?" +msgstr "Nahi duzu aurreko ilara berrezartzea?" + #: front/src/components/moderation/FilterModal.vue:3 #, fuzzy msgctxt "Popup/Moderation/Title/Verb" @@ -1464,7 +1643,13 @@ msgid_plural "Do you want to launch %{ action } on %{ count } elements?" msgstr[0] "Nahi duzu %{ action } abiatzea elementu %{ count }ean?" msgstr[1] "Nahi duzu %{ action } abiatzea %{ count } elementutan?" -#: front/src/components/Sidebar.vue:118 +#: front/src/components/moderation/ReportModal.vue:3 +#, fuzzy +msgctxt "Popup/Moderation/Title/Verb" +msgid "Do you want to report this object?" +msgstr "Nahi duzu akzio hau baieztatzea?" + +#: front/src/components/Sidebar.vue:122 msgctxt "Sidebar/Queue/Message" msgid "Do you want to restore your previous queue?" msgstr "Nahi duzu aurreko ilara berrezartzea?" @@ -1480,26 +1665,33 @@ msgstr "Dokumentazioa" #: front/src/components/manage/library/TracksTable.vue:42 #: front/src/components/manage/library/UploadsTable.vue:62 #: front/src/components/manage/moderation/AccountsTable.vue:40 -#: front/src/components/mixins/Translations.vue:60 -#: front/src/views/admin/library/AlbumDetail.vue:118 -#: front/src/views/admin/library/ArtistDetail.vue:107 -#: front/src/views/admin/library/LibraryDetail.vue:114 -#: front/src/views/admin/library/TrackDetail.vue:170 +#: front/src/components/manage/moderation/ReportCard.vue:169 +#: front/src/components/manage/moderation/ReportCard.vue:179 +#: front/src/components/mixins/Translations.vue:72 +#: front/src/views/admin/library/AlbumDetail.vue:124 +#: front/src/views/admin/library/ArtistDetail.vue:112 +#: front/src/views/admin/library/LibraryDetail.vue:123 +#: front/src/views/admin/library/TrackDetail.vue:176 #: front/src/views/admin/library/UploadDetail.vue:121 #: front/src/views/admin/moderation/AccountsDetail.vue:123 -#: front/src/components/mixins/Translations.vue:61 +#: front/src/components/mixins/Translations.vue:73 msgctxt "Content/Moderation/*/Noun" msgid "Domain" msgstr "" -#: front/src/views/admin/moderation/Base.vue:5 +#: front/src/views/admin/moderation/Base.vue:8 #: front/src/views/admin/moderation/DomainsList.vue:3 -#: front/src/views/admin/moderation/DomainsList.vue:48 +#: front/src/views/admin/moderation/DomainsList.vue:54 msgctxt "*/Moderation/*/Noun" msgid "Domains" msgstr "" -#: front/src/components/library/TrackBase.vue:39 +#: front/src/views/Notifications.vue:42 +msgctxt "Content/Notifications/Button.Label/Verb" +msgid "Donate" +msgstr "" + +#: front/src/components/library/TrackBase.vue:37 #: front/src/views/admin/library/UploadDetail.vue:58 msgctxt "Content/Track/Link/Verb" msgid "Download" @@ -1512,10 +1704,10 @@ msgstr "Arrastatu eta jaregin lerroak abestiak zerrendan berrordenatzeko" #: front/src/components/audio/track/Table.vue:10 #: front/src/components/library/TrackDetail.vue:30 -#: front/src/components/mixins/Translations.vue:56 +#: front/src/components/mixins/Translations.vue:68 #: front/src/views/admin/library/UploadDetail.vue:238 #: front/src/views/content/libraries/FilesTable.vue:60 -#: front/src/components/mixins/Translations.vue:57 +#: front/src/components/mixins/Translations.vue:69 msgctxt "Content/*/*" msgid "Duration" msgstr "Iraupena" @@ -1526,30 +1718,21 @@ msgctxt "Content/Signup/Message" msgid "E-mail address confirmed" msgstr "Emaila baieztatuta" -#: front/src/components/Home.vue:88 -msgctxt "Content/Home/Title" -msgid "Easy to use" -msgstr "Erabiltzeko erraza" - -#: front/src/components/library/AlbumBase.vue:68 -#: front/src/components/library/ArtistBase.vue:79 -#: front/src/components/library/TrackBase.vue:87 +#: front/src/components/auth/Settings.vue:246 +#: src/components/library/AlbumBase.vue:73 +#: front/src/components/library/ArtistBase.vue:84 +#: front/src/components/library/TrackBase.vue:89 #: front/src/components/manage/moderation/InstancePolicyCard.vue:45 #: front/src/components/radios/Card.vue:23 -#: src/views/admin/library/AlbumDetail.vue:65 -#: front/src/views/admin/library/ArtistDetail.vue:64 -#: front/src/views/admin/library/TrackDetail.vue:64 +#: src/views/admin/library/AlbumDetail.vue:71 +#: front/src/views/admin/library/ArtistDetail.vue:69 +#: front/src/views/admin/library/TrackDetail.vue:70 #: front/src/views/content/libraries/Detail.vue:9 #: src/views/playlists/Detail.vue:31 msgctxt "Content/*/Button.Label/Verb" msgid "Edit" msgstr "Editatu" -#: front/src/components/auth/Settings.vue:246 -msgctxt "Content/Settings/Button.Label" -msgid "Edit" -msgstr "Editatu" - #: front/src/components/auth/ApplicationEdit.vue:30 #: front/src/components/auth/ApplicationEdit.vue:75 #, fuzzy @@ -1557,11 +1740,6 @@ msgctxt "Content/Applications/Title" msgid "Edit application" msgstr "Errorea akzioa aplikatzen zen bitartean" -#: front/src/components/About.vue:22 -msgctxt "Content/Settings/Button.Label/Verb" -msgid "Edit instance info" -msgstr "Editatu instantzia infoa" - #: front/src/components/manage/moderation/InstancePolicyForm.vue:3 msgctxt "Content/Moderation/Card.Title/Verb" msgid "Edit moderation rule" @@ -1584,25 +1762,21 @@ msgctxt "Content/*/Title" msgid "Edit this track" msgstr "Editatu instantzia infoa" -#: front/src/views/admin/library/AlbumDetail.vue:182 -#: front/src/views/admin/library/ArtistDetail.vue:171 +#: front/src/components/mixins/Translations.vue:116 +#: front/src/views/admin/library/AlbumDetail.vue:198 +#: front/src/views/admin/library/ArtistDetail.vue:186 #: front/src/views/admin/library/Base.vue:5 #: src/views/admin/library/EditsList.vue:24 -#: front/src/views/admin/library/TrackDetail.vue:234 +#: front/src/views/admin/library/TrackDetail.vue:250 +#: front/src/components/mixins/Translations.vue:117 #, fuzzy msgctxt "*/Admin/*/Noun" msgid "Edits" msgstr "Editatu" -#: front/src/components/mixins/Translations.vue:104 -#: front/src/components/mixins/Translations.vue:105 -#, fuzzy -msgctxt "Content/OAuth Scopes/Label" -msgid "Edits" -msgstr "Editatu" - -#: front/src/components/auth/Signup.vue:30 +#: front/src/components/auth/SignupForm.vue:26 #: front/src/components/manage/users/UsersTable.vue:38 +#: front/src/components/moderation/ReportModal.vue:31 msgctxt "Content/*/*/Noun" msgid "Email" msgstr "Emaila" @@ -1612,52 +1786,61 @@ msgctxt "Content/*/*" msgid "Email address" msgstr "Email helbidea" -#: front/src/components/library/AlbumBase.vue:53 -#: front/src/components/library/ArtistBase.vue:64 -#: front/src/components/library/TrackBase.vue:72 +#: front/src/components/library/AlbumBase.vue:54 +#: front/src/components/library/ArtistBase.vue:65 +#: front/src/components/library/TrackBase.vue:70 +#: src/views/playlists/Detail.vue:38 msgctxt "Content/*/Button.Label/Verb" msgid "Embed" msgstr "" -#: front/src/components/audio/EmbedWizard.vue:20 +#: front/src/components/audio/EmbedWizard.vue:30 msgctxt "Popup/Embed/Input.Label/Noun" msgid "Embed code" msgstr "" -#: front/src/components/library/AlbumBase.vue:26 +#: front/src/components/library/AlbumBase.vue:27 msgctxt "Popup/Album/Title/Verb" msgid "Embed this album on your website" msgstr "" -#: front/src/components/library/ArtistBase.vue:37 +#: front/src/components/library/ArtistBase.vue:38 msgctxt "Popup/Artist/Title/Verb" msgid "Embed this artist work on your website" msgstr "" -#: front/src/components/library/TrackBase.vue:45 +#: front/src/views/playlists/Detail.vue:52 +msgctxt "Popup/Album/Title/Verb" +msgid "Embed this playlist on your website" +msgstr "" + +#: front/src/components/library/TrackBase.vue:43 msgctxt "Popup/Track/Title" msgid "Embed this track on your website" msgstr "" -#: front/src/views/admin/moderation/AccountsDetail.vue:259 -#: front/src/views/admin/moderation/DomainsDetail.vue:187 +#: front/src/views/admin/moderation/AccountsDetail.vue:260 +#: front/src/views/admin/moderation/DomainsDetail.vue:224 msgctxt "Content/Moderation/Table.Label/Noun" msgid "Emitted library follows" msgstr "" -#: front/src/views/admin/moderation/AccountsDetail.vue:243 -#: front/src/views/admin/moderation/DomainsDetail.vue:171 +#: front/src/views/admin/moderation/AccountsDetail.vue:244 +#: front/src/views/admin/moderation/DomainsDetail.vue:208 msgctxt "Content/Moderation/Table.Label/Noun" msgid "Emitted messages" msgstr "" +#: front/src/components/About.vue:114 src/components/About.vue:127 +#: front/src/components/About.vue:140 #: front/src/components/manage/moderation/InstancePolicyCard.vue:8 #: front/src/components/manage/moderation/InstancePolicyForm.vue:17 #: front/src/views/admin/moderation/AccountsDetail.vue:156 #: front/src/views/admin/moderation/AccountsDetail.vue:160 -msgctxt "*/*/*" +#, fuzzy +msgctxt "*/*/*/State of feature" msgid "Enabled" -msgstr "" +msgstr "Sarbidea ezgaitu" #: front/src/views/playlists/Detail.vue:30 msgctxt "Content/Playlist/Button.Label/Verb" @@ -1675,9 +1858,9 @@ msgctxt "Content/Search/Input.Placeholder" msgid "Enter a radio name…" msgstr "" -#: front/src/components/library/Albums.vue:119 +#: front/src/components/library/Albums.vue:128 msgctxt "Content/Search/Input.Placeholder" -msgid "Enter album title..." +msgid "Enter album title…" msgstr "" #: front/src/components/library/Artists.vue:116 @@ -1694,16 +1877,17 @@ msgstr "Zerrenda izena" #: front/src/views/auth/PasswordReset.vue:54 msgctxt "Content/Signup/Input.Placeholder" -msgid "Enter the email address binded to your account" +msgid "Enter the email address linked to your account" msgstr "" -#: front/src/components/auth/Signup.vue:103 +#: front/src/components/auth/SignupForm.vue:96 #, fuzzy msgctxt "Content/Signup/Form/Placeholder" msgid "Enter your email" msgstr "E-maila baieztatu" -#: front/src/components/auth/Signup.vue:98 src/components/auth/Signup.vue:100 +#: front/src/components/auth/SignupForm.vue:91 +#: src/components/auth/SignupForm.vue:93 msgctxt "Content/Signup/Form/Placeholder" msgid "Enter your invitation code (case insensitive)" msgstr "" @@ -1713,12 +1897,12 @@ msgctxt "Content/Library/Input.Placeholder/Verb" msgid "Enter your search query…" msgstr "" -#: front/src/components/auth/Signup.vue:102 +#: front/src/components/auth/SignupForm.vue:95 msgctxt "Content/Signup/Form/Placeholder" msgid "Enter your username" msgstr "" -#: front/src/components/auth/Login.vue:83 +#: front/src/components/auth/LoginForm.vue:81 msgctxt "Content/Login/Input.Placeholder" msgid "Enter your username or email" msgstr "" @@ -1736,7 +1920,7 @@ msgctxt "Popup/Import/Table.Label/Noun" msgid "Error detail" msgstr "Erroredun fitxategiak" -#: front/src/views/admin/Settings.vue:87 +#: front/src/views/admin/Settings.vue:89 #, fuzzy msgctxt "Content/Admin/Menu" msgid "Error reporting" @@ -1799,17 +1983,13 @@ msgctxt "Popup/Moderation/Error message" msgid "Error while fetching application data" msgstr "Errorea gonbidapena sortzean" -#: front/src/views/admin/moderation/DomainsDetail.vue:118 +#: front/src/views/admin/moderation/DomainsDetail.vue:155 #, fuzzy msgctxt "Content/Moderation/Table" msgid "Error while fetching node info" msgstr "Errorea urruneko liburutegia atzitzean" #: front/src/components/admin/SettingsGroup.vue:5 -msgctxt "Content/Settings/Error message.Title" -msgid "Error while saving settings" -msgstr "Errorea ezarpenak gordetzean" - #: front/src/components/federation/FetchButton.vue:73 msgctxt "Content/*/Error message.Title" msgid "Error while saving settings" @@ -1821,6 +2001,18 @@ msgctxt "Content/Library/Error message.Title" msgid "Error while submitting edit" msgstr "Errorea ezarpenak gordetzean" +#: front/src/components/manage/moderation/NoteForm.vue:3 +#, fuzzy +msgctxt "Content/Moderation/Error message.Title" +msgid "Error while submitting note" +msgstr "Errorea ezarpenak gordetzean" + +#: front/src/components/moderation/ReportModal.vue:11 +#, fuzzy +msgctxt "Popup/Moderation/Error message" +msgid "Error while submitting report" +msgstr "Errorea ezarpenak gordetzean" + #: front/src/components/mixins/Translations.vue:32 #: front/src/components/mixins/Translations.vue:33 msgctxt "Content/Library/Table/Short" @@ -1856,9 +2048,14 @@ msgctxt "Content/Radio/Table.Label/Verb" msgid "Exclude" msgstr "Baztertu" +#: front/src/components/common/CollapseLink.vue:2 +msgctxt "*/*/Button,Label" +msgid "Expand" +msgstr "" + #: front/src/components/manage/users/InvitationsTable.vue:41 -#: front/src/components/mixins/Translations.vue:49 -#: front/src/components/mixins/Translations.vue:50 +#: front/src/components/mixins/Translations.vue:59 +#: front/src/components/mixins/Translations.vue:60 msgctxt "Content/Admin/Table.Label/Noun" msgid "Expiration date" msgstr "Iraungitze data" @@ -1875,11 +2072,7 @@ msgstr "Iraungita/erabilita" #: front/src/components/manage/moderation/InstancePolicyForm.vue:110 msgctxt "Content/Moderation/Help text" -msgid "" -"Explain why you're applying this policy. Depending on your instance " -"configuration, this will help you remember why you acted on this account or " -"domain, and may be displayed publicly to help users understand what " -"moderation rules are in place." +msgid "Explain why you're applying this policy. Depending on your instance configuration, this will help you remember why you acted on this account or domain, and may be displayed publicly to help users understand what moderation rules are in place." msgstr "" #: front/src/components/manage/library/UploadsTable.vue:25 @@ -1888,34 +2081,30 @@ msgctxt "Content/Library/Dropdown" msgid "Failed" msgstr "" -#: front/src/views/content/remote/Card.vue:62 +#: front/src/views/content/remote/Card.vue:75 #, fuzzy msgctxt "Content/Library/Card.List item/Noun" msgid "Failed tracks:" msgstr "Erroredun abestiak:" -#: front/src/views/admin/library/AlbumDetail.vue:165 -#: front/src/views/admin/library/ArtistDetail.vue:154 -#: front/src/views/admin/library/TrackDetail.vue:217 +#: front/src/views/admin/library/AlbumDetail.vue:171 +#: front/src/views/admin/library/ArtistDetail.vue:159 +#: front/src/views/admin/library/TrackDetail.vue:223 #, fuzzy msgctxt "*/*/*" msgid "Favorited tracks" msgstr "Gogokoak" #: front/src/components/Sidebar.vue:66 +#: src/components/mixins/Translations.vue:88 +#: front/src/components/mixins/Translations.vue:89 msgctxt "Sidebar/Favorites/List item.Link/Noun" msgid "Favorites" msgstr "Gogokoak" -#: front/src/components/mixins/Translations.vue:76 -#: front/src/components/mixins/Translations.vue:77 -msgctxt "Content/OAuth Scopes/Label" -msgid "Favorites" -msgstr "Gogokoak" - -#: front/src/views/admin/Settings.vue:84 +#: front/src/components/About.vue:110 src/views/admin/Settings.vue:84 #, fuzzy -msgctxt "Content/Admin/Menu" +msgctxt "*/*/*" msgid "Federation" msgstr "Iraupena" @@ -1940,6 +2129,11 @@ msgctxt "Content/Radio/Table.Label/Noun" msgid "Filter name" msgstr "Iragazki izena" +#: front/src/components/Home.vue:118 +msgctxt "Content/Home/Link" +msgid "Find another pod" +msgstr "" + #: front/src/components/manage/library/UploadsTable.vue:26 #: front/src/components/mixins/Translations.vue:36 #: front/src/views/content/libraries/FilesTable.vue:17 @@ -1949,26 +2143,32 @@ msgid "Finished" msgstr "Amaituta" #: front/src/components/manage/moderation/AccountsTable.vue:42 -#: front/src/components/manage/moderation/DomainsTable.vue:41 -#: front/src/views/admin/library/AlbumDetail.vue:149 -#: front/src/views/admin/library/ArtistDetail.vue:138 -#: front/src/views/admin/library/LibraryDetail.vue:153 -#: front/src/views/admin/library/TrackDetail.vue:201 +#: front/src/components/manage/moderation/DomainsTable.vue:49 +#: front/src/views/admin/library/AlbumDetail.vue:155 +#: front/src/views/admin/library/ArtistDetail.vue:143 +#: front/src/views/admin/library/LibraryDetail.vue:162 +#: front/src/views/admin/library/TagDetail.vue:98 +#: front/src/views/admin/library/TrackDetail.vue:207 #: front/src/views/admin/library/UploadDetail.vue:167 -#: front/src/views/admin/moderation/AccountsDetail.vue:235 -#: front/src/views/admin/moderation/DomainsDetail.vue:151 +#: front/src/views/admin/moderation/AccountsDetail.vue:236 +#: front/src/views/admin/moderation/DomainsDetail.vue:188 msgctxt "Content/Moderation/Table.Label/Short (Value is a date)" msgid "First seen" msgstr "" -#: front/src/components/mixins/Translations.vue:46 -#: front/src/components/mixins/Translations.vue:47 +#: front/src/components/mixins/Translations.vue:56 +#: front/src/components/mixins/Translations.vue:57 #, fuzzy msgctxt "Content/Moderation/Dropdown/Noun" msgid "First seen date" msgstr "Iraungitze data" -#: front/src/views/content/remote/Card.vue:87 +#: front/src/components/ShortcutsModal.vue:64 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Focus searchbar" +msgstr "" + +#: front/src/views/content/remote/Card.vue:100 msgctxt "Content/Library/Card.Button.Label/Verb" msgid "Follow" msgstr "Jarraitu" @@ -1978,42 +2178,36 @@ msgctxt "Content/Library/Title/Verb" msgid "Follow remote libraries" msgstr "Jarraitu urruneko liburutegiak" -#: front/src/views/content/remote/Card.vue:92 +#: front/src/views/content/remote/Card.vue:105 #, fuzzy msgctxt "Content/Library/Card.Paragraph" msgid "Follow request pending approval" msgstr "Jarraipena onarpenaren zain" -#: front/src/components/mixins/Translations.vue:64 -#: front/src/views/admin/library/LibraryDetail.vue:161 +#: front/src/components/manage/library/LibrariesTable.vue:53 +#: front/src/components/mixins/Translations.vue:76 +#: front/src/views/admin/library/LibraryDetail.vue:170 #: front/src/views/content/libraries/Detail.vue:7 -#: front/src/components/mixins/Translations.vue:65 +#: front/src/components/mixins/Translations.vue:77 msgctxt "Content/Federation/*/Noun" msgid "Followers" msgstr "Jarraitzaileak" -#: front/src/components/manage/library/LibrariesTable.vue:53 -msgctxt "Content/*/*/Noun" -msgid "Followers" -msgstr "Jarraitzaileak" - -#: front/src/views/content/remote/Card.vue:103 +#: front/src/views/content/remote/Card.vue:116 msgctxt "Content/Library/Card.Paragraph" msgid "Following" msgstr "Jarraitzen" -#: front/src/components/mixins/Translations.vue:84 -#: front/src/components/mixins/Translations.vue:85 +#: front/src/components/mixins/Translations.vue:96 +#: front/src/components/mixins/Translations.vue:97 #, fuzzy msgctxt "Content/OAuth Scopes/Label" msgid "Follows" msgstr "Jarraitu" -#: front/src/components/library/TrackBase.vue:17 +#: front/src/components/library/TrackBase.vue:245 msgctxt "Content/Track/Paragraph" -msgid "" -"From album <a class=\"internal\" href=\"%{ albumUrl }\">%{ album }</a> by <a" -" class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" +msgid "From album <a class=\"internal\" href=\"%{ albumUrl }\">%{ album }</a> by <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" msgstr "" #: front/src/components/auth/Authorize.vue:28 @@ -2024,38 +2218,21 @@ msgstr "Sarbidea ezgaitu" #: front/src/components/auth/SubsonicTokenForm.vue:7 msgctxt "Content/Settings/Paragraph'" -msgid "" -"Funkwhale is compatible with other music players that support the Subsonic " -"API." -msgstr "" -"Funkwhale Subsonic APIa darabilten beste musika erreproduzitzaileekin " -"bateragarria da." - -#: front/src/components/Home.vue:90 -msgctxt "Content/Home/Paragraph" -msgid "Funkwhale is dead simple to use." -msgstr "Funkwhale erabiltzeko izugarri erraza da." - -#: front/src/components/Home.vue:39 -msgctxt "Content/Home/Paragraph" -msgid "" -"Funkwhale is designed to make it easy to listen to music you like, or to " -"discover new artists." -msgstr "" -"Funkwhale gustuko duzun musika erraz entzun edo artista berriak aurkitzeko " -"diseinatuta dago." +msgid "Funkwhale is compatible with other music players that support the Subsonic API." +msgstr "Funkwhale Subsonic APIa darabilten beste musika erreproduzitzaileekin bateragarria da." -#: front/src/components/Home.vue:111 +#: front/src/components/Home.vue:88 +#, fuzzy msgctxt "Content/Home/Paragraph" -msgid "Funkwhale is free and gives you control on your music." +msgid "Funkwhale is free and developped by a friendly community of volunteers." msgstr "Funkwhale doakoa da eta zure musikaren gaineko kontrola ematen dizu." -#: front/src/components/Home.vue:66 -msgctxt "Content/Home/Paragraph" -msgid "Funkwhale takes care of handling your music" -msgstr "Funkwhalek zure musika kudeatzeko ardura hartzen du" +#: front/src/components/About.vue:78 +msgctxt "*/*/*" +msgid "Funkwhale version" +msgstr "" -#: front/src/components/ShortcutsModal.vue:38 +#: front/src/components/ShortcutsModal.vue:56 msgctxt "Popup/Keyboard shortcuts/Title" msgid "General shortcuts" msgstr "" @@ -2065,37 +2242,18 @@ msgctxt "Content/Admin/Button.Label/Verb" msgid "Get a new invitation" msgstr "Lortu gonbidapen berria" -#: front/src/components/Home.vue:13 -msgctxt "Content/Home/Button.Label/Verb" -msgid "Get me to the library" -msgstr "Eraman liburutegira" - -#: front/src/components/Home.vue:70 -msgctxt "Content/Home/List item/Verb" -msgid "" -"Get quality metadata about your music thanks to <a href=\"%{ url }\" " -"target=\"_blank\">MusicBrainz</a>" -msgstr "" -"Lortu zure musikari buruzko kalitatezko metadatuak <a href=\"%{ url }\" " -"target=\"_blank\">MusicBrainz</a> plataformari esker" - #: front/src/views/content/Home.vue:12 src/views/content/Home.vue:19 msgctxt "Content/Library/Button.Label/Verb" msgid "Get started" msgstr "Hasi" -#: front/src/components/Footer.vue:37 +#: front/src/components/Footer.vue:45 +#: src/components/library/ImportStatusModal.vue:45 #, fuzzy msgctxt "Footer/*/Link" msgid "Getting help" msgstr "Ezarpenak" -#: front/src/components/library/ImportStatusModal.vue:45 -#, fuzzy -msgctxt "Popup/Import/Table.Label/Noun" -msgid "Getting help" -msgstr "Ezarpenak" - #: front/src/components/common/ActionTable.vue:35 #: front/src/components/common/ActionTable.vue:56 msgctxt "Content/*/Button.Label/Short, Verb" @@ -2107,12 +2265,22 @@ msgctxt "Content/*/Button.Label/Verb" msgid "Go to home page" msgstr "Joan hasiera orrira" +#: front/src/views/Notifications.vue:27 src/views/Notifications.vue:61 +msgctxt "Content/Notifications/Button.Label" +msgid "Got it!" +msgstr "" + #: front/src/components/auth/Settings.vue:128 #, fuzzy msgctxt "Content/Settings/Title" msgid "Hidden artists" msgstr "Bilatu artistak" +#: front/src/components/About.vue:155 +msgctxt "*/*/*/Verb" +msgid "Hide" +msgstr "" + #: front/src/components/manage/moderation/InstancePolicyForm.vue:114 msgctxt "Content/Moderation/Help text" msgid "Hide account or domain content, except from followers." @@ -2124,12 +2292,12 @@ msgctxt "Popup/*/Button.Label" msgid "Hide content" msgstr "Edukia sartu" -#: front/src/components/audio/PlayButton.vue:26 +#: front/src/components/audio/PlayButton.vue:31 msgctxt "*/Queue/Dropdown/Button/Label/Short" msgid "Hide content from this artist" msgstr "" -#: front/src/components/audio/Player.vue:643 +#: front/src/components/audio/Player.vue:669 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Hide content from this artist…" msgstr "" @@ -2139,38 +2307,29 @@ msgctxt "Head/Home/Title" msgid "Home" msgstr "" -#: front/src/components/instance/Stats.vue:36 -msgctxt "Content/About/Paragraph/Unit" -msgid "Hours of music" -msgstr "Ordutako musika" - #: front/src/components/auth/SubsonicTokenForm.vue:10 msgctxt "Content/Settings/Paragraph" -msgid "" -"However, accessing Funkwhale from those clients require a separate password " -"you can set below." -msgstr "" -"Hala ere, beste bezero batzuetatik Funkwhalera sarbidea lortzeko behean ezar" -" dezakezun aparteko pasahitz bat behar duzu." +msgid "However, accessing Funkwhale from those clients require a separate password you can set below." +msgstr "Hala ere, beste bezero batzuetatik Funkwhalera sarbidea lortzeko behean ezar dezakezun aparteko pasahitz bat behar duzu." #: front/src/views/auth/PasswordResetConfirm.vue:24 +#, fuzzy msgctxt "Content/Signup/Paragraph" -msgid "" -"If the email address provided in the previous step is valid and binded to a " -"user account, you should receive an email with reset instructions in the " -"next couple of minutes." -msgstr "" -"Aurreko pausoan emandako emaila zuzena bada eta erabiltzaile kontu bati " -"lotua, datozen minutuetan email bat jaso beharko zenuke pasahitza " -"berrezartzeko pausoekin." +msgid "If the email address provided in the previous step is valid and linked to a user account, you should receive an email with reset instructions in the next couple of minutes." +msgstr "Aurreko pausoan emandako emaila zuzena bada eta erabiltzaile kontu bati lotua, datozen minutuetan email bat jaso beharko zenuke pasahitza berrezartzeko pausoekin." #: front/src/components/auth/Settings.vue:205 msgctxt "Content/Applications/Paragraph" -msgid "" -"If you authorize third-party applications to access your data, those " -"applications will be listed here." +msgid "If you authorize third-party applications to access your data, those applications will be listed here." msgstr "" +#: front/src/components/mixins/Translations.vue:46 +#: front/src/components/mixins/Translations.vue:47 +#, fuzzy +msgctxt "Content/Moderation/Dropdown" +msgid "Illegal content" +msgstr "Edukia sartu" + #: front/src/components/library/ImportStatusModal.vue:3 #, fuzzy msgctxt "Popup/Import/Title" @@ -2183,14 +2342,10 @@ msgid "Import reference" msgstr "Inportazio erreferentzia" #: front/src/components/manage/library/UploadsTable.vue:20 -#: front/src/views/content/libraries/FilesTable.vue:11 -#: front/src/views/content/libraries/FilesTable.vue:59 -msgctxt "Content/Library/*/Noun" -msgid "Import status" -msgstr "Inportazio egoera" - #: front/src/components/manage/library/UploadsTable.vue:64 #: front/src/views/admin/library/UploadDetail.vue:131 +#: front/src/views/content/libraries/FilesTable.vue:11 +#: front/src/views/content/libraries/FilesTable.vue:59 msgctxt "Content/*/*/Noun" msgid "Import status" msgstr "Inportazio egoera" @@ -2233,12 +2388,12 @@ msgctxt "Popup/Moderation/List item" msgid "In radio suggestions" msgstr "" -#: front/src/components/manage/users/UsersTable.vue:54 +#: front/src/components/manage/users/UsersTable.vue:55 msgctxt "Content/Admin/Table" msgid "Inactive" msgstr "Ez gaituta" -#: front/src/components/ShortcutsModal.vue:71 +#: front/src/components/ShortcutsModal.vue:124 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Increase volume" msgstr "" @@ -2258,7 +2413,7 @@ msgctxt "Content/Settings/Dropdown/Short" msgid "Instance" msgstr "Instantziako irratiak" -#: front/src/views/admin/moderation/DomainsDetail.vue:71 +#: front/src/views/admin/moderation/DomainsDetail.vue:99 #, fuzzy msgctxt "Content/Moderation/Title" msgid "Instance data" @@ -2287,19 +2442,25 @@ msgctxt "Popup/Instance/Input.Label/Noun" msgid "Instance URL" msgstr "Instantziako irratiak" +#: front/src/components/manage/moderation/ReportCard.vue:92 +#: front/src/components/manage/moderation/ReportCard.vue:203 +msgctxt "Content/*/*/Noun" +msgid "Internal notes" +msgstr "" + #: front/src/components/library/FileUpload.vue:268 msgctxt "Content/Library/Help text" -msgid "" -"Invalid file type, ensure you are uploading an audio file. Supported file " -"extensions are %{ extensions }" +msgid "Invalid file type, ensure you are uploading an audio file. Supported file extensions are %{ extensions }" msgstr "" #: front/src/components/library/ImportStatusModal.vue:139 +#: front/src/components/mixins/Translations.vue:45 +#: front/src/components/mixins/Translations.vue:46 msgctxt "Popup/Import/Error.Label" msgid "Invalid metadata" msgstr "" -#: front/src/components/auth/Signup.vue:44 +#: front/src/components/auth/SignupForm.vue:40 #: front/src/components/manage/users/InvitationForm.vue:11 msgctxt "Content/*/Input.Label" msgid "Invitation code" @@ -2311,7 +2472,13 @@ msgctxt "*/Admin/*/Noun" msgid "Invitations" msgstr "Gonbidapenak" -#: front/src/components/Footer.vue:41 +#: front/src/components/manage/moderation/DomainsTable.vue:9 +#: front/src/views/admin/moderation/DomainsDetail.vue:106 +msgctxt "Content/Moderation/*/Adjective" +msgid "Is present on allow-list" +msgstr "" + +#: front/src/components/Footer.vue:49 msgctxt "Footer/*/List item.Link" msgid "Issue tracker" msgstr "Arazoen jarraipena" @@ -2321,17 +2488,18 @@ msgctxt "Popup/Instance/Error message.Title" msgid "It is not possible to connect to the given URL" msgstr "" -#: front/src/components/Home.vue:50 -msgctxt "Content/Home/List item/Verb" -msgid "Keep a track of your favorite songs" -msgstr "Izan zure gogoko abestien jarraipena" +#: front/src/components/mixins/Translations.vue:65 +#: front/src/components/mixins/Translations.vue:66 +msgctxt "*/*/*/Noun" +msgid "Items" +msgstr "" #: front/src/components/Footer.vue:33 src/components/ShortcutsModal.vue:3 msgctxt "*/*/*/Noun" msgid "Keyboard shortcuts" msgstr "" -#: front/src/views/admin/moderation/DomainsDetail.vue:161 +#: front/src/views/admin/moderation/DomainsDetail.vue:198 #, fuzzy msgctxt "Content/Moderation/Table.Label.Link" msgid "Known accounts" @@ -2343,15 +2511,15 @@ msgid "Known libraries" msgstr "Liburutegi ezagunak" #: front/src/components/manage/users/UsersTable.vue:41 -#: front/src/components/mixins/Translations.vue:58 -#: front/src/views/admin/moderation/AccountsDetail.vue:205 -#: front/src/components/mixins/Translations.vue:59 +#: front/src/components/mixins/Translations.vue:70 +#: front/src/views/admin/moderation/AccountsDetail.vue:206 +#: front/src/components/mixins/Translations.vue:71 msgctxt "Content/Profile/Table.Label/Short, Noun (Value is a date)" msgid "Last activity" msgstr "Azken jarduera" -#: front/src/views/admin/moderation/AccountsDetail.vue:188 -#: front/src/views/admin/moderation/DomainsDetail.vue:78 +#: front/src/views/admin/moderation/AccountsDetail.vue:189 +#: front/src/views/admin/moderation/DomainsDetail.vue:115 msgctxt "Content/*/Table.Label" msgid "Last checked" msgstr "" @@ -2366,14 +2534,14 @@ msgctxt "Content/Moderation/Table.Label/Noun" msgid "Last seen" msgstr "" -#: front/src/components/mixins/Translations.vue:47 -#: front/src/components/mixins/Translations.vue:48 +#: front/src/components/mixins/Translations.vue:57 +#: front/src/components/mixins/Translations.vue:58 #, fuzzy msgctxt "Content/Moderation/Dropdown/Noun" msgid "Last seen date" msgstr "Azken eguneraketa:" -#: front/src/views/content/remote/Card.vue:60 +#: front/src/views/content/remote/Card.vue:73 msgctxt "Content/Library/Card.List item/Noun" msgid "Last update:" msgstr "Azken eguneraketa:" @@ -2383,39 +2551,41 @@ msgctxt "Modal/*/Button.Label/Short, Verb" msgid "Launch" msgstr "Abiarazi" -#: front/src/components/Home.vue:10 -msgctxt "Content/Home/Button.Label/Verb" -msgid "Learn more about this instance" -msgstr "Ikasi gehiago instantzia honi buruz" +#: front/src/components/Home.vue:35 +msgctxt "Content/Home/Link" +msgid "Learn more" +msgstr "" #: front/src/components/manage/users/InvitationForm.vue:58 msgctxt "Content/Admin/Input.Placeholder" msgid "Leave empty for a random code" msgstr "" -#: front/src/components/audio/EmbedWizard.vue:7 +#: front/src/components/audio/EmbedWizard.vue:17 msgctxt "Popup/Embed/Paragraph" msgid "Leave empty for a responsive widget" msgstr "" -#: front/src/views/admin/library/AlbumDetail.vue:232 -#: front/src/views/admin/library/ArtistDetail.vue:221 -#: front/src/views/admin/library/TrackDetail.vue:284 -#: front/src/views/admin/moderation/AccountsDetail.vue:327 -#: front/src/views/admin/moderation/DomainsDetail.vue:234 -#: front/src/views/content/Base.vue:5 +#: front/src/components/mixins/Translations.vue:64 +#: front/src/components/mixins/Translations.vue:65 msgctxt "*/*/*/Noun" -msgid "Libraries" -msgstr "Liburutegiak" +msgid "Length" +msgstr "" +#: front/src/views/admin/library/AlbumDetail.vue:248 +#: front/src/views/admin/library/ArtistDetail.vue:236 #: front/src/views/admin/library/Base.vue:17 #: front/src/views/admin/library/LibrariesList.vue:24 -msgctxt "*/*/*" +#: front/src/views/admin/library/TrackDetail.vue:300 +#: front/src/views/admin/moderation/AccountsDetail.vue:339 +#: front/src/views/admin/moderation/DomainsDetail.vue:271 +#: front/src/views/content/Base.vue:5 +msgctxt "*/*/*/Noun" msgid "Libraries" msgstr "Liburutegiak" -#: front/src/components/mixins/Translations.vue:72 -#: front/src/components/mixins/Translations.vue:73 +#: front/src/components/mixins/Translations.vue:84 +#: front/src/components/mixins/Translations.vue:85 #, fuzzy msgctxt "Content/OAuth Scopes/Label" msgid "Libraries and uploads" @@ -2423,21 +2593,18 @@ msgstr "Liburutegiak" #: front/src/views/content/libraries/Form.vue:2 msgctxt "Content/Library/Paragraph" -msgid "" -"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." -msgstr "" -"Liburutegiak zure musika bildumak antolatzen eta partekatzen laguntze " -"dizute. Zure musika bilduma igo dezakezu Funkwhalera eta zure familia eta " -"lagunekin partekatu." +msgid "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." +msgstr "Liburutegiak zure musika bildumak antolatzen eta partekatzen laguntze dizute. Zure musika bilduma igo dezakezu Funkwhalera eta zure familia eta lagunekin partekatu." -#: front/src/components/Sidebar.vue:85 src/components/instance/Stats.vue:30 +#: front/src/components/Sidebar.vue:85 #: front/src/components/manage/library/UploadsTable.vue:60 -#: front/src/components/manage/users/UsersTable.vue:173 +#: front/src/components/manage/users/UsersTable.vue:174 +#: front/src/components/mixins/Report.vue:77 #: front/src/views/admin/library/UploadDetail.vue:144 -#: front/src/views/admin/moderation/AccountsDetail.vue:498 -msgctxt "*/*/*" +#: front/src/views/admin/moderation/AccountsDetail.vue:518 src/entities.js:132 +#: front/src/components/mixins/Report.vue:78 +#, fuzzy +msgctxt "*/*/*/Noun" msgid "Library" msgstr "Liburutegia" @@ -2473,21 +2640,37 @@ msgstr "Azken eguneraketa:" #: front/src/components/library/TrackDetail.vue:19 #: front/src/components/manage/library/TracksTable.vue:43 -#: front/src/views/admin/library/TrackDetail.vue:159 src/edits.js:61 +#: front/src/views/admin/library/TrackDetail.vue:165 src/edits.js:84 +#: front/src/entities.js:115 msgctxt "Content/*/*/Noun" msgid "License" msgstr "" -#: front/src/views/admin/library/AlbumDetail.vue:157 -#: front/src/views/admin/library/ArtistDetail.vue:146 -#: front/src/views/admin/library/TrackDetail.vue:209 -msgctxt "*/*/*/Noun" -msgid "Listenings" +#: front/src/components/Footer.vue:90 +msgctxt "Footer/Settings/Dropdown.Label/Theme name" +msgid "Light" msgstr "" -#: front/src/components/mixins/Translations.vue:80 -#: front/src/components/mixins/Translations.vue:81 -msgctxt "Content/OAuth Scopes/Label" +#: front/src/views/admin/library/AlbumDetail.vue:188 +#: front/src/views/admin/library/ArtistDetail.vue:176 +#: front/src/views/admin/library/LibraryDetail.vue:179 +#: front/src/views/admin/library/TrackDetail.vue:240 +#: front/src/views/admin/moderation/AccountsDetail.vue:269 +msgctxt "Content/Moderation/Table.Label/Noun" +msgid "Linked reports" +msgstr "" + +#: front/src/components/Home.vue:135 +msgctxt "Content/Home/Link" +msgid "Listen to public albums and playlists shared on this pod" +msgstr "" + +#: front/src/components/mixins/Translations.vue:92 +#: front/src/views/admin/library/AlbumDetail.vue:163 +#: front/src/views/admin/library/ArtistDetail.vue:151 +#: front/src/views/admin/library/TrackDetail.vue:215 +#: front/src/components/mixins/Translations.vue:93 +msgctxt "*/*/*/Noun" msgid "Listenings" msgstr "" @@ -2501,50 +2684,51 @@ msgstr "" #, fuzzy msgctxt "Content/Library/Paragraph" msgid "Loading followers…" -msgstr "Jarraitzaileak kargatzen..." +msgstr "Jarraitzaileak kargatzen…" #: front/src/views/content/libraries/Home.vue:3 #, fuzzy msgctxt "Content/Library/Paragraph" msgid "Loading Libraries…" -msgstr "Liburutegiak kargatzen..." +msgstr "Liburutegiak kargatzen…" #: front/src/views/content/libraries/Detail.vue:3 #: front/src/views/content/libraries/Upload.vue:3 #, fuzzy msgctxt "Content/Library/Paragraph" msgid "Loading library data…" -msgstr "Liburutegi datuak kargatzen..." +msgstr "Liburutegi datuak kargatzen…" -#: front/src/views/Notifications.vue:19 +#: front/src/views/Notifications.vue:84 #, fuzzy msgctxt "Content/Notifications/Paragraph" msgid "Loading notifications…" -msgstr "Jakinarazpenak kargatzen..." +msgstr "Jakinarazpenak kargatzen…" #: front/src/views/content/remote/Home.vue:3 #, fuzzy msgctxt "Content/Library/Paragraph" msgid "Loading remote libraries…" -msgstr "Urruneko liburutegiak kargatzen..." +msgstr "Urruneko liburutegiak kargatzen…" #: front/src/views/content/libraries/Quota.vue:4 #, fuzzy msgctxt "Content/Library/Paragraph" msgid "Loading usage data…" -msgstr "Erabilpen datuak kargatzen..." +msgstr "Erabilpen datuak kargatzen…" #: front/src/components/favorites/List.vue:5 #, fuzzy msgctxt "Content/Favorites/Message" msgid "Loading your favorites…" -msgstr "Zure gogokoak kargatzen..." +msgstr "Zure gogokoak kargatzen…" #: front/src/components/manage/library/AlbumsTable.vue:65 #: front/src/components/manage/library/ArtistsTable.vue:58 #: front/src/components/manage/library/LibrariesTable.vue:75 #: front/src/components/manage/library/TracksTable.vue:71 #: front/src/components/manage/library/UploadsTable.vue:99 +#: front/src/components/manage/moderation/ReportCard.vue:173 #: front/src/views/admin/library/AlbumDetail.vue:19 #: front/src/views/admin/library/ArtistDetail.vue:18 #: front/src/views/admin/library/LibraryDetail.vue:18 @@ -2561,12 +2745,12 @@ msgctxt "Content/Moderation/*/Short, Noun" msgid "Local account" msgstr "Nire kontua" -#: front/src/components/auth/Login.vue:84 +#: front/src/components/Home.vue:96 src/views/auth/Login.vue:29 msgctxt "Head/Login/Title" msgid "Log In" msgstr "" -#: front/src/components/auth/Login.vue:4 +#: front/src/views/auth/Login.vue:4 msgctxt "Content/Login/Title/Verb" msgid "Log in to your Funkwhale account" msgstr "Sartu zure Funkwhale kontura" @@ -2581,7 +2765,7 @@ msgctxt "Sidebar/Profile/List item.Link" msgid "Logged in as %{ username }" msgstr "%{ username } moduan sartuta" -#: front/src/components/Sidebar.vue:54 src/components/auth/Login.vue:42 +#: front/src/components/Sidebar.vue:54 src/components/auth/LoginForm.vue:41 msgctxt "*/Login/*/Verb" msgid "Login" msgstr "Sartu" @@ -2603,35 +2787,40 @@ msgctxt "Content/Library/Paragraph" msgid "Looks like you don't have a library, it's time to create one." msgstr "Badirudi ez duzula liburutegirik oraindik, bada bat sortzeko ordua!" -#: front/src/components/audio/Player.vue:632 -#: src/components/audio/Player.vue:633 +#: front/src/components/audio/Player.vue:658 +#: src/components/audio/Player.vue:659 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Looping disabled. Click to switch to single-track looping." msgstr "" -#: front/src/components/audio/Player.vue:635 -#: src/components/audio/Player.vue:636 +#: front/src/components/audio/Player.vue:661 +#: src/components/audio/Player.vue:662 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Looping on a single track. Click to switch to whole queue looping." msgstr "" -#: front/src/components/audio/Player.vue:638 -#: src/components/audio/Player.vue:639 +#: front/src/components/audio/Player.vue:664 +#: src/components/audio/Player.vue:665 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Looping on whole queue. Click to disable looping." msgstr "" -#: front/src/components/Sidebar.vue:223 +#: front/src/components/Sidebar.vue:230 msgctxt "Sidebar/*/Hidden text" msgid "Main menu" msgstr "" -#: front/src/views/admin/library/Base.vue:31 +#: front/src/views/admin/library/Base.vue:34 #, fuzzy msgctxt "Head/Admin/Title" msgid "Manage library" msgstr "Garbitu liburutegia" +#: front/src/components/manage/moderation/InstancePolicyModal.vue:8 +msgctxt "Popup/Moderation/Title/Verb" +msgid "Manage moderation rules for %{ obj }" +msgstr "" + #: front/src/components/playlists/PlaylistModal.vue:3 msgctxt "Popup/Playlist/Title/Verb" msgid "Manage playlists" @@ -2648,7 +2837,7 @@ msgctxt "Content/Playlist/Button.Label/Verb" msgid "Manage your playlists" msgstr "Kudeatu zure zerrendak" -#: front/src/views/Notifications.vue:14 +#: front/src/views/Notifications.vue:79 msgctxt "Content/Notifications/Button.Label/Verb" msgid "Mark all as read" msgstr "Markatu dena irakurrita" @@ -2665,12 +2854,12 @@ msgctxt "Content/Notifications/Button.Tooltip/Verb" msgid "Mark as unread" msgstr "Markatu dena irakurrita" -#: front/src/views/admin/moderation/AccountsDetail.vue:310 +#: front/src/views/admin/moderation/AccountsDetail.vue:321 msgctxt "Content/*/*/Unit" msgid "MB" msgstr "MB" -#: front/src/components/audio/Player.vue:625 +#: front/src/components/audio/Player.vue:651 msgctxt "Sidebar/Player/Hidden text" msgid "Media player" msgstr "" @@ -2681,44 +2870,61 @@ msgctxt "Content/Profile/Paragraph" msgid "Member since %{ date }" msgstr "%{ date }-(e)tik erregistratuta" +#: front/src/components/manage/moderation/ReportCard.vue:109 +#: front/src/components/moderation/ReportModal.vue:41 +msgctxt "*/*/Field.Label/Noun" +msgid "Message" +msgstr "" + #: front/src/components/Footer.vue:32 msgctxt "Footer/*/List item.Link" msgid "Mobile and desktop apps" msgstr "" +#: front/src/components/Home.vue:143 +msgctxt "Content/Home/Link" +msgid "Mobile apps" +msgstr "" + #: front/src/components/Sidebar.vue:96 -#: src/components/manage/users/UsersTable.vue:177 -#: front/src/views/admin/moderation/AccountsDetail.vue:502 -#: front/src/views/admin/moderation/Base.vue:21 +#: src/components/manage/users/UsersTable.vue:178 +#: front/src/views/admin/Settings.vue:85 +#: front/src/views/admin/moderation/AccountsDetail.vue:522 +#: front/src/views/admin/moderation/Base.vue:43 #, fuzzy msgctxt "*/Moderation/*" msgid "Moderation" msgstr "Iraupena" #: front/src/views/admin/moderation/AccountsDetail.vue:78 -#: front/src/views/admin/moderation/DomainsDetail.vue:42 +#: front/src/views/admin/moderation/DomainsDetail.vue:70 msgctxt "Content/Moderation/Card.Paragraph" -msgid "" -"Moderation policies help you control how your instance interact with a given" -" domain or account." +msgid "Moderation policies help you control how your instance interact with a given domain or account." msgstr "" +#: front/src/components/manage/moderation/InstancePolicyModal.vue:4 +#, fuzzy +msgctxt "Content/Moderation/Button.Label" +msgid "Moderation rules…" +msgstr "Iraupena" + #: front/src/components/library/EditCard.vue:5 #, fuzzy msgctxt "Content/Library/Card/Short" msgid "Modification %{ id }" msgstr "Jakinarazpenak" -#: front/src/components/mixins/Translations.vue:48 -#: front/src/components/mixins/Translations.vue:49 +#: front/src/components/mixins/Translations.vue:58 +#: front/src/components/mixins/Translations.vue:59 #, fuzzy msgctxt "Content/Playlist/Dropdown/Noun" msgid "Modification date" msgstr "Iraungitze data" -#: front/src/components/library/AlbumBase.vue:42 -#: front/src/components/library/ArtistBase.vue:53 -#: front/src/components/library/TrackBase.vue:61 +#: front/src/components/audio/PlayButton.vue:100 +#: front/src/components/library/AlbumBase.vue:43 +#: front/src/components/library/ArtistBase.vue:54 +#: front/src/components/library/TrackBase.vue:59 msgctxt "*/*/Button.Label/Noun" msgid "More…" msgstr "" @@ -2728,7 +2934,7 @@ msgctxt "*/*/*/Noun" msgid "Music" msgstr "Musika" -#: front/src/components/audio/Player.vue:631 +#: front/src/components/audio/Player.vue:657 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Mute" msgstr "" @@ -2780,8 +2986,8 @@ msgctxt "Content/Library/Title" msgid "My libraries" msgstr "Nire liburutegiak" -#: front/src/components/audio/track/Row.vue:40 -#: src/components/library/EditCard.vue:60 +#: front/src/components/About.vue:105 src/components/audio/track/Row.vue:40 +#: front/src/components/library/EditCard.vue:60 #: front/src/components/library/EditForm.vue:70 #: front/src/components/library/TrackDetail.vue:34 #: front/src/components/library/TrackDetail.vue:43 @@ -2791,54 +2997,56 @@ msgstr "Nire liburutegiak" #: front/src/components/manage/library/TracksTable.vue:76 #: front/src/components/manage/library/UploadsTable.vue:121 #: front/src/components/manage/library/UploadsTable.vue:128 -#: front/src/components/manage/users/UsersTable.vue:61 +#: front/src/components/manage/moderation/ReportCard.vue:78 +#: front/src/components/manage/moderation/ReportCard.vue:87 +#: front/src/components/manage/moderation/ReportCard.vue:193 +#: front/src/components/manage/users/UsersTable.vue:62 #: front/src/views/admin/library/UploadDetail.vue:179 #: front/src/views/admin/library/UploadDetail.vue:214 #: front/src/views/admin/library/UploadDetail.vue:233 #: front/src/views/admin/library/UploadDetail.vue:244 #: front/src/views/admin/library/UploadDetail.vue:257 -#: front/src/views/admin/moderation/AccountsDetail.vue:192 -#: front/src/views/admin/moderation/DomainsDetail.vue:82 +#: front/src/views/admin/moderation/AccountsDetail.vue:193 +#: front/src/views/admin/moderation/DomainsDetail.vue:119 #: front/src/views/content/libraries/FilesTable.vue:95 #: front/src/views/content/libraries/FilesTable.vue:101 msgctxt "*/*/*" msgid "N/A" msgstr "Daturik gabe" +#: front/src/components/auth/ApplicationForm.vue:9 +#: front/src/components/auth/Settings.vue:133 +#: front/src/components/manage/library/ArtistsTable.vue:39 #: front/src/components/manage/library/LibrariesTable.vue:48 +#: front/src/components/manage/library/TagsTable.vue:41 #: front/src/components/manage/library/UploadsTable.vue:59 -msgctxt "*/*/*" -msgid "Name" -msgstr "Izena" - -#: front/src/components/auth/ApplicationForm.vue:9 -msgctxt "Content/Applications/Input.Label/Noun" -msgid "Name" -msgstr "Izena" - -#: front/src/components/auth/Settings.vue:133 -#: front/src/components/manage/library/ArtistsTable.vue:39 #: front/src/components/manage/moderation/AccountsTable.vue:39 -#: front/src/components/manage/moderation/DomainsTable.vue:38 -#: front/src/components/mixins/Translations.vue:53 +#: front/src/components/manage/moderation/DomainsTable.vue:46 +#: front/src/components/mixins/Translations.vue:63 #: front/src/components/playlists/PlaylistModal.vue:45 -#: front/src/views/admin/library/ArtistDetail.vue:98 +#: front/src/views/admin/library/ArtistDetail.vue:103 #: front/src/views/admin/library/LibraryDetail.vue:85 +#: front/src/views/admin/library/TagDetail.vue:68 #: front/src/views/admin/library/UploadDetail.vue:92 -#: front/src/views/admin/moderation/DomainsDetail.vue:97 -#: front/src/views/content/libraries/Form.vue:10 src/edits.js:10 -#: front/src/components/mixins/Translations.vue:54 +#: front/src/views/admin/moderation/DomainsDetail.vue:134 +#: front/src/views/content/libraries/Form.vue:10 src/edits.js:17 +#: front/src/components/mixins/Translations.vue:64 msgctxt "*/*/*/Noun" msgid "Name" msgstr "Izena" +#: front/src/views/Notifications.vue:24 src/views/Notifications.vue:58 +msgctxt "*/*/*" +msgid "Never" +msgstr "" + #: front/src/components/auth/Settings.vue:88 #: front/src/views/auth/PasswordResetConfirm.vue:14 msgctxt "Content/Settings/Input.Label" msgid "New password" msgstr "Pasahitz berria" -#: front/src/components/Sidebar.vue:173 +#: front/src/components/Sidebar.vue:177 msgctxt "Sidebar/Player/Paragraph" msgid "New tracks will be appended here automatically." msgstr "Abesti berriak hemen gehituko dira automatikoki." @@ -2848,22 +3056,19 @@ msgctxt "Content/Library/Card.Table.Header/Short" msgid "New value" msgstr "" -#: front/src/components/audio/Player.vue:629 +#: front/src/components/audio/Player.vue:655 #, fuzzy msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Next track" msgstr "Oraingo abestia" -#: front/src/components/Sidebar.vue:130 +#: front/src/components/Sidebar.vue:134 +#: front/src/components/manage/moderation/DomainsTable.vue:13 +#: front/src/views/admin/moderation/DomainsDetail.vue:110 msgctxt "*/*/*" msgid "No" msgstr "Ez" -#: front/src/components/Home.vue:95 -msgctxt "Content/Home/List item" -msgid "No add-ons, no plugins : you only need a web library" -msgstr "" - #: front/src/components/audio/Search.vue:25 #, fuzzy msgctxt "Content/Search/Paragraph" @@ -2882,6 +3087,11 @@ msgctxt "Content/Track/Table.Paragraph" msgid "No copyright information available for this track" msgstr "Ez dago letrarik eskuragarri abesti honentzat." +#: front/src/components/About.vue:25 src/components/Home.vue:25 +msgctxt "Content/Home/Paragraph" +msgid "No description available." +msgstr "" + #: front/src/components/library/TrackDetail.vue:25 #, fuzzy msgctxt "Content/Track/Table.Paragraph" @@ -2893,7 +3103,7 @@ msgctxt "Content/Federation/Paragraph" msgid "No matching library." msgstr "Ez da liburutegirik aurkitu." -#: front/src/views/Notifications.vue:28 +#: front/src/views/Notifications.vue:93 #, fuzzy msgctxt "Content/Notifications/Paragraph" msgid "No notification to show." @@ -2904,6 +3114,16 @@ msgctxt "Content/*/Paragraph" msgid "No results were found." msgstr "" +#: front/src/components/About.vue:32 +msgctxt "Content/Home/Paragraph" +msgid "No rules available." +msgstr "" + +#: front/src/components/About.vue:39 +msgctxt "Content/Home/Paragraph" +msgid "No terms available." +msgstr "" + #: front/src/components/mixins/Translations.vue:10 #: front/src/components/mixins/Translations.vue:11 msgctxt "Content/Settings/Dropdown" @@ -2920,18 +3140,22 @@ msgctxt "Content/Admin/Table" msgid "Not used" msgstr "Ez da erabiltzen" -#: front/src/components/mixins/Translations.vue:100 -#: front/src/components/mixins/Translations.vue:101 -msgctxt "Content/OAuth Scopes/Label" -msgid "Notifications" -msgstr "Jakinarazpenak" - -#: front/src/components/Sidebar.vue:46 src/views/Notifications.vue:76 +#: front/src/components/Sidebar.vue:46 +#: src/components/mixins/Translations.vue:112 +#: front/src/views/Notifications.vue:151 +#: src/components/mixins/Translations.vue:113 msgctxt "*/Notifications/*" msgid "Notifications" msgstr "Jakinarazpenak" -#: front/src/components/Footer.vue:47 +#: front/src/components/mixins/Translations.vue:47 +#: front/src/components/mixins/Translations.vue:48 +#, fuzzy +msgctxt "Content/Moderation/Dropdown" +msgid "Offensive content" +msgstr "Edukia sartu" + +#: front/src/components/Footer.vue:55 msgctxt "Footer/*/List item.Link" msgid "Official website" msgstr "Webgune ofiziala" @@ -2946,6 +3170,12 @@ msgctxt "Content/Library/Card.Table.Header/Short" msgid "Old value" msgstr "" +#: front/src/components/About.vue:90 +#, fuzzy +msgctxt "*/*/*/State of registrations" +msgid "Open" +msgstr "Ireki" + #: front/src/components/manage/users/InvitationsTable.vue:20 msgctxt "Content/Admin/Dropdown/Adjective" msgid "Open" @@ -2953,27 +3183,29 @@ msgstr "Ireki" #: front/src/components/library/ImportStatusModal.vue:56 msgctxt "Popup/Import/Table.Label/Value" -msgid "" -"Open a support thread (include the debug information below in your message)" +msgid "Open a support thread (include the debug information below in your message)" msgstr "" -#: front/src/components/library/AlbumBase.vue:73 -#: front/src/components/library/ArtistBase.vue:84 -#: front/src/components/library/TrackBase.vue:92 +#: front/src/components/library/AlbumBase.vue:87 +#: front/src/components/library/ArtistBase.vue:99 +#: front/src/components/library/TagDetail.vue:11 +#: front/src/components/library/TrackBase.vue:103 +#: front/src/components/manage/moderation/ReportCard.vue:128 msgctxt "Content/Moderation/Link" msgid "Open in moderation interface" msgstr "" -#: front/src/views/admin/library/AlbumDetail.vue:31 -#: front/src/views/admin/library/ArtistDetail.vue:30 -#: front/src/views/admin/library/TrackDetail.vue:30 +#: front/src/views/admin/library/AlbumDetail.vue:37 +#: front/src/views/admin/library/ArtistDetail.vue:35 +#: front/src/views/admin/library/TagDetail.vue:21 +#: front/src/views/admin/library/TrackDetail.vue:36 msgctxt "Content/Moderation/Link/Verb" msgid "Open local profile" msgstr "" -#: front/src/views/admin/library/AlbumDetail.vue:46 -#: front/src/views/admin/library/ArtistDetail.vue:45 -#: front/src/views/admin/library/TrackDetail.vue:45 +#: front/src/views/admin/library/AlbumDetail.vue:52 +#: front/src/views/admin/library/ArtistDetail.vue:50 +#: front/src/views/admin/library/TrackDetail.vue:51 msgctxt "Content/Moderation/Link/Verb" msgid "Open on MusicBrainz" msgstr "" @@ -2983,10 +3215,10 @@ msgctxt "Content/Moderation/Link/Verb" msgid "Open profile" msgstr "" -#: front/src/views/admin/library/AlbumDetail.vue:54 -#: front/src/views/admin/library/ArtistDetail.vue:53 +#: front/src/views/admin/library/AlbumDetail.vue:60 +#: front/src/views/admin/library/ArtistDetail.vue:58 #: front/src/views/admin/library/LibraryDetail.vue:49 -#: front/src/views/admin/library/TrackDetail.vue:53 +#: front/src/views/admin/library/TrackDetail.vue:59 #: front/src/views/admin/library/UploadDetail.vue:50 #: front/src/views/admin/moderation/AccountsDetail.vue:52 msgctxt "Content/Moderation/Link/Verb" @@ -3009,6 +3241,7 @@ msgstr "Iragazkiak sortu zure irratia pertsonalizatzeko" #: src/components/library/Radios.vue:41 #: front/src/components/manage/library/EditsCardList.vue:37 #: front/src/components/manage/users/UsersTable.vue:17 +#: front/src/views/admin/moderation/ReportsList.vue:42 #: front/src/views/playlists/List.vue:25 #, fuzzy msgctxt "Content/Search/Dropdown.Label/Noun" @@ -3017,40 +3250,51 @@ msgstr "Ordena" #: front/src/components/favorites/List.vue:24 #: src/components/library/Albums.vue:15 -#: front/src/components/library/Artists.vue:15 +#: front/src/components/library/Artists.vue:19 #: src/components/library/Radios.vue:33 #: front/src/components/manage/library/AlbumsTable.vue:11 #: front/src/components/manage/library/ArtistsTable.vue:11 #: front/src/components/manage/library/EditsCardList.vue:29 #: front/src/components/manage/library/LibrariesTable.vue:20 +#: front/src/components/manage/library/TagsTable.vue:11 #: front/src/components/manage/library/TracksTable.vue:11 #: front/src/components/manage/library/UploadsTable.vue:30 #: front/src/components/manage/moderation/AccountsTable.vue:11 -#: front/src/components/manage/moderation/DomainsTable.vue:9 +#: front/src/components/manage/moderation/DomainsTable.vue:17 #: front/src/components/manage/users/InvitationsTable.vue:9 #: front/src/components/manage/users/UsersTable.vue:9 +#: front/src/views/admin/moderation/ReportsList.vue:34 #: front/src/views/content/libraries/FilesTable.vue:21 #: front/src/views/playlists/List.vue:17 msgctxt "Content/Search/Dropdown.Label/Noun" msgid "Ordering" msgstr "Ordena" -#: front/src/components/library/Albums.vue:23 -#: src/components/library/Artists.vue:23 +#: front/src/components/library/Albums.vue:27 +#: src/components/library/Artists.vue:27 #: front/src/components/manage/library/AlbumsTable.vue:19 #: front/src/components/manage/library/ArtistsTable.vue:19 #: front/src/components/manage/library/LibrariesTable.vue:28 +#: front/src/components/manage/library/TagsTable.vue:19 #: front/src/components/manage/library/TracksTable.vue:19 #: front/src/components/manage/library/UploadsTable.vue:38 #: front/src/components/manage/moderation/AccountsTable.vue:19 -#: front/src/components/manage/moderation/DomainsTable.vue:17 +#: front/src/components/manage/moderation/DomainsTable.vue:25 #: front/src/views/content/libraries/FilesTable.vue:29 msgctxt "Content/Search/Dropdown.Label/Noun" msgid "Ordering direction" msgstr "Ordenazio norabidea" +#: front/src/components/mixins/Translations.vue:48 +#: front/src/components/mixins/Translations.vue:49 +msgctxt "Content/Moderation/Dropdown" +msgid "Other" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:143 #: front/src/components/manage/users/InvitationsTable.vue:38 -msgctxt "Content/Admin/Table.Label" +#, fuzzy +msgctxt "*/*/*" msgid "Owner" msgstr "Jabea" @@ -3070,12 +3314,15 @@ msgctxt "Content/*/Hidden text/Noun" msgid "Pagination" msgstr "" -#: front/src/components/auth/Login.vue:33 src/components/auth/Signup.vue:40 -msgctxt "Content/*/Input.Label" +#: front/src/components/auth/LoginForm.vue:32 +#: src/components/auth/Settings.vue:291 +#: front/src/components/auth/SignupForm.vue:36 +#, fuzzy +msgctxt "*/*/*" msgid "Password" msgstr "Pasahitza" -#: front/src/components/auth/SubsonicTokenForm.vue:94 +#: front/src/components/auth/SubsonicTokenForm.vue:100 #, fuzzy msgctxt "Content/Settings/Message" msgid "Password updated" @@ -3086,13 +3333,13 @@ msgctxt "Content/Signup/Card.Title" msgid "Password updated successfully" msgstr "Pasahitza arrakastaz eguneratu da" -#: front/src/components/audio/Player.vue:628 +#: front/src/components/audio/Player.vue:654 #, fuzzy msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Pause track" msgstr "Arazoen jarraipena" -#: front/src/components/ShortcutsModal.vue:59 +#: front/src/components/ShortcutsModal.vue:96 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Pause/play the current track" msgstr "" @@ -3121,7 +3368,7 @@ msgctxt "Content/Library/Label" msgid "Pending files" msgstr "Fitxategiak faltan" -#: front/src/components/Sidebar.vue:225 +#: front/src/components/Sidebar.vue:232 #, fuzzy msgctxt "Sidebar/Notifications/Hidden text" msgid "Pending follow requests" @@ -3134,90 +3381,80 @@ msgctxt "Content/Admin/*/Noun" msgid "Pending review" msgstr "Fitxategiak faltan" -#: front/src/components/Sidebar.vue:226 +#: front/src/components/Sidebar.vue:233 #, fuzzy msgctxt "Sidebar/Moderation/Hidden text" msgid "Pending review edits" msgstr "Eskaerak zain" +#: front/src/components/auth/Settings.vue:176 #: front/src/components/manage/users/UsersTable.vue:42 #: front/src/views/admin/moderation/AccountsDetail.vue:166 -msgctxt "Content/Admin/Table.Label/Noun" -msgid "Permissions" -msgstr "Baimenak" - -#: front/src/components/auth/Settings.vue:176 msgctxt "Content/*/*/Noun" msgid "Permissions" msgstr "Baimenak" #: front/src/components/audio/PlayButton.vue:9 -#: front/src/components/library/TrackBase.vue:26 +#: front/src/components/library/TrackBase.vue:24 msgctxt "*/Queue/Button.Label/Short, Verb" msgid "Play" msgstr "Erreproduzitu" #: front/src/components/audio/album/Card.vue:48 -#: front/src/components/audio/artist/Card.vue:44 -#: front/src/components/library/AlbumBase.vue:20 +#: front/src/components/library/AlbumBase.vue:21 #: front/src/components/library/AlbumDetail.vue:11 #: src/views/playlists/Detail.vue:24 msgctxt "Content/Queue/Button.Label/Short, Verb" msgid "Play all" msgstr "Erreproduzitu dena" -#: front/src/components/library/ArtistBase.vue:31 +#: front/src/components/library/ArtistBase.vue:32 msgctxt "Content/Artist/Button.Label/Verb" msgid "Play all albums" msgstr "Erreproduzitu album denak" -#: front/src/components/audio/PlayButton.vue:76 +#: front/src/components/audio/PlayButton.vue:92 msgctxt "*/Queue/Dropdown/Button/Title" msgid "Play next" msgstr "Erreproduzitu hurrengoa" -#: front/src/components/ShortcutsModal.vue:67 +#: front/src/components/ShortcutsModal.vue:120 #, fuzzy msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Play next track" msgstr "Erreproduzitu hurrengoa" -#: front/src/components/audio/PlayButton.vue:74 +#: front/src/components/audio/PlayButton.vue:90 msgctxt "*/Queue/Dropdown/Button/Title" msgid "Play now" msgstr "Erreproduzitu orain" -#: front/src/components/ShortcutsModal.vue:63 +#: front/src/components/ShortcutsModal.vue:116 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Play previous track" msgstr "" -#: front/src/components/audio/PlayButton.vue:77 +#: front/src/components/audio/PlayButton.vue:93 msgctxt "*/Queue/Dropdown/Button/Title" msgid "Play similar songs" msgstr "" -#: front/src/components/Sidebar.vue:224 +#: front/src/components/Sidebar.vue:231 #, fuzzy msgctxt "Sidebar/Player/Hidden text" msgid "Play this track" msgstr "Zerrenda editorea" -#: front/src/components/audio/Player.vue:627 +#: front/src/components/audio/Player.vue:653 #, fuzzy msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Play track" msgstr "Erreproduzitu dena" -#: front/src/components/audio/PlayButton.vue:82 +#: front/src/components/mixins/Report.vue:66 src/views/playlists/Detail.vue:121 +#: front/src/components/mixins/Report.vue:67 #, fuzzy -msgctxt "*/Queue/Button/Title" -msgid "Play..." -msgstr "Erreproduzitu" - -#: front/src/views/playlists/Detail.vue:91 -#, fuzzy -msgctxt "Head/Playlist/Title" +msgctxt "*/*/*" msgid "Playlist" msgstr "Zerrendak" @@ -3254,33 +3491,30 @@ msgctxt "Content/Playlist/Dropdown.Label" msgid "Playlist visibility" msgstr "Zerrenda ikuspena" -#: front/src/components/mixins/Translations.vue:88 -#: front/src/components/mixins/Translations.vue:89 -msgctxt "Content/OAuth Scopes/Label" -msgid "Playlists" -msgstr "Zerrendak" - #: front/src/components/Sidebar.vue:71 src/components/library/Home.vue:16 -#: front/src/components/library/Library.vue:16 src/views/admin/Settings.vue:83 -#: front/src/views/admin/library/AlbumDetail.vue:173 -#: front/src/views/admin/library/ArtistDetail.vue:162 -#: front/src/views/admin/library/TrackDetail.vue:225 +#: front/src/components/library/Library.vue:16 +#: front/src/components/mixins/Translations.vue:100 +#: src/views/admin/Settings.vue:83 +#: front/src/views/admin/library/AlbumDetail.vue:179 +#: front/src/views/admin/library/ArtistDetail.vue:167 +#: front/src/views/admin/library/TrackDetail.vue:231 #: src/views/playlists/List.vue:106 +#: front/src/components/mixins/Translations.vue:101 msgctxt "*/*/*" msgid "Playlists" msgstr "Zerrendak" -#: front/src/components/Home.vue:56 -msgctxt "Content/Home/List item" -msgid "Playlists? We got them" -msgstr "Zerrendak? Guk badauzkagu" +#: front/src/components/audio/EmbedWizard.vue:9 +msgctxt "Content/Embed/Message" +msgid "Please contact your admins and ask them to update the corresponding setting." +msgstr "" #: front/src/components/auth/Settings.vue:79 msgctxt "Content/Settings/Error message.List item/Call to action" msgid "Please double-check your password is correct" msgstr "Mesedez egiaztatu bi aldiz pasahitza zuzena dela" -#: front/src/components/auth/Login.vue:9 +#: front/src/components/auth/LoginForm.vue:5 msgctxt "Content/Login/Error message.List item/Call to action" msgid "Please double-check your username/password couple is correct" msgstr "Mesedez egiaztatu erabiltzaile izena eta pasahitza zuzenak direla" @@ -3290,25 +3524,28 @@ msgctxt "Content/Settings/Paragraph" msgid "PNG, GIF or JPG. At most 2MB. Will be downscaled to 400x400px." msgstr "PNG, GIF edo JPG. Gehienez 2MB. 400x400px tamainara murriztuko da." -#: front/src/views/admin/library/TrackDetail.vue:137 +#: front/src/components/About.vue:72 +msgctxt "Content/About/Header/Name" +msgid "Pod configuration" +msgstr "" + +#: front/src/views/admin/library/TrackDetail.vue:143 src/edits.js:70 #, fuzzy -msgctxt "*/*/*/Noun" +msgctxt "*/*/*/Short, Noun" msgid "Position" msgstr "Deskribapena" #: front/src/components/manage/moderation/InstancePolicyForm.vue:118 msgctxt "Content/Moderation/Help text" -msgid "" -"Prevent account or domain from triggering notifications, except from " -"followers." +msgid "Prevent account or domain from triggering notifications, except from followers." msgstr "" -#: front/src/components/audio/EmbedWizard.vue:33 +#: front/src/components/audio/EmbedWizard.vue:43 msgctxt "Popup/Embed/Title/Noun" msgid "Preview" msgstr "" -#: front/src/components/audio/Player.vue:626 +#: front/src/components/audio/Player.vue:652 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Previous track" msgstr "" @@ -3319,7 +3556,7 @@ msgctxt "Content/Settings/Dropdown/Short" msgid "Private" msgstr "" -#: front/src/views/content/remote/Card.vue:43 +#: front/src/views/content/remote/Card.vue:56 #, fuzzy msgctxt "Content/Library/Card.List item" msgid "Problem during scanning" @@ -3341,15 +3578,21 @@ msgctxt "Content/Library/Tab.Title/Short" msgid "Processing" msgstr "Prozesatzen" -#: front/src/components/mixins/Translations.vue:68 -#: front/src/components/mixins/Translations.vue:69 +#: front/src/components/mixins/Translations.vue:80 +#: front/src/components/mixins/Translations.vue:81 #, fuzzy msgctxt "Content/OAuth Scopes/Label" msgid "Profile" msgstr "Erroredun fitxategiak" +#: front/src/components/auth/SignupForm.vue:5 +#, fuzzy +msgctxt "Content/Signup/Form/Paragraph" +msgid "Public registrations are not possible on this instance. You will need an invitation code to sign up." +msgstr "Erregistratzea itxita dago instantzia honetan. Gonbidapen kode bat beharko duzu izena emateko." + #: front/src/components/manage/moderation/AccountsTable.vue:188 -#: front/src/components/manage/moderation/DomainsTable.vue:168 +#: front/src/components/manage/moderation/DomainsTable.vue:186 #: front/src/views/content/libraries/Quota.vue:36 #: front/src/views/content/libraries/Quota.vue:39 #: front/src/views/content/libraries/Quota.vue:62 @@ -3380,7 +3623,7 @@ msgctxt "Sidebar/Queue/Tab.Title/Noun" msgid "Queue" msgstr "Ilara" -#: front/src/components/audio/Player.vue:322 +#: front/src/components/audio/Player.vue:329 msgctxt "Content/Queue/Message" msgid "Queue shuffled!" msgstr "" @@ -3414,16 +3657,12 @@ msgstr "Irratia eguneratuta" #: front/src/components/library/Library.vue:13 #: src/components/library/Radios.vue:142 +#: front/src/components/mixins/Translations.vue:104 +#: front/src/components/mixins/Translations.vue:105 msgctxt "*/*/*" msgid "Radios" msgstr "Irratiak" -#: front/src/components/mixins/Translations.vue:92 -#: front/src/components/mixins/Translations.vue:93 -msgctxt "Content/OAuth Scopes/Label" -msgid "Radios" -msgstr "Irratiak" - #: front/src/components/auth/ApplicationForm.vue:151 msgctxt "Content/OAuth Scopes/Label/Verb" msgid "Read" @@ -3450,15 +3689,15 @@ msgctxt "Content/Moderation/*/Noun" msgid "Reason" msgstr "" -#: front/src/views/admin/moderation/AccountsDetail.vue:251 -#: front/src/views/admin/moderation/DomainsDetail.vue:179 +#: front/src/views/admin/moderation/AccountsDetail.vue:252 +#: front/src/views/admin/moderation/DomainsDetail.vue:216 msgctxt "Content/Moderation/Table.Label/Noun" msgid "Received library follows" msgstr "" -#: front/src/components/manage/moderation/DomainsTable.vue:40 -#: front/src/components/mixins/Translations.vue:62 -#: front/src/components/mixins/Translations.vue:63 +#: front/src/components/manage/moderation/DomainsTable.vue:48 +#: front/src/components/mixins/Translations.vue:74 +#: front/src/components/mixins/Translations.vue:75 msgctxt "Content/Moderation/*/Noun" msgid "Received messages" msgstr "" @@ -3479,6 +3718,12 @@ msgctxt "Content/Home/Title" msgid "Recently added" msgstr "Azken aldian gehituta" +#: front/src/components/Home.vue:167 +#, fuzzy +msgctxt "Content/Home/Title" +msgid "Recently added albums" +msgstr "Azken aldian gehituta" + #: front/src/components/library/Home.vue:11 msgctxt "Content/Home/Title" msgid "Recently favorited" @@ -3508,14 +3753,14 @@ msgctxt "Popup/*/Message.Title" msgid "Refresh error" msgstr "Berriztu" -#: front/src/views/admin/library/AlbumDetail.vue:50 -#: front/src/views/admin/library/ArtistDetail.vue:49 -#: front/src/views/admin/library/TrackDetail.vue:49 +#: front/src/views/admin/library/AlbumDetail.vue:56 +#: front/src/views/admin/library/ArtistDetail.vue:54 +#: front/src/views/admin/library/TrackDetail.vue:55 msgctxt "Content/Moderation/Button/Verb" msgid "Refresh from remote server" msgstr "" -#: front/src/views/admin/moderation/DomainsDetail.vue:127 +#: front/src/views/admin/moderation/DomainsDetail.vue:164 msgctxt "Content/Moderation/Button.Label/Verb" msgid "Refresh node info" msgstr "" @@ -3528,9 +3773,7 @@ msgstr "Beheranzkoa" #: front/src/components/federation/FetchButton.vue:80 msgctxt "Popup/*/Message.Content" -msgid "" -"Refresh request wasn't proceed in time by our server. It will be processed " -"later." +msgid "Refresh request wasn't proceed in time by our server. It will be processed later." msgstr "" #: front/src/components/federation/FetchButton.vue:16 @@ -3554,16 +3797,13 @@ msgctxt "Popup/*/Title" msgid "Refreshing object from remote…" msgstr "" -#: front/src/components/auth/Signup.vue:9 -msgctxt "Content/Signup/Form/Paragraph" -msgid "" -"Registration are closed on this instance, you will need an invitation code " -"to signup." -msgstr "" -"Erregistratzea itxita dago instantzia honetan. Gonbidapen kode bat beharko " -"duzu izena emateko." +#: front/src/components/About.vue:86 +#, fuzzy +msgctxt "*/*/*" +msgid "Registrations" +msgstr "Administrazioa" -#: front/src/components/manage/users/UsersTable.vue:71 +#: front/src/components/manage/users/UsersTable.vue:72 #, fuzzy msgctxt "Content/Admin/Table, User role" msgid "Regular user" @@ -3590,8 +3830,8 @@ msgid "Rejected" msgstr "Baztertuta" #: front/src/components/manage/library/AlbumsTable.vue:43 -#: front/src/components/mixins/Translations.vue:44 src/edits.js:28 -#: front/src/components/mixins/Translations.vue:45 +#: front/src/components/mixins/Translations.vue:54 src/edits.js:43 +#: front/src/components/mixins/Translations.vue:55 msgctxt "Content/*/*/Noun" msgid "Release date" msgstr "" @@ -3601,6 +3841,11 @@ msgctxt "Content/Library/Paragraph" msgid "Remaining storage space" msgstr "" +#: front/src/views/Notifications.vue:18 src/views/Notifications.vue:52 +msgctxt "Content/Notifications/Label" +msgid "Remind me in:" +msgstr "" + #: front/src/views/content/remote/Home.vue:6 msgctxt "Content/Library/Title/Noun" msgid "Remote libraries" @@ -3608,13 +3853,8 @@ msgstr "Urruneko liburutegiak" #: front/src/views/content/remote/Home.vue:7 msgctxt "Content/Library/Paragraph" -msgid "" -"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." -msgstr "" -"Urruneko liburutegiak interneteko beste erabiltzaile batzuenak dira. " -"Hauetara sarbidea lor dezakezu hauetara baimena lortzen baduzu edo publikoak" -" diren bitartean." +msgid "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." +msgstr "Urruneko liburutegiak interneteko beste erabiltzaile batzuenak dira. Hauetara sarbidea lor dezakezu hauetara baimena lortzen baduzu edo publikoak diren bitartean." #: front/src/components/library/radios/Filter.vue:59 msgctxt "Content/Radio/Button.Label/Verb" @@ -3632,6 +3872,13 @@ msgctxt "Content/Moderation/Button.Label" msgid "Remove filter" msgstr "Ezabatu irudia" +#: front/src/components/manage/moderation/DomainsTable.vue:198 +#: front/src/views/admin/moderation/DomainsDetail.vue:39 +#, fuzzy +msgctxt "Content/Moderation/Action/Verb" +msgid "Remove from allow-list" +msgstr "Gogokoetan sartu" + #: front/src/components/favorites/TrackFavoriteIcon.vue:26 #, fuzzy msgctxt "Content/Track/Icon.Tooltip/Verb" @@ -3640,37 +3887,104 @@ msgstr "Gogokoetan sartu" #: front/src/views/content/libraries/Quota.vue:38 msgctxt "Popup/Library/Paragraph" -msgid "" -"Removes uploaded but yet to be processed tracks completely, adding the " -"corresponding data to your quota." +msgid "Removes uploaded but yet to be processed tracks completely, adding the corresponding data to your quota." msgstr "" #: front/src/views/content/libraries/Quota.vue:64 msgctxt "Popup/Library/Paragraph" -msgid "" -"Removes uploaded tracks skipped during the import processes completely, " -"adding the corresponding data to your quota." +msgid "Removes uploaded tracks skipped during the import processes completely, adding the corresponding data to your quota." msgstr "" #: front/src/views/content/libraries/Quota.vue:90 msgctxt "Popup/Library/Paragraph" -msgid "" -"Removes uploaded tracks that could not be processed by the server " -"completely, adding the corresponding data to your quota." +msgid "Removes uploaded tracks that could not be processed by the server completely, adding the corresponding data to your quota." +msgstr "" + +#: front/src/components/audio/PlayButton.vue:94 +#, fuzzy +msgctxt "*/Queue/Dropdown/Button/Title" +msgid "Replace current queue" +msgstr "Ilaran gehitu" + +#: front/src/components/mixins/Report.vue:6 src/components/mixins/Report.vue:7 +msgctxt "*/Moderation/*/Verb" +msgid "Report @%{ username }…" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:5 +msgctxt "Content/Moderation/Card/Short" +msgid "Report %{ id }" +msgstr "" + +#: front/src/components/moderation/ReportModal.vue:139 +msgctxt "*/Moderation/Message" +msgid "Report successfully submitted, thank you" +msgstr "" + +#: front/src/components/mixins/Report.vue:36 +#: src/components/mixins/Report.vue:37 +#, fuzzy +msgctxt "*/Moderation/*/Verb" +msgid "Report this album…" +msgstr "Liburutegi hau ezabatu?" + +#: front/src/components/mixins/Report.vue:50 +#: src/components/mixins/Report.vue:51 +#, fuzzy +msgctxt "*/Moderation/*/Verb" +msgid "Report this artist…" +msgstr "Artista honen albumak" + +#: front/src/components/mixins/Report.vue:72 +#: src/components/mixins/Report.vue:73 +#, fuzzy +msgctxt "*/Moderation/*/Verb" +msgid "Report this library…" +msgstr "Liburutegi hau ezabatu?" + +#: front/src/components/mixins/Report.vue:61 +#: src/components/mixins/Report.vue:62 +#, fuzzy +msgctxt "*/Moderation/*/Verb" +msgid "Report this playlist…" +msgstr "Zerrendan sartu…" + +#: front/src/components/mixins/Report.vue:23 +#: src/components/mixins/Report.vue:24 +#, fuzzy +msgctxt "*/Moderation/*/Verb" +msgid "Report this track…" +msgstr "Editatu instantzia infoa" + +#: front/src/components/audio/PlayButton.vue:95 +msgctxt "*/Moderation/*/Button/Label,Verb" +msgid "Report…" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:117 +msgctxt "Content/*/*/Short" +msgid "Reported object" +msgstr "" + +#: front/src/views/admin/moderation/Base.vue:5 +#: front/src/views/admin/moderation/ReportsList.vue:3 +#: front/src/views/admin/moderation/ReportsList.vue:208 +msgctxt "*/Moderation/*/Noun" +msgid "Reports" msgstr "" -#: front/src/components/auth/SubsonicTokenForm.vue:33 -#: front/src/components/auth/SubsonicTokenForm.vue:36 +#: front/src/components/auth/SubsonicTokenForm.vue:38 +#: front/src/components/auth/SubsonicTokenForm.vue:41 msgctxt "*/Settings/Button.Label/Verb" msgid "Request a new password" msgstr "Eskatu pasahitz berria" -#: front/src/components/auth/SubsonicTokenForm.vue:34 +#: front/src/components/auth/SubsonicTokenForm.vue:39 msgctxt "Popup/Settings/Title" msgid "Request a new Subsonic API password?" msgstr "Subsonic API pasahitz berria eskatu?" -#: front/src/components/auth/SubsonicTokenForm.vue:42 +#: front/src/components/auth/SubsonicTokenForm.vue:47 msgctxt "Content/Settings/Button.Label/Verb" msgid "Request a password" msgstr "Eskatu pasahitza" @@ -3680,36 +3994,53 @@ msgctxt "Popup/*/Loading.Title" msgid "Requesting a fetch…" msgstr "" -#: front/src/components/library/EditForm.vue:82 +#: front/src/components/library/EditForm.vue:94 msgctxt "Content/Library/Button.Label" -msgid "Reset to initial value: %{ value }" +msgid "Reset to initial value" msgstr "" -#: front/src/components/auth/Login.vue:35 src/views/auth/PasswordReset.vue:4 -#: front/src/views/auth/PasswordReset.vue:53 +#: front/src/components/auth/LoginForm.vue:34 +#: src/views/auth/PasswordReset.vue:4 front/src/views/auth/PasswordReset.vue:53 msgctxt "*/Login/*/Verb" msgid "Reset your password" msgstr "Berrezarri pasahitza" +#: front/src/components/manage/moderation/ReportCard.vue:83 +#, fuzzy +msgctxt "Content/*/*/Noun" +msgid "Resolution date" +msgstr "Sortze data" + +#: front/src/components/manage/moderation/ReportCard.vue:218 +msgctxt "Content/*/Button.Label/Verb" +msgid "Resolve" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:62 +#: front/src/views/admin/moderation/ReportsList.vue:20 +msgctxt "Content/*/*/Short" +msgid "Resolved" +msgstr "" + #: front/src/views/content/libraries/FilesTable.vue:223 #, fuzzy msgctxt "Content/Library/Dropdown/Verb" msgid "Restart import" msgstr "Inportazioa sortu" +#: front/src/components/library/EditForm.vue:31 +msgctxt "Content/Library/Button.Label" +msgid "Restrict to unreviewed edits" +msgstr "" + #: front/src/components/favorites/List.vue:39 -#: src/components/library/Albums.vue:30 -#: front/src/components/library/Artists.vue:30 +#: src/components/library/Albums.vue:34 +#: front/src/components/library/Artists.vue:34 #: src/components/library/Radios.vue:52 front/src/views/playlists/List.vue:32 msgctxt "Content/Search/Dropdown.Label/Noun" msgid "Results per page" msgstr "Emaitzak orrialdeko" -#: front/src/components/library/EditForm.vue:31 -msgctxt "Content/Library/Button.Label" -msgid "Retrict to unreviewed edits" -msgstr "" - #: front/src/views/auth/EmailConfirm.vue:17 #, fuzzy msgctxt "Content/Signup/Link/Verb" @@ -3742,55 +4073,56 @@ msgctxt "Content/Moderation/Card.Title/Noun" msgid "Rule" msgstr "" -#: front/src/components/admin/SettingsGroup.vue:67 +#: front/src/components/About.vue:28 src/components/About.vue:56 +msgctxt "Content/About/Header" +msgid "Rules" +msgstr "" + +#: front/src/components/admin/SettingsGroup.vue:75 #: front/src/components/library/radios/Builder.vue:34 msgctxt "Content/*/Button.Label/Verb" msgid "Save" msgstr "Gorde" -#: front/src/views/content/remote/Card.vue:175 +#: front/src/views/content/remote/Card.vue:203 msgctxt "Content/Library/Message" msgid "Scan launched" msgstr "" -#: front/src/views/content/remote/Card.vue:67 +#: front/src/views/content/remote/Card.vue:80 #, fuzzy msgctxt "Content/Library/Card.Button.Label/Verb" msgid "Scan now" msgstr "Erreproduzitu orain" -#: front/src/views/content/remote/Card.vue:35 +#: front/src/views/content/remote/Card.vue:48 msgctxt "Content/Library/Card.List item" msgid "Scan pending" msgstr "Eskaneatzeko zain" -#: front/src/views/content/remote/Card.vue:176 +#: front/src/views/content/remote/Card.vue:204 msgctxt "Content/Library/Message" msgid "Scan skipped (previous scan is too recent)" msgstr "" -#: front/src/views/content/remote/Card.vue:47 +#: front/src/views/content/remote/Card.vue:60 #, fuzzy msgctxt "Content/Library/Card.List item" msgid "Scanned" msgstr "Eskaneatzeko zain" -#: front/src/views/content/remote/Card.vue:51 +#: front/src/views/content/remote/Card.vue:64 msgctxt "Content/Library/Card.List item" msgid "Scanned with errors" msgstr "Erroreak eskaneatzean" -#: front/src/views/content/remote/Card.vue:39 +#: front/src/views/content/remote/Card.vue:52 #, fuzzy msgctxt "Content/Library/Card.List item" msgid "Scanning… (%{ progress }%)" -msgstr "Eskaneatzen... (%{ progress }%)" +msgstr "Eskaneatzen… (%{ progress }%)" #: front/src/components/auth/ApplicationForm.vue:22 -msgctxt "Content/Applications/Input.Label/Noun" -msgid "Scopes" -msgstr "" - #: front/src/components/auth/Settings.vue:226 msgctxt "Content/*/*/Noun" msgid "Scopes" @@ -3803,12 +4135,14 @@ msgstr "" #: front/src/components/manage/library/ArtistsTable.vue:5 #: front/src/components/manage/library/EditsCardList.vue:6 #: front/src/components/manage/library/LibrariesTable.vue:5 +#: front/src/components/manage/library/TagsTable.vue:5 #: front/src/components/manage/library/TracksTable.vue:5 #: front/src/components/manage/library/UploadsTable.vue:5 #: front/src/components/manage/moderation/AccountsTable.vue:5 #: front/src/components/manage/moderation/DomainsTable.vue:5 #: front/src/components/manage/users/InvitationsTable.vue:5 #: front/src/components/manage/users/UsersTable.vue:5 +#: front/src/views/admin/moderation/ReportsList.vue:8 #: front/src/views/content/libraries/FilesTable.vue:5 #: src/views/playlists/List.vue:13 msgctxt "Content/Search/Input.Label/Noun" @@ -3821,6 +4155,7 @@ msgid "Search a remote library" msgstr "Bilatu urruneko liburutegia" #: front/src/components/manage/library/EditsCardList.vue:211 +#: front/src/views/admin/moderation/ReportsList.vue:207 msgctxt "Content/Search/Input.Placeholder" msgid "Search by account, summary, domain…" msgstr "" @@ -3855,7 +4190,12 @@ msgctxt "Content/Search/Input.Placeholder" msgid "Search by domain, username, bio…" msgstr "" -#: front/src/components/manage/moderation/DomainsTable.vue:151 +#: front/src/components/manage/library/TagsTable.vue:165 +msgctxt "Content/Search/Input.Placeholder" +msgid "Search by name" +msgstr "" + +#: front/src/components/manage/moderation/DomainsTable.vue:168 msgctxt "Content/Search/Input.Placeholder" msgid "Search by name…" msgstr "" @@ -3870,12 +4210,12 @@ msgctxt "Content/Admin/Input.Placeholder/Verb" msgid "Search by username, e-mail address, code…" msgstr "" -#: front/src/components/manage/users/UsersTable.vue:163 +#: front/src/components/manage/users/UsersTable.vue:164 msgctxt "Content/Search/Input.Placeholder" msgid "Search by username, e-mail address, name…" msgstr "" -#: front/src/components/audio/SearchBar.vue:20 +#: front/src/components/audio/SearchBar.vue:27 msgctxt "Sidebar/Search/Input.Placeholder" msgid "Search for artists, albums, tracks…" msgstr "" @@ -3885,16 +4225,30 @@ msgctxt "Content/Search/Title" msgid "Search for some music" msgstr "Bilatu musika pixka bat" -#: front/src/components/library/AlbumBase.vue:57 -#: front/src/components/library/ArtistBase.vue:68 -#: front/src/components/library/TrackBase.vue:76 +#: front/src/components/library/TagsSelector.vue:6 +#, fuzzy +msgctxt "*/Dropdown/Placeholder/Verb" +msgid "Search for tags…" +msgstr "Bilatu musika pixka bat" + +#: front/src/components/library/AlbumBase.vue:66 +#: front/src/components/library/ArtistBase.vue:77 +#: front/src/components/library/TrackBase.vue:82 +#, fuzzy +msgctxt "Content/*/Button.Label/Verb" +msgid "Search on Discogs" +msgstr "Bilatu musika pixka bat" + +#: front/src/components/library/AlbumBase.vue:58 +#: front/src/components/library/ArtistBase.vue:69 +#: front/src/components/library/TrackBase.vue:74 msgctxt "Content/*/Button.Label/Verb" msgid "Search on Wikipedia" msgstr "Bilatu Wikipedian" #: front/src/components/library/Library.vue:35 -#: src/views/admin/library/Base.vue:32 -#: front/src/views/admin/moderation/Base.vue:22 +#: src/views/admin/library/Base.vue:35 +#: front/src/views/admin/moderation/Base.vue:44 #: src/views/admin/users/Base.vue:21 front/src/views/content/Base.vue:19 msgctxt "Menu/*/Hidden text" msgid "Secondary menu" @@ -3905,6 +4259,26 @@ msgctxt "Content/Admin/Menu.Title" msgid "Sections" msgstr "Atalak" +#: front/src/components/ShortcutsModal.vue:108 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek backwards 30s" +msgstr "" + +#: front/src/components/ShortcutsModal.vue:100 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek backwards 5s" +msgstr "" + +#: front/src/components/ShortcutsModal.vue:112 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek forwards 30s" +msgstr "" + +#: front/src/components/ShortcutsModal.vue:104 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek forwards 5s" +msgstr "" + #: front/src/components/library/radios/Builder.vue:46 msgctxt "Content/Radio/Dropdown.Placeholder/Verb" msgid "Select a filter" @@ -3923,9 +4297,14 @@ msgctxt "Content/*/Link/Verb" msgid "Select only current page" msgstr "Aukeratu orrialde hau bakarrik" -#: front/src/components/Sidebar.vue:43 src/components/Sidebar.vue:108 -#: front/src/components/manage/users/UsersTable.vue:181 -#: front/src/views/admin/moderation/AccountsDetail.vue:506 +#: front/src/components/Home.vue:43 +msgctxt "Content/Home/Link" +msgid "Server rules" +msgstr "" + +#: front/src/components/Sidebar.vue:43 src/components/Sidebar.vue:112 +#: front/src/components/manage/users/UsersTable.vue:182 +#: front/src/views/admin/moderation/AccountsDetail.vue:526 msgctxt "*/*/*/Noun" msgid "Settings" msgstr "Ezarpenak" @@ -3948,18 +4327,25 @@ msgstr "Partekatu esteka" #: front/src/views/content/libraries/Detail.vue:15 #, fuzzy msgctxt "Content/Library/Paragraph" -msgid "" -"Share this link with other users so they can request access to your library." -msgstr "" -"Partekatu esteka hau beste erabiltzaile batzuekin zure liburutegira sarbidea" -" eska dezaten." +msgid "Share this link with other users so they can request access to your library." +msgstr "Partekatu esteka hau beste erabiltzaile batzuekin zure liburutegira sarbidea eska dezaten." #: front/src/views/content/libraries/Detail.vue:14 -#: front/src/views/content/remote/Card.vue:77 +#: front/src/views/content/remote/Card.vue:90 msgctxt "Content/Library/Title" msgid "Sharing link" msgstr "Esteka partekatzen" +#: front/src/components/audio/EmbedWizard.vue:5 +msgctxt "Content/Embed/Message" +msgid "Sharing will not work because this pod doesn't allow anonymous users to access content." +msgstr "" + +#: front/src/components/About.vue:156 +msgctxt "*/*/*/Verb" +msgid "Show" +msgstr "" + #: front/src/components/audio/album/Card.vue:38 #, fuzzy msgctxt "Content/Album/Card.Link/Verb" @@ -3968,11 +4354,11 @@ msgid_plural "Show %{ count } more tracks" msgstr[0] "Erakutsi abesti %{ count } gehiago" msgstr[1] "Erakutsi %{ count } abesti gehiago" -#: front/src/components/audio/artist/Card.vue:30 +#: front/src/components/tags/List.vue:11 #, fuzzy -msgctxt "Content/Artist/Card.Link" -msgid "Show 1 more album" -msgid_plural "Show %{ count } more albums" +msgctxt "Content/*/Button/Label/Verb" +msgid "Show 1 more tag" +msgid_plural "Show %{ count } more tags" msgstr[0] "Erakutsi album 1 gehiago" msgstr[1] "Erakutsi %{ count } album gehiago" @@ -3981,17 +4367,28 @@ msgctxt "Content/Library/Button.Label" msgid "Show all edits" msgstr "" -#: front/src/components/ShortcutsModal.vue:42 +#: front/src/components/ShortcutsModal.vue:60 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Show available keyboard shortcuts" msgstr "" -#: front/src/views/Notifications.vue:7 +#: front/src/components/common/ExpandableDiv.vue:7 +msgctxt "*/*/Button,Label" +msgid "Show less" +msgstr "" + +#: front/src/components/common/ExpandableDiv.vue:8 +#, fuzzy +msgctxt "*/*/Button,Label" +msgid "Show more" +msgstr "Erakutsi album 1 gehiago" + +#: front/src/views/Notifications.vue:72 msgctxt "Content/Notifications/Form.Label/Verb" msgid "Show read notifications" msgstr "Erakutsi irakurritako jakinarazpenak" -#: front/src/components/forms/PasswordInput.vue:26 +#: front/src/components/forms/PasswordInput.vue:42 #, fuzzy msgctxt "Content/Settings/Button.Tooltip/Verb" msgid "Show/hide password" @@ -4001,58 +4398,66 @@ msgstr "Pasahitza aldatu" #: front/src/components/manage/library/ArtistsTable.vue:84 #: front/src/components/manage/library/EditsCardList.vue:72 #: front/src/components/manage/library/LibrariesTable.vue:110 +#: front/src/components/manage/library/TagsTable.vue:79 #: front/src/components/manage/library/TracksTable.vue:95 #: front/src/components/manage/library/UploadsTable.vue:144 #: front/src/components/manage/moderation/AccountsTable.vue:88 -#: front/src/components/manage/moderation/DomainsTable.vue:74 +#: front/src/components/manage/moderation/DomainsTable.vue:85 #: front/src/components/manage/users/InvitationsTable.vue:76 -#: front/src/components/manage/users/UsersTable.vue:87 +#: front/src/components/manage/users/UsersTable.vue:88 #: front/src/views/content/libraries/FilesTable.vue:117 msgctxt "Content/*/Paragraph" msgid "Showing results %{ start }-%{ end } on %{ total }" msgstr "" -#: front/src/components/ShortcutsModal.vue:83 +#: front/src/components/ShortcutsModal.vue:140 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Shuffle queue" msgstr "" -#: front/src/components/audio/Player.vue:641 +#: front/src/components/audio/Player.vue:667 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Shuffle your queue" msgstr "" -#: front/src/components/auth/Signup.vue:97 +#: front/src/components/Home.vue:103 +#, fuzzy +msgctxt "*/Signup/Title" +msgid "Sign up" +msgstr "Erregistratu" + +#: front/src/views/auth/Signup.vue:37 #, fuzzy msgctxt "*/Signup/Title" msgid "Sign Up" msgstr "Erregistratu" +#: front/src/components/Home.vue:107 +msgctxt "Content/Home/Paragraph" +msgid "Sign up now to keep a track of your favorites, create playlists, discover new content and much more!" +msgstr "" + #: front/src/components/manage/users/UsersTable.vue:40 msgctxt "Content/Admin/Table.Label/Short, Noun (Value is a date)" msgid "Sign-up" msgstr "Erregistratu" -#: front/src/components/mixins/Translations.vue:57 -#: front/src/views/admin/moderation/AccountsDetail.vue:197 -#: front/src/components/mixins/Translations.vue:58 +#: front/src/components/mixins/Translations.vue:69 +#: front/src/views/admin/moderation/AccountsDetail.vue:198 +#: front/src/components/mixins/Translations.vue:70 #, fuzzy msgctxt "Content/Admin/Table.Label/Noun" msgid "Sign-up date" msgstr "Erregistratu" -#: front/src/components/manage/library/UploadsTable.vue:65 -#: front/src/views/admin/library/UploadDetail.vue:219 -msgctxt "Content/*/*/Noun" -msgid "Size" -msgstr "Tamaina" - #: front/src/components/library/FileUpload.vue:94 #: front/src/components/library/TrackDetail.vue:39 -#: front/src/components/mixins/Translations.vue:54 +#: front/src/components/manage/library/UploadsTable.vue:65 +#: front/src/components/mixins/Translations.vue:66 +#: front/src/views/admin/library/UploadDetail.vue:219 #: front/src/views/content/libraries/FilesTable.vue:61 -#: front/src/components/mixins/Translations.vue:55 -msgctxt "Content/Library/*/in MB" +#: front/src/components/mixins/Translations.vue:67 +msgctxt "Content/*/*/Noun" msgid "Size" msgstr "Tamaina" @@ -4069,7 +4474,7 @@ msgctxt "Content/Library/Label" msgid "Skipped files" msgstr "Saltatutako fitxategiak" -#: front/src/views/admin/moderation/DomainsDetail.vue:89 +#: front/src/views/admin/moderation/DomainsDetail.vue:126 msgctxt "Content/Moderation/Table.Label" msgid "Software" msgstr "" @@ -4084,88 +4489,64 @@ msgctxt "Content/*/Paragraph" msgid "Sorry, the page you asked for does not exist:" msgstr "" -#: front/src/components/Footer.vue:49 +#: front/src/components/Footer.vue:57 msgctxt "Footer/*/List item.Link" msgid "Source code" msgstr "Iturburu kodea" #: front/src/components/auth/Profile.vue:23 -#: front/src/components/manage/users/UsersTable.vue:70 +#: front/src/components/manage/users/UsersTable.vue:71 msgctxt "Content/Profile/User role" msgid "Staff member" msgstr "" -#: front/src/components/audio/PlayButton.vue:23 +#: front/src/components/audio/PlayButton.vue:27 #: src/components/radios/Button.vue:4 #, fuzzy msgctxt "*/Queue/Button.Label/Short, Verb" msgid "Start radio" msgstr "Instantziako irratiak" -#: front/src/views/admin/Settings.vue:86 -msgctxt "Content/Admin/Menu" +#: front/src/components/About.vue:170 src/components/Home.vue:53 +#: front/src/views/admin/Settings.vue:87 +msgctxt "Content/Home/Header" msgid "Statistics" msgstr "" -#: front/src/views/admin/moderation/AccountsDetail.vue:490 +#: front/src/views/admin/moderation/AccountsDetail.vue:510 msgctxt "Content/Moderation/Help text" -msgid "" -"Statistics are computed from known activity and content on your instance, " -"and do not reflect general activity for this account" +msgid "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this account" msgstr "" -#: front/src/views/admin/moderation/DomainsDetail.vue:371 +#: front/src/views/admin/moderation/DomainsDetail.vue:418 msgctxt "Content/Moderation/Help text" -msgid "" -"Statistics are computed from known activity and content on your instance, " -"and do not reflect general activity for this domain" +msgid "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this domain" msgstr "" -#: front/src/views/admin/library/AlbumDetail.vue:329 -#: front/src/views/admin/library/ArtistDetail.vue:328 -#: front/src/views/admin/library/LibraryDetail.vue:316 -#: front/src/views/admin/library/TrackDetail.vue:371 +#: front/src/views/admin/library/AlbumDetail.vue:346 +#: front/src/views/admin/library/ArtistDetail.vue:345 +#: front/src/views/admin/library/LibraryDetail.vue:356 +#: front/src/views/admin/library/TagDetail.vue:210 +#: front/src/views/admin/library/TrackDetail.vue:389 #: front/src/views/admin/library/UploadDetail.vue:335 msgctxt "Content/Moderation/Help text" -msgid "" -"Statistics are computed from known activity and content on your instance, " -"and do not reflect general activity for this object" -msgstr "" - -#: front/src/views/admin/moderation/DomainsDetail.vue:115 -msgctxt "Content/Moderation/Table.Label (Value is Error message)" -msgid "Status" +msgid "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" msgstr "" #: front/src/components/library/FileUpload.vue:95 -msgctxt "Content/Library/Table.Label (Value is Uploading/Uploaded/Error)" -msgid "Status" -msgstr "" - -#: front/src/views/content/libraries/Detail.vue:28 -msgctxt "Content/Library.Federation/Table.Label (Value is Approved/Rejected)" -msgid "Status" -msgstr "" - +#: front/src/components/manage/library/EditsCardList.vue:12 +#: front/src/components/manage/moderation/ReportCard.vue:57 #: front/src/components/manage/users/InvitationsTable.vue:17 #: front/src/components/manage/users/InvitationsTable.vue:39 -msgctxt "Content/Admin/*/Noun (Value is Used/Not used)" -msgid "Status" -msgstr "" - #: front/src/components/manage/users/UsersTable.vue:43 -msgctxt "Content/Admin/Table.Label/Noun (Value is Regular user/Admin)" -msgid "Status" -msgstr "" - -#: front/src/components/manage/library/EditsCardList.vue:12 -msgctxt "" -"Content/Search/Dropdown.Label (Value is All/Pending " -"review/Approved/Rejected)" +#: front/src/views/admin/moderation/DomainsDetail.vue:152 +#: front/src/views/admin/moderation/ReportsList.vue:14 +#: front/src/views/content/libraries/Detail.vue:28 +msgctxt "*/*/*" msgid "Status" msgstr "" -#: front/src/components/Sidebar.vue:174 src/components/radios/Button.vue:3 +#: front/src/components/Sidebar.vue:178 src/components/radios/Button.vue:3 #, fuzzy msgctxt "*/Player/Button.Label/Short, Verb" msgid "Stop radio" @@ -4176,7 +4557,7 @@ msgctxt "*/*/Button.Label/Verb" msgid "Submit" msgstr "" -#: front/src/components/library/EditForm.vue:98 +#: front/src/components/library/EditForm.vue:110 msgctxt "Content/Library/Button.Label/Verb" msgid "Submit and apply edit" msgstr "" @@ -4186,12 +4567,22 @@ msgctxt "Content/Library/Button.Label" msgid "Submit another edit" msgstr "" -#: front/src/components/library/EditForm.vue:99 +#: front/src/components/moderation/ReportModal.vue:64 +msgctxt "Popup/*/Button.Label" +msgid "Submit report" +msgstr "" + +#: front/src/components/library/EditForm.vue:111 msgctxt "Content/Library/Button.Label/Verb" msgid "Submit suggestion" msgstr "" -#: front/src/views/admin/Settings.vue:85 +#: front/src/components/manage/moderation/ReportCard.vue:17 +msgctxt "Content/Moderation/*" +msgid "Submitted by" +msgstr "" + +#: front/src/views/admin/Settings.vue:86 msgctxt "Content/Admin/Menu" msgid "Subsonic" msgstr "" @@ -4232,16 +4623,21 @@ msgctxt "Content/Library/Tab.Title/Short" msgid "Summary" msgstr "" -#: front/src/components/library/EditForm.vue:87 +#: front/src/components/library/EditForm.vue:99 msgctxt "*/*/*" msgid "Summary (optional)" msgstr "" -#: front/src/components/Footer.vue:39 +#: front/src/components/Footer.vue:47 msgctxt "Footer/*/Listitem.Link" msgid "Support forum" msgstr "" +#: front/src/views/Notifications.vue:10 +msgctxt "Content/Notifications/Header" +msgid "Support this Funkwhale pod" +msgstr "" + #: front/src/components/library/FileUpload.vue:85 msgctxt "Content/Library/Paragraph" msgid "Supported extensions: %{ extensions }" @@ -4252,24 +4648,47 @@ msgctxt "Content/Playlist/Paragraph" msgid "Syncing changes to server…" msgstr "" -#: front/src/components/audio/EmbedWizard.vue:25 +#: front/src/components/audio/SearchBar.vue:35 +msgctxt "*/*/*/Noun" +msgid "Tag" +msgstr "" + +#: front/src/views/admin/library/TagDetail.vue:61 +#, fuzzy +msgctxt "Content/Moderation/Title" +msgid "Tag data" +msgstr "Liburutegia" + +#: front/src/components/library/Albums.vue:23 +#: src/components/library/Artists.vue:15 +#: front/src/views/admin/library/Base.vue:23 +#: src/views/admin/library/TagsList.vue:24 front/src/edits.js:24 +#: src/edits.js:50 src/edits.js:91 src/entities.js:120 +msgctxt "*/*/*/Noun" +msgid "Tags" +msgstr "" + +#: front/src/components/mixins/Translations.vue:44 +#: front/src/components/mixins/Translations.vue:45 +#, fuzzy +msgctxt "Content/Moderation/Dropdown" +msgid "Takedown request" +msgstr "Eskaerak zain" + +#: front/src/components/About.vue:35 src/components/About.vue:61 +msgctxt "Content/About/Header" +msgid "Terms and privacy policy" +msgstr "" + +#: front/src/components/audio/EmbedWizard.vue:35 #: front/src/components/common/CopyInput.vue:3 msgctxt "Content/*/Paragraph" msgid "Text copied to clipboard!" msgstr "" -#: front/src/components/Home.vue:26 -msgctxt "Content/Home/Paragraph" -msgid "" -"That's simple: we loved Grooveshark and we want to build something even " -"better." -msgstr "" - -#: front/src/views/admin/library/AlbumDetail.vue:75 +#: front/src/views/admin/library/AlbumDetail.vue:81 msgctxt "Content/Moderation/Paragraph" -msgid "" -"The album will be removed, as well as associated uploads, tracks, favorites " -"and listening history. This action is irreversible." +msgid "The album will be removed, as well as associated uploads, tracks, favorites and listening history. This action is irreversible." msgstr "" #: front/src/components/auth/Authorize.vue:39 @@ -4277,14 +4696,12 @@ msgctxt "Content/Auth/Paragraph" msgid "The application is also requesting the following unknown permissions:" msgstr "" -#: front/src/views/admin/library/ArtistDetail.vue:74 +#: front/src/views/admin/library/ArtistDetail.vue:79 msgctxt "Content/Moderation/Paragraph" -msgid "" -"The artist will be removed, as well as associated uploads, tracks, albums, " -"favorites and listening history. This action is irreversible." +msgid "The artist will be removed, as well as associated uploads, tracks, albums, favorites and listening history. This action is irreversible." msgstr "" -#: front/src/components/Footer.vue:53 +#: front/src/components/Footer.vue:61 msgctxt "Footer/*/List item.Link" msgid "The funkwhale logo was kindly designed and provided by Francis Gading." msgstr "" @@ -4296,22 +4713,17 @@ msgstr "" #: front/src/views/content/libraries/Form.vue:34 msgctxt "Popup/Library/Paragraph" -msgid "" -"The library and all its tracks will be deleted. This can not be undone." +msgid "The library and all its tracks will be deleted. This can not be undone." msgstr "" #: front/src/views/admin/library/LibraryDetail.vue:61 msgctxt "Content/Moderation/Paragraph" -msgid "" -"The library will be removed, as well as associated uploads, and follows. " -"This action is irreversible." +msgid "The library will be removed, as well as associated uploads, and follows. This action is irreversible." msgstr "" #: front/src/components/library/ImportStatusModal.vue:140 msgctxt "Popup/Import/Error.Label" -msgid "" -"The metadata included in the file is invalid or some mandatory fields are " -"missing." +msgid "The metadata included in the file is invalid or some mandatory fields are missing." msgstr "" #: front/src/components/library/FileUpload.vue:38 @@ -4324,11 +4736,14 @@ msgctxt "Sidebar/Player/Error message.Paragraph" msgid "The next track will play automatically in a few seconds…" msgstr "" -#: front/src/components/Home.vue:116 -msgctxt "Content/Home/List item" -msgid "" -"The plaform is free and open-source, you can install it and modify it " -"without worries" +#: front/src/components/manage/moderation/NotesThread.vue:27 +msgctxt "Content/Moderation/Paragraph" +msgid "The note will be removed. This action is irreversible." +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:120 +msgctxt "Content/Moderation/Message" +msgid "The object associated with this report was deleted." msgstr "" #: front/src/components/playlists/Form.vue:14 @@ -4344,46 +4759,42 @@ msgstr "" #: front/src/components/federation/FetchButton.vue:13 msgctxt "Popup/*/Message.Content" -msgid "" -"The remote server answered, but returned data was unsupported by Funkwhale." +msgid "The remote server answered, but returned data was unsupported by Funkwhale." msgstr "" #: front/src/components/federation/FetchButton.vue:44 msgctxt "*/*/Error" -msgid "The remote server didn't answered fast enough" +msgid "The remote server didn't respond quickly enough" msgstr "" #: front/src/components/federation/FetchButton.vue:50 msgctxt "*/*/Error" -msgid "The return server returned invalid JSON or JSON-LD data" +msgid "The remote server returned invalid JSON or JSON-LD data" msgstr "" #: front/src/components/manage/library/AlbumsTable.vue:189 msgctxt "Popup/*/Paragraph" -msgid "" -"The selected albums will be removed, as well as associated tracks, uploads, " -"favorites and listening history. This action is irreversible." +msgid "The selected albums will be removed, as well as associated tracks, uploads, favorites and listening history. This action is irreversible." msgstr "" #: front/src/components/manage/library/ArtistsTable.vue:179 msgctxt "Popup/*/Paragraph" -msgid "" -"The selected artist will be removed, as well as associated uploads, tracks, " -"albums, favorites and listening history. This action is irreversible." +msgid "The selected artist will be removed, as well as associated uploads, tracks, albums, favorites and listening history. This action is irreversible." msgstr "" #: front/src/components/manage/library/LibrariesTable.vue:206 msgctxt "Popup/*/Paragraph" -msgid "" -"The selected library will be removed, as well as associated uploads and " -"follows. This action is irreversible." +msgid "The selected library will be removed, as well as associated uploads and follows. This action is irreversible." +msgstr "" + +#: front/src/components/manage/library/TagsTable.vue:180 +msgctxt "Popup/*/Paragraph" +msgid "The selected tag will be removed and unlinked with existing content, if any. This action is irreversible." msgstr "" #: front/src/components/manage/library/TracksTable.vue:189 msgctxt "Popup/*/Paragraph" -msgid "" -"The selected tracks will be removed, as well as associated uploads, " -"favorites and listening history. This action is irreversible." +msgid "The selected tracks will be removed, as well as associated uploads, favorites and listening history. This action is irreversible." msgstr "" #: front/src/components/manage/library/UploadsTable.vue:256 @@ -4403,8 +4814,12 @@ msgstr "" #: front/src/components/library/EditCard.vue:96 msgctxt "Popup/Library/Paragraph" -msgid "" -"The suggestion will be completely removed, this action is irreversible." +msgid "The suggestion will be completely removed, this action is irreversible." +msgstr "" + +#: front/src/views/admin/library/TagDetail.vue:44 +msgctxt "Content/Moderation/Paragraph" +msgid "The tag will be removed and unlinked from any existing entity. This action is irreversible." msgstr "" #: front/src/components/playlists/PlaylistModal.vue:34 @@ -4417,11 +4832,9 @@ msgctxt "Sidebar/Player/Error message.Title" msgid "The track cannot be loaded" msgstr "" -#: front/src/views/admin/library/TrackDetail.vue:74 +#: front/src/views/admin/library/TrackDetail.vue:80 msgctxt "Content/Moderation/Paragraph" -msgid "" -"The track will be removed, as well as associated uploads, favorites and " -"listening history. This action is irreversible." +msgid "The track will be removed, as well as associated uploads, favorites and listening history. This action is irreversible." msgstr "" #: front/src/views/admin/library/UploadDetail.vue:68 @@ -4454,21 +4867,35 @@ msgctxt "Content/Artist/Paragraph" msgid "This artist is present in the following libraries:" msgstr "" +#: front/src/components/manage/moderation/DomainsTable.vue:169 +msgctxt "Content/Moderation/Popup" +msgid "This domain is present in your allow-list" +msgstr "" + #: front/src/views/admin/moderation/AccountsDetail.vue:84 -#: front/src/views/admin/moderation/DomainsDetail.vue:48 +#: front/src/views/admin/moderation/DomainsDetail.vue:76 msgctxt "Content/Moderation/Card.Title" msgid "This domain is subject to specific moderation rules" msgstr "" +#: front/src/components/manage/moderation/InstancePolicyModal.vue:16 +msgctxt "Content/Moderation/Card.Title" +msgid "This entity is subject to specific moderation rules" +msgstr "" + #: front/src/views/content/Home.vue:9 msgctxt "Content/Library/Paragraph" msgid "This instance offers up to %{quota} of storage space for every user." msgstr "" +#: front/src/components/auth/Settings.vue:300 +msgctxt "Popup/Settings/Paragraph" +msgid "This is irreversible and will permanently remove your data from our servers. You will we immediatly logged out." +msgstr "" + #: front/src/components/auth/Settings.vue:165 msgctxt "Content/Settings/Paragraph" -msgid "" -"This is the list of applications that have access to your account data." +msgid "This is the list of applications that have access to your account data." msgstr "" #: front/src/components/auth/Settings.vue:218 @@ -4486,23 +4913,19 @@ msgctxt "Content/Library/Input.Placeholder" msgid "This library contains my personal music, I hope you like it." msgstr "" -#: front/src/views/content/remote/Card.vue:141 +#: front/src/views/content/remote/Card.vue:169 msgctxt "Content/Library/Card.Help text" -msgid "" -"This library is private and your approval from its owner is needed to access" -" its content" +msgid "This library is private and your approval from its owner is needed to access its content" msgstr "" -#: front/src/views/content/remote/Card.vue:142 +#: front/src/views/content/remote/Card.vue:170 msgctxt "Content/Library/Card.Help text" msgid "This library is public and you can access its content freely" msgstr "" #: front/src/components/common/ActionTable.vue:47 msgctxt "Modal/*/Paragraph" -msgid "" -"This may affect a lot of elements or have irreversible consequences, please " -"double check this is really what you want." +msgid "This may affect a lot of elements or have irreversible consequences, please double check this is really what you want." msgstr "" #: front/src/components/library/AlbumEdit.vue:8 @@ -4512,6 +4935,11 @@ msgctxt "Content/*/Message" msgid "This object is managed by another server, you cannot edit it." msgstr "" +#: front/src/components/Home.vue:87 +msgctxt "Content/Home/Paragraph" +msgid "This pod runs Funkwhale, a community-driven project that lets you listen and share music and audio within a decentralized, open network." +msgstr "" + #: front/src/components/library/FileUpload.vue:51 msgctxt "Content/Library/Paragraph" msgid "This reference will be used to group imported files together." @@ -4520,14 +4948,13 @@ msgstr "" #: front/src/components/mixins/Translations.vue:33 #: front/src/components/mixins/Translations.vue:34 msgctxt "Content/Library/Help text" -msgid "This track could not be processed, please it is tagged correctly" +msgid "This track could not be processed, please make sure it is tagged correctly" msgstr "" #: front/src/components/mixins/Translations.vue:29 #: front/src/components/mixins/Translations.vue:30 msgctxt "Content/Library/Help text" -msgid "" -"This track has been uploaded, but hasn't been processed by the server yet" +msgid "This track has been uploaded, but hasn't been processed by the server yet" msgstr "" #: front/src/components/mixins/Translations.vue:25 @@ -4536,7 +4963,7 @@ msgctxt "Content/Library/Help text" msgid "This track is already present in one of your libraries" msgstr "" -#: front/src/components/audio/PlayButton.vue:85 +#: front/src/components/audio/PlayButton.vue:103 msgctxt "*/Queue/Button/Title" msgid "This track is not available in any library you have access to" msgstr "" @@ -4546,7 +4973,7 @@ msgctxt "Content/Track/Paragraph" msgid "This track is present in the following libraries:" msgstr "" -#: front/src/views/playlists/Detail.vue:38 +#: front/src/views/playlists/Detail.vue:46 msgctxt "Popup/Playlist/Paragraph" msgid "This will completely delete this playlist and cannot be undone." msgstr "" @@ -4556,29 +4983,29 @@ msgctxt "Popup/Radio/Paragraph" msgid "This will completely delete this radio and cannot be undone." msgstr "" -#: front/src/components/auth/SubsonicTokenForm.vue:50 +#: front/src/components/auth/SubsonicTokenForm.vue:55 msgctxt "Popup/Settings/Paragraph" -msgid "" -"This will completely disable access to the Subsonic API using from account." +msgid "This will completely disable access to the Subsonic API using from account." msgstr "" -#: front/src/components/auth/SubsonicTokenForm.vue:35 +#: front/src/components/manage/moderation/ReportCard.vue:359 +msgctxt "Content/Moderation/Popup,Paragraph" +msgid "This will delete the object associated with this report and mark the report as resolved. The deletion is irreversible." +msgstr "" + +#: front/src/components/auth/SubsonicTokenForm.vue:40 msgctxt "Popup/Settings/Paragraph" -msgid "" -"This will log you out from existing devices that use the current password." +msgid "This will log you out from existing devices that use the current password." msgstr "" #: front/src/components/auth/Settings.vue:253 msgctxt "Popup/Settings/Paragraph" -msgid "" -"This will permanently delete the application and all the associated tokens." +msgid "This will permanently delete the application and all the associated tokens." msgstr "" #: front/src/components/auth/Settings.vue:194 msgctxt "Popup/Settings/Paragraph" -msgid "" -"This will prevent this application from accessing the service on your " -"behalf." +msgid "This will prevent this application from accessing the service on your behalf." msgstr "" #: front/src/components/playlists/Editor.vue:54 @@ -4586,43 +5013,44 @@ msgctxt "Popup/Playlist/Paragraph" msgid "This will remove all tracks from this playlist and cannot be undone." msgstr "" -#: front/src/views/admin/library/AlbumDetail.vue:99 -#: front/src/views/admin/library/TrackDetail.vue:98 src/edits.js:21 -#: src/edits.js:39 -msgctxt "*/*/*/Noun" -msgid "Title" -msgstr "" - #: front/src/components/audio/track/Table.vue:7 -#: front/src/views/content/libraries/FilesTable.vue:55 -msgctxt "Content/Track/*/Noun" -msgid "Title" -msgstr "" - #: front/src/components/manage/library/AlbumsTable.vue:39 #: front/src/components/manage/library/TracksTable.vue:39 -msgctxt "*/*/*" +#: front/src/views/admin/library/AlbumDetail.vue:105 +#: front/src/views/admin/library/TrackDetail.vue:104 +#: front/src/views/content/libraries/FilesTable.vue:55 src/edits.js:36 +#: front/src/edits.js:62 +msgctxt "*/*/*/Noun" msgid "Title" msgstr "" #: front/src/components/SetInstanceModal.vue:16 msgctxt "Popup/Instance/Paragraph" -msgid "" -"To continue, please select the Funkwhale instance you want to connect to. " -"Enter the address directly, or select one of the suggested choices." +msgid "To continue, please select the Funkwhale instance you want to connect to. Enter the address directly, or select one of the suggested choices." msgstr "" -#: front/src/components/ShortcutsModal.vue:79 +#: front/src/components/ShortcutsModal.vue:148 +#, fuzzy +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Toggle favorite" +msgstr "gogoko 1" + +#: front/src/components/ShortcutsModal.vue:132 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Toggle mute" +msgstr "" + +#: front/src/components/ShortcutsModal.vue:136 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Toggle queue looping" msgstr "" -#: front/src/views/admin/library/AlbumDetail.vue:222 -#: front/src/views/admin/library/ArtistDetail.vue:211 -#: front/src/views/admin/library/LibraryDetail.vue:200 -#: front/src/views/admin/library/TrackDetail.vue:274 -#: front/src/views/admin/moderation/AccountsDetail.vue:317 -#: front/src/views/admin/moderation/DomainsDetail.vue:225 +#: front/src/views/admin/library/AlbumDetail.vue:238 +#: front/src/views/admin/library/ArtistDetail.vue:226 +#: front/src/views/admin/library/LibraryDetail.vue:219 +#: front/src/views/admin/library/TrackDetail.vue:290 +#: front/src/views/admin/moderation/AccountsDetail.vue:329 +#: front/src/views/admin/moderation/DomainsDetail.vue:262 msgctxt "Content/Moderation/Table.Label" msgid "Total size" msgstr "" @@ -4632,21 +5060,19 @@ msgctxt "Content/Library/Card.Help text" msgid "Total size of the files in this library" msgstr "" -#: front/src/views/admin/moderation/DomainsDetail.vue:105 +#: front/src/views/admin/moderation/DomainsDetail.vue:142 #, fuzzy msgctxt "Content/*/*" msgid "Total users" msgstr "Ez da erabiltzen" -#: front/src/views/admin/library/UploadDetail.vue:199 -msgctxt "*/*/*" -msgid "Track" -msgstr "" - -#: front/src/components/audio/SearchBar.vue:27 -#: front/src/components/library/TrackBase.vue:173 +#: front/src/components/audio/SearchBar.vue:34 +#: front/src/components/library/TrackBase.vue:188 #: front/src/components/library/TrackDetail.vue:128 #: front/src/components/metadata/Search.vue:138 +#: src/components/mixins/Report.vue:28 +#: front/src/views/admin/library/UploadDetail.vue:199 +#: front/src/components/mixins/Report.vue:29 msgctxt "*/*/*/Noun" msgid "Track" msgstr "" @@ -4656,7 +5082,7 @@ msgctxt "Content/Library/Card/Short" msgid "Track #%{ id } - %{ name }" msgstr "" -#: front/src/views/admin/library/TrackDetail.vue:91 +#: front/src/views/admin/library/TrackDetail.vue:97 msgctxt "Content/Moderation/Title" msgid "Track data" msgstr "" @@ -4666,31 +5092,29 @@ msgctxt "Content/Track/Title/Noun" msgid "Track information" msgstr "" -#: front/src/components/mixins/Translations.vue:50 -#: front/src/components/mixins/Translations.vue:51 +#: front/src/components/mixins/Translations.vue:60 +#: front/src/components/mixins/Translations.vue:61 #, fuzzy msgctxt "Content/*/Dropdown/Noun" msgid "Track name" msgstr "Irratiaren izena" -#: front/src/components/instance/Stats.vue:54 #: front/src/components/library/AlbumDetail.vue:19 -#: front/src/components/playlists/PlaylistModal.vue:47 -#: front/src/views/admin/moderation/AccountsDetail.vue:362 -#: front/src/views/admin/moderation/DomainsDetail.vue:274 -#: front/src/views/content/Base.vue:8 src/views/content/libraries/Detail.vue:8 -#: front/src/views/playlists/Detail.vue:51 src/views/radios/Detail.vue:34 -msgctxt "*/*/*/Noun" -msgid "Tracks" -msgstr "" - +#: front/src/components/library/TagDetail.vue:36 #: front/src/components/manage/library/AlbumsTable.vue:42 #: front/src/components/manage/library/ArtistsTable.vue:42 -#: front/src/views/admin/library/AlbumDetail.vue:252 -#: front/src/views/admin/library/ArtistDetail.vue:251 +#: front/src/components/manage/library/TagsTable.vue:44 +#: front/src/components/playlists/PlaylistModal.vue:47 +#: front/src/views/admin/library/AlbumDetail.vue:268 +#: front/src/views/admin/library/ArtistDetail.vue:266 #: front/src/views/admin/library/Base.vue:14 -#: front/src/views/admin/library/LibraryDetail.vue:229 +#: front/src/views/admin/library/LibraryDetail.vue:248 +#: front/src/views/admin/library/TagDetail.vue:143 #: front/src/views/admin/library/TracksList.vue:24 +#: front/src/views/admin/moderation/AccountsDetail.vue:374 +#: front/src/views/admin/moderation/DomainsDetail.vue:311 +#: front/src/views/content/Base.vue:8 src/views/content/libraries/Detail.vue:8 +#: front/src/views/playlists/Detail.vue:76 src/views/radios/Detail.vue:34 msgctxt "*/*/*" msgid "Tracks" msgstr "" @@ -4701,18 +5125,6 @@ msgctxt "Content/Artist/Title" msgid "Tracks by this artist" msgstr "Artista honen albumak" -#: front/src/components/instance/Stats.vue:25 -#, fuzzy -msgctxt "Content/About/Paragraph/Unit" -msgid "Tracks favorited" -msgstr "gogoko 1" - -#: front/src/components/instance/Stats.vue:19 -#, fuzzy -msgctxt "Content/About/Paragraph/Unit" -msgid "tracks listened" -msgstr "Azken aldian entzuna" - #: front/src/components/library/radios/Filter.vue:44 #, fuzzy msgctxt "Popup/Radio/Title/Noun" @@ -4720,61 +5132,58 @@ msgid "Tracks matching filter" msgstr "abesti %{ count } dator bat iragazki konbinatuekin" #: front/src/components/library/TrackDetail.vue:57 +#: front/src/components/manage/moderation/ReportCard.vue:134 #: front/src/views/admin/library/UploadDetail.vue:250 +#: front/src/views/admin/moderation/AccountsDetail.vue:181 msgctxt "Content/Track/Table.Label/Noun" msgid "Type" msgstr "" -#: front/src/views/admin/moderation/AccountsDetail.vue:180 -msgctxt "Content/Moderation/Table.Label/Noun" -msgid "Type" -msgstr "" - #: front/src/components/manage/moderation/AccountsTable.vue:44 -#: front/src/components/manage/moderation/DomainsTable.vue:42 +#: front/src/components/manage/moderation/DomainsTable.vue:50 msgctxt "Content/Moderation/Table.Label/Short" msgid "Under moderation rule" msgstr "" -#: front/src/views/content/remote/Card.vue:109 -#: src/views/content/remote/Card.vue:114 +#: front/src/components/ShortcutsModal.vue:68 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Unfocus searchbar" +msgstr "" + +#: front/src/views/content/remote/Card.vue:122 +#: src/views/content/remote/Card.vue:127 #, fuzzy msgctxt "*/Library/Button.Label/Verb" msgid "Unfollow" msgstr "Jarraitu" -#: front/src/views/content/remote/Card.vue:110 +#: front/src/views/content/remote/Card.vue:123 #, fuzzy msgctxt "Popup/Library/Title" msgid "Unfollow this library?" msgstr "Liburutegi hau ezabatu?" -#: front/src/components/About.vue:17 -msgctxt "Content/About/Paragraph" -msgid "" -"Unfortunately, the owners of this instance did not yet take the time to " -"complete this page." -msgstr "" - #: front/src/components/federation/FetchButton.vue:54 #: front/src/components/federation/FetchButton.vue:55 +#: front/src/components/library/ImportStatusModal.vue:144 msgctxt "*/*/Error" -msgid "Unknowkn error" +msgid "Unknown error" msgstr "" -#: front/src/components/library/ImportStatusModal.vue:144 -msgctxt "Popup/Import/Error.Label" -msgid "Unkwown error" +#: front/src/components/audio/Player.vue:656 +msgctxt "Sidebar/Player/Icon.Tooltip/Verb" +msgid "Unmute" msgstr "" -#: front/src/components/Home.vue:37 -msgctxt "Content/Home/Title" -msgid "Unlimited music" +#: front/src/components/manage/moderation/ReportCard.vue:225 +msgctxt "Content/*/Button.Label" +msgid "Unresolve" msgstr "" -#: front/src/components/audio/Player.vue:630 -msgctxt "Sidebar/Player/Icon.Tooltip/Verb" -msgid "Unmute" +#: front/src/components/manage/moderation/ReportCard.vue:67 +#: front/src/views/admin/moderation/ReportsList.vue:23 +msgctxt "Content/*/*/Short" +msgid "Unresolved" msgstr "" #: front/src/components/manage/moderation/InstancePolicyForm.vue:57 @@ -4847,9 +5256,7 @@ msgstr "Inportazio data" #: front/src/components/library/FileUpload.vue:258 msgctxt "Content/Library/Help text" -msgid "" -"Upload denied, ensure the file is not too big and that you have not reached " -"your quota" +msgid "Upload denied, ensure the file is not too big and that you have not reached your quota" msgstr "" #: front/src/components/library/ImportStatusModal.vue:8 @@ -4859,9 +5266,7 @@ msgstr "" #: front/src/views/content/Home.vue:7 msgctxt "Content/Library/Paragraph" -msgid "" -"Upload music files (MP3, OGG, FLAC, etc.) from your personal library " -"directly from your browser to enjoy them here." +msgid "Upload music files (MP3, OGG, FLAC, etc.) from your personal library directly from your browser to enjoy them here." msgstr "" #: front/src/components/library/FileUpload.vue:30 @@ -4869,10 +5274,12 @@ msgctxt "Content/Library/Title/Verb" msgid "Upload new tracks" msgstr "" -#: front/src/views/admin/moderation/AccountsDetail.vue:298 -msgctxt "Content/Moderation/Table.Label/Noun" +#: front/src/components/About.vue:99 +#: front/src/views/admin/moderation/AccountsDetail.vue:309 +#, fuzzy +msgctxt "*/*/*" msgid "Upload quota" -msgstr "" +msgstr "Inportazio data" #: front/src/components/library/FileUpload.vue:267 msgctxt "Content/Library/Help text" @@ -4881,9 +5288,7 @@ msgstr "" #: front/src/components/library/ImportStatusModal.vue:14 msgctxt "Popup/Import/Message" -msgid "" -"Upload was skipped because a similar one is already available in one of your" -" libraries." +msgid "Upload was skipped because a similar one is already available in one of your libraries." msgstr "" #: front/src/components/library/ImportStatusModal.vue:11 @@ -4906,35 +5311,25 @@ msgctxt "Content/Library/Table" msgid "Uploading…" msgstr "" +#: front/src/components/manage/library/LibrariesTable.vue:52 +#: front/src/components/manage/moderation/AccountsTable.vue:41 +#: front/src/components/mixins/Translations.vue:75 +#: front/src/views/admin/library/AlbumDetail.vue:258 +#: front/src/views/admin/library/ArtistDetail.vue:246 #: front/src/views/admin/library/Base.vue:20 +#: front/src/views/admin/library/LibraryDetail.vue:258 +#: front/src/views/admin/library/TrackDetail.vue:310 #: front/src/views/admin/library/UploadsList.vue:24 +#: front/src/views/admin/moderation/AccountsDetail.vue:349 +#: front/src/views/admin/moderation/DomainsDetail.vue:281 +#: front/src/components/mixins/Translations.vue:76 msgctxt "*/*/*" msgid "Uploads" msgstr "" -#: front/src/components/manage/moderation/AccountsTable.vue:41 -#: front/src/components/mixins/Translations.vue:63 -#: front/src/views/admin/library/AlbumDetail.vue:242 -#: front/src/views/admin/library/ArtistDetail.vue:231 -#: front/src/views/admin/library/LibraryDetail.vue:239 -#: front/src/views/admin/library/TrackDetail.vue:294 -#: front/src/views/admin/moderation/AccountsDetail.vue:337 -#: front/src/views/admin/moderation/DomainsDetail.vue:244 -#: front/src/components/mixins/Translations.vue:64 -msgctxt "Content/Moderation/Table.Label/Noun" -msgid "Uploads" -msgstr "" - -#: front/src/components/manage/library/LibrariesTable.vue:52 -msgctxt "Content/*/*/Noun" -msgid "Uploads" -msgstr "" - #: front/src/components/auth/ApplicationForm.vue:16 msgctxt "Content/Applications/Help Text" -msgid "" -"Use \"urn:ietf:wg:oauth:2.0:oob\" as a redirect URI if your application is " -"not served on the web." +msgid "Use \"urn:ietf:wg:oauth:2.0:oob\" as a redirect URI if your application is not served on the web." msgstr "" #: front/src/components/Footer.vue:16 @@ -4943,18 +5338,29 @@ msgctxt "Footer/*/List item.Link" msgid "Use another instance" msgstr "Zure instantzia hautatu" +#: front/src/components/Home.vue:146 +msgctxt "Content/Home/Link" +msgid "Use Funkwhale on other devices with our apps" +msgstr "" + +#: front/src/components/moderation/ReportModal.vue:44 +msgctxt "*/*/Field,Help" +msgid "Use this field to provide additional context to the moderator that will handle your report." +msgstr "" + #: front/src/views/auth/PasswordReset.vue:12 msgctxt "Content/Signup/Paragraph" -msgid "" -"Use this form to request a password reset. We will send an email to the " -"given address with instructions to reset your password." +msgid "Use this form to request a password reset. We will send an email to the given address with instructions to reset your password." +msgstr "" + +#: front/src/components/moderation/ReportModal.vue:18 +msgctxt "*/Moderation/Popup,Paragraph" +msgid "Use this form to submit a report to our moderation team." msgstr "" #: front/src/components/manage/moderation/InstancePolicyForm.vue:111 msgctxt "Content/Moderation/Help text" -msgid "" -"Use this setting to temporarily enable/disable the policy without completely" -" removing it." +msgid "Use this setting to temporarily enable/disable the policy without completely removing it." msgstr "" #: front/src/components/manage/users/InvitationsTable.vue:49 @@ -4962,16 +5368,27 @@ msgctxt "Content/Admin/Table" msgid "Used" msgstr "" +#: front/src/components/Home.vue:125 +msgctxt "Content/Home/Header" +msgid "Useful links" +msgstr "" + #: front/src/views/content/libraries/Detail.vue:26 msgctxt "Content/Library/Table.Label" msgid "User" msgstr "" -#: front/src/components/instance/Stats.vue:5 +#: front/src/components/Home.vue:154 #, fuzzy -msgctxt "Content/About/Title/Noun" -msgid "User activity" -msgstr "Azken jarduera" +msgctxt "Content/Home/Link" +msgid "User guides" +msgstr "Nire liburutegiak" + +#: front/src/views/admin/Settings.vue:88 +#, fuzzy +msgctxt "Content/Admin/Menu" +msgid "User Interface" +msgstr "Iragazki izena" #: front/src/components/library/AlbumDetail.vue:26 #: front/src/components/library/ArtistDetail.vue:39 @@ -4987,37 +5404,37 @@ msgctxt "Content/Radio/Title" msgid "User radios" msgstr "Instantziako irratiak" -#: front/src/components/auth/Signup.vue:19 +#: front/src/components/auth/SignupForm.vue:15 #: front/src/components/manage/users/UsersTable.vue:37 -#: front/src/components/mixins/Translations.vue:59 +#: front/src/components/mixins/Translations.vue:71 #: front/src/views/admin/moderation/AccountsDetail.vue:114 -#: front/src/components/mixins/Translations.vue:60 +#: front/src/components/mixins/Translations.vue:72 #, fuzzy msgctxt "Content/*/*" msgid "Username" msgstr "Iragazki izena" -#: front/src/components/auth/Login.vue:15 +#: front/src/components/auth/LoginForm.vue:11 #, fuzzy msgctxt "Content/Login/Input.Label/Noun" msgid "Username or email" msgstr "E-maila baieztatu" -#: front/src/components/instance/Stats.vue:13 -msgctxt "Content/About/Paragraph/Unit" -msgid "users" -msgstr "" - -#: front/src/components/Sidebar.vue:102 -#: front/src/components/manage/moderation/DomainsTable.vue:39 -#: front/src/components/mixins/Translations.vue:61 +#: front/src/components/Sidebar.vue:106 +#: front/src/components/manage/moderation/DomainsTable.vue:47 +#: front/src/components/mixins/Translations.vue:73 #: src/views/admin/Settings.vue:81 front/src/views/admin/users/Base.vue:5 #: src/views/admin/users/UsersList.vue:21 -#: front/src/components/mixins/Translations.vue:62 +#: front/src/components/mixins/Translations.vue:74 msgctxt "*/*/*/Noun" msgid "Users" msgstr "" +#: front/src/components/Home.vue:110 +msgctxt "Content/Home/Paragraph" +msgid "Users on this pod also get %{ quota } of free storage to upload their own content!" +msgstr "" + #: front/src/components/Footer.vue:29 #, fuzzy msgctxt "Footer/*/Title" @@ -5038,47 +5455,60 @@ msgctxt "Content/Library/Link/Verb" msgid "View files" msgstr "Saltatutako fitxategiak" -#: front/src/components/library/AlbumBase.vue:81 -#: front/src/components/library/ArtistBase.vue:92 -#: front/src/components/library/TrackBase.vue:100 -#: front/src/views/admin/library/AlbumDetail.vue:42 -#: front/src/views/admin/library/ArtistDetail.vue:41 +#: front/src/components/library/AlbumBase.vue:95 +#: front/src/components/library/ArtistBase.vue:107 +#: front/src/components/library/TrackBase.vue:111 +#: front/src/views/admin/library/AlbumDetail.vue:48 +#: front/src/views/admin/library/ArtistDetail.vue:46 #: front/src/views/admin/library/LibraryDetail.vue:34 #: front/src/views/admin/library/LibraryDetail.vue:45 -#: front/src/views/admin/library/TrackDetail.vue:41 +#: front/src/views/admin/library/TagDetail.vue:32 +#: front/src/views/admin/library/TrackDetail.vue:47 #: front/src/views/admin/library/UploadDetail.vue:35 #: front/src/views/admin/library/UploadDetail.vue:46 #: front/src/views/admin/moderation/AccountsDetail.vue:37 #: front/src/views/admin/moderation/AccountsDetail.vue:45 +#: front/src/views/admin/moderation/DomainsDetail.vue:30 msgctxt "Content/Moderation/Link/Verb" msgid "View in Django's admin" msgstr "" -#: front/src/components/library/AlbumBase.vue:61 -#: front/src/components/library/ArtistBase.vue:72 -#: front/src/components/library/TrackBase.vue:80 +#: front/src/components/Home.vue:169 +msgctxt "Content/Home/Link" +msgid "View more…" +msgstr "" + +#: front/src/components/library/AlbumBase.vue:62 +#: front/src/components/library/ArtistBase.vue:73 +#: front/src/components/library/TrackBase.vue:78 #: front/src/components/metadata/ArtistCard.vue:49 #: front/src/components/metadata/ReleaseCard.vue:53 msgctxt "Content/*/*/Clickable, Verb" msgid "View on MusicBrainz" msgstr "" +#: front/src/components/manage/moderation/ReportCard.vue:124 +msgctxt "Content/Moderation/Link" +msgid "View public page" +msgstr "" + #: front/src/components/manage/library/LibrariesTable.vue:11 #: front/src/components/manage/library/LibrariesTable.vue:51 #: front/src/components/manage/library/UploadsTable.vue:11 #: front/src/components/manage/library/UploadsTable.vue:63 #: front/src/views/admin/library/LibraryDetail.vue:94 #: front/src/views/admin/library/UploadDetail.vue:101 +#: front/src/views/content/libraries/Form.vue:18 #, fuzzy msgctxt "*/*/*" msgid "Visibility" msgstr "Zerrenda ikuspena" -#: front/src/views/content/libraries/Form.vue:18 +#: front/src/components/Home.vue:91 #, fuzzy -msgctxt "Content/Library/Dropdown.Label" -msgid "Visibility" -msgstr "Zerrenda ikuspena" +msgctxt "Content/Home/Link" +msgid "Visit funkwhale.audio" +msgstr "Funkwhale-ri buruz" #: front/src/components/library/AlbumDetail.vue:4 msgctxt "Content/Album/" @@ -5090,7 +5520,13 @@ msgctxt "Popup/*/Loading.Title" msgid "Waiting for result…" msgstr "" -#: front/src/components/auth/Login.vue:7 +#: front/src/components/auth/Settings.vue:285 +#, fuzzy +msgctxt "Content/Settings/Error message.Title" +msgid "We cannot delete your account" +msgstr "Sortu nire kontua" + +#: front/src/components/auth/LoginForm.vue:3 msgctxt "Content/Login/Error message.Title" msgid "We cannot log you in" msgstr "" @@ -5100,9 +5536,9 @@ msgctxt "Content/*/Error message.Title" msgid "We cannot save your changes" msgstr "" -#: front/src/components/Home.vue:122 -msgctxt "Content/Home/List item" -msgid "We do not track you or bother you with ads" +#: front/src/views/Notifications.vue:39 +msgctxt "Content/Notifications/Paragraph" +msgid "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!" msgstr "" #: front/src/components/library/FileUpload.vue:39 @@ -5110,34 +5546,27 @@ msgctxt "Content/Library/Link" msgid "We recommend using Picard for that purpose." msgstr "" -#: front/src/components/Home.vue:7 -msgctxt "Content/Home/Title" -msgid "We think listening to music should be simple." +#: front/src/components/moderation/ReportModal.vue:35 +msgctxt "*/*/Field,Help" +msgid "We'll use this email if we need to contact you regarding this report." msgstr "" -#: front/src/components/Home.vue:148 +#: front/src/components/Home.vue:207 msgctxt "Head/Home/Title" msgid "Welcome" msgstr "" #: front/src/components/Home.vue:5 -#, fuzzy -msgctxt "Content/Home/Title/Verb" -msgid "Welcome on Funkwhale" -msgstr "Funkwhale-ri buruz" - -#: front/src/components/Home.vue:24 -#, fuzzy -msgctxt "Content/Home/Title" -msgid "Why funkwhale?" -msgstr "Funkwhale-ri buruz" +msgctxt "Content/Home/Header" +msgid "Welcome to %{ podName }!" +msgstr "" -#: front/src/components/audio/EmbedWizard.vue:13 +#: front/src/components/audio/EmbedWizard.vue:23 msgctxt "Popup/Embed/Input.Label" msgid "Widget height" msgstr "" -#: front/src/components/audio/EmbedWizard.vue:6 +#: front/src/components/audio/EmbedWizard.vue:16 msgctxt "Popup/Embed/Input.Label" msgid "Widget width" msgstr "" @@ -5157,9 +5586,11 @@ msgctxt "Content/OAuth Scopes/Help Text" msgid "Write-only access to user data" msgstr "" -#: front/src/components/Sidebar.vue:129 +#: front/src/components/Sidebar.vue:133 #: front/src/components/manage/moderation/AccountsTable.vue:72 -#: front/src/components/manage/moderation/DomainsTable.vue:58 +#: front/src/components/manage/moderation/DomainsTable.vue:12 +#: front/src/components/manage/moderation/DomainsTable.vue:69 +#: front/src/views/admin/moderation/DomainsDetail.vue:109 msgctxt "*/*/*" msgid "Yes" msgstr "" @@ -5171,25 +5602,17 @@ msgstr "" #: front/src/views/content/libraries/Form.vue:19 msgctxt "Content/Library/Paragraph" -msgid "" -"You are able to share your library with other people, regardless of its " -"visibility." +msgid "You are able to share your library with other people, regardless of its visibility." msgstr "" #: front/src/components/library/FileUpload.vue:32 msgctxt "Content/Library/Paragraph" -msgid "" -"You are about to upload music to your library. Before proceeding, please " -"ensure that:" +msgid "You are about to upload music to your library. Before proceeding, please ensure that:" msgstr "" #: front/src/components/SetInstanceModal.vue:12 msgctxt "Popup/Login/Paragraph" -msgid "" -"You are currently connected to <a href=\"%{ url }\" target=\"_blank\">%{ " -"hostname } <i class=\"external icon\"/></a>. If you continue, you will " -"be disconnected from your current instance and all your local data will be " -"deleted." +msgid "You are currently connected to <a href=\"%{ url }\" target=\"_blank\">%{ hostname } <i class=\"external icon\"/></a>. If you continue, you will be disconnected from your current instance and all your local data will be deleted." msgstr "" #: front/src/components/library/ArtistDetail.vue:6 @@ -5205,9 +5628,7 @@ msgstr "%{ username } moduan sartuta" #: front/src/components/library/FileUpload.vue:35 msgctxt "Content/Library/List item" -msgid "" -"You are not uploading copyrighted content in a public library, otherwise you" -" may be infringing the law" +msgid "You are not uploading copyrighted content in a public library, otherwise you may be infringing the law" msgstr "" #: front/src/components/SetInstanceModal.vue:98 @@ -5217,23 +5638,12 @@ msgstr "" #: front/src/views/content/Home.vue:17 msgctxt "Content/Library/Paragraph" -msgid "" -"You can follow libraries from other users to get access to new music. Public" -" libraries can be followed immediatly, while following a private library " -"requires approval from its owner." -msgstr "" - -#: front/src/components/Home.vue:128 -msgctxt "Content/Home/List item" -msgid "" -"You can invite friends and family to your instance so they can enjoy your " -"music" +msgid "You can 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." msgstr "" #: front/src/components/moderation/FilterModal.vue:31 msgctxt "Popup/Moderation/Paragraph" -msgid "" -"You can manage and update your filters anytime from your account settings." +msgid "You can manage and update your filters any time from your account settings." msgstr "" #: front/src/views/auth/EmailConfirm.vue:24 @@ -5241,18 +5651,19 @@ msgctxt "Content/Signup/Paragraph" msgid "You can now use the service without limitations." msgstr "" +#: front/src/components/auth/Settings.vue:278 +msgctxt "Content/Settings/Paragraph'" +msgid "You can permanently and irreversibly delete your account and all the associated data using the form below. You will be asked for confirmation." +msgstr "" + #: front/src/components/library/radios/Builder.vue:7 msgctxt "Content/Radio/Paragraph" -msgid "" -"You can use this interface to build your own custom radio, which will play " -"tracks according to your criteria." +msgid "You can use this interface to build your own custom radio, which will play tracks according to your criteria." msgstr "" #: front/src/components/auth/SubsonicTokenForm.vue:7 msgctxt "Content/Settings/Paragraph" -msgid "" -"You can use those to enjoy your playlist and music in offline mode, on your " -"smartphone or tablet, for instance." +msgid "You can use those to enjoy your playlist and music in offline mode, on your smartphone or tablet, for instance." msgstr "" #: front/src/components/auth/Settings.vue:202 @@ -5270,19 +5681,17 @@ msgctxt "Content/Moderation/Card.Title" msgid "You don't have any rule in place for this account." msgstr "" -#: front/src/views/admin/moderation/DomainsDetail.vue:39 +#: front/src/views/admin/moderation/DomainsDetail.vue:67 msgctxt "Content/Moderation/Card.Title" msgid "You don't have any rule in place for this domain." msgstr "" #: front/src/components/library/EditForm.vue:52 msgctxt "Content/Library/Paragraph" -msgid "" -"You don't have the permission to edit this object, but you can suggest " -"changes. Once submitted, suggestions will be reviewed before approval." +msgid "You don't have the permission to edit this object, but you can suggest changes. Once submitted, suggestions will be reviewed before approval." msgstr "" -#: front/src/components/Sidebar.vue:171 +#: front/src/components/Sidebar.vue:175 msgctxt "Sidebar/Player/Title" msgid "You have a radio playing" msgstr "" @@ -5294,8 +5703,7 @@ msgstr "" #: front/src/components/auth/Settings.vue:100 msgctxt "Popup/Settings/List item" -msgid "" -"You will be logged out from this session and have to log in with the new one" +msgid "You will be logged out from this session and have to log in with the new one" msgstr "" #: front/src/components/auth/Authorize.vue:51 @@ -5310,23 +5718,24 @@ msgstr "" #: front/src/components/auth/Settings.vue:71 msgctxt "Content/Settings/Paragraph" -msgid "" -"You will have to update your password on your clients that use this " -"password." +msgid "You will have to update your password on your clients that use this password." msgstr "" #: front/src/components/moderation/FilterModal.vue:20 msgctxt "Popup/Moderation/Paragraph" -msgid "" -"You will not see tracks, albums and user activity linked to this artist " -"anymore:" +msgid "You will not see tracks, albums and user activity linked to this artist any more:" msgstr "" -#: front/src/components/auth/Signup.vue:13 +#: front/src/components/auth/SignupForm.vue:9 msgctxt "Content/Signup/Form/Paragraph" msgid "Your account cannot be created." msgstr "" +#: front/src/components/auth/Settings.vue:281 +msgctxt "Content/Settings/Paragraph'" +msgid "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." +msgstr "" + #: front/src/components/auth/Settings.vue:215 #, fuzzy msgctxt "Content/Settings/Title/Noun" @@ -5338,6 +5747,11 @@ msgctxt "Content/Settings/Error message.Title" msgid "Your avatar cannot be saved" msgstr "" +#: front/src/components/auth/Settings.vue:527 +msgctxt "*/Auth/Message" +msgid "Your deletion request was submitted, your account and content will be deleted shortly" +msgstr "" + #: front/src/components/library/EditForm.vue:3 msgctxt "Content/Library/Paragraph" msgid "Your edit was successfully submitted." @@ -5349,12 +5763,12 @@ msgctxt "Head/Favorites/Title" msgid "Your Favorites" msgstr "Gogokoak" -#: front/src/components/Home.vue:109 -msgctxt "Content/Home/Title" -msgid "Your music, your way" +#: front/src/views/Notifications.vue:5 +msgctxt "Content/Notifications/Title" +msgid "Your messages" msgstr "" -#: front/src/views/Notifications.vue:4 +#: front/src/views/Notifications.vue:69 #, fuzzy msgctxt "Content/Notifications/Title" msgid "Your notifications" @@ -5374,41 +5788,38 @@ msgstr "Pasahitza arrakastaz eguneratu da" #: front/src/components/auth/Settings.vue:14 #, fuzzy msgctxt "Content/Settings/Error message.Title" -msgid "Your settings can't be updateds" +msgid "Your settings can't be updated" msgstr "Ezarpenak eguneratuta" #: front/src/components/auth/Settings.vue:101 msgctxt "Popup/Settings/List item" -msgid "" -"Your Subsonic password will be changed to a new, random one, logging you out" -" from devices that used the old Subsonic password" +msgid "Your Subsonic password will be changed to a new, random one, logging you out from devices that used the old Subsonic password" msgstr "" -#: front/src/edits.js:47 -#, fuzzy -msgctxt "*/*/*/Short, Noun" -msgid "Position" -msgstr "Deskribapena" +#: front/src/entities.js:126 +msgctxt "*/*/*/Noun" +msgid "MusicBrainz ID" +msgstr "" -#: front/src/edits.js:54 -#, fuzzy -msgctxt "Content/Track/*/Noun" -msgid "Copyright" -msgstr "Kopiatu" +#: front/src/main.js:110 +msgctxt "*/Error/Paragraph" +msgid "You sent too many requests and have been rate limited, please try again in %{ delay }" +msgstr "" + +#: front/src/main.js:113 +msgctxt "*/Error/Paragraph" +msgid "You sent too many requests and have been rate limited, please try again later" +msgstr "" -#: front/src/components/library/AlbumBase.vue:183 +#: front/src/components/library/AlbumBase.vue:208 #, fuzzy msgctxt "Content/Album/Header.Title" -msgid "" -"Album containing %{ count } track, by <a class=\"internal\" href=\"%{ " -"artistUrl }\">%{ artist }</a>" -msgid_plural "" -"Album containing %{ count } tracks, by <a class=\"internal\" href=\"%{ " -"artistUrl }\">%{ artist }</a>" +msgid "Album containing %{ count } track, by <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" +msgid_plural "Album containing %{ count } tracks, by <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" msgstr[0] "Albumak abesti %{ count } du. Artista: %{ artist }" msgstr[1] "Albumak %{ count } abesti ditu. Artista: %{ artist }" -#: front/src/components/audio/PlayButton.vue:220 +#: front/src/components/audio/PlayButton.vue:246 msgctxt "*/Queue/Message" msgid "%{ count } track was added to your queue" msgid_plural "%{ count } tracks were added to your queue" diff --git a/front/locales/fr_FR/LC_MESSAGES/app.po b/front/locales/fr_FR/LC_MESSAGES/app.po index bb9db8d34749fec1b5e959ac26a00dc9b5d90816..c5b9359d6f052f1769a989b41bd7ad662b18e3d1 100644 --- a/front/locales/fr_FR/LC_MESSAGES/app.po +++ b/front/locales/fr_FR/LC_MESSAGES/app.po @@ -3,16 +3,17 @@ msgid "" msgstr "" "Project-Id-Version: French (Funkwhale)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-05-16 10:35+0200\n" -"PO-Revision-Date: 2019-05-16 07:47+0000\n" -"Last-Translator: Pierrick <contact@pierrick.io>\n" -"Language-Team: French <https://translate.funkwhale.audio/projects/funkwhale/front/fr/>\n" +"POT-Creation-Date: 2019-10-01 15:15+0200\n" +"PO-Revision-Date: 2019-10-03 17:13+0000\n" +"Last-Translator: Mélanie Chauvel <perso@hack-libre.org>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/funkwhale/" +"front/fr/>\n" "Language: fr_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 3.2.2\n" +"X-Generator: Weblate 3.7\n" #: front/src/components/playlists/PlaylistModal.vue:9 msgctxt "Popup/Playlist/Paragraph" @@ -32,7 +33,49 @@ msgstr "(vide)" #: front/src/components/auth/Authorize.vue:16 msgctxt "Content/Auth/Title" msgid "%{ app } wants to access your Funkwhale account" -msgstr "%{ app } Veut accéder à votre compte funkwhale" +msgstr "%{ app } veut accéder à votre compte Funkwhale" + +#: front/src/components/About.vue:173 src/components/Home.vue:56 +msgctxt "Content/Home/Stat" +msgid "%{ count } active user" +msgid_plural "%{ count } active users" +msgstr[0] "%{ count } compte actif" +msgstr[1] "%{ count } comptes actifs" + +#: front/src/components/About.vue:182 +msgctxt "Content/Home/Stat" +msgid "%{ count } albums" +msgid_plural "%{ count } albums" +msgstr[0] "%{ count } album" +msgstr[1] "%{ count } albums" + +#: front/src/components/About.vue:152 +msgctxt "*/*/*" +msgid "%{ count } allowed domains" +msgid_plural "%{ count } allowed domains" +msgstr[0] "%{ count } domaine autorisé" +msgstr[1] "%{ count } domaines autorisés" + +#: front/src/components/About.vue:179 +msgctxt "Content/Home/Stat" +msgid "%{ count } artists" +msgid_plural "%{ count } artists" +msgstr[0] "%{ count } artiste" +msgstr[1] "%{ count } artistes" + +#: front/src/components/About.vue:176 src/components/Home.vue:59 +msgctxt "Content/Home/Stat" +msgid "%{ count } hour of music" +msgid_plural "%{ count } hours of music" +msgstr[0] "%{ count } heure de musique" +msgstr[1] "%{ count } heures de musique" + +#: front/src/components/About.vue:188 +msgctxt "Content/Home/Stat" +msgid "%{ count } listenings" +msgid_plural "%{ count } listenings" +msgstr[0] "%{ count } écoute" +msgstr[1] "%{ count } écoutes" #: front/src/components/common/ActionTable.vue:68 msgctxt "Content/*/Paragraph" @@ -41,9 +84,9 @@ msgid_plural "%{ count } on %{ total } selected" msgstr[0] "%{ count } sur %{ total } élément sélectionné" msgstr[1] "%{ count } sur %{ total } éléments sélectionnés" -#: front/src/components/Sidebar.vue:121 src/components/audio/album/Card.vue:52 +#: front/src/components/Sidebar.vue:125 src/components/audio/album/Card.vue:52 #: front/src/views/content/libraries/Card.vue:40 -#: src/views/content/remote/Card.vue:30 +#: src/views/content/remote/Card.vue:43 msgctxt "*/*/*" msgid "%{ count } track" msgid_plural "%{ count } tracks" @@ -64,7 +107,14 @@ msgid_plural "%{ count } tracks matching combined filters" msgstr[0] "%{ count } piste correspondante aux filtres sélectionnés" msgstr[1] "%{ count } pistes correspondantes aux filtres sélectionnés" -#: front/src/components/playlists/Card.vue:18 +#: front/src/components/About.vue:185 +msgctxt "Content/Home/Stat" +msgid "%{ count } tracks" +msgid_plural "%{ count } tracks" +msgstr[0] "%{ count } piste" +msgstr[1] "%{ count } pistes" + +#: front/src/components/playlists/Card.vue:28 msgctxt "Content/*/Card/List item" msgid "%{ count} track" msgid_plural "%{ count } tracks" @@ -89,8 +139,7 @@ msgstr "%{ minutes } min" #: front/src/components/notifications/NotificationRow.vue:40 msgctxt "Content/Notifications/Paragraph" msgid "%{ username } accepted your follow on library \"%{ library }\"" -msgstr "" -"%{ username } a accepté votre suivi de la bibliothèque « %{ library } »" +msgstr "%{ username } a accepté votre suivi de la bibliothèque « %{ library } »" #: front/src/components/notifications/NotificationRow.vue:39 msgctxt "Content/Notifications/Paragraph" @@ -109,12 +158,10 @@ msgstr "Profil de %{ username }" #: front/src/components/playlists/PlaylistModal.vue:21 msgctxt "Popup/Playlist/Paragraph" -msgid "" -"<strong>%{ track }</strong> is already in <strong>%{ playlist }</strong>." -msgstr "" -"<strong>%{ track }</strong> est déjà dans <strong>%{ playlist }</strong>." +msgid "<strong>%{ track }</strong> is already in <strong>%{ playlist }</strong>." +msgstr "<strong>%{ track }</strong> est déjà dans <strong>%{ playlist }</strong>." -#: front/src/components/audio/artist/Card.vue:41 +#: front/src/components/audio/artist/Card.vue:11 msgctxt "Content/Artist/Card" msgid "1 album" msgid_plural "%{ count } albums" @@ -128,32 +175,49 @@ msgid_plural "%{ count } favorites" msgstr[0] "1 favori" msgstr[1] "%{ count } favoris" -#: front/src/components/Home.vue:64 -msgctxt "Content/Home/Title" -msgid "A clean library" -msgstr "Une bibliothèque propre" +#: front/src/components/audio/artist/Card.vue:15 +msgctxt "Content/Artist/Card" +msgid "1 track" +msgid_plural "%{ count } tracks" +msgstr[0] "1 piste" +msgstr[1] "%{ count } pistes" + +#: front/src/views/Notifications.vue:21 src/views/Notifications.vue:55 +msgctxt "*/*/*" +msgid "30 days" +msgstr "30 jours" + +#: front/src/views/Notifications.vue:22 src/views/Notifications.vue:56 +msgctxt "*/*/*" +msgid "60 days" +msgstr "60 jours" + +#: front/src/views/Notifications.vue:23 src/views/Notifications.vue:57 +msgctxt "*/*/*" +msgid "90 days" +msgstr "90 jours" #: front/src/components/library/FileUpload.vue:264 msgctxt "Content/Library/Help text" -msgid "A network error occured while uploading this file" -msgstr "Une erreur réseau s'est produite lors du téléversement de ce fichier" +msgid "A network error occurred while uploading this file" +msgstr "Une erreur réseau s'est produite lors de l'envoi de ce fichier" -#: front/src/components/library/EditForm.vue:145 +#: front/src/components/library/EditForm.vue:161 msgctxt "*/*/Placeholder" msgid "A short summary describing your changes." msgstr "Une courte description décrivant vos changements." #: front/src/components/About.vue:5 -msgctxt "Content/About/Title/Short, Noun" -msgid "About %{ instance }" -msgstr "À propos de %{ instance }" +msgctxt "Content/Home/Header" +msgid "About %{ podName }" +msgstr "À propos de %{ podName }" #: front/src/components/Footer.vue:6 msgctxt "Footer/About/Title" msgid "About %{instanceName}" msgstr "À propos de %{instanceName}" -#: front/src/components/Footer.vue:45 +#: front/src/components/Footer.vue:53 src/components/Home.vue:85 msgctxt "Footer/*/Title/Short" msgid "About Funkwhale" msgstr "À propos de Funkwhale" @@ -163,10 +227,15 @@ msgctxt "Footer/About/List item.Link" msgid "About page" msgstr "À propos" -#: front/src/components/About.vue:8 src/components/About.vue:67 -msgctxt "Content/About/Title" -msgid "About this instance" -msgstr "À propos de cette instance" +#: front/src/components/Home.vue:19 +msgctxt "Content/Home/Header" +msgid "About this Funkwhale pod" +msgstr "À propos de ce pod Funkwhale" + +#: front/src/components/About.vue:21 src/components/About.vue:51 +msgctxt "Content/About/Header" +msgid "About this pod" +msgstr "À propos de ce pod" #: front/src/views/content/libraries/Detail.vue:48 msgctxt "Content/Library/Button.Label" @@ -178,96 +247,87 @@ msgctxt "Content/Library/Table/Short" msgid "Accepted" msgstr "Accepté" -#: front/src/components/auth/SubsonicTokenForm.vue:110 +#: front/src/components/auth/SubsonicTokenForm.vue:117 msgctxt "Content/Settings/Message" msgid "Access disabled" msgstr "Accès désactivé" -#: front/src/components/mixins/Translations.vue:73 -#: front/src/components/mixins/Translations.vue:74 +#: front/src/components/mixins/Translations.vue:85 +#: front/src/components/mixins/Translations.vue:86 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to audio files, libraries, artists, albums and tracks" -msgstr "Accès aux fichiers audio, librairies, artistes, albums et pistes" +msgstr "Accès aux fichiers audio, bibliothèques, artistes, albums et pistes" -#: front/src/components/mixins/Translations.vue:97 -#: front/src/components/mixins/Translations.vue:98 +#: front/src/components/mixins/Translations.vue:109 +#: front/src/components/mixins/Translations.vue:110 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to content filters" msgstr "Accès aux filtres de contenu" -#: front/src/components/mixins/Translations.vue:105 -#: front/src/components/mixins/Translations.vue:106 +#: front/src/components/mixins/Translations.vue:117 +#: front/src/components/mixins/Translations.vue:118 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to edits" msgstr "Accès aux modifications" -#: front/src/components/mixins/Translations.vue:69 -#: front/src/components/mixins/Translations.vue:70 +#: front/src/components/mixins/Translations.vue:81 +#: front/src/components/mixins/Translations.vue:82 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to email, username, and profile information" msgstr "Accès au courriel, nom d'utilisateur et informations du profil" -#: front/src/components/mixins/Translations.vue:77 -#: front/src/components/mixins/Translations.vue:78 +#: front/src/components/mixins/Translations.vue:89 +#: front/src/components/mixins/Translations.vue:90 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to favorites" msgstr "Accès aux favoris" -#: front/src/components/mixins/Translations.vue:85 -#: front/src/components/mixins/Translations.vue:86 +#: front/src/components/mixins/Translations.vue:97 +#: front/src/components/mixins/Translations.vue:98 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to follows" -msgstr "Accès aux suivis" +msgstr "Accès aux abonnements" -#: front/src/components/mixins/Translations.vue:81 -#: front/src/components/mixins/Translations.vue:82 +#: front/src/components/mixins/Translations.vue:93 +#: front/src/components/mixins/Translations.vue:94 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to listening history" msgstr "Accès à l'historique d'écoute" -#: front/src/components/mixins/Translations.vue:101 -#: front/src/components/mixins/Translations.vue:102 +#: front/src/components/mixins/Translations.vue:113 +#: front/src/components/mixins/Translations.vue:114 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to notifications" msgstr "Accès aux notifications" -#: front/src/components/mixins/Translations.vue:89 -#: front/src/components/mixins/Translations.vue:90 +#: front/src/components/mixins/Translations.vue:101 +#: front/src/components/mixins/Translations.vue:102 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to playlists" msgstr "Accès aux listes de lecture" -#: front/src/components/mixins/Translations.vue:93 -#: front/src/components/mixins/Translations.vue:94 +#: front/src/components/mixins/Translations.vue:105 +#: front/src/components/mixins/Translations.vue:106 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to radios" msgstr "Accès aux radios" -#: front/src/components/Home.vue:101 -msgctxt "Content/Home/List item" -msgid "" -"Access your music from a clean interface that focuses on what really matters" -msgstr "" -"Accédez à votre musique depuis une interface épurée qui se concentre sur ce " -"qui compte vraiment" - #: front/src/components/manage/library/UploadsTable.vue:67 -#: front/src/components/mixins/Translations.vue:45 +#: front/src/components/mixins/Translations.vue:55 #: front/src/views/admin/library/UploadDetail.vue:175 -#: front/src/components/mixins/Translations.vue:46 +#: front/src/components/mixins/Translations.vue:56 msgctxt "Content/*/*/Noun" msgid "Accessed date" msgstr "Date d'accès" -#: front/src/views/admin/library/LibraryDetail.vue:104 -#: front/src/views/admin/library/UploadDetail.vue:111 -msgctxt "*/*/*/Noun" -msgid "Account" -msgstr "Compte" - #: front/src/components/manage/library/LibrariesTable.vue:49 #: front/src/components/manage/library/UploadsTable.vue:61 -msgctxt "*/*/*" +#: front/src/components/manage/moderation/ReportCard.vue:156 +#: front/src/components/mixins/Report.vue:13 +#: front/src/views/admin/library/LibraryDetail.vue:113 +#: front/src/views/admin/library/UploadDetail.vue:111 +#: front/src/components/mixins/Report.vue:14 +msgctxt "*/*/*/Noun" msgid "Account" msgstr "Compte" @@ -281,7 +341,7 @@ msgctxt "Content/Settings/Title" msgid "Account settings" msgstr "Paramètres du compte" -#: front/src/components/auth/Settings.vue:479 +#: front/src/components/auth/Settings.vue:544 msgctxt "Head/Settings/Title" msgid "Account Settings" msgstr "Paramètres du compte" @@ -298,7 +358,7 @@ msgstr "Courriel du compte" #: front/src/views/admin/moderation/AccountsList.vue:3 #: front/src/views/admin/moderation/AccountsList.vue:24 -#: front/src/views/admin/moderation/Base.vue:8 +#: front/src/views/admin/moderation/Base.vue:11 msgctxt "*/Moderation/Title" msgid "Accounts" msgstr "Comptes" @@ -311,31 +371,30 @@ msgstr "Action" #: front/src/components/common/ActionTable.vue:101 msgctxt "Content/*/Paragraph" msgid "Action %{ action } was launched successfully on %{ count } element" -msgid_plural "" -"Action %{ action } was launched successfully on %{ count } elements" -msgstr[0] "" -"L'action %{ action } a été lancée avec succès sur %{ count } élément" -msgstr[1] "" -"L'action %{ action } a été lancée avec succès sur %{ count } éléments" +msgid_plural "Action %{ action } was launched successfully on %{ count } elements" +msgstr[0] "L'action %{ action } a été lancée avec succès sur %{ count } élément" +msgstr[1] "L'action %{ action } a été lancée avec succès sur %{ count } éléments" #: front/src/components/common/ActionTable.vue:22 #: front/src/components/library/radios/Builder.vue:65 +#: front/src/components/manage/moderation/ReportCard.vue:210 msgctxt "Content/*/*/Noun" msgid "Actions" msgstr "Actions" -#: front/src/components/manage/users/UsersTable.vue:53 +#: front/src/components/manage/users/UsersTable.vue:54 msgctxt "Content/Admin/Table" msgid "Active" msgstr "Actif" -#: front/src/views/admin/library/AlbumDetail.vue:134 -#: front/src/views/admin/library/ArtistDetail.vue:123 -#: front/src/views/admin/library/LibraryDetail.vue:138 -#: front/src/views/admin/library/TrackDetail.vue:186 +#: front/src/views/admin/library/AlbumDetail.vue:140 +#: front/src/views/admin/library/ArtistDetail.vue:128 +#: front/src/views/admin/library/LibraryDetail.vue:147 +#: front/src/views/admin/library/TagDetail.vue:83 +#: front/src/views/admin/library/TrackDetail.vue:192 #: front/src/views/admin/library/UploadDetail.vue:160 -#: front/src/views/admin/moderation/AccountsDetail.vue:220 -#: front/src/views/admin/moderation/DomainsDetail.vue:136 +#: front/src/views/admin/moderation/AccountsDetail.vue:221 +#: front/src/views/admin/moderation/DomainsDetail.vue:173 msgctxt "Content/Moderation/Title" msgid "Activity" msgstr "Activité" @@ -346,7 +405,7 @@ msgctxt "Content/Settings/Dropdown.Label/Noun" msgid "Activity visibility" msgstr "Visibilité de l'activité" -#: front/src/views/admin/moderation/DomainsList.vue:18 +#: front/src/views/admin/moderation/DomainsList.vue:22 msgctxt "Content/Moderation/Button/Verb" msgid "Add" msgstr "Ajouter" @@ -392,7 +451,19 @@ msgctxt "Content/Radio/Paragraph" msgid "Add filters to customize your radio" msgstr "Ajouter des filtres pour personnaliser votre radio" -#: front/src/components/audio/PlayButton.vue:75 +#: front/src/components/manage/moderation/NoteForm.vue:12 +msgctxt "Content/Moderation/Button.Label/Verb" +msgid "Add note" +msgstr "Ajouter une note" + +#: front/src/components/manage/moderation/DomainsTable.vue:191 +#: front/src/views/admin/moderation/DomainsDetail.vue:46 +#: front/src/views/admin/moderation/DomainsList.vue:18 +msgctxt "Content/Moderation/Action/Verb" +msgid "Add to allow-list" +msgstr "Ajouter à la liste d'autorisations" + +#: front/src/components/audio/PlayButton.vue:91 msgctxt "*/Queue/Dropdown/Button/Title" msgid "Add to current queue" msgstr "Ajouter à la file d'attente actuelle" @@ -424,7 +495,7 @@ msgctxt "Popup/Playlist/Table.Button.Label/Verb" msgid "Add track" msgstr "Ajouter la piste" -#: front/src/components/manage/users/UsersTable.vue:69 +#: front/src/components/manage/users/UsersTable.vue:70 msgctxt "Content/Admin/Table.User role" msgid "Admin" msgstr "Admin" @@ -434,49 +505,49 @@ msgctxt "Sidebar/Admin/Title/Noun" msgid "Administration" msgstr "Administration" -#: front/src/views/admin/library/TrackDetail.vue:107 -msgctxt "*/*/*/Noun" -msgid "Album" -msgstr "Album" - -#: front/src/components/audio/SearchBar.vue:26 +#: front/src/components/audio/SearchBar.vue:33 #: src/components/audio/track/Table.vue:9 -#: front/src/components/library/AlbumBase.vue:152 -#: front/src/components/library/ArtistBase.vue:194 +#: front/src/components/library/AlbumBase.vue:170 +#: front/src/components/library/ArtistBase.vue:212 #: front/src/components/manage/library/TracksTable.vue:40 #: front/src/components/metadata/Search.vue:134 +#: src/components/mixins/Report.vue:41 +#: front/src/views/admin/library/TrackDetail.vue:113 #: front/src/views/content/libraries/FilesTable.vue:57 +#: front/src/components/mixins/Report.vue:42 msgctxt "*/*/*" msgid "Album" msgstr "Album" -#: front/src/views/admin/library/TrackDetail.vue:128 +#: front/src/views/admin/library/TrackDetail.vue:134 msgctxt "*/*/*/Noun" msgid "Album artist" msgstr "Artiste de cet album" -#: front/src/views/admin/library/AlbumDetail.vue:92 +#: front/src/views/admin/library/AlbumDetail.vue:98 msgctxt "Content/Moderation/Title" msgid "Album data" msgstr "Données de l'album" -#: front/src/components/mixins/Translations.vue:51 -#: front/src/components/mixins/Translations.vue:52 +#: front/src/components/mixins/Translations.vue:61 +#: front/src/components/mixins/Translations.vue:62 msgctxt "Content/*/Dropdown/Noun" msgid "Album name" msgstr "Nom de l'album" #: front/src/components/audio/Search.vue:19 -#: src/components/instance/Stats.vue:48 -#: front/src/components/library/Albums.vue:120 -#: src/components/library/Library.vue:7 +#: src/components/library/Albums.vue:129 +#: front/src/components/library/Library.vue:7 +#: src/components/library/TagDetail.vue:28 #: front/src/components/manage/library/ArtistsTable.vue:41 +#: front/src/components/manage/library/TagsTable.vue:43 #: front/src/views/admin/library/AlbumsList.vue:24 -#: front/src/views/admin/library/ArtistDetail.vue:241 +#: front/src/views/admin/library/ArtistDetail.vue:256 #: front/src/views/admin/library/Base.vue:11 -#: front/src/views/admin/library/LibraryDetail.vue:219 -#: front/src/views/admin/moderation/AccountsDetail.vue:354 -#: front/src/views/admin/moderation/DomainsDetail.vue:264 +#: front/src/views/admin/library/LibraryDetail.vue:238 +#: front/src/views/admin/library/TagDetail.vue:133 +#: front/src/views/admin/moderation/AccountsDetail.vue:366 +#: front/src/views/admin/moderation/DomainsDetail.vue:301 msgctxt "*/*/*" msgid "Albums" msgstr "Albums" @@ -490,7 +561,10 @@ msgstr "Albums de cet·te artiste" #: front/src/components/manage/library/LibrariesTable.vue:13 #: front/src/components/manage/library/UploadsTable.vue:13 #: front/src/components/manage/library/UploadsTable.vue:22 +#: front/src/components/manage/moderation/DomainsTable.vue:11 #: front/src/components/manage/users/InvitationsTable.vue:19 +#: front/src/components/moderation/ReportCategoryDropdown.vue:32 +#: front/src/views/admin/moderation/ReportsList.vue:17 #: front/src/views/content/libraries/FilesTable.vue:13 msgctxt "Content/*/Dropdown" msgid "All" @@ -508,44 +582,52 @@ msgctxt "Head/Authorize/Title" msgid "Allow application" msgstr "Autoriser l'application" +#: front/src/components/About.vue:136 +msgctxt "*/*/*" +msgid "Allow-list" +msgstr "Liste d'autorisation" + +#: front/src/components/About.vue:149 +msgctxt "*/*/*" +msgid "Allowed domains" +msgstr "Domaines autorisés" + #: front/src/components/library/ImportStatusModal.vue:17 msgctxt "Popup/Import/Message" -msgid "" -"An error occured during upload processing. You will find more information " -"below." +msgid "An error occurred during upload processing. You will find more information below." msgstr "" "Une erreur a eu lieu durant le processus de téléversement. Vous trouverez " "plus d'information ci-dessous." #: front/src/components/playlists/Editor.vue:13 msgctxt "Content/Playlist/Error message.Title" -msgid "An error occured while saving your changes" -msgstr "" -"Une erreur s'est produite pendant l'enregistrement de vos modifications" +msgid "An error occurred while saving your changes" +msgstr "Une erreur s'est produite pendant l'enregistrement de vos modifications" #: front/src/components/federation/FetchButton.vue:21 msgctxt "Popup/*/Message.Content" -msgid "An error occured while trying to refresh data:" -msgstr "Une erreur s'est produite pendant la mise à jour des données:" +msgid "An error occurred while trying to refresh data:" +msgstr "Une erreur s'est produite pendant la mise à jour des données :" #: front/src/components/federation/FetchButton.vue:41 msgctxt "*/*/Error" -msgid "An HTTP error occured while contacting the remote server" +msgid "An HTTP error occurred while contacting the remote server" msgstr "Une erreur HTTP s'est produite en contactant le serveur distant" -#: front/src/components/auth/Login.vue:10 -msgctxt "Content/Login/Error message/List item" -msgid "" -"An unknown error happend, this can mean the server is down or cannot be " -"reached" -msgstr "" -"Une erreur inconnue s'est produite, le serveur est peut-être en panne ou " -"injoignable" - #: front/src/components/library/ImportStatusModal.vue:145 msgctxt "Popup/Import/Error.Label" -msgid "An unkwown error occured" -msgstr "Une erreur inconnue a eu lieu" +msgid "An unknown error occurred" +msgstr "Une erreur inconnue s'est produite" + +#: front/src/components/About.vue:123 +msgctxt "*/*/*" +msgid "Anonymous access" +msgstr "Accès anonyme" + +#: front/src/components/moderation/ReportModal.vue:54 +msgctxt "Popup/Moderation/Error message" +msgid "Anonymous reports are disabled, please sign-in to submit a report." +msgstr "Les signalements anonymes sont désactivés, inscrivez-vous pour faire un signalement." #: front/src/components/auth/Settings.vue:175 #: src/components/auth/Settings.vue:225 @@ -565,13 +647,8 @@ msgstr "ID de l'application" #: front/src/components/auth/ApplicationEdit.vue:16 msgctxt "Content/Application/Paragraph/" -msgid "" -"Application ID and secret are really sensitive values and must be treated " -"like passwords. Do not share those with anyone else." -msgstr "" -"L'ID et le \"secret\" de l'application sont des données vraiment sensibles " -"et doivent être traitées comme des mots de passe. Ne les partagez avec " -"personne." +msgid "Application ID and secret are really sensitive values and must be treated like passwords. Do not share those with anyone else." +msgstr "L'ID et le \"secret\" de l'application sont des données vraiment sensibles et doivent être traitées comme des mots de passe. Ne les partagez avec personne." #: front/src/components/auth/ApplicationEdit.vue:25 msgctxt "Content/Applications/Label" @@ -600,29 +677,27 @@ msgctxt "Content/Login/Title" msgid "Are you sure you want to log out?" msgstr "Êtes-vous sûr·e de vouloir vous déconnecter ?" +#: front/src/components/audio/SearchBar.vue:32 +#: src/components/audio/track/Table.vue:8 #: front/src/components/manage/library/AlbumsTable.vue:40 #: front/src/components/manage/library/TracksTable.vue:41 -msgctxt "*/*/*" -msgid "Artist" -msgstr "Artiste" - -#: front/src/components/audio/SearchBar.vue:25 -#: src/components/audio/track/Table.vue:8 #: front/src/components/metadata/Search.vue:130 -#: front/src/views/admin/library/AlbumDetail.vue:108 -#: front/src/views/admin/library/TrackDetail.vue:118 -#: front/src/views/content/libraries/FilesTable.vue:56 +#: src/components/mixins/Report.vue:55 +#: front/src/views/admin/library/AlbumDetail.vue:114 +#: front/src/views/admin/library/TrackDetail.vue:124 +#: front/src/views/content/libraries/FilesTable.vue:56 src/entities.js:12 +#: front/src/components/mixins/Report.vue:56 msgctxt "*/*/*/Noun" msgid "Artist" msgstr "Artiste" -#: front/src/views/admin/library/ArtistDetail.vue:91 +#: front/src/views/admin/library/ArtistDetail.vue:96 msgctxt "Content/Moderation/Title" msgid "Artist data" msgstr "Données de l'artiste" -#: front/src/components/mixins/Translations.vue:52 -#: front/src/components/mixins/Translations.vue:53 +#: front/src/components/mixins/Translations.vue:62 +#: front/src/components/mixins/Translations.vue:63 msgctxt "Content/*/Dropdown/Noun" msgid "Artist name" msgstr "Nom de l'artiste" @@ -632,36 +707,36 @@ msgctxt "*/Search/Input.Placeholder" msgid "Artist, album, track…" msgstr "Artiste, album, piste…" +#: front/src/components/audio/Search.vue:10 +#: src/components/library/Artists.vue:117 +#: front/src/components/library/Library.vue:10 +#: front/src/components/library/TagDetail.vue:19 +#: front/src/components/manage/library/TagsTable.vue:42 #: front/src/views/admin/library/ArtistsList.vue:24 #: front/src/views/admin/library/Base.vue:8 -#: front/src/views/admin/library/LibraryDetail.vue:209 -msgctxt "*/*/*" -msgid "Artists" -msgstr "Artistes" - -#: front/src/components/audio/Search.vue:10 -#: src/components/instance/Stats.vue:42 -#: front/src/components/library/Artists.vue:117 -#: src/components/library/Library.vue:10 -#: front/src/views/admin/moderation/AccountsDetail.vue:346 -#: front/src/views/admin/moderation/DomainsDetail.vue:254 +#: front/src/views/admin/library/LibraryDetail.vue:228 +#: front/src/views/admin/library/TagDetail.vue:123 +#: front/src/views/admin/moderation/AccountsDetail.vue:358 +#: front/src/views/admin/moderation/DomainsDetail.vue:291 msgctxt "*/*/*/Noun" msgid "Artists" msgstr "Artistes" #: front/src/components/favorites/List.vue:34 -#: src/components/library/Albums.vue:25 -#: front/src/components/library/Artists.vue:25 +#: src/components/library/Albums.vue:29 +#: front/src/components/library/Artists.vue:29 #: src/components/library/Radios.vue:44 #: front/src/components/manage/library/AlbumsTable.vue:21 #: front/src/components/manage/library/ArtistsTable.vue:21 #: front/src/components/manage/library/EditsCardList.vue:39 #: front/src/components/manage/library/LibrariesTable.vue:30 +#: front/src/components/manage/library/TagsTable.vue:21 #: front/src/components/manage/library/TracksTable.vue:21 #: front/src/components/manage/library/UploadsTable.vue:40 #: front/src/components/manage/moderation/AccountsTable.vue:21 -#: front/src/components/manage/moderation/DomainsTable.vue:19 +#: front/src/components/manage/moderation/DomainsTable.vue:27 #: front/src/components/manage/users/UsersTable.vue:19 +#: front/src/views/admin/moderation/ReportsList.vue:44 #: front/src/views/content/libraries/FilesTable.vue:31 #: front/src/views/playlists/List.vue:27 msgctxt "Content/Search/Dropdown" @@ -673,18 +748,24 @@ msgctxt "Content/Signup/Button.Label/Verb" msgid "Ask for a password reset" msgstr "Demander la réinitialisation du mot de passe" -#: front/src/views/admin/library/AlbumDetail.vue:198 -#: front/src/views/admin/library/ArtistDetail.vue:187 -#: front/src/views/admin/library/LibraryDetail.vue:176 -#: front/src/views/admin/library/TrackDetail.vue:250 +#: front/src/components/manage/moderation/ReportCard.vue:72 +msgctxt "Content/Moderation/*" +msgid "Assigned to" +msgstr "Assigné à " + +#: front/src/views/admin/library/AlbumDetail.vue:214 +#: front/src/views/admin/library/ArtistDetail.vue:202 +#: front/src/views/admin/library/LibraryDetail.vue:195 +#: front/src/views/admin/library/TagDetail.vue:113 +#: front/src/views/admin/library/TrackDetail.vue:266 #: front/src/views/admin/library/UploadDetail.vue:191 -#: front/src/views/admin/moderation/AccountsDetail.vue:274 -#: front/src/views/admin/moderation/DomainsDetail.vue:202 +#: front/src/views/admin/moderation/AccountsDetail.vue:285 +#: front/src/views/admin/moderation/DomainsDetail.vue:239 msgctxt "Content/Moderation/Title" msgid "Audio content" msgstr "Contenu audio" -#: front/src/components/ShortcutsModal.vue:55 +#: front/src/components/ShortcutsModal.vue:92 msgctxt "Popup/Keyboard shortcuts/Title" msgid "Audio player shortcuts" msgstr "Raccourcis du lecteur audio" @@ -727,12 +808,12 @@ msgid "Back to settings" msgstr "Retour aux paramètres" #: front/src/components/library/TrackDetail.vue:48 -#: front/src/components/mixins/Translations.vue:55 +#: front/src/components/mixins/Translations.vue:67 #: front/src/views/admin/library/UploadDetail.vue:227 -#: front/src/components/mixins/Translations.vue:56 +#: front/src/components/mixins/Translations.vue:68 msgctxt "Content/Track/*/Noun" msgid "Bitrate" -msgstr "Débit binaire" +msgstr "Bitrate" #: front/src/components/manage/moderation/InstancePolicyCard.vue:19 #: front/src/components/manage/moderation/InstancePolicyForm.vue:34 @@ -742,13 +823,8 @@ msgstr "Bloquer tout" #: front/src/components/manage/moderation/InstancePolicyForm.vue:112 msgctxt "Content/Moderation/Help text" -msgid "" -"Block everything from this account or domain. This will prevent any " -"interaction with the entity, and purge related content (uploads, libraries, " -"follows, etc.)" -msgstr "" -"Bloquer tout de ce compte ou domaine. Cela empêche toute interaction avec " -"l'entité, et purge le contenu lié (pistes, librairies, suivis, etc.)" +msgid "Block everything from this account or domain. This will prevent any interaction with the entity, and purge related content (uploads, libraries, follows, etc.)" +msgstr "Bloquer tout de ce compte ou domaine. Cela empêche toute interaction avec l'entité, et purge le contenu lié (pistes, librairies, suivis, etc.)" #: front/src/components/Sidebar.vue:18 src/components/library/Library.vue:4 msgctxt "*/Library/*/Verb" @@ -760,6 +836,11 @@ msgctxt "Sidebar/Library/List item.Link/Verb" msgid "Browse library" msgstr "Parcourir la bibliothèque" +#: front/src/components/Home.vue:132 +msgctxt "Content/Home/Link" +msgid "Browse public content" +msgstr "Parcourir le contenu public" + #: front/src/components/library/Albums.vue:4 msgctxt "Content/Album/Title" msgid "Browsing albums" @@ -790,43 +871,43 @@ msgctxt "Content/Album/Card" msgid "By %{ artist }" msgstr "De %{ artist }" -#: front/src/views/content/remote/Card.vue:112 +#: front/src/views/content/remote/Card.vue:125 msgctxt "Popup/Library/Paragraph" msgid "By unfollowing this library, you loose access to its content." -msgstr "" -"En cessant de suivre cette bibliothèque, vous perdez l’accès à son contenu." +msgstr "En cessant de suivre cette bibliothèque, vous perdez l’accès à son contenu." -#: front/src/views/admin/library/AlbumDetail.vue:214 -#: front/src/views/admin/library/ArtistDetail.vue:203 -#: front/src/views/admin/library/LibraryDetail.vue:192 -#: front/src/views/admin/library/TrackDetail.vue:266 +#: front/src/views/admin/library/AlbumDetail.vue:230 +#: front/src/views/admin/library/ArtistDetail.vue:218 +#: front/src/views/admin/library/LibraryDetail.vue:211 +#: front/src/views/admin/library/TrackDetail.vue:282 #: front/src/views/admin/library/UploadDetail.vue:208 -#: front/src/views/admin/moderation/AccountsDetail.vue:290 -#: front/src/views/admin/moderation/DomainsDetail.vue:217 +#: front/src/views/admin/moderation/AccountsDetail.vue:301 +#: front/src/views/admin/moderation/DomainsDetail.vue:254 msgctxt "Content/Moderation/Table.Label/Noun" msgid "Cached size" msgstr "Taille du cache" #: front/src/components/SetInstanceModal.vue:37 #: front/src/components/common/DangerousButton.vue:17 -#: front/src/components/library/AlbumBase.vue:36 -#: front/src/components/library/ArtistBase.vue:47 -#: front/src/components/library/EditForm.vue:95 -#: front/src/components/library/TrackBase.vue:55 +#: front/src/components/library/AlbumBase.vue:37 +#: front/src/components/library/ArtistBase.vue:48 +#: front/src/components/library/EditForm.vue:107 +#: front/src/components/library/TrackBase.vue:53 #: front/src/components/library/radios/Filter.vue:53 #: front/src/components/manage/moderation/InstancePolicyForm.vue:54 #: front/src/components/moderation/FilterModal.vue:39 +#: front/src/components/moderation/ReportModal.vue:59 #: front/src/components/playlists/PlaylistModal.vue:26 #: front/src/components/playlists/PlaylistModal.vue:77 +#: front/src/views/playlists/Detail.vue:62 msgctxt "*/*/Button.Label/Verb" msgid "Cancel" msgstr "Annuler" -#: front/src/views/content/remote/Card.vue:97 -#, fuzzy +#: front/src/views/content/remote/Card.vue:110 msgctxt "Content/Library/Card.Paragraph" msgid "Cancel follow request" -msgstr "Demandes d'abonnement en attente" +msgstr "Annuler la demande d'abonnement" #: front/src/components/library/radios/Builder.vue:64 msgctxt "Content/Radio/Table.Label/Noun (Value is a number of Tracks)" @@ -836,8 +917,15 @@ msgstr "Pistes candidates" #: front/src/components/library/FileUpload.vue:261 msgctxt "Content/Library/Help text" msgid "Cannot upload this file, ensure it is not too big" -msgstr "" -"Impossible de transférer ce fichier, assurez-vous qu'il n'est pas trop gros" +msgstr "Impossible de transférer ce fichier, assurez-vous qu'il n'est pas trop gros" + +#: front/src/components/manage/moderation/ReportCard.vue:30 +#: front/src/components/mixins/Translations.vue:42 +#: front/src/components/moderation/ReportCategoryDropdown.vue:2 +#: front/src/components/mixins/Translations.vue:43 +msgctxt "*/*/*" +msgid "Category" +msgstr "Catégorie" #: front/src/components/Footer.vue:21 msgctxt "Footer/Settings/Dropdown.Label/Short, Verb" @@ -854,6 +942,11 @@ msgctxt "Content/Settings/Button.Label" msgid "Change password" msgstr "Changer le mot de passe" +#: front/src/components/Footer.vue:37 +msgctxt "Footer/Settings/Dropdown.Label/Short, Verb" +msgid "Change theme" +msgstr "Changer le thème" + #: front/src/views/auth/PasswordResetConfirm.vue:62 msgctxt "*/Signup/Title" msgid "Change your password" @@ -871,43 +964,32 @@ msgstr "Changements synchronisés avec le serveur" #: front/src/components/auth/Settings.vue:71 msgctxt "Content/Settings/Paragraph'" -msgid "" -"Changing your password will also change your Subsonic API password if you " -"have requested one." -msgstr "" -"La mise à jour de votre mot de passe changera également le mot de passe de " -"l'API Subsonic si vous en avez demandé un." +msgid "Changing your password will also change your Subsonic API password if you have requested one." +msgstr "La mise à jour de votre mot de passe changera également le mot de passe de l'API Subsonic si vous en avez demandé un." #: front/src/components/auth/Settings.vue:98 msgctxt "Popup/Settings/Paragraph" msgid "Changing your password will have the following consequences:" msgstr "Modifier votre mot de passe aura les conséquences suivantes :" -#: front/src/components/Footer.vue:40 +#: front/src/components/Footer.vue:48 msgctxt "Footer/*/List item.Link" msgid "Chat room" msgstr "Salle de discussion" #: front/src/components/auth/ApplicationForm.vue:24 msgctxt "Content/Applications/Paragraph/" -msgid "" -"Checking the parent \"Read\" or \"Write\" scopes implies access to all the " -"corresponding children scopes." -msgstr "" -"Cocher le périmètre \"Lecture\" ou \"Écriture\" sur le parent implique " -"l'accès à tous les périmètres enfants correspondants." +msgid "Checking the parent \"Read\" or \"Write\" scopes implies access to all the corresponding children scopes." +msgstr "Cocher le périmètre \"Lecture\" ou \"Écriture\" sur le parent implique l'accès à tous les périmètres enfants correspondants." #: front/src/components/SetInstanceModal.vue:2 msgctxt "Popup/Instance/Title" msgid "Choose your instance" msgstr "Choisissez votre instance" -#: front/src/components/manage/users/InvitationForm.vue:37 -msgctxt "Content/Admin/Button.Label/Verb" -msgid "Clear" -msgstr "Effacer" - #: front/src/components/library/EditForm.vue:75 +#: front/src/components/library/EditForm.vue:88 +#: front/src/components/manage/users/InvitationForm.vue:37 msgctxt "Content/Library/Button.Label" msgid "Clear" msgstr "Effacer" @@ -918,50 +1000,45 @@ msgctxt "*/Playlist/Button.Label/Verb" msgid "Clear playlist" msgstr "Vider la liste de lecture" -#: front/src/components/audio/Player.vue:642 +#: front/src/components/ShortcutsModal.vue:144 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Clear queue" +msgstr "Vider la file d'attente" + +#: front/src/components/audio/Player.vue:668 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Clear your queue" msgstr "Vider la liste d'attente" -#: front/src/components/Home.vue:44 -msgctxt "Content/Home/List item/Verb" -msgid "Click once, listen for hours using built-in radios" -msgstr "" -"En un clic, écoutez de la musique pendant des heures grâce aux radios " -"intégrées" - #: front/src/components/mixins/Translations.vue:21 #: front/src/components/mixins/Translations.vue:22 msgctxt "Content/Library/Link.Title" -msgid "" -"Click to display more information about the import process for this upload" -msgstr "" -"Cliquer pour afficher plus d'information à propos du processus d'import pour" -" cet envoi" +msgid "Click to display more information about the import process for this upload" +msgstr "Cliquer pour afficher plus d'information à propos du processus d'import pour cet envoi" #: front/src/components/library/FileUpload.vue:82 msgctxt "Content/Library/Paragraph/Call to action" msgid "Click to select files to upload or drag and drop files or directories" -msgstr "" -"Cliquez pour sélectionner les fichiers a téléverser ou glisser-déposer les " -"fichiers ou répertoires" +msgstr "Cliquez pour sélectionner les fichiers a téléverser ou glisser-déposer les fichiers ou répertoires" +#: front/src/components/ShortcutsModal.vue:38 #: front/src/components/federation/FetchButton.vue:85 #: front/src/components/library/ImportStatusModal.vue:79 +#: front/src/components/manage/moderation/InstancePolicyModal.vue:34 msgctxt "*/*/Button.Label/Verb" msgid "Close" msgstr "Fermer" -#: front/src/components/ShortcutsModal.vue:20 -msgctxt "Popup/Keyboard shortcuts/Button.Label/Verb" -msgid "Close" -msgstr "Fermer" - #: front/src/components/federation/FetchButton.vue:88 msgctxt "*/*/Button.Label/Verb" msgid "Close and reload page" msgstr "Fermer et recharger la page" +#: front/src/components/About.vue:94 +msgctxt "*/*/*/State of registrations" +msgid "Closed" +msgstr "Fermées" + #: front/src/components/manage/users/InvitationForm.vue:26 #: front/src/components/manage/users/InvitationsTable.vue:42 msgctxt "Content/Admin/Table.Label/Noun" @@ -969,8 +1046,8 @@ msgid "Code" msgstr "Code" #: front/src/components/audio/album/Card.vue:41 -#: front/src/components/audio/artist/Card.vue:33 -msgctxt "Content/*/Card.Link/Verb" +#: front/src/components/common/CollapseLink.vue:3 +msgctxt "*/*/Button,Label" msgid "Collapse" msgstr "Réduire" @@ -994,43 +1071,46 @@ msgctxt "Content/Signup/Form.Label" msgid "Confirmation code" msgstr "Code de confirmation" +#: front/src/components/About.vue:67 src/components/Home.vue:65 +msgctxt "Content/Home/Header/Name" +msgid "Contact" +msgstr "Contact" + #: front/src/components/moderation/FilterModal.vue:90 msgctxt "*/Moderation/Message" msgid "Content filter successfully added" msgstr "Filtre de contenu ajouté avec succès" -#: front/src/components/mixins/Translations.vue:96 -#: front/src/components/mixins/Translations.vue:97 -msgctxt "Content/OAuth Scopes/Label" -msgid "Content filters" -msgstr "Filtres de contenu" - #: front/src/components/auth/Settings.vue:116 +#: front/src/components/mixins/Translations.vue:108 +#: front/src/components/mixins/Translations.vue:109 msgctxt "Content/Settings/Title/Noun" msgid "Content filters" msgstr "Filtres de contenu" #: front/src/components/auth/Settings.vue:119 msgctxt "Content/Settings/Paragraph" -msgid "" -"Content filters help you hide content you don't want to see on the service." -msgstr "" -"Les filtres de contenu vous aident à cacher les contenus que vous ne voulez " -"pas voir sur ce service." +msgid "Content filters help you hide content you don't want to see on the service." +msgstr "Les filtres de contenu vous aident à cacher les contenus que vous ne voulez pas voir sur ce service." #: front/src/components/common/ActionTable.vue:8 msgctxt "Content/*/Button.Help text.Paragraph" msgid "Content have been updated, click refresh to see up-to-date content" -msgstr "" -"Le contenu a été modifié, cliquez sur rafraichir pour voir le contenu à jour" +msgstr "Le contenu a été modifié, cliquez sur rafraichir pour voir le contenu à jour" -#: front/src/components/Footer.vue:48 +#: front/src/components/About.vue:46 +msgctxt "Content/About/Header" +msgid "Contents" +msgstr "Contenu" + +#: front/src/components/Footer.vue:56 msgctxt "Footer/*/List item.Link" msgid "Contribute" msgstr "Contribuer" -#: front/src/components/audio/EmbedWizard.vue:19 +#: front/src/components/audio/EmbedWizard.vue:29 #: front/src/components/common/CopyInput.vue:8 +#: front/src/components/forms/PasswordInput.vue:43 msgctxt "*/*/Button.Label/Short, Verb" msgid "Copy" msgstr "Copier" @@ -1043,16 +1123,16 @@ msgstr "Copier les pistes de la file d’attente dans la liste de lecture" #: front/src/components/auth/Authorize.vue:55 msgctxt "Content/Auth/Paragraph" msgid "Copy-paste the following code in the application:" -msgstr "Copiez-coller le code suivant dans votre application:" +msgstr "Copiez-coller le code suivant dans votre application :" -#: front/src/components/audio/EmbedWizard.vue:21 +#: front/src/components/audio/EmbedWizard.vue:31 msgctxt "Popup/Embed/Paragraph" msgid "Copy/paste this code in your website HTML" msgstr "Copiez-collez ce code dans le HTML de votre site web" #: front/src/components/library/TrackDetail.vue:10 -#: front/src/views/admin/library/TrackDetail.vue:153 -msgctxt "Content/Track/Table.Label/Noun" +#: front/src/views/admin/library/TrackDetail.vue:159 src/edits.js:77 +msgctxt "Content/Track/*/Noun" msgid "Copyright" msgstr "Copyright" @@ -1066,29 +1146,20 @@ msgctxt "Content/Library/Error message.Title" msgid "Could not fetch remote library" msgstr "Impossible de récupérer la bibliothèque distante" -#: front/src/components/Home.vue:80 -msgctxt "Content/Home/List item" -msgid "Covers, lyrics, our goal is to have them all ;)" -msgstr "Pochettes, paroles, notre but est de tout gérer ;)" - #: front/src/components/manage/moderation/InstancePolicyForm.vue:58 msgctxt "Content/Moderation/Card.Button.Label/Verb" msgid "Create" msgstr "Créer" -#: front/src/components/auth/Signup.vue:4 +#: front/src/views/auth/Signup.vue:4 msgctxt "Content/Signup/Title" msgid "Create a funkwhale account" msgstr "Créer un compte Funkwhale" -#: front/src/components/auth/Settings.vue:220 -msgctxt "Content/Settings/Button.Label" -msgid "Create a new application" -msgstr "Créer une nouvelle application" - #: front/src/components/auth/ApplicationNew.vue:8 #: front/src/components/auth/ApplicationNew.vue:41 -msgctxt "Content/Applications/Title" +#: front/src/components/auth/Settings.vue:220 +msgctxt "Content/Settings/Button.Label" msgid "Create a new application" msgstr "Créer une nouvelle application" @@ -1102,7 +1173,7 @@ msgctxt "Popup/Playlist/Title/Verb" msgid "Create a new playlist" msgstr "Créer une nouvelle liste de lecture" -#: front/src/components/Sidebar.vue:57 src/components/auth/Login.vue:17 +#: front/src/components/Sidebar.vue:57 src/components/auth/LoginForm.vue:15 msgctxt "*/Signup/Link/Verb" msgid "Create an account" msgstr "Créer un compte" @@ -1117,7 +1188,7 @@ msgctxt "Content/Library/Button.Label/Verb" msgid "Create library" msgstr "Créer la bibliothèque" -#: front/src/components/auth/Signup.vue:53 +#: front/src/components/auth/SignupForm.vue:49 msgctxt "Content/Signup/Button.Label" msgid "Create my account" msgstr "Créer mon compte" @@ -1142,11 +1213,13 @@ msgstr "Créer votre propre radio" #: front/src/components/manage/library/AlbumsTable.vue:44 #: front/src/components/manage/library/ArtistsTable.vue:43 #: front/src/components/manage/library/LibrariesTable.vue:54 +#: front/src/components/manage/library/TagsTable.vue:45 #: front/src/components/manage/library/TracksTable.vue:44 #: front/src/components/manage/library/UploadsTable.vue:66 +#: front/src/components/manage/moderation/ReportCard.vue:43 #: front/src/components/manage/users/InvitationsTable.vue:40 -#: front/src/components/mixins/Translations.vue:43 -#: front/src/components/mixins/Translations.vue:44 +#: front/src/components/mixins/Translations.vue:53 +#: front/src/components/mixins/Translations.vue:54 msgctxt "Content/*/*/Noun" msgid "Creation date" msgstr "Date de création" @@ -1156,6 +1229,11 @@ msgctxt "Content/Settings/Title/Noun" msgid "Current avatar" msgstr "Avatar actuel" +#: front/src/components/admin/SettingsGroup.vue:67 +msgctxt "Content/Settings/Title/Noun" +msgid "Current image" +msgstr "Image actuelle" + #: front/src/views/content/libraries/DetailArea.vue:4 msgctxt "Content/Library/Title" msgid "Current library" @@ -1171,18 +1249,20 @@ msgctxt "Content/Library/Title" msgid "Current usage" msgstr "Utilisation actuelle" +#: front/src/components/Footer.vue:94 +msgctxt "Footer/Settings/Dropdown.Label/Theme name" +msgid "Dark" +msgstr "Sombre" + #: front/src/components/federation/FetchButton.vue:53 msgctxt "*/*/Error" msgid "Data returned by the remote server had invalid or missing attributes" -msgstr "" -"Les données renvoyées par le serveur distant ont des attributs manquants ou " -"invalides" +msgstr "Les données renvoyées par le serveur distant ont des attributs manquants ou invalides" #: front/src/components/federation/FetchButton.vue:17 msgctxt "Popup/*/Message.Content" msgid "Data was refreshed successfully from remote server." -msgstr "" -"Les données ont été rafraîchies avec succès depuis le serveur distant." +msgstr "Les données ont été rafraîchies avec succès depuis le serveur distant." #: front/src/views/content/libraries/Detail.vue:27 msgctxt "Content/Library/Table.Label" @@ -1194,7 +1274,7 @@ msgctxt "Popup/Import/Table.Label/Noun" msgid "Debug information" msgstr "Informations de débogage" -#: front/src/components/ShortcutsModal.vue:75 +#: front/src/components/ShortcutsModal.vue:128 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Decrease volume" msgstr "Diminuer le volume" @@ -1206,23 +1286,29 @@ msgstr "Diminuer le volume" #: front/src/components/manage/library/AlbumsTable.vue:188 #: front/src/components/manage/library/ArtistsTable.vue:178 #: front/src/components/manage/library/LibrariesTable.vue:205 +#: front/src/components/manage/library/TagsTable.vue:179 #: front/src/components/manage/library/TracksTable.vue:188 #: front/src/components/manage/library/UploadsTable.vue:255 #: front/src/components/manage/moderation/InstancePolicyForm.vue:61 +#: front/src/components/manage/moderation/NotesThread.vue:24 +#: front/src/components/manage/moderation/NotesThread.vue:29 +#: front/src/components/manage/moderation/ReportCard.vue:360 #: front/src/components/manage/users/InvitationsTable.vue:167 -#: front/src/views/admin/library/AlbumDetail.vue:72 -#: front/src/views/admin/library/AlbumDetail.vue:77 -#: front/src/views/admin/library/ArtistDetail.vue:71 +#: front/src/views/admin/library/AlbumDetail.vue:78 +#: front/src/views/admin/library/AlbumDetail.vue:83 #: front/src/views/admin/library/ArtistDetail.vue:76 +#: front/src/views/admin/library/ArtistDetail.vue:81 #: front/src/views/admin/library/LibraryDetail.vue:58 #: front/src/views/admin/library/LibraryDetail.vue:63 -#: front/src/views/admin/library/TrackDetail.vue:71 -#: front/src/views/admin/library/TrackDetail.vue:76 +#: front/src/views/admin/library/TagDetail.vue:41 +#: front/src/views/admin/library/TagDetail.vue:46 +#: front/src/views/admin/library/TrackDetail.vue:77 +#: front/src/views/admin/library/TrackDetail.vue:82 #: front/src/views/admin/library/UploadDetail.vue:65 #: front/src/views/admin/library/UploadDetail.vue:70 #: front/src/views/content/libraries/FilesTable.vue:222 #: front/src/views/content/libraries/Form.vue:29 -#: src/views/playlists/Detail.vue:34 +#: src/views/playlists/Detail.vue:42 msgctxt "*/*/*/Verb" msgid "Delete" msgstr "Supprimer" @@ -1235,7 +1321,7 @@ msgstr "Supprimer l'application" #: front/src/components/auth/Settings.vue:252 msgctxt "Popup/Settings/Title" msgid "Delete application \"%{ application }\"?" -msgstr "Supprimer l'application \"%{ application }\"?" +msgstr "Supprimer l'application « %{ application } » ?" #: front/src/views/content/libraries/Form.vue:39 msgctxt "Popup/Library/Button.Label/Verb" @@ -1247,7 +1333,18 @@ msgctxt "Popup/Moderation/Button.Label/Verb" msgid "Delete moderation rule" msgstr "Supprimer la règle de modération" -#: front/src/views/playlists/Detail.vue:39 +#: front/src/components/auth/Settings.vue:274 +#: src/components/auth/Settings.vue:302 +msgctxt "*/*/Button.Label" +msgid "Delete my account" +msgstr "Supprimer mon compte" + +#: front/src/components/auth/Settings.vue:297 +msgctxt "*/*/Button.Label" +msgid "Delete my account…" +msgstr "Supprimer mon compte…" + +#: front/src/views/playlists/Detail.vue:47 msgctxt "Popup/Playlist/Button.Label/Verb" msgid "Delete playlist" msgstr "Supprimer la liste de lecture" @@ -1257,13 +1354,23 @@ msgctxt "Popup/Radio/Button.Label/Verb" msgid "Delete radio" msgstr "Supprimer la radio" -#: front/src/views/admin/library/AlbumDetail.vue:73 -#: front/src/views/admin/library/TrackDetail.vue:72 +#: front/src/components/manage/moderation/ReportCard.vue:357 +msgctxt "Content/Moderation/Button/Verb" +msgid "Delete reported object" +msgstr "Supprimer l’objet signalé" + +#: front/src/components/manage/moderation/ReportCard.vue:358 +msgctxt "Content/Moderation/Popup/Header" +msgid "Delete reported object?" +msgstr "Supprimer l’objet signalé ?" + +#: front/src/views/admin/library/AlbumDetail.vue:79 +#: front/src/views/admin/library/TrackDetail.vue:78 msgctxt "Popup/Library/Title" msgid "Delete this album?" msgstr "Supprimer cet album ?" -#: front/src/views/admin/library/ArtistDetail.vue:72 +#: front/src/views/admin/library/ArtistDetail.vue:77 msgctxt "Popup/Library/Title" msgid "Delete this artist?" msgstr "Supprimer cet artiste ?" @@ -1279,60 +1386,69 @@ msgctxt "Popup/Moderation/Title" msgid "Delete this moderation rule?" msgstr "Supprimer cette règle de modération ?" +#: front/src/components/manage/moderation/NotesThread.vue:25 +msgctxt "Popup/Moderation/Title" +msgid "Delete this note?" +msgstr "Supprimer cette note ?" + #: front/src/components/library/EditCard.vue:94 msgctxt "Popup/Library/Title" msgid "Delete this suggestion?" msgstr "Supprimer cette suggestion ?" +#: front/src/views/admin/library/TagDetail.vue:42 +msgctxt "Popup/Library/Title" +msgid "Delete this tag?" +msgstr "Supprimer ce tag ?" + #: front/src/views/admin/library/UploadDetail.vue:66 msgctxt "Popup/Library/Title" msgid "Delete this upload?" msgstr "Supprimer cet envoi ?" #: front/src/components/favorites/List.vue:35 -#: src/components/library/Albums.vue:26 -#: front/src/components/library/Artists.vue:26 +#: src/components/library/Albums.vue:30 +#: front/src/components/library/Artists.vue:30 #: src/components/library/Radios.vue:47 #: front/src/components/manage/library/AlbumsTable.vue:22 #: front/src/components/manage/library/ArtistsTable.vue:22 #: front/src/components/manage/library/EditsCardList.vue:40 #: front/src/components/manage/library/LibrariesTable.vue:31 +#: front/src/components/manage/library/TagsTable.vue:22 #: front/src/components/manage/library/TracksTable.vue:22 #: front/src/components/manage/library/UploadsTable.vue:41 #: front/src/components/manage/moderation/AccountsTable.vue:22 -#: front/src/components/manage/moderation/DomainsTable.vue:20 +#: front/src/components/manage/moderation/DomainsTable.vue:28 #: front/src/components/manage/users/UsersTable.vue:20 +#: front/src/views/admin/moderation/ReportsList.vue:45 #: front/src/views/content/libraries/FilesTable.vue:32 #: front/src/views/playlists/List.vue:28 msgctxt "Content/Search/Dropdown" msgid "Descending" msgstr "Décroissant" -#: front/src/views/admin/library/LibraryDetail.vue:123 -msgctxt "*/*/*/Noun" -msgid "Description" -msgstr "Description" +#: front/src/components/manage/moderation/NoteForm.vue:37 +msgctxt "Content/Moderation/Placeholder" +msgid "Describe what actions have been taken, or any other related updates…" +msgstr "Décrivez quelles actions ont été prises, ou toute autre mise à jour liée…" #: front/src/components/library/radios/Builder.vue:25 +#: front/src/views/admin/library/LibraryDetail.vue:132 #: front/src/views/content/libraries/Form.vue:14 -msgctxt "Content/*/Input.Label/Noun" +msgctxt "*/*/*/Noun" msgid "Description" msgstr "Description" #: front/src/views/content/libraries/Card.vue:48 -#: src/views/content/remote/Card.vue:54 +#: src/views/content/remote/Card.vue:67 msgctxt "Content/Library/Card.Button.Label/Noun" msgid "Details" msgstr "Détails" -#: front/src/views/admin/moderation/AccountsDetail.vue:491 +#: front/src/views/admin/moderation/AccountsDetail.vue:511 msgctxt "Content/Moderation/Help text" -msgid "" -"Determine how much content the user can upload. Leave empty to use the " -"default value of the instance." -msgstr "" -"Déterminez la quantité de contenu que l'utilisateur peut importer. Laissez " -"vide pour utiliser la valeur par défaut de l'instance." +msgid "Determine how much content the user can upload. Leave empty to use the default value of the instance." +msgstr "Déterminez la quantité de contenu que l'utilisateur peut importer. Laissez vide pour utiliser la valeur par défaut de l'instance." #: front/src/components/mixins/Translations.vue:8 #: front/src/components/mixins/Translations.vue:9 @@ -1341,38 +1457,50 @@ msgid "Determine the visibility level of your activity" msgstr "Détermine le niveau de visibilité de votre activité" #: front/src/components/auth/Settings.vue:104 -#: front/src/components/auth/SubsonicTokenForm.vue:51 +#: front/src/components/auth/SubsonicTokenForm.vue:56 msgctxt "Popup/Settings/Button.Label" msgid "Disable access" msgstr "Désactiver l'accès" -#: front/src/components/auth/SubsonicTokenForm.vue:48 +#: front/src/components/auth/SubsonicTokenForm.vue:53 msgctxt "Content/Settings/Button.Label/Verb" msgid "Disable Subsonic access" msgstr "Désactiver l'accès via Subsonic" -#: front/src/components/auth/SubsonicTokenForm.vue:49 +#: front/src/components/auth/SubsonicTokenForm.vue:54 msgctxt "Popup/Settings/Title" msgid "Disable Subsonic API access?" msgstr "Désactiver l'accès à l'API Subsonic ?" +#: front/src/components/About.vue:118 src/components/About.vue:131 +#: front/src/components/About.vue:144 #: front/src/components/manage/moderation/InstancePolicyForm.vue:18 #: front/src/views/admin/moderation/AccountsDetail.vue:157 #: front/src/views/admin/moderation/AccountsDetail.vue:161 -msgctxt "*/*/*" +msgctxt "*/*/*/State of feature" msgid "Disabled" msgstr "Désactivé" -#: front/src/views/admin/library/TrackDetail.vue:145 +#: front/src/views/admin/library/TrackDetail.vue:151 msgctxt "*/*/*/Noun" msgid "Disc number" msgstr "Numéro de disque" +#: front/src/components/Home.vue:157 +msgctxt "Content/Home/Link" +msgid "Discover everything you need to know about Funkwhale and its features" +msgstr "Découvrez tout ce que vous devez savoir à propos de Funkwhale et de ses fonctionnalités" + #: front/src/components/auth/SubsonicTokenForm.vue:13 msgctxt "Content/Settings/Link" msgid "Discover how to use Funkwhale from other apps" msgstr "Découvrez comment utiliser Funkwhale depuis d'autres applications" +#: front/src/views/Notifications.vue:45 +msgctxt "Content/Notifications/Button.Label/Verb" +msgid "Discover other ways to help" +msgstr "Découvrez d’autres façons d’aider" + #: front/src/views/admin/moderation/AccountsDetail.vue:132 msgctxt "'Content/*/*/Noun'" msgid "Display name" @@ -1385,12 +1513,13 @@ msgstr "Afficher publiquement" #: front/src/components/manage/moderation/InstancePolicyForm.vue:122 msgctxt "Content/Moderation/Help text" -msgid "" -"Do not download any media file (audio, album cover, account avatar…) from " -"this account or domain. This will purge existing content as well." -msgstr "" -"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." +msgid "Do not download any media file (audio, album cover, account avatar…) from this account or domain. This will purge existing content as well." +msgstr "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." + +#: front/src/views/Notifications.vue:36 +msgctxt "Content/Notifications/Header" +msgid "Do you like Funkwhale?" +msgstr "Vous aimez Funkwhale ?" #: front/src/components/playlists/Editor.vue:51 msgctxt "Popup/Playlist/Title" @@ -1402,7 +1531,7 @@ msgctxt "Modal/*/Title" msgid "Do you want to confirm this action?" msgstr "Souhaitez-vous confirmer cette action ?" -#: front/src/views/playlists/Detail.vue:35 +#: front/src/views/playlists/Detail.vue:43 msgctxt "Popup/Playlist/Title/Call to action" msgid "Do you want to delete the playlist \"%{ playlist }\"?" msgstr "Voulez-vous supprimer la liste de lecture « %{ playlist } » ?" @@ -1412,6 +1541,11 @@ msgctxt "Popup/Radio/Title" msgid "Do you want to delete the radio \"%{ radio }\"?" msgstr "Voulez-vous supprimer la radio « %{ radio } » ?" +#: front/src/components/auth/Settings.vue:298 +msgctxt "Popup/Settings/Title" +msgid "Do you want to delete your account?" +msgstr "Souhaitez-vous supprimer votre compte ?" + #: front/src/components/moderation/FilterModal.vue:3 msgctxt "Popup/Moderation/Title/Verb" msgid "Do you want to hide content from artist \"%{ name }\"?" @@ -1421,12 +1555,15 @@ msgstr "Voulez-vous cacher le contenu de l’artiste « %{ name } » ?" msgctxt "Modal/*/Title" msgid "Do you want to launch %{ action } on %{ count } element?" msgid_plural "Do you want to launch %{ action } on %{ count } elements?" -msgstr[0] "" -"Voulez-vous effectuer l'action « %{ action } » sur %{ count } élément ?" -msgstr[1] "" -"Voulez-vous effectuer l'action « \"%{ action } » sur %{ count } éléments ?" +msgstr[0] "Voulez-vous effectuer l'action « %{ action } » sur %{ count } élément ?" +msgstr[1] "Voulez-vous effectuer l'action « \"%{ action } » sur %{ count } éléments ?" -#: front/src/components/Sidebar.vue:118 +#: front/src/components/moderation/ReportModal.vue:3 +msgctxt "Popup/Moderation/Title/Verb" +msgid "Do you want to report this object?" +msgstr "Souhaitez-vous signaler cet élément ?" + +#: front/src/components/Sidebar.vue:122 msgctxt "Sidebar/Queue/Message" msgid "Do you want to restore your previous queue?" msgstr "Souhaitez-vous restaurer la dernière liste d'attente ?" @@ -1442,26 +1579,33 @@ msgstr "Documentation" #: front/src/components/manage/library/TracksTable.vue:42 #: front/src/components/manage/library/UploadsTable.vue:62 #: front/src/components/manage/moderation/AccountsTable.vue:40 -#: front/src/components/mixins/Translations.vue:60 -#: front/src/views/admin/library/AlbumDetail.vue:118 -#: front/src/views/admin/library/ArtistDetail.vue:107 -#: front/src/views/admin/library/LibraryDetail.vue:114 -#: front/src/views/admin/library/TrackDetail.vue:170 +#: front/src/components/manage/moderation/ReportCard.vue:169 +#: front/src/components/manage/moderation/ReportCard.vue:179 +#: front/src/components/mixins/Translations.vue:72 +#: front/src/views/admin/library/AlbumDetail.vue:124 +#: front/src/views/admin/library/ArtistDetail.vue:112 +#: front/src/views/admin/library/LibraryDetail.vue:123 +#: front/src/views/admin/library/TrackDetail.vue:176 #: front/src/views/admin/library/UploadDetail.vue:121 #: front/src/views/admin/moderation/AccountsDetail.vue:123 -#: front/src/components/mixins/Translations.vue:61 +#: front/src/components/mixins/Translations.vue:73 msgctxt "Content/Moderation/*/Noun" msgid "Domain" msgstr "Domaine" -#: front/src/views/admin/moderation/Base.vue:5 +#: front/src/views/admin/moderation/Base.vue:8 #: front/src/views/admin/moderation/DomainsList.vue:3 -#: front/src/views/admin/moderation/DomainsList.vue:48 +#: front/src/views/admin/moderation/DomainsList.vue:54 msgctxt "*/Moderation/*/Noun" msgid "Domains" msgstr "Domaines" -#: front/src/components/library/TrackBase.vue:39 +#: front/src/views/Notifications.vue:42 +msgctxt "Content/Notifications/Button.Label/Verb" +msgid "Donate" +msgstr "Donner" + +#: front/src/components/library/TrackBase.vue:37 #: front/src/views/admin/library/UploadDetail.vue:58 msgctxt "Content/Track/Link/Verb" msgid "Download" @@ -1470,16 +1614,14 @@ msgstr "Télécharger" #: front/src/components/playlists/Editor.vue:59 msgctxt "Content/Playlist/Paragraph/Call to action" msgid "Drag and drop rows to reorder tracks in the playlist" -msgstr "" -"Glissez et déposer les lignes pour réordonner les pistes dans la liste de " -"lecture" +msgstr "Glissez et déposer les lignes pour réordonner les pistes dans la liste de lecture" #: front/src/components/audio/track/Table.vue:10 #: front/src/components/library/TrackDetail.vue:30 -#: front/src/components/mixins/Translations.vue:56 +#: front/src/components/mixins/Translations.vue:68 #: front/src/views/admin/library/UploadDetail.vue:238 #: front/src/views/content/libraries/FilesTable.vue:60 -#: front/src/components/mixins/Translations.vue:57 +#: front/src/components/mixins/Translations.vue:69 msgctxt "Content/*/*" msgid "Duration" msgstr "Durée" @@ -1489,41 +1631,27 @@ msgctxt "Content/Signup/Message" msgid "E-mail address confirmed" msgstr "Courriel confirmé" -#: front/src/components/Home.vue:88 -msgctxt "Content/Home/Title" -msgid "Easy to use" -msgstr "Simple à utiliser" - -#: front/src/components/library/AlbumBase.vue:68 -#: front/src/components/library/ArtistBase.vue:79 -#: front/src/components/library/TrackBase.vue:87 +#: front/src/components/auth/Settings.vue:246 +#: src/components/library/AlbumBase.vue:73 +#: front/src/components/library/ArtistBase.vue:84 +#: front/src/components/library/TrackBase.vue:89 #: front/src/components/manage/moderation/InstancePolicyCard.vue:45 #: front/src/components/radios/Card.vue:23 -#: src/views/admin/library/AlbumDetail.vue:65 -#: front/src/views/admin/library/ArtistDetail.vue:64 -#: front/src/views/admin/library/TrackDetail.vue:64 +#: src/views/admin/library/AlbumDetail.vue:71 +#: front/src/views/admin/library/ArtistDetail.vue:69 +#: front/src/views/admin/library/TrackDetail.vue:70 #: front/src/views/content/libraries/Detail.vue:9 #: src/views/playlists/Detail.vue:31 msgctxt "Content/*/Button.Label/Verb" msgid "Edit" msgstr "Éditer" -#: front/src/components/auth/Settings.vue:246 -msgctxt "Content/Settings/Button.Label" -msgid "Edit" -msgstr "Éditer" - #: front/src/components/auth/ApplicationEdit.vue:30 #: front/src/components/auth/ApplicationEdit.vue:75 msgctxt "Content/Applications/Title" msgid "Edit application" msgstr "Éditer l'application" -#: front/src/components/About.vue:22 -msgctxt "Content/Settings/Button.Label/Verb" -msgid "Edit instance info" -msgstr "Éditer les informations concernant cette instance" - #: front/src/components/manage/moderation/InstancePolicyForm.vue:3 msgctxt "Content/Moderation/Card.Title/Verb" msgid "Edit moderation rule" @@ -1544,23 +1672,20 @@ msgctxt "Content/*/Title" msgid "Edit this track" msgstr "Modifier cette piste" -#: front/src/views/admin/library/AlbumDetail.vue:182 -#: front/src/views/admin/library/ArtistDetail.vue:171 +#: front/src/components/mixins/Translations.vue:116 +#: front/src/views/admin/library/AlbumDetail.vue:198 +#: front/src/views/admin/library/ArtistDetail.vue:186 #: front/src/views/admin/library/Base.vue:5 #: src/views/admin/library/EditsList.vue:24 -#: front/src/views/admin/library/TrackDetail.vue:234 +#: front/src/views/admin/library/TrackDetail.vue:250 +#: front/src/components/mixins/Translations.vue:117 msgctxt "*/Admin/*/Noun" msgid "Edits" msgstr "Modifications" -#: front/src/components/mixins/Translations.vue:104 -#: front/src/components/mixins/Translations.vue:105 -msgctxt "Content/OAuth Scopes/Label" -msgid "Edits" -msgstr "Modifications" - -#: front/src/components/auth/Signup.vue:30 +#: front/src/components/auth/SignupForm.vue:26 #: front/src/components/manage/users/UsersTable.vue:38 +#: front/src/components/moderation/ReportModal.vue:31 msgctxt "Content/*/*/Noun" msgid "Email" msgstr "Courriel" @@ -1570,50 +1695,58 @@ msgctxt "Content/*/*" msgid "Email address" msgstr "Adresse de courriel" -#: front/src/components/library/AlbumBase.vue:53 -#: front/src/components/library/ArtistBase.vue:64 -#: front/src/components/library/TrackBase.vue:72 +#: front/src/components/library/AlbumBase.vue:54 +#: front/src/components/library/ArtistBase.vue:65 +#: front/src/components/library/TrackBase.vue:70 +#: src/views/playlists/Detail.vue:38 msgctxt "Content/*/Button.Label/Verb" msgid "Embed" msgstr "Insérer" -#: front/src/components/audio/EmbedWizard.vue:20 +#: front/src/components/audio/EmbedWizard.vue:30 msgctxt "Popup/Embed/Input.Label/Noun" msgid "Embed code" msgstr "Code inséré" -#: front/src/components/library/AlbumBase.vue:26 +#: front/src/components/library/AlbumBase.vue:27 msgctxt "Popup/Album/Title/Verb" msgid "Embed this album on your website" msgstr "Insérez cet album dans votre site web" -#: front/src/components/library/ArtistBase.vue:37 +#: front/src/components/library/ArtistBase.vue:38 msgctxt "Popup/Artist/Title/Verb" msgid "Embed this artist work on your website" msgstr "Insérez cet·te artiste dans votre site web" -#: front/src/components/library/TrackBase.vue:45 +#: front/src/views/playlists/Detail.vue:52 +msgctxt "Popup/Album/Title/Verb" +msgid "Embed this playlist on your website" +msgstr "Insérez cette playlist dans votre site web" + +#: front/src/components/library/TrackBase.vue:43 msgctxt "Popup/Track/Title" msgid "Embed this track on your website" msgstr "Insérez cette piste dans votre site web" -#: front/src/views/admin/moderation/AccountsDetail.vue:259 -#: front/src/views/admin/moderation/DomainsDetail.vue:187 +#: front/src/views/admin/moderation/AccountsDetail.vue:260 +#: front/src/views/admin/moderation/DomainsDetail.vue:224 msgctxt "Content/Moderation/Table.Label/Noun" msgid "Emitted library follows" msgstr "Suivi de la bibliothèque émise" -#: front/src/views/admin/moderation/AccountsDetail.vue:243 -#: front/src/views/admin/moderation/DomainsDetail.vue:171 +#: front/src/views/admin/moderation/AccountsDetail.vue:244 +#: front/src/views/admin/moderation/DomainsDetail.vue:208 msgctxt "Content/Moderation/Table.Label/Noun" msgid "Emitted messages" msgstr "Messages émis" +#: front/src/components/About.vue:114 src/components/About.vue:127 +#: front/src/components/About.vue:140 #: front/src/components/manage/moderation/InstancePolicyCard.vue:8 #: front/src/components/manage/moderation/InstancePolicyForm.vue:17 #: front/src/views/admin/moderation/AccountsDetail.vue:156 #: front/src/views/admin/moderation/AccountsDetail.vue:160 -msgctxt "*/*/*" +msgctxt "*/*/*/State of feature" msgid "Enabled" msgstr "Activé" @@ -1632,9 +1765,9 @@ msgctxt "Content/Search/Input.Placeholder" msgid "Enter a radio name…" msgstr "Saisissez un nom de radio…" -#: front/src/components/library/Albums.vue:119 +#: front/src/components/library/Albums.vue:128 msgctxt "Content/Search/Input.Placeholder" -msgid "Enter album title..." +msgid "Enter album title…" msgstr "Entrer le titre de l’album…" #: front/src/components/library/Artists.vue:116 @@ -1649,15 +1782,16 @@ msgstr "Saisissez un nom de playlist…" #: front/src/views/auth/PasswordReset.vue:54 msgctxt "Content/Signup/Input.Placeholder" -msgid "Enter the email address binded to your account" -msgstr "Saisissez l'adresse de courriel associée à votre compte" +msgid "Enter the email address linked to your account" +msgstr "Saisissez l'adresse email associée à votre compte" -#: front/src/components/auth/Signup.vue:103 +#: front/src/components/auth/SignupForm.vue:96 msgctxt "Content/Signup/Form/Placeholder" msgid "Enter your email" msgstr "Saisissez votre courriel" -#: front/src/components/auth/Signup.vue:98 src/components/auth/Signup.vue:100 +#: front/src/components/auth/SignupForm.vue:91 +#: src/components/auth/SignupForm.vue:93 msgctxt "Content/Signup/Form/Placeholder" msgid "Enter your invitation code (case insensitive)" msgstr "Saisissez votre code d'invitation (insensible à la casse)" @@ -1667,12 +1801,12 @@ msgctxt "Content/Library/Input.Placeholder/Verb" msgid "Enter your search query…" msgstr "Saisissez votre recherche…" -#: front/src/components/auth/Signup.vue:102 +#: front/src/components/auth/SignupForm.vue:95 msgctxt "Content/Signup/Form/Placeholder" msgid "Enter your username" msgstr "Saisissez votre nom d'utilisateur·rice" -#: front/src/components/auth/Login.vue:83 +#: front/src/components/auth/LoginForm.vue:81 msgctxt "Content/Login/Input.Placeholder" msgid "Enter your username or email" msgstr "Saisissez votre nom d'utilisateur·rice ou courriel" @@ -1689,7 +1823,7 @@ msgctxt "Popup/Import/Table.Label/Noun" msgid "Error detail" msgstr "Détail de l'erreur" -#: front/src/views/admin/Settings.vue:87 +#: front/src/views/admin/Settings.vue:89 msgctxt "Content/Admin/Menu" msgid "Error reporting" msgstr "Rapports d'erreur" @@ -1745,16 +1879,12 @@ msgctxt "Popup/Moderation/Error message" msgid "Error while fetching application data" msgstr "Erreur lors de la récupération des données de l'application" -#: front/src/views/admin/moderation/DomainsDetail.vue:118 +#: front/src/views/admin/moderation/DomainsDetail.vue:155 msgctxt "Content/Moderation/Table" msgid "Error while fetching node info" msgstr "Erreur lors de la récupération des informations du nÅ“ud" #: front/src/components/admin/SettingsGroup.vue:5 -msgctxt "Content/Settings/Error message.Title" -msgid "Error while saving settings" -msgstr "Erreur pendant l'enregistrement des paramètres" - #: front/src/components/federation/FetchButton.vue:73 msgctxt "Content/*/Error message.Title" msgid "Error while saving settings" @@ -1765,6 +1895,16 @@ msgctxt "Content/Library/Error message.Title" msgid "Error while submitting edit" msgstr "Erreur durant l'envoi des modifications" +#: front/src/components/manage/moderation/NoteForm.vue:3 +msgctxt "Content/Moderation/Error message.Title" +msgid "Error while submitting note" +msgstr "Erreur pendant la création de la note" + +#: front/src/components/moderation/ReportModal.vue:11 +msgctxt "Popup/Moderation/Error message" +msgid "Error while submitting report" +msgstr "Erreur pendant l'envoi du signalement" + #: front/src/components/mixins/Translations.vue:32 #: front/src/components/mixins/Translations.vue:33 msgctxt "Content/Library/Table/Short" @@ -1799,9 +1939,14 @@ msgctxt "Content/Radio/Table.Label/Verb" msgid "Exclude" msgstr "Exclure" +#: front/src/components/common/CollapseLink.vue:2 +msgctxt "*/*/Button,Label" +msgid "Expand" +msgstr "Développer" + #: front/src/components/manage/users/InvitationsTable.vue:41 -#: front/src/components/mixins/Translations.vue:49 -#: front/src/components/mixins/Translations.vue:50 +#: front/src/components/mixins/Translations.vue:59 +#: front/src/components/mixins/Translations.vue:60 msgctxt "Content/Admin/Table.Label/Noun" msgid "Expiration date" msgstr "Date d'expiration" @@ -1818,17 +1963,8 @@ msgstr "Expirée/utilisée" #: front/src/components/manage/moderation/InstancePolicyForm.vue:110 msgctxt "Content/Moderation/Help text" -msgid "" -"Explain why you're applying this policy. Depending on your instance " -"configuration, this will help you remember why you acted on this account or " -"domain, and may be displayed publicly to help users understand what " -"moderation rules are in place." -msgstr "" -"Expliquez pourquoi vous appliquez cette règle. En fonction de votre " -"configuration d'instance, cela vous aidera à vous rappeler pourquoi vous " -"avez agis sur ce compte ou domaine, et peut être affiché publiquement pour " -"aider les utilisateurs à comprendre quelles règles de modération sont en " -"place." +msgid "Explain why you're applying this policy. Depending on your instance configuration, this will help you remember why you acted on this account or domain, and may be displayed publicly to help users understand what moderation rules are in place." +msgstr "Expliquez pourquoi vous appliquez cette règle. En fonction de votre configuration d'instance, cela vous aidera à vous rappeler pourquoi vous avez agis sur ce compte ou domaine, et peut être affiché publiquement pour aider les utilisateurs à comprendre quelles règles de modération sont en place." #: front/src/components/manage/library/UploadsTable.vue:25 #: front/src/views/content/libraries/FilesTable.vue:16 @@ -1836,31 +1972,27 @@ msgctxt "Content/Library/Dropdown" msgid "Failed" msgstr "Échoué" -#: front/src/views/content/remote/Card.vue:62 +#: front/src/views/content/remote/Card.vue:75 msgctxt "Content/Library/Card.List item/Noun" msgid "Failed tracks:" msgstr "Pistes échouées :" -#: front/src/views/admin/library/AlbumDetail.vue:165 -#: front/src/views/admin/library/ArtistDetail.vue:154 -#: front/src/views/admin/library/TrackDetail.vue:217 +#: front/src/views/admin/library/AlbumDetail.vue:171 +#: front/src/views/admin/library/ArtistDetail.vue:159 +#: front/src/views/admin/library/TrackDetail.vue:223 msgctxt "*/*/*" msgid "Favorited tracks" msgstr "Pistes favorites" #: front/src/components/Sidebar.vue:66 +#: src/components/mixins/Translations.vue:88 +#: front/src/components/mixins/Translations.vue:89 msgctxt "Sidebar/Favorites/List item.Link/Noun" msgid "Favorites" msgstr "Favoris" -#: front/src/components/mixins/Translations.vue:76 -#: front/src/components/mixins/Translations.vue:77 -msgctxt "Content/OAuth Scopes/Label" -msgid "Favorites" -msgstr "Favoris" - -#: front/src/views/admin/Settings.vue:84 -msgctxt "Content/Admin/Menu" +#: front/src/components/About.vue:110 src/views/admin/Settings.vue:84 +msgctxt "*/*/*" msgid "Federation" msgstr "Fédération" @@ -1884,6 +2016,11 @@ msgctxt "Content/Radio/Table.Label/Noun" msgid "Filter name" msgstr "Nom du filtre" +#: front/src/components/Home.vue:118 +msgctxt "Content/Home/Link" +msgid "Find another pod" +msgstr "Trouver un autre pod" + #: front/src/components/manage/library/UploadsTable.vue:26 #: front/src/components/mixins/Translations.vue:36 #: front/src/views/content/libraries/FilesTable.vue:17 @@ -1893,25 +2030,31 @@ msgid "Finished" msgstr "Terminé" #: front/src/components/manage/moderation/AccountsTable.vue:42 -#: front/src/components/manage/moderation/DomainsTable.vue:41 -#: front/src/views/admin/library/AlbumDetail.vue:149 -#: front/src/views/admin/library/ArtistDetail.vue:138 -#: front/src/views/admin/library/LibraryDetail.vue:153 -#: front/src/views/admin/library/TrackDetail.vue:201 +#: front/src/components/manage/moderation/DomainsTable.vue:49 +#: front/src/views/admin/library/AlbumDetail.vue:155 +#: front/src/views/admin/library/ArtistDetail.vue:143 +#: front/src/views/admin/library/LibraryDetail.vue:162 +#: front/src/views/admin/library/TagDetail.vue:98 +#: front/src/views/admin/library/TrackDetail.vue:207 #: front/src/views/admin/library/UploadDetail.vue:167 -#: front/src/views/admin/moderation/AccountsDetail.vue:235 -#: front/src/views/admin/moderation/DomainsDetail.vue:151 +#: front/src/views/admin/moderation/AccountsDetail.vue:236 +#: front/src/views/admin/moderation/DomainsDetail.vue:188 msgctxt "Content/Moderation/Table.Label/Short (Value is a date)" msgid "First seen" msgstr "Vu pour la première fois" -#: front/src/components/mixins/Translations.vue:46 -#: front/src/components/mixins/Translations.vue:47 +#: front/src/components/mixins/Translations.vue:56 +#: front/src/components/mixins/Translations.vue:57 msgctxt "Content/Moderation/Dropdown/Noun" msgid "First seen date" msgstr "Date de découverte" -#: front/src/views/content/remote/Card.vue:87 +#: front/src/components/ShortcutsModal.vue:64 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Focus searchbar" +msgstr "Mettre le focus dans la barre de recherche" + +#: front/src/views/content/remote/Card.vue:100 msgctxt "Content/Library/Card.Button.Label/Verb" msgid "Follow" msgstr "Suivre" @@ -1921,43 +2064,35 @@ msgctxt "Content/Library/Title/Verb" msgid "Follow remote libraries" msgstr "Suivre des bibliothèques distantes" -#: front/src/views/content/remote/Card.vue:92 +#: front/src/views/content/remote/Card.vue:105 msgctxt "Content/Library/Card.Paragraph" msgid "Follow request pending approval" msgstr "Demande de suivi en attente de validation" -#: front/src/components/mixins/Translations.vue:64 -#: front/src/views/admin/library/LibraryDetail.vue:161 +#: front/src/components/manage/library/LibrariesTable.vue:53 +#: front/src/components/mixins/Translations.vue:76 +#: front/src/views/admin/library/LibraryDetail.vue:170 #: front/src/views/content/libraries/Detail.vue:7 -#: front/src/components/mixins/Translations.vue:65 +#: front/src/components/mixins/Translations.vue:77 msgctxt "Content/Federation/*/Noun" msgid "Followers" msgstr "Abonnés" -#: front/src/components/manage/library/LibrariesTable.vue:53 -msgctxt "Content/*/*/Noun" -msgid "Followers" -msgstr "Abonné·es" - -#: front/src/views/content/remote/Card.vue:103 +#: front/src/views/content/remote/Card.vue:116 msgctxt "Content/Library/Card.Paragraph" msgid "Following" msgstr "Abonné" -#: front/src/components/mixins/Translations.vue:84 -#: front/src/components/mixins/Translations.vue:85 +#: front/src/components/mixins/Translations.vue:96 +#: front/src/components/mixins/Translations.vue:97 msgctxt "Content/OAuth Scopes/Label" msgid "Follows" msgstr "Abonnements" -#: front/src/components/library/TrackBase.vue:17 +#: front/src/components/library/TrackBase.vue:245 msgctxt "Content/Track/Paragraph" -msgid "" -"From album <a class=\"internal\" href=\"%{ albumUrl }\">%{ album }</a> by <a" -" class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" -msgstr "" -"De l’album <a class=\"internal\" href=\"%{ albumUrl }\">%{ album }</a> par " -"<a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" +msgid "From album <a class=\"internal\" href=\"%{ albumUrl }\">%{ album }</a> by <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" +msgstr "De l’album <a class=\"internal\" href=\"%{ albumUrl }\">%{ album }</a> par <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" #: front/src/components/auth/Authorize.vue:28 msgctxt "Content/Auth/Label/Noun" @@ -1966,38 +2101,21 @@ msgstr "Accès total" #: front/src/components/auth/SubsonicTokenForm.vue:7 msgctxt "Content/Settings/Paragraph'" -msgid "" -"Funkwhale is compatible with other music players that support the Subsonic " -"API." -msgstr "" -"Funkwhale est compatible avec d'autres lecteurs de musique qui supportent " -"l'API Subsonic." - -#: front/src/components/Home.vue:90 -msgctxt "Content/Home/Paragraph" -msgid "Funkwhale is dead simple to use." -msgstr "Funkwhale est très simple à utiliser." +msgid "Funkwhale is compatible with other music players that support the Subsonic API." +msgstr "Funkwhale est compatible avec d'autres lecteurs de musique qui supportent l'API Subsonic." -#: front/src/components/Home.vue:39 +#: front/src/components/Home.vue:88 msgctxt "Content/Home/Paragraph" -msgid "" -"Funkwhale is designed to make it easy to listen to music you like, or to " -"discover new artists." +msgid "Funkwhale is free and developped by a friendly community of volunteers." msgstr "" -"Funkwhale est conçu pour faciliter l'écoute des musiques que vous aimez et " -"découvrir de nouveaux artistes." - -#: front/src/components/Home.vue:111 -msgctxt "Content/Home/Paragraph" -msgid "Funkwhale is free and gives you control on your music." -msgstr "Funkwhale est gratuit et vous donne le contrôle sur votre musique." +"Funkwhale est gratuit développé par une communauté accueillante de bénévoles." -#: front/src/components/Home.vue:66 -msgctxt "Content/Home/Paragraph" -msgid "Funkwhale takes care of handling your music" -msgstr "Funkwhale prend soin de votre musique" +#: front/src/components/About.vue:78 +msgctxt "*/*/*" +msgid "Funkwhale version" +msgstr "Version de Funkwhale" -#: front/src/components/ShortcutsModal.vue:38 +#: front/src/components/ShortcutsModal.vue:56 msgctxt "Popup/Keyboard shortcuts/Title" msgid "General shortcuts" msgstr "Raccourcis généraux" @@ -2007,35 +2125,17 @@ msgctxt "Content/Admin/Button.Label/Verb" msgid "Get a new invitation" msgstr "Obtenir une nouvelle invitation" -#: front/src/components/Home.vue:13 -msgctxt "Content/Home/Button.Label/Verb" -msgid "Get me to the library" -msgstr "Amenez-moi à la bibliothèque" - -#: front/src/components/Home.vue:70 -msgctxt "Content/Home/List item/Verb" -msgid "" -"Get quality metadata about your music thanks to <a href=\"%{ url }\" " -"target=\"_blank\">MusicBrainz</a>" -msgstr "" -"Obtenez des métadonnées de qualité pour votre musique grâce à <a href=\"%{ " -"url }\" target=\"_blank\">MusicBrainz</a>" - #: front/src/views/content/Home.vue:12 src/views/content/Home.vue:19 msgctxt "Content/Library/Button.Label/Verb" msgid "Get started" msgstr "Commencer" -#: front/src/components/Footer.vue:37 +#: front/src/components/Footer.vue:45 +#: src/components/library/ImportStatusModal.vue:45 msgctxt "Footer/*/Link" msgid "Getting help" msgstr "Obtenir de l'aide" -#: front/src/components/library/ImportStatusModal.vue:45 -msgctxt "Popup/Import/Table.Label/Noun" -msgid "Getting help" -msgstr "Obtenir de l'aide" - #: front/src/components/common/ActionTable.vue:35 #: front/src/components/common/ActionTable.vue:56 msgctxt "Content/*/Button.Label/Short, Verb" @@ -2047,11 +2147,21 @@ msgctxt "Content/*/Button.Label/Verb" msgid "Go to home page" msgstr "Retourner à la page d'accueil" +#: front/src/views/Notifications.vue:27 src/views/Notifications.vue:61 +msgctxt "Content/Notifications/Button.Label" +msgid "Got it!" +msgstr "Compris !" + #: front/src/components/auth/Settings.vue:128 msgctxt "Content/Settings/Title" msgid "Hidden artists" msgstr "Artistes caché·es" +#: front/src/components/About.vue:155 +msgctxt "*/*/*/Verb" +msgid "Hide" +msgstr "Cacher" + #: front/src/components/manage/moderation/InstancePolicyForm.vue:114 msgctxt "Content/Moderation/Help text" msgid "Hide account or domain content, except from followers." @@ -2062,12 +2172,12 @@ msgctxt "Popup/*/Button.Label" msgid "Hide content" msgstr "Cacher le contenu" -#: front/src/components/audio/PlayButton.vue:26 +#: front/src/components/audio/PlayButton.vue:31 msgctxt "*/Queue/Dropdown/Button/Label/Short" msgid "Hide content from this artist" msgstr "Cacher le contenu de cet·te artiste" -#: front/src/components/audio/Player.vue:643 +#: front/src/components/audio/Player.vue:669 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Hide content from this artist…" msgstr "Cacher le contenu de cet·te artiste…" @@ -2077,26 +2187,14 @@ msgctxt "Head/Home/Title" msgid "Home" msgstr "Accueil" -#: front/src/components/instance/Stats.vue:36 -msgctxt "Content/About/Paragraph/Unit" -msgid "Hours of music" -msgstr "Heures de musique" - #: front/src/components/auth/SubsonicTokenForm.vue:10 msgctxt "Content/Settings/Paragraph" -msgid "" -"However, accessing Funkwhale from those clients require a separate password " -"you can set below." -msgstr "" -"Cependant, accéder à Funkwhale depuis ces clients requiert un mot de passe " -"distinct que vous pouvez configurer ci-dessous." +msgid "However, accessing Funkwhale from those clients require a separate password you can set below." +msgstr "Cependant, accéder à Funkwhale depuis ces clients requiert un mot de passe distinct que vous pouvez configurer ci-dessous." #: front/src/views/auth/PasswordResetConfirm.vue:24 msgctxt "Content/Signup/Paragraph" -msgid "" -"If the email address provided in the previous step is valid and binded to a " -"user account, you should receive an email with reset instructions in the " -"next couple of minutes." +msgid "If the email address provided in the previous step is valid and linked to a user account, you should receive an email with reset instructions in the next couple of minutes." msgstr "" "Si l'adresse email que vous avez fournie est valide et associée à un compte " "utilisateur, vous allez recevoir un email contenant les instructions de " @@ -2104,12 +2202,14 @@ msgstr "" #: front/src/components/auth/Settings.vue:205 msgctxt "Content/Applications/Paragraph" -msgid "" -"If you authorize third-party applications to access your data, those " -"applications will be listed here." -msgstr "" -"Si vous autorisez des applications tierces à accéder à vos données, ces " -"applications seront listées ici." +msgid "If you authorize third-party applications to access your data, those applications will be listed here." +msgstr "Si vous autorisez des applications tierces à accéder à vos données, ces applications seront listées ici." + +#: front/src/components/mixins/Translations.vue:46 +#: front/src/components/mixins/Translations.vue:47 +msgctxt "Content/Moderation/Dropdown" +msgid "Illegal content" +msgstr "Contenu illégal" #: front/src/components/library/ImportStatusModal.vue:3 msgctxt "Popup/Import/Title" @@ -2122,14 +2222,10 @@ msgid "Import reference" msgstr "Référence de l'importation" #: front/src/components/manage/library/UploadsTable.vue:20 -#: front/src/views/content/libraries/FilesTable.vue:11 -#: front/src/views/content/libraries/FilesTable.vue:59 -msgctxt "Content/Library/*/Noun" -msgid "Import status" -msgstr "Statut de l'import" - #: front/src/components/manage/library/UploadsTable.vue:64 #: front/src/views/admin/library/UploadDetail.vue:131 +#: front/src/views/content/libraries/FilesTable.vue:11 +#: front/src/views/content/libraries/FilesTable.vue:59 msgctxt "Content/*/*/Noun" msgid "Import status" msgstr "Statut de l'import" @@ -2163,20 +2259,19 @@ msgstr "Dans les favoris" #: front/src/components/moderation/FilterModal.vue:25 msgctxt "Popup/Moderation/List item" msgid "In other users favorites and listening history" -msgstr "" -"Dans les favoris des autres utilisateurs et dans l'historique d'écoute" +msgstr "Dans les favoris des autres utilisateurs et dans l'historique d'écoute" #: front/src/components/moderation/FilterModal.vue:28 msgctxt "Popup/Moderation/List item" msgid "In radio suggestions" msgstr "Dans les suggestions radio" -#: front/src/components/manage/users/UsersTable.vue:54 +#: front/src/components/manage/users/UsersTable.vue:55 msgctxt "Content/Admin/Table" msgid "Inactive" msgstr "Inactif" -#: front/src/components/ShortcutsModal.vue:71 +#: front/src/components/ShortcutsModal.vue:124 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Increase volume" msgstr "Augmenter le volume" @@ -2194,7 +2289,7 @@ msgctxt "Content/Settings/Dropdown/Short" msgid "Instance" msgstr "Instance" -#: front/src/views/admin/moderation/DomainsDetail.vue:71 +#: front/src/views/admin/moderation/DomainsDetail.vue:99 msgctxt "Content/Moderation/Title" msgid "Instance data" msgstr "Informations de l'instance" @@ -2219,21 +2314,25 @@ msgctxt "Popup/Instance/Input.Label/Noun" msgid "Instance URL" msgstr "Adresse de l'instance" +#: front/src/components/manage/moderation/ReportCard.vue:92 +#: front/src/components/manage/moderation/ReportCard.vue:203 +msgctxt "Content/*/*/Noun" +msgid "Internal notes" +msgstr "Notes internes" + #: front/src/components/library/FileUpload.vue:268 msgctxt "Content/Library/Help text" -msgid "" -"Invalid file type, ensure you are uploading an audio file. Supported file " -"extensions are %{ extensions }" -msgstr "" -"Mauvais type de fichier, assurez-vous de charger un fichier audio. Les " -"formats de fichiers supportés sont %{ extensions }" +msgid "Invalid file type, ensure you are uploading an audio file. Supported file extensions are %{ extensions }" +msgstr "Mauvais type de fichier, assurez-vous de charger un fichier audio. Les formats de fichiers supportés sont %{ extensions }" #: front/src/components/library/ImportStatusModal.vue:139 +#: front/src/components/mixins/Translations.vue:45 +#: front/src/components/mixins/Translations.vue:46 msgctxt "Popup/Import/Error.Label" msgid "Invalid metadata" msgstr "Métadonnées invalides" -#: front/src/components/auth/Signup.vue:44 +#: front/src/components/auth/SignupForm.vue:40 #: front/src/components/manage/users/InvitationForm.vue:11 msgctxt "Content/*/Input.Label" msgid "Invitation code" @@ -2245,7 +2344,13 @@ msgctxt "*/Admin/*/Noun" msgid "Invitations" msgstr "Invitations" -#: front/src/components/Footer.vue:41 +#: front/src/components/manage/moderation/DomainsTable.vue:9 +#: front/src/views/admin/moderation/DomainsDetail.vue:106 +msgctxt "Content/Moderation/*/Adjective" +msgid "Is present on allow-list" +msgstr "Présent sur la liste d'autorisations" + +#: front/src/components/Footer.vue:49 msgctxt "Footer/*/List item.Link" msgid "Issue tracker" msgstr "Suivi des problèmes" @@ -2255,17 +2360,18 @@ msgctxt "Popup/Instance/Error message.Title" msgid "It is not possible to connect to the given URL" msgstr "Impossible de se connecter à l'URL renseignée" -#: front/src/components/Home.vue:50 -msgctxt "Content/Home/List item/Verb" -msgid "Keep a track of your favorite songs" -msgstr "Sauvegardez vos chansons favorites" +#: front/src/components/mixins/Translations.vue:65 +#: front/src/components/mixins/Translations.vue:66 +msgctxt "*/*/*/Noun" +msgid "Items" +msgstr "Éléments" #: front/src/components/Footer.vue:33 src/components/ShortcutsModal.vue:3 msgctxt "*/*/*/Noun" msgid "Keyboard shortcuts" msgstr "Raccourcis clavier" -#: front/src/views/admin/moderation/DomainsDetail.vue:161 +#: front/src/views/admin/moderation/DomainsDetail.vue:198 msgctxt "Content/Moderation/Table.Label.Link" msgid "Known accounts" msgstr "Comptes connus" @@ -2276,15 +2382,15 @@ msgid "Known libraries" msgstr "Bibliothèques connues" #: front/src/components/manage/users/UsersTable.vue:41 -#: front/src/components/mixins/Translations.vue:58 -#: front/src/views/admin/moderation/AccountsDetail.vue:205 -#: front/src/components/mixins/Translations.vue:59 +#: front/src/components/mixins/Translations.vue:70 +#: front/src/views/admin/moderation/AccountsDetail.vue:206 +#: front/src/components/mixins/Translations.vue:71 msgctxt "Content/Profile/Table.Label/Short, Noun (Value is a date)" msgid "Last activity" msgstr "Dernière activité" -#: front/src/views/admin/moderation/AccountsDetail.vue:188 -#: front/src/views/admin/moderation/DomainsDetail.vue:78 +#: front/src/views/admin/moderation/AccountsDetail.vue:189 +#: front/src/views/admin/moderation/DomainsDetail.vue:115 msgctxt "Content/*/Table.Label" msgid "Last checked" msgstr "Dernière vérification" @@ -2299,13 +2405,13 @@ msgctxt "Content/Moderation/Table.Label/Noun" msgid "Last seen" msgstr "Vu pour la dernière fois" -#: front/src/components/mixins/Translations.vue:47 -#: front/src/components/mixins/Translations.vue:48 +#: front/src/components/mixins/Translations.vue:57 +#: front/src/components/mixins/Translations.vue:58 msgctxt "Content/Moderation/Dropdown/Noun" msgid "Last seen date" msgstr "Date de dernier aperçu" -#: front/src/views/content/remote/Card.vue:60 +#: front/src/views/content/remote/Card.vue:73 msgctxt "Content/Library/Card.List item/Noun" msgid "Last update:" msgstr "Dernière mise à jour :" @@ -2315,60 +2421,58 @@ msgctxt "Modal/*/Button.Label/Short, Verb" msgid "Launch" msgstr "Démarrer" -#: front/src/components/Home.vue:10 -msgctxt "Content/Home/Button.Label/Verb" -msgid "Learn more about this instance" -msgstr "En savoir plus à propos de cette instance" +#: front/src/components/Home.vue:35 +msgctxt "Content/Home/Link" +msgid "Learn more" +msgstr "En savoir plus" #: front/src/components/manage/users/InvitationForm.vue:58 msgctxt "Content/Admin/Input.Placeholder" msgid "Leave empty for a random code" msgstr "Laisser vide pour obtenir un code aléatoire" -#: front/src/components/audio/EmbedWizard.vue:7 +#: front/src/components/audio/EmbedWizard.vue:17 msgctxt "Popup/Embed/Paragraph" msgid "Leave empty for a responsive widget" msgstr "Laisser vide pour un widget adaptatif" -#: front/src/views/admin/library/AlbumDetail.vue:232 -#: front/src/views/admin/library/ArtistDetail.vue:221 -#: front/src/views/admin/library/TrackDetail.vue:284 -#: front/src/views/admin/moderation/AccountsDetail.vue:327 -#: front/src/views/admin/moderation/DomainsDetail.vue:234 -#: front/src/views/content/Base.vue:5 +#: front/src/components/mixins/Translations.vue:64 +#: front/src/components/mixins/Translations.vue:65 msgctxt "*/*/*/Noun" -msgid "Libraries" -msgstr "Bibliothèques" +msgid "Length" +msgstr "Durée" +#: front/src/views/admin/library/AlbumDetail.vue:248 +#: front/src/views/admin/library/ArtistDetail.vue:236 #: front/src/views/admin/library/Base.vue:17 #: front/src/views/admin/library/LibrariesList.vue:24 -msgctxt "*/*/*" +#: front/src/views/admin/library/TrackDetail.vue:300 +#: front/src/views/admin/moderation/AccountsDetail.vue:339 +#: front/src/views/admin/moderation/DomainsDetail.vue:271 +#: front/src/views/content/Base.vue:5 +msgctxt "*/*/*/Noun" msgid "Libraries" msgstr "Bibliothèques" -#: front/src/components/mixins/Translations.vue:72 -#: front/src/components/mixins/Translations.vue:73 +#: front/src/components/mixins/Translations.vue:84 +#: front/src/components/mixins/Translations.vue:85 msgctxt "Content/OAuth Scopes/Label" msgid "Libraries and uploads" msgstr "Bibliothèques et téléversements" #: front/src/views/content/libraries/Form.vue:2 msgctxt "Content/Library/Paragraph" -msgid "" -"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." -msgstr "" -"Les bibliothèques vous aident à organiser et à partager votre collection de " -"musique. Vous pouvez téléverser votre bibliothèque musicale sur Funkwhale et" -" la partager avec vos amis et votre famille." +msgid "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." +msgstr "Les bibliothèques vous aident à organiser et à partager votre collection de musique. Vous pouvez téléverser votre bibliothèque musicale sur Funkwhale et la partager avec vos amis et votre famille." -#: front/src/components/Sidebar.vue:85 src/components/instance/Stats.vue:30 +#: front/src/components/Sidebar.vue:85 #: front/src/components/manage/library/UploadsTable.vue:60 -#: front/src/components/manage/users/UsersTable.vue:173 +#: front/src/components/manage/users/UsersTable.vue:174 +#: front/src/components/mixins/Report.vue:77 #: front/src/views/admin/library/UploadDetail.vue:144 -#: front/src/views/admin/moderation/AccountsDetail.vue:498 -msgctxt "*/*/*" +#: front/src/views/admin/moderation/AccountsDetail.vue:518 src/entities.js:132 +#: front/src/components/mixins/Report.vue:78 +msgctxt "*/*/*/Noun" msgid "Library" msgstr "Bibliothèque" @@ -2399,21 +2503,37 @@ msgstr "Bibliothèque mise à jour" #: front/src/components/library/TrackDetail.vue:19 #: front/src/components/manage/library/TracksTable.vue:43 -#: front/src/views/admin/library/TrackDetail.vue:159 src/edits.js:61 +#: front/src/views/admin/library/TrackDetail.vue:165 src/edits.js:84 +#: front/src/entities.js:115 msgctxt "Content/*/*/Noun" msgid "License" msgstr "Licence" -#: front/src/views/admin/library/AlbumDetail.vue:157 -#: front/src/views/admin/library/ArtistDetail.vue:146 -#: front/src/views/admin/library/TrackDetail.vue:209 -msgctxt "*/*/*/Noun" -msgid "Listenings" -msgstr "Écoutes" +#: front/src/components/Footer.vue:90 +msgctxt "Footer/Settings/Dropdown.Label/Theme name" +msgid "Light" +msgstr "Clair" -#: front/src/components/mixins/Translations.vue:80 -#: front/src/components/mixins/Translations.vue:81 -msgctxt "Content/OAuth Scopes/Label" +#: front/src/views/admin/library/AlbumDetail.vue:188 +#: front/src/views/admin/library/ArtistDetail.vue:176 +#: front/src/views/admin/library/LibraryDetail.vue:179 +#: front/src/views/admin/library/TrackDetail.vue:240 +#: front/src/views/admin/moderation/AccountsDetail.vue:269 +msgctxt "Content/Moderation/Table.Label/Noun" +msgid "Linked reports" +msgstr "Signalement liés" + +#: front/src/components/Home.vue:135 +msgctxt "Content/Home/Link" +msgid "Listen to public albums and playlists shared on this pod" +msgstr "Écouter les albums publics et les playlists disponibles sur ce pod" + +#: front/src/components/mixins/Translations.vue:92 +#: front/src/views/admin/library/AlbumDetail.vue:163 +#: front/src/views/admin/library/ArtistDetail.vue:151 +#: front/src/views/admin/library/TrackDetail.vue:215 +#: front/src/components/mixins/Translations.vue:93 +msgctxt "*/*/*/Noun" msgid "Listenings" msgstr "Écoutes" @@ -2439,7 +2559,7 @@ msgctxt "Content/Library/Paragraph" msgid "Loading library data…" msgstr "Chargement des données de la bibliothèque…" -#: front/src/views/Notifications.vue:19 +#: front/src/views/Notifications.vue:84 msgctxt "Content/Notifications/Paragraph" msgid "Loading notifications…" msgstr "Chargement des notifications…" @@ -2464,6 +2584,7 @@ msgstr "Chargement de vos favoris…" #: front/src/components/manage/library/LibrariesTable.vue:75 #: front/src/components/manage/library/TracksTable.vue:71 #: front/src/components/manage/library/UploadsTable.vue:99 +#: front/src/components/manage/moderation/ReportCard.vue:173 #: front/src/views/admin/library/AlbumDetail.vue:19 #: front/src/views/admin/library/ArtistDetail.vue:18 #: front/src/views/admin/library/LibraryDetail.vue:18 @@ -2479,12 +2600,12 @@ msgctxt "Content/Moderation/*/Short, Noun" msgid "Local account" msgstr "Compte local" -#: front/src/components/auth/Login.vue:84 +#: front/src/components/Home.vue:96 src/views/auth/Login.vue:29 msgctxt "Head/Login/Title" msgid "Log In" msgstr "Connexion" -#: front/src/components/auth/Login.vue:4 +#: front/src/views/auth/Login.vue:4 msgctxt "Content/Login/Title/Verb" msgid "Log in to your Funkwhale account" msgstr "Connectez-vous à votre compte Funkwhale" @@ -2499,7 +2620,7 @@ msgctxt "Sidebar/Profile/List item.Link" msgid "Logged in as %{ username }" msgstr "Connecté·e en tant que %{ username }" -#: front/src/components/Sidebar.vue:54 src/components/auth/Login.vue:42 +#: front/src/components/Sidebar.vue:54 src/components/auth/LoginForm.vue:41 msgctxt "*/Login/*/Verb" msgid "Login" msgstr "Se connecter" @@ -2517,44 +2638,41 @@ msgstr "Déconnexion" #: front/src/views/content/libraries/Home.vue:9 msgctxt "Content/Library/Paragraph" msgid "Looks like you don't have a library, it's time to create one." -msgstr "" -"On dirait que vous n'avez pas encore de bibliothèque, il est temps d'en " -"créer une." +msgstr "On dirait que vous n'avez pas encore de bibliothèque, il est temps d'en créer une." -#: front/src/components/audio/Player.vue:632 -#: src/components/audio/Player.vue:633 +#: front/src/components/audio/Player.vue:658 +#: src/components/audio/Player.vue:659 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Looping disabled. Click to switch to single-track looping." -msgstr "" -"Répétition désactivée. Cliquez ici pour activer la répétition sur la piste " -"actuelle." +msgstr "Répétition désactivée. Cliquez ici pour activer la répétition sur la piste actuelle." -#: front/src/components/audio/Player.vue:635 -#: src/components/audio/Player.vue:636 +#: front/src/components/audio/Player.vue:661 +#: src/components/audio/Player.vue:662 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Looping on a single track. Click to switch to whole queue looping." -msgstr "" -"Répétition sur la piste en cours. Cliquez pour répéter l'intégralité de la " -"liste d'attente." +msgstr "Répétition sur la piste en cours. Cliquez pour répéter l'intégralité de la liste d'attente." -#: front/src/components/audio/Player.vue:638 -#: src/components/audio/Player.vue:639 +#: front/src/components/audio/Player.vue:664 +#: src/components/audio/Player.vue:665 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Looping on whole queue. Click to disable looping." -msgstr "" -"Répétition de l'intégralité de la liste d'attente, cliquez pour désactiver " -"la répétition." +msgstr "Répétition de l'intégralité de la liste d'attente, cliquez pour désactiver la répétition." -#: front/src/components/Sidebar.vue:223 +#: front/src/components/Sidebar.vue:230 msgctxt "Sidebar/*/Hidden text" msgid "Main menu" msgstr "Menu principal" -#: front/src/views/admin/library/Base.vue:31 +#: front/src/views/admin/library/Base.vue:34 msgctxt "Head/Admin/Title" msgid "Manage library" msgstr "Gérer la bibliothèque" +#: front/src/components/manage/moderation/InstancePolicyModal.vue:8 +msgctxt "Popup/Moderation/Title/Verb" +msgid "Manage moderation rules for %{ obj }" +msgstr "Gérer les règles de modération pour %{ obj }" + #: front/src/components/playlists/PlaylistModal.vue:3 msgctxt "Popup/Playlist/Title/Verb" msgid "Manage playlists" @@ -2570,7 +2688,7 @@ msgctxt "Content/Playlist/Button.Label/Verb" msgid "Manage your playlists" msgstr "Gérer vos listes de lecture" -#: front/src/views/Notifications.vue:14 +#: front/src/views/Notifications.vue:79 msgctxt "Content/Notifications/Button.Label/Verb" msgid "Mark all as read" msgstr "Tout marquer comme lu" @@ -2585,12 +2703,12 @@ msgctxt "Content/Notifications/Button.Tooltip/Verb" msgid "Mark as unread" msgstr "Marquer comme non lu" -#: front/src/views/admin/moderation/AccountsDetail.vue:310 +#: front/src/views/admin/moderation/AccountsDetail.vue:321 msgctxt "Content/*/*/Unit" msgid "MB" msgstr "Mo" -#: front/src/components/audio/Player.vue:625 +#: front/src/components/audio/Player.vue:651 msgctxt "Sidebar/Player/Hidden text" msgid "Media player" msgstr "Lecteur média" @@ -2600,43 +2718,57 @@ msgctxt "Content/Profile/Paragraph" msgid "Member since %{ date }" msgstr "Membre depuis le %{ date }" +#: front/src/components/manage/moderation/ReportCard.vue:109 +#: front/src/components/moderation/ReportModal.vue:41 +msgctxt "*/*/Field.Label/Noun" +msgid "Message" +msgstr "Message" + #: front/src/components/Footer.vue:32 msgctxt "Footer/*/List item.Link" msgid "Mobile and desktop apps" msgstr "Applications mobiles et de bureau" +#: front/src/components/Home.vue:143 +msgctxt "Content/Home/Link" +msgid "Mobile apps" +msgstr "Applications mobiles" + #: front/src/components/Sidebar.vue:96 -#: src/components/manage/users/UsersTable.vue:177 -#: front/src/views/admin/moderation/AccountsDetail.vue:502 -#: front/src/views/admin/moderation/Base.vue:21 +#: src/components/manage/users/UsersTable.vue:178 +#: front/src/views/admin/Settings.vue:85 +#: front/src/views/admin/moderation/AccountsDetail.vue:522 +#: front/src/views/admin/moderation/Base.vue:43 msgctxt "*/Moderation/*" msgid "Moderation" msgstr "Modération" #: front/src/views/admin/moderation/AccountsDetail.vue:78 -#: front/src/views/admin/moderation/DomainsDetail.vue:42 +#: front/src/views/admin/moderation/DomainsDetail.vue:70 msgctxt "Content/Moderation/Card.Paragraph" -msgid "" -"Moderation policies help you control how your instance interact with a given" -" domain or account." -msgstr "" -"Les règles de modération vous aident à contrôler comment votre instance " -"interagit avec un domaine ou compte donné." +msgid "Moderation policies help you control how your instance interact with a given domain or account." +msgstr "Les règles de modération vous aident à contrôler comment votre instance interagit avec un domaine ou compte donné." + +#: front/src/components/manage/moderation/InstancePolicyModal.vue:4 +msgctxt "Content/Moderation/Button.Label" +msgid "Moderation rules…" +msgstr "Règles de modération…" #: front/src/components/library/EditCard.vue:5 msgctxt "Content/Library/Card/Short" msgid "Modification %{ id }" msgstr "Modification %{ id }" -#: front/src/components/mixins/Translations.vue:48 -#: front/src/components/mixins/Translations.vue:49 +#: front/src/components/mixins/Translations.vue:58 +#: front/src/components/mixins/Translations.vue:59 msgctxt "Content/Playlist/Dropdown/Noun" msgid "Modification date" msgstr "Date de modification" -#: front/src/components/library/AlbumBase.vue:42 -#: front/src/components/library/ArtistBase.vue:53 -#: front/src/components/library/TrackBase.vue:61 +#: front/src/components/audio/PlayButton.vue:100 +#: front/src/components/library/AlbumBase.vue:43 +#: front/src/components/library/ArtistBase.vue:54 +#: front/src/components/library/TrackBase.vue:59 msgctxt "*/*/Button.Label/Noun" msgid "More…" msgstr "Plus…" @@ -2646,7 +2778,7 @@ msgctxt "*/*/*/Noun" msgid "Music" msgstr "Musique" -#: front/src/components/audio/Player.vue:631 +#: front/src/components/audio/Player.vue:657 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Mute" msgstr "Couper le son" @@ -2686,15 +2818,15 @@ msgstr "Ma liste de lecture d'enfer" #: front/src/components/library/radios/Builder.vue:237 msgctxt "Content/Radio/Input.Placeholder" msgid "My awesome radio" -msgstr "Ma radio d'enfer" +msgstr "Ma super radio" #: front/src/views/content/libraries/Home.vue:6 msgctxt "Content/Library/Title" msgid "My libraries" msgstr "Mes bibliothèques" -#: front/src/components/audio/track/Row.vue:40 -#: src/components/library/EditCard.vue:60 +#: front/src/components/About.vue:105 src/components/audio/track/Row.vue:40 +#: front/src/components/library/EditCard.vue:60 #: front/src/components/library/EditForm.vue:70 #: front/src/components/library/TrackDetail.vue:34 #: front/src/components/library/TrackDetail.vue:43 @@ -2704,54 +2836,56 @@ msgstr "Mes bibliothèques" #: front/src/components/manage/library/TracksTable.vue:76 #: front/src/components/manage/library/UploadsTable.vue:121 #: front/src/components/manage/library/UploadsTable.vue:128 -#: front/src/components/manage/users/UsersTable.vue:61 +#: front/src/components/manage/moderation/ReportCard.vue:78 +#: front/src/components/manage/moderation/ReportCard.vue:87 +#: front/src/components/manage/moderation/ReportCard.vue:193 +#: front/src/components/manage/users/UsersTable.vue:62 #: front/src/views/admin/library/UploadDetail.vue:179 #: front/src/views/admin/library/UploadDetail.vue:214 #: front/src/views/admin/library/UploadDetail.vue:233 #: front/src/views/admin/library/UploadDetail.vue:244 #: front/src/views/admin/library/UploadDetail.vue:257 -#: front/src/views/admin/moderation/AccountsDetail.vue:192 -#: front/src/views/admin/moderation/DomainsDetail.vue:82 +#: front/src/views/admin/moderation/AccountsDetail.vue:193 +#: front/src/views/admin/moderation/DomainsDetail.vue:119 #: front/src/views/content/libraries/FilesTable.vue:95 #: front/src/views/content/libraries/FilesTable.vue:101 msgctxt "*/*/*" msgid "N/A" msgstr "ND" -#: front/src/components/manage/library/LibrariesTable.vue:48 -#: front/src/components/manage/library/UploadsTable.vue:59 -msgctxt "*/*/*" -msgid "Name" -msgstr "Nom" - #: front/src/components/auth/ApplicationForm.vue:9 -msgctxt "Content/Applications/Input.Label/Noun" -msgid "Name" -msgstr "Nom" - #: front/src/components/auth/Settings.vue:133 #: front/src/components/manage/library/ArtistsTable.vue:39 +#: front/src/components/manage/library/LibrariesTable.vue:48 +#: front/src/components/manage/library/TagsTable.vue:41 +#: front/src/components/manage/library/UploadsTable.vue:59 #: front/src/components/manage/moderation/AccountsTable.vue:39 -#: front/src/components/manage/moderation/DomainsTable.vue:38 -#: front/src/components/mixins/Translations.vue:53 +#: front/src/components/manage/moderation/DomainsTable.vue:46 +#: front/src/components/mixins/Translations.vue:63 #: front/src/components/playlists/PlaylistModal.vue:45 -#: front/src/views/admin/library/ArtistDetail.vue:98 +#: front/src/views/admin/library/ArtistDetail.vue:103 #: front/src/views/admin/library/LibraryDetail.vue:85 +#: front/src/views/admin/library/TagDetail.vue:68 #: front/src/views/admin/library/UploadDetail.vue:92 -#: front/src/views/admin/moderation/DomainsDetail.vue:97 -#: front/src/views/content/libraries/Form.vue:10 src/edits.js:10 -#: front/src/components/mixins/Translations.vue:54 +#: front/src/views/admin/moderation/DomainsDetail.vue:134 +#: front/src/views/content/libraries/Form.vue:10 src/edits.js:17 +#: front/src/components/mixins/Translations.vue:64 msgctxt "*/*/*/Noun" msgid "Name" msgstr "Nom" +#: front/src/views/Notifications.vue:24 src/views/Notifications.vue:58 +msgctxt "*/*/*" +msgid "Never" +msgstr "Jamais" + #: front/src/components/auth/Settings.vue:88 #: front/src/views/auth/PasswordResetConfirm.vue:14 msgctxt "Content/Settings/Input.Label" msgid "New password" msgstr "Nouveau mot de passe" -#: front/src/components/Sidebar.vue:173 +#: front/src/components/Sidebar.vue:177 msgctxt "Sidebar/Player/Paragraph" msgid "New tracks will be appended here automatically." msgstr "Les nouvelles pistes seront ajoutées ici automatiquement." @@ -2761,23 +2895,18 @@ msgctxt "Content/Library/Card.Table.Header/Short" msgid "New value" msgstr "Nouvelle valeur" -#: front/src/components/audio/Player.vue:629 +#: front/src/components/audio/Player.vue:655 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Next track" msgstr "Piste suivante" -#: front/src/components/Sidebar.vue:130 +#: front/src/components/Sidebar.vue:134 +#: front/src/components/manage/moderation/DomainsTable.vue:13 +#: front/src/views/admin/moderation/DomainsDetail.vue:110 msgctxt "*/*/*" msgid "No" msgstr "Non" -#: front/src/components/Home.vue:95 -msgctxt "Content/Home/List item" -msgid "No add-ons, no plugins : you only need a web library" -msgstr "" -"Pas d'addons ou d'extension à installer, il vous suffit d'une bibliothèque " -"sur le web" - #: front/src/components/audio/Search.vue:25 msgctxt "Content/Search/Paragraph" msgid "No album matched your query" @@ -2791,8 +2920,12 @@ msgstr "Aucun·e artiste ne correspond à votre recherche" #: front/src/components/library/TrackDetail.vue:14 msgctxt "Content/Track/Table.Paragraph" msgid "No copyright information available for this track" -msgstr "" -"Aucune information sur les droits d'auteur n'est disponible pour cette piste" +msgstr "Aucune information sur les droits d'auteur n'est disponible pour cette piste" + +#: front/src/components/About.vue:25 src/components/Home.vue:25 +msgctxt "Content/Home/Paragraph" +msgid "No description available." +msgstr "Pas de description disponible." #: front/src/components/library/TrackDetail.vue:25 msgctxt "Content/Track/Table.Paragraph" @@ -2804,7 +2937,7 @@ msgctxt "Content/Federation/Paragraph" msgid "No matching library." msgstr "Aucune bibliothèque correspondante." -#: front/src/views/Notifications.vue:28 +#: front/src/views/Notifications.vue:93 msgctxt "Content/Notifications/Paragraph" msgid "No notification to show." msgstr "Pas encore de notifications." @@ -2814,6 +2947,16 @@ msgctxt "Content/*/Paragraph" msgid "No results were found." msgstr "Aucun résultat n'a été trouvé." +#: front/src/components/About.vue:32 +msgctxt "Content/Home/Paragraph" +msgid "No rules available." +msgstr "Pas de règles disponibles." + +#: front/src/components/About.vue:39 +msgctxt "Content/Home/Paragraph" +msgid "No terms available." +msgstr "Conditions indisponibles." + #: front/src/components/mixins/Translations.vue:10 #: front/src/components/mixins/Translations.vue:11 msgctxt "Content/Settings/Dropdown" @@ -2830,18 +2973,21 @@ msgctxt "Content/Admin/Table" msgid "Not used" msgstr "Non utilisé" -#: front/src/components/mixins/Translations.vue:100 -#: front/src/components/mixins/Translations.vue:101 -msgctxt "Content/OAuth Scopes/Label" -msgid "Notifications" -msgstr "Notifications" - -#: front/src/components/Sidebar.vue:46 src/views/Notifications.vue:76 +#: front/src/components/Sidebar.vue:46 +#: src/components/mixins/Translations.vue:112 +#: front/src/views/Notifications.vue:151 +#: src/components/mixins/Translations.vue:113 msgctxt "*/Notifications/*" msgid "Notifications" msgstr "Notifications" -#: front/src/components/Footer.vue:47 +#: front/src/components/mixins/Translations.vue:47 +#: front/src/components/mixins/Translations.vue:48 +msgctxt "Content/Moderation/Dropdown" +msgid "Offensive content" +msgstr "Contenu haineux" + +#: front/src/components/Footer.vue:55 msgctxt "Footer/*/List item.Link" msgid "Official website" msgstr "Site officiel" @@ -2856,6 +3002,11 @@ msgctxt "Content/Library/Card.Table.Header/Short" msgid "Old value" msgstr "Ancienne valeur" +#: front/src/components/About.vue:90 +msgctxt "*/*/*/State of registrations" +msgid "Open" +msgstr "Ouvertes" + #: front/src/components/manage/users/InvitationsTable.vue:20 msgctxt "Content/Admin/Dropdown/Adjective" msgid "Open" @@ -2863,29 +3014,29 @@ msgstr "Accès libre" #: front/src/components/library/ImportStatusModal.vue:56 msgctxt "Popup/Import/Table.Label/Value" -msgid "" -"Open a support thread (include the debug information below in your message)" -msgstr "" -"Ouvrir un fil de discussion de support (incluez les informations de débogage" -" dans votre message)" - -#: front/src/components/library/AlbumBase.vue:73 -#: front/src/components/library/ArtistBase.vue:84 -#: front/src/components/library/TrackBase.vue:92 +msgid "Open a support thread (include the debug information below in your message)" +msgstr "Ouvrir un fil de discussion de support (incluez les informations de débogage dans votre message)" + +#: front/src/components/library/AlbumBase.vue:87 +#: front/src/components/library/ArtistBase.vue:99 +#: front/src/components/library/TagDetail.vue:11 +#: front/src/components/library/TrackBase.vue:103 +#: front/src/components/manage/moderation/ReportCard.vue:128 msgctxt "Content/Moderation/Link" msgid "Open in moderation interface" msgstr "Ouvrir dans l'interface de modérations" -#: front/src/views/admin/library/AlbumDetail.vue:31 -#: front/src/views/admin/library/ArtistDetail.vue:30 -#: front/src/views/admin/library/TrackDetail.vue:30 +#: front/src/views/admin/library/AlbumDetail.vue:37 +#: front/src/views/admin/library/ArtistDetail.vue:35 +#: front/src/views/admin/library/TagDetail.vue:21 +#: front/src/views/admin/library/TrackDetail.vue:36 msgctxt "Content/Moderation/Link/Verb" msgid "Open local profile" msgstr "Ouvrir le profil local" -#: front/src/views/admin/library/AlbumDetail.vue:46 -#: front/src/views/admin/library/ArtistDetail.vue:45 -#: front/src/views/admin/library/TrackDetail.vue:45 +#: front/src/views/admin/library/AlbumDetail.vue:52 +#: front/src/views/admin/library/ArtistDetail.vue:50 +#: front/src/views/admin/library/TrackDetail.vue:51 msgctxt "Content/Moderation/Link/Verb" msgid "Open on MusicBrainz" msgstr "Ouvrir sur MusicBrainz" @@ -2895,10 +3046,10 @@ msgctxt "Content/Moderation/Link/Verb" msgid "Open profile" msgstr "Ouvrir le profil" -#: front/src/views/admin/library/AlbumDetail.vue:54 -#: front/src/views/admin/library/ArtistDetail.vue:53 +#: front/src/views/admin/library/AlbumDetail.vue:60 +#: front/src/views/admin/library/ArtistDetail.vue:58 #: front/src/views/admin/library/LibraryDetail.vue:49 -#: front/src/views/admin/library/TrackDetail.vue:53 +#: front/src/views/admin/library/TrackDetail.vue:59 #: front/src/views/admin/library/UploadDetail.vue:50 #: front/src/views/admin/moderation/AccountsDetail.vue:52 msgctxt "Content/Moderation/Link/Verb" @@ -2919,6 +3070,7 @@ msgstr "Ou personnalisez votre règle" #: src/components/library/Radios.vue:41 #: front/src/components/manage/library/EditsCardList.vue:37 #: front/src/components/manage/users/UsersTable.vue:17 +#: front/src/views/admin/moderation/ReportsList.vue:42 #: front/src/views/playlists/List.vue:25 msgctxt "Content/Search/Dropdown.Label/Noun" msgid "Order" @@ -2926,40 +3078,50 @@ msgstr "Ordre" #: front/src/components/favorites/List.vue:24 #: src/components/library/Albums.vue:15 -#: front/src/components/library/Artists.vue:15 +#: front/src/components/library/Artists.vue:19 #: src/components/library/Radios.vue:33 #: front/src/components/manage/library/AlbumsTable.vue:11 #: front/src/components/manage/library/ArtistsTable.vue:11 #: front/src/components/manage/library/EditsCardList.vue:29 #: front/src/components/manage/library/LibrariesTable.vue:20 +#: front/src/components/manage/library/TagsTable.vue:11 #: front/src/components/manage/library/TracksTable.vue:11 #: front/src/components/manage/library/UploadsTable.vue:30 #: front/src/components/manage/moderation/AccountsTable.vue:11 -#: front/src/components/manage/moderation/DomainsTable.vue:9 +#: front/src/components/manage/moderation/DomainsTable.vue:17 #: front/src/components/manage/users/InvitationsTable.vue:9 #: front/src/components/manage/users/UsersTable.vue:9 +#: front/src/views/admin/moderation/ReportsList.vue:34 #: front/src/views/content/libraries/FilesTable.vue:21 #: front/src/views/playlists/List.vue:17 msgctxt "Content/Search/Dropdown.Label/Noun" msgid "Ordering" msgstr "Trier par" -#: front/src/components/library/Albums.vue:23 -#: src/components/library/Artists.vue:23 +#: front/src/components/library/Albums.vue:27 +#: src/components/library/Artists.vue:27 #: front/src/components/manage/library/AlbumsTable.vue:19 #: front/src/components/manage/library/ArtistsTable.vue:19 #: front/src/components/manage/library/LibrariesTable.vue:28 +#: front/src/components/manage/library/TagsTable.vue:19 #: front/src/components/manage/library/TracksTable.vue:19 #: front/src/components/manage/library/UploadsTable.vue:38 #: front/src/components/manage/moderation/AccountsTable.vue:19 -#: front/src/components/manage/moderation/DomainsTable.vue:17 +#: front/src/components/manage/moderation/DomainsTable.vue:25 #: front/src/views/content/libraries/FilesTable.vue:29 msgctxt "Content/Search/Dropdown.Label/Noun" msgid "Ordering direction" msgstr "Sens" +#: front/src/components/mixins/Translations.vue:48 +#: front/src/components/mixins/Translations.vue:49 +msgctxt "Content/Moderation/Dropdown" +msgid "Other" +msgstr "Autre" + +#: front/src/components/manage/moderation/ReportCard.vue:143 #: front/src/components/manage/users/InvitationsTable.vue:38 -msgctxt "Content/Admin/Table.Label" +msgctxt "*/*/*" msgid "Owner" msgstr "Propriétaire" @@ -2978,12 +3140,14 @@ msgctxt "Content/*/Hidden text/Noun" msgid "Pagination" msgstr "Pagination" -#: front/src/components/auth/Login.vue:33 src/components/auth/Signup.vue:40 -msgctxt "Content/*/Input.Label" +#: front/src/components/auth/LoginForm.vue:32 +#: src/components/auth/Settings.vue:291 +#: front/src/components/auth/SignupForm.vue:36 +msgctxt "*/*/*" msgid "Password" msgstr "Mot de passe" -#: front/src/components/auth/SubsonicTokenForm.vue:94 +#: front/src/components/auth/SubsonicTokenForm.vue:100 msgctxt "Content/Settings/Message" msgid "Password updated" msgstr "Mot de passe mis à jour" @@ -2993,15 +3157,15 @@ msgctxt "Content/Signup/Card.Title" msgid "Password updated successfully" msgstr "Mot de passe modifié avec succès" -#: front/src/components/audio/Player.vue:628 +#: front/src/components/audio/Player.vue:654 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Pause track" msgstr "Mettre en pause" -#: front/src/components/ShortcutsModal.vue:59 +#: front/src/components/ShortcutsModal.vue:96 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Pause/play the current track" -msgstr "Mettre en pause/jouer la piste en cours" +msgstr "Mettre en pause/relancer la lecture" #: front/src/components/manage/moderation/InstancePolicyCard.vue:12 msgctxt "Content/Moderation/Card.List item" @@ -3027,7 +3191,7 @@ msgctxt "Content/Library/Label" msgid "Pending files" msgstr "Fichiers en attente" -#: front/src/components/Sidebar.vue:225 +#: front/src/components/Sidebar.vue:232 msgctxt "Sidebar/Notifications/Hidden text" msgid "Pending follow requests" msgstr "Demandes d'abonnement en attente" @@ -3038,84 +3202,75 @@ msgctxt "Content/Admin/*/Noun" msgid "Pending review" msgstr "Vérification en attente" -#: front/src/components/Sidebar.vue:226 +#: front/src/components/Sidebar.vue:233 msgctxt "Sidebar/Moderation/Hidden text" msgid "Pending review edits" msgstr "Vérification des modifications en attente" +#: front/src/components/auth/Settings.vue:176 #: front/src/components/manage/users/UsersTable.vue:42 #: front/src/views/admin/moderation/AccountsDetail.vue:166 -msgctxt "Content/Admin/Table.Label/Noun" -msgid "Permissions" -msgstr "Permissions" - -#: front/src/components/auth/Settings.vue:176 msgctxt "Content/*/*/Noun" msgid "Permissions" msgstr "Permissions" #: front/src/components/audio/PlayButton.vue:9 -#: front/src/components/library/TrackBase.vue:26 +#: front/src/components/library/TrackBase.vue:24 msgctxt "*/Queue/Button.Label/Short, Verb" msgid "Play" msgstr "Jouer" #: front/src/components/audio/album/Card.vue:48 -#: front/src/components/audio/artist/Card.vue:44 -#: front/src/components/library/AlbumBase.vue:20 +#: front/src/components/library/AlbumBase.vue:21 #: front/src/components/library/AlbumDetail.vue:11 #: src/views/playlists/Detail.vue:24 msgctxt "Content/Queue/Button.Label/Short, Verb" msgid "Play all" msgstr "Tout lire" -#: front/src/components/library/ArtistBase.vue:31 +#: front/src/components/library/ArtistBase.vue:32 msgctxt "Content/Artist/Button.Label/Verb" msgid "Play all albums" msgstr "Lire tous les albums" -#: front/src/components/audio/PlayButton.vue:76 +#: front/src/components/audio/PlayButton.vue:92 msgctxt "*/Queue/Dropdown/Button/Title" msgid "Play next" msgstr "Lire ensuite" -#: front/src/components/ShortcutsModal.vue:67 +#: front/src/components/ShortcutsModal.vue:120 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Play next track" msgstr "Jouer la piste suivante" -#: front/src/components/audio/PlayButton.vue:74 +#: front/src/components/audio/PlayButton.vue:90 msgctxt "*/Queue/Dropdown/Button/Title" msgid "Play now" msgstr "Lire maintenant" -#: front/src/components/ShortcutsModal.vue:63 +#: front/src/components/ShortcutsModal.vue:116 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Play previous track" msgstr "Jouer la piste précédente" -#: front/src/components/audio/PlayButton.vue:77 +#: front/src/components/audio/PlayButton.vue:93 msgctxt "*/Queue/Dropdown/Button/Title" msgid "Play similar songs" msgstr "Jouer des chansons similaires" -#: front/src/components/Sidebar.vue:224 +#: front/src/components/Sidebar.vue:231 msgctxt "Sidebar/Player/Hidden text" msgid "Play this track" msgstr "Jouer cette piste" -#: front/src/components/audio/Player.vue:627 +#: front/src/components/audio/Player.vue:653 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Play track" msgstr "Jouer" -#: front/src/components/audio/PlayButton.vue:82 -msgctxt "*/Queue/Button/Title" -msgid "Play..." -msgstr "Jouer…" - -#: front/src/views/playlists/Detail.vue:91 -msgctxt "Head/Playlist/Title" +#: front/src/components/mixins/Report.vue:66 src/views/playlists/Detail.vue:121 +#: front/src/components/mixins/Report.vue:67 +msgctxt "*/*/*" msgid "Playlist" msgstr "Liste de lecture" @@ -3151,63 +3306,62 @@ msgctxt "Content/Playlist/Dropdown.Label" msgid "Playlist visibility" msgstr "Visibilité de la playlist" -#: front/src/components/mixins/Translations.vue:88 -#: front/src/components/mixins/Translations.vue:89 -msgctxt "Content/OAuth Scopes/Label" -msgid "Playlists" -msgstr "Listes de lecture" - #: front/src/components/Sidebar.vue:71 src/components/library/Home.vue:16 -#: front/src/components/library/Library.vue:16 src/views/admin/Settings.vue:83 -#: front/src/views/admin/library/AlbumDetail.vue:173 -#: front/src/views/admin/library/ArtistDetail.vue:162 -#: front/src/views/admin/library/TrackDetail.vue:225 +#: front/src/components/library/Library.vue:16 +#: front/src/components/mixins/Translations.vue:100 +#: src/views/admin/Settings.vue:83 +#: front/src/views/admin/library/AlbumDetail.vue:179 +#: front/src/views/admin/library/ArtistDetail.vue:167 +#: front/src/views/admin/library/TrackDetail.vue:231 #: src/views/playlists/List.vue:106 +#: front/src/components/mixins/Translations.vue:101 msgctxt "*/*/*" msgid "Playlists" msgstr "Listes de lecture" -#: front/src/components/Home.vue:56 -msgctxt "Content/Home/List item" -msgid "Playlists? We got them" -msgstr "Les playlists ? Elles sont là !" +#: front/src/components/audio/EmbedWizard.vue:9 +msgctxt "Content/Embed/Message" +msgid "Please contact your admins and ask them to update the corresponding setting." +msgstr "" +"Merci de contacter vos administrateur·ices et de leur demander de mettre à " +"jour le réglage correspondant." #: front/src/components/auth/Settings.vue:79 msgctxt "Content/Settings/Error message.List item/Call to action" msgid "Please double-check your password is correct" msgstr "Merci de vérifier que votre mot de passe est correct" -#: front/src/components/auth/Login.vue:9 +#: front/src/components/auth/LoginForm.vue:5 msgctxt "Content/Login/Error message.List item/Call to action" msgid "Please double-check your username/password couple is correct" -msgstr "" -"Merci de vérifier que votre nom d'utilisateur et mot de passe sont corrects" +msgstr "Merci de vérifier que votre nom d'utilisateur et mot de passe sont corrects" #: front/src/components/auth/Settings.vue:46 msgctxt "Content/Settings/Paragraph" msgid "PNG, GIF or JPG. At most 2MB. Will be downscaled to 400x400px." msgstr "PNG, GIF ou JPG. 2Mo maximum. L'image sera réduite à 400×400 pixels." -#: front/src/views/admin/library/TrackDetail.vue:137 -msgctxt "*/*/*/Noun" +#: front/src/components/About.vue:72 +msgctxt "Content/About/Header/Name" +msgid "Pod configuration" +msgstr "Configuration du pod" + +#: front/src/views/admin/library/TrackDetail.vue:143 src/edits.js:70 +msgctxt "*/*/*/Short, Noun" msgid "Position" -msgstr "Position" +msgstr "Pagination" #: front/src/components/manage/moderation/InstancePolicyForm.vue:118 msgctxt "Content/Moderation/Help text" -msgid "" -"Prevent account or domain from triggering notifications, except from " -"followers." -msgstr "" -"Empêche le compte ou domaine de déclencher des notifications, sauf pour les " -"abonné·e·s." +msgid "Prevent account or domain from triggering notifications, except from followers." +msgstr "Empêche le compte ou domaine de déclencher des notifications, sauf pour les abonné·e·s." -#: front/src/components/audio/EmbedWizard.vue:33 +#: front/src/components/audio/EmbedWizard.vue:43 msgctxt "Popup/Embed/Title/Noun" msgid "Preview" msgstr "Aperçu" -#: front/src/components/audio/Player.vue:626 +#: front/src/components/audio/Player.vue:652 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Previous track" msgstr "Piste précédente" @@ -3218,7 +3372,7 @@ msgctxt "Content/Settings/Dropdown/Short" msgid "Private" msgstr "Privé" -#: front/src/views/content/remote/Card.vue:43 +#: front/src/views/content/remote/Card.vue:56 msgctxt "Content/Library/Card.List item" msgid "Problem during scanning" msgstr "Problème lors de l'analyse" @@ -3239,14 +3393,21 @@ msgctxt "Content/Library/Tab.Title/Short" msgid "Processing" msgstr "En cours de traitement" -#: front/src/components/mixins/Translations.vue:68 -#: front/src/components/mixins/Translations.vue:69 +#: front/src/components/mixins/Translations.vue:80 +#: front/src/components/mixins/Translations.vue:81 msgctxt "Content/OAuth Scopes/Label" msgid "Profile" msgstr "Profil" +#: front/src/components/auth/SignupForm.vue:5 +msgctxt "Content/Signup/Form/Paragraph" +msgid "Public registrations are not possible on this instance. You will need an invitation code to sign up." +msgstr "" +"Les inscriptions sont désactivées sur cette instance. vous aurez besoin d'un " +"code d'invitation pour vous inscrire." + #: front/src/components/manage/moderation/AccountsTable.vue:188 -#: front/src/components/manage/moderation/DomainsTable.vue:168 +#: front/src/components/manage/moderation/DomainsTable.vue:186 #: front/src/views/content/libraries/Quota.vue:36 #: front/src/views/content/libraries/Quota.vue:39 #: front/src/views/content/libraries/Quota.vue:62 @@ -3270,14 +3431,14 @@ msgstr "Supprimer les fichiers en attente ?" #: front/src/views/content/libraries/Quota.vue:63 msgctxt "Popup/Library/Title" msgid "Purge skipped files?" -msgstr "Supprimer les fichiers oubliés ?" +msgstr "Supprimer les fichiers ignorés ?" #: front/src/components/Sidebar.vue:20 msgctxt "Sidebar/Queue/Tab.Title/Noun" msgid "Queue" msgstr "File d’attente" -#: front/src/components/audio/Player.vue:322 +#: front/src/components/audio/Player.vue:329 msgctxt "Content/Queue/Message" msgid "Queue shuffled!" msgstr "La file d’attente a été mélangée !" @@ -3309,16 +3470,12 @@ msgstr "Radio mise à jour" #: front/src/components/library/Library.vue:13 #: src/components/library/Radios.vue:142 +#: front/src/components/mixins/Translations.vue:104 +#: front/src/components/mixins/Translations.vue:105 msgctxt "*/*/*" msgid "Radios" msgstr "Radios" -#: front/src/components/mixins/Translations.vue:92 -#: front/src/components/mixins/Translations.vue:93 -msgctxt "Content/OAuth Scopes/Label" -msgid "Radios" -msgstr "Radios" - #: front/src/components/auth/ApplicationForm.vue:151 msgctxt "Content/OAuth Scopes/Label/Verb" msgid "Read" @@ -3345,15 +3502,15 @@ msgctxt "Content/Moderation/*/Noun" msgid "Reason" msgstr "Raison" -#: front/src/views/admin/moderation/AccountsDetail.vue:251 -#: front/src/views/admin/moderation/DomainsDetail.vue:179 +#: front/src/views/admin/moderation/AccountsDetail.vue:252 +#: front/src/views/admin/moderation/DomainsDetail.vue:216 msgctxt "Content/Moderation/Table.Label/Noun" msgid "Received library follows" msgstr "Suivis de bibliothèque reçus" -#: front/src/components/manage/moderation/DomainsTable.vue:40 -#: front/src/components/mixins/Translations.vue:62 -#: front/src/components/mixins/Translations.vue:63 +#: front/src/components/manage/moderation/DomainsTable.vue:48 +#: front/src/components/mixins/Translations.vue:74 +#: front/src/components/mixins/Translations.vue:75 msgctxt "Content/Moderation/*/Noun" msgid "Received messages" msgstr "Messages reçus" @@ -3373,6 +3530,11 @@ msgctxt "Content/Home/Title" msgid "Recently added" msgstr "Ajoutés récemment" +#: front/src/components/Home.vue:167 +msgctxt "Content/Home/Title" +msgid "Recently added albums" +msgstr "Albums ajoutés récemment" + #: front/src/components/library/Home.vue:11 msgctxt "Content/Home/Title" msgid "Recently favorited" @@ -3401,14 +3563,14 @@ msgctxt "Popup/*/Message.Title" msgid "Refresh error" msgstr "Erreur de rafraîchissement" -#: front/src/views/admin/library/AlbumDetail.vue:50 -#: front/src/views/admin/library/ArtistDetail.vue:49 -#: front/src/views/admin/library/TrackDetail.vue:49 +#: front/src/views/admin/library/AlbumDetail.vue:56 +#: front/src/views/admin/library/ArtistDetail.vue:54 +#: front/src/views/admin/library/TrackDetail.vue:55 msgctxt "Content/Moderation/Button/Verb" msgid "Refresh from remote server" msgstr "Rafraîchir depuis le serveur distant" -#: front/src/views/admin/moderation/DomainsDetail.vue:127 +#: front/src/views/admin/moderation/DomainsDetail.vue:164 msgctxt "Content/Moderation/Button.Label/Verb" msgid "Refresh node info" msgstr "Rafraîchir les informations du nÅ“ud" @@ -3420,12 +3582,8 @@ msgstr "Rafraîchissement en attente" #: front/src/components/federation/FetchButton.vue:80 msgctxt "Popup/*/Message.Content" -msgid "" -"Refresh request wasn't proceed in time by our server. It will be processed " -"later." -msgstr "" -"La requête de rafraîchissement n'a pas été effectuée à temps par notre " -"serveur. Elle sera exécutée plus tard." +msgid "Refresh request wasn't proceed in time by our server. It will be processed later." +msgstr "La requête de rafraîchissement n'a pas été effectuée à temps par notre serveur. Elle sera exécutée plus tard." #: front/src/components/federation/FetchButton.vue:16 msgctxt "Popup/*/Message.Title" @@ -3440,23 +3598,19 @@ msgstr "Rafraîchir le contenu de la table" #: front/src/components/federation/FetchButton.vue:12 msgctxt "Popup/*/Message.Title" msgid "Refresh was skipped" -msgstr "" +msgstr "Rafraîchissement non effectué" #: front/src/components/federation/FetchButton.vue:7 msgctxt "Popup/*/Title" msgid "Refreshing object from remote…" msgstr "Rafraîchissement de l'objet depuis le serveur distant…" -#: front/src/components/auth/Signup.vue:9 -msgctxt "Content/Signup/Form/Paragraph" -msgid "" -"Registration are closed on this instance, you will need an invitation code " -"to signup." -msgstr "" -"Les inscriptions sont fermées sur cette instance, vous aurez besoin d'un " -"code d'invitation pour vous inscrire." +#: front/src/components/About.vue:86 +msgctxt "*/*/*" +msgid "Registrations" +msgstr "Inscriptions" -#: front/src/components/manage/users/UsersTable.vue:71 +#: front/src/components/manage/users/UsersTable.vue:72 msgctxt "Content/Admin/Table, User role" msgid "Regular user" msgstr "Utilisateur·rice standard·e" @@ -3481,8 +3635,8 @@ msgid "Rejected" msgstr "Rejeté" #: front/src/components/manage/library/AlbumsTable.vue:43 -#: front/src/components/mixins/Translations.vue:44 src/edits.js:28 -#: front/src/components/mixins/Translations.vue:45 +#: front/src/components/mixins/Translations.vue:54 src/edits.js:43 +#: front/src/components/mixins/Translations.vue:55 msgctxt "Content/*/*/Noun" msgid "Release date" msgstr "Date de sortie" @@ -3492,6 +3646,11 @@ msgctxt "Content/Library/Paragraph" msgid "Remaining storage space" msgstr "Espace de stockage restant" +#: front/src/views/Notifications.vue:18 src/views/Notifications.vue:52 +msgctxt "Content/Notifications/Label" +msgid "Remind me in:" +msgstr "Me le rappelez dans :" + #: front/src/views/content/remote/Home.vue:6 msgctxt "Content/Library/Title/Noun" msgid "Remote libraries" @@ -3499,13 +3658,8 @@ msgstr "Bibliothèques distantes" #: front/src/views/content/remote/Home.vue:7 msgctxt "Content/Library/Paragraph" -msgid "" -"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." -msgstr "" -"Les bibliothèques distantes appartiennent à d'autres utilisateurs du réseau." -" Vous pouvez y accéder tant qu'elles sont publiques ou qu'on vous en donne " -"l'accès." +msgid "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." +msgstr "Les bibliothèques distantes appartiennent à d'autres utilisateurs du réseau. Vous pouvez y accéder tant qu'elles sont publiques ou qu'on vous en donne l'accès." #: front/src/components/library/radios/Filter.vue:59 msgctxt "Content/Radio/Button.Label/Verb" @@ -3522,6 +3676,12 @@ msgctxt "Content/Moderation/Button.Label" msgid "Remove filter" msgstr "Supprimer le filtre" +#: front/src/components/manage/moderation/DomainsTable.vue:198 +#: front/src/views/admin/moderation/DomainsDetail.vue:39 +msgctxt "Content/Moderation/Action/Verb" +msgid "Remove from allow-list" +msgstr "Retirer de la liste d'autorisations" + #: front/src/components/favorites/TrackFavoriteIcon.vue:26 msgctxt "Content/Track/Icon.Tooltip/Verb" msgid "Remove from favorites" @@ -3529,45 +3689,98 @@ msgstr "Retirer des favoris" #: front/src/views/content/libraries/Quota.vue:38 msgctxt "Popup/Library/Paragraph" -msgid "" -"Removes uploaded but yet to be processed tracks completely, adding the " -"corresponding data to your quota." -msgstr "" -"Les pistes importées qui n'ont pas encore été complètement traitées par le " -"serveur seront supprimées complètement. Le quota correspondant vous sera " -"restitué." +msgid "Removes uploaded but yet to be processed tracks completely, adding the corresponding data to your quota." +msgstr "Les pistes importées qui n'ont pas encore été complètement traitées par le serveur seront supprimées complètement. Le quota correspondant vous sera restitué." #: front/src/views/content/libraries/Quota.vue:64 msgctxt "Popup/Library/Paragraph" -msgid "" -"Removes uploaded tracks skipped during the import processes completely, " -"adding the corresponding data to your quota." -msgstr "" -"Les pistes téléversées mais ignorées pendant l'importation pour diverses " -"raisons seront supprimées complètement. L'espace de stockage correspondant " -"vous sera restitué." +msgid "Removes uploaded tracks skipped during the import processes completely, adding the corresponding data to your quota." +msgstr "Les pistes téléversées mais ignorées pendant l'importation pour diverses raisons seront supprimées complètement. L'espace de stockage correspondant vous sera restitué." #: front/src/views/content/libraries/Quota.vue:90 msgctxt "Popup/Library/Paragraph" -msgid "" -"Removes uploaded tracks that could not be processed by the server " -"completely, adding the corresponding data to your quota." -msgstr "" -"Les pistes téléversées mais pas encore complètement traitées pas le serveur " -"seront supprimées. L'espace de stockage correspondant vous sera restitué." +msgid "Removes uploaded tracks that could not be processed by the server completely, adding the corresponding data to your quota." +msgstr "Les pistes téléversées mais pas encore complètement traitées pas le serveur seront supprimées. L'espace de stockage correspondant vous sera restitué." + +#: front/src/components/audio/PlayButton.vue:94 +msgctxt "*/Queue/Dropdown/Button/Title" +msgid "Replace current queue" +msgstr "Remplacer la file d'attente actuelle" -#: front/src/components/auth/SubsonicTokenForm.vue:33 -#: front/src/components/auth/SubsonicTokenForm.vue:36 +#: front/src/components/mixins/Report.vue:6 src/components/mixins/Report.vue:7 +msgctxt "*/Moderation/*/Verb" +msgid "Report @%{ username }…" +msgstr "Signaler @${ username }…" + +#: front/src/components/manage/moderation/ReportCard.vue:5 +msgctxt "Content/Moderation/Card/Short" +msgid "Report %{ id }" +msgstr "Signaler ${ id }" + +#: front/src/components/moderation/ReportModal.vue:139 +msgctxt "*/Moderation/Message" +msgid "Report successfully submitted, thank you" +msgstr "Signalement effectué avec succès, merci" + +#: front/src/components/mixins/Report.vue:36 +#: src/components/mixins/Report.vue:37 +msgctxt "*/Moderation/*/Verb" +msgid "Report this album…" +msgstr "Signaler cet album…" + +#: front/src/components/mixins/Report.vue:50 +#: src/components/mixins/Report.vue:51 +msgctxt "*/Moderation/*/Verb" +msgid "Report this artist…" +msgstr "Signaler cet·te artiste…" + +#: front/src/components/mixins/Report.vue:72 +#: src/components/mixins/Report.vue:73 +msgctxt "*/Moderation/*/Verb" +msgid "Report this library…" +msgstr "Signaler cette bibliothèque…" + +#: front/src/components/mixins/Report.vue:61 +#: src/components/mixins/Report.vue:62 +msgctxt "*/Moderation/*/Verb" +msgid "Report this playlist…" +msgstr "Signaler cette liste de lecture…" + +#: front/src/components/mixins/Report.vue:23 +#: src/components/mixins/Report.vue:24 +msgctxt "*/Moderation/*/Verb" +msgid "Report this track…" +msgstr "Signaler cette piste…" + +#: front/src/components/audio/PlayButton.vue:95 +msgctxt "*/Moderation/*/Button/Label,Verb" +msgid "Report…" +msgstr "Signaler…" + +#: front/src/components/manage/moderation/ReportCard.vue:117 +msgctxt "Content/*/*/Short" +msgid "Reported object" +msgstr "Élément signalé" + +#: front/src/views/admin/moderation/Base.vue:5 +#: front/src/views/admin/moderation/ReportsList.vue:3 +#: front/src/views/admin/moderation/ReportsList.vue:208 +msgctxt "*/Moderation/*/Noun" +msgid "Reports" +msgstr "Signalements" + +#: front/src/components/auth/SubsonicTokenForm.vue:38 +#: front/src/components/auth/SubsonicTokenForm.vue:41 msgctxt "*/Settings/Button.Label/Verb" msgid "Request a new password" msgstr "Demander un nouveau mot de passe" -#: front/src/components/auth/SubsonicTokenForm.vue:34 +#: front/src/components/auth/SubsonicTokenForm.vue:39 msgctxt "Popup/Settings/Title" msgid "Request a new Subsonic API password?" msgstr "Demander un nouveau mot de passe pour l'API Subsonic ?" -#: front/src/components/auth/SubsonicTokenForm.vue:42 +#: front/src/components/auth/SubsonicTokenForm.vue:47 msgctxt "Content/Settings/Button.Label/Verb" msgid "Request a password" msgstr "Demander un mot de passe" @@ -3575,37 +3788,53 @@ msgstr "Demander un mot de passe" #: front/src/components/federation/FetchButton.vue:64 msgctxt "Popup/*/Loading.Title" msgid "Requesting a fetch…" -msgstr "" +msgstr "Demande de récupération en cours…" -#: front/src/components/library/EditForm.vue:82 +#: front/src/components/library/EditForm.vue:94 msgctxt "Content/Library/Button.Label" -msgid "Reset to initial value: %{ value }" -msgstr "" +msgid "Reset to initial value" +msgstr "Réinitialiser à la valeur d’origine" -#: front/src/components/auth/Login.vue:35 src/views/auth/PasswordReset.vue:4 -#: front/src/views/auth/PasswordReset.vue:53 +#: front/src/components/auth/LoginForm.vue:34 +#: src/views/auth/PasswordReset.vue:4 front/src/views/auth/PasswordReset.vue:53 msgctxt "*/Login/*/Verb" msgid "Reset your password" msgstr "Réinitialiser votre mot de passe" +#: front/src/components/manage/moderation/ReportCard.vue:83 +msgctxt "Content/*/*/Noun" +msgid "Resolution date" +msgstr "Date de résolution" + +#: front/src/components/manage/moderation/ReportCard.vue:218 +msgctxt "Content/*/Button.Label/Verb" +msgid "Resolve" +msgstr "Résoudre" + +#: front/src/components/manage/moderation/ReportCard.vue:62 +#: front/src/views/admin/moderation/ReportsList.vue:20 +msgctxt "Content/*/*/Short" +msgid "Resolved" +msgstr "Résolu" + #: front/src/views/content/libraries/FilesTable.vue:223 msgctxt "Content/Library/Dropdown/Verb" msgid "Restart import" msgstr "Relancer l'importation" +#: front/src/components/library/EditForm.vue:31 +msgctxt "Content/Library/Button.Label" +msgid "Restrict to unreviewed edits" +msgstr "Limiter aux modifications en attente de validation" + #: front/src/components/favorites/List.vue:39 -#: src/components/library/Albums.vue:30 -#: front/src/components/library/Artists.vue:30 +#: src/components/library/Albums.vue:34 +#: front/src/components/library/Artists.vue:34 #: src/components/library/Radios.vue:52 front/src/views/playlists/List.vue:32 msgctxt "Content/Search/Dropdown.Label/Noun" msgid "Results per page" msgstr "Résultats par page" -#: front/src/components/library/EditForm.vue:31 -msgctxt "Content/Library/Button.Label" -msgid "Retrict to unreviewed edits" -msgstr "" - #: front/src/views/auth/EmailConfirm.vue:17 msgctxt "Content/Signup/Link/Verb" msgid "Return to login" @@ -3619,73 +3848,74 @@ msgstr "Afficher les fichiers" #: front/src/components/auth/Settings.vue:192 msgctxt "*/*/*/Verb" msgid "Revoke" -msgstr "" +msgstr "Révoquer" #: front/src/components/auth/Settings.vue:195 msgctxt "*/Settings/Button.Label/Verb" msgid "Revoke access" -msgstr "" +msgstr "Révoquer l'accès" #: front/src/components/auth/Settings.vue:193 msgctxt "Popup/Settings/Title" msgid "Revoke access for application \"%{ application }\"?" -msgstr "" +msgstr "Révoquer l'accès pour l'application « %{ application } » ?" #: front/src/components/manage/moderation/InstancePolicyCard.vue:16 msgctxt "Content/Moderation/Card.Title/Noun" msgid "Rule" msgstr "Règle" -#: front/src/components/admin/SettingsGroup.vue:67 +#: front/src/components/About.vue:28 src/components/About.vue:56 +msgctxt "Content/About/Header" +msgid "Rules" +msgstr "Règles" + +#: front/src/components/admin/SettingsGroup.vue:75 #: front/src/components/library/radios/Builder.vue:34 msgctxt "Content/*/Button.Label/Verb" msgid "Save" msgstr "Enregistrer" -#: front/src/views/content/remote/Card.vue:175 +#: front/src/views/content/remote/Card.vue:203 msgctxt "Content/Library/Message" msgid "Scan launched" msgstr "Scan démarré" -#: front/src/views/content/remote/Card.vue:67 +#: front/src/views/content/remote/Card.vue:80 msgctxt "Content/Library/Card.Button.Label/Verb" msgid "Scan now" msgstr "Analyser maintenant" -#: front/src/views/content/remote/Card.vue:35 +#: front/src/views/content/remote/Card.vue:48 msgctxt "Content/Library/Card.List item" msgid "Scan pending" msgstr "Croissant" -#: front/src/views/content/remote/Card.vue:176 +#: front/src/views/content/remote/Card.vue:204 msgctxt "Content/Library/Message" msgid "Scan skipped (previous scan is too recent)" msgstr "Scan non lancé (le scan précédent est trop récent)" -#: front/src/views/content/remote/Card.vue:47 +#: front/src/views/content/remote/Card.vue:60 msgctxt "Content/Library/Card.List item" msgid "Scanned" msgstr "Analyse démarrée" -#: front/src/views/content/remote/Card.vue:51 +#: front/src/views/content/remote/Card.vue:64 msgctxt "Content/Library/Card.List item" msgid "Scanned with errors" msgstr "Scanné avec des erreurs" -#: front/src/views/content/remote/Card.vue:39 +#: front/src/views/content/remote/Card.vue:52 msgctxt "Content/Library/Card.List item" msgid "Scanning… (%{ progress }%)" msgstr "Analyse en cours… (%{ progress }%)" #: front/src/components/auth/ApplicationForm.vue:22 -msgctxt "Content/Applications/Input.Label/Noun" -msgid "Scopes" -msgstr "" - #: front/src/components/auth/Settings.vue:226 msgctxt "Content/*/*/Noun" msgid "Scopes" -msgstr "" +msgstr "Périmètres" #: front/src/components/library/Albums.vue:10 #: src/components/library/Artists.vue:10 @@ -3694,12 +3924,14 @@ msgstr "" #: front/src/components/manage/library/ArtistsTable.vue:5 #: front/src/components/manage/library/EditsCardList.vue:6 #: front/src/components/manage/library/LibrariesTable.vue:5 +#: front/src/components/manage/library/TagsTable.vue:5 #: front/src/components/manage/library/TracksTable.vue:5 #: front/src/components/manage/library/UploadsTable.vue:5 #: front/src/components/manage/moderation/AccountsTable.vue:5 #: front/src/components/manage/moderation/DomainsTable.vue:5 #: front/src/components/manage/users/InvitationsTable.vue:5 #: front/src/components/manage/users/UsersTable.vue:5 +#: front/src/views/admin/moderation/ReportsList.vue:8 #: front/src/views/content/libraries/FilesTable.vue:5 #: src/views/playlists/List.vue:13 msgctxt "Content/Search/Input.Label/Noun" @@ -3712,6 +3944,7 @@ msgid "Search a remote library" msgstr "Rechercher une bibliothèque distante" #: front/src/components/manage/library/EditsCardList.vue:211 +#: front/src/views/admin/moderation/ReportsList.vue:207 msgctxt "Content/Search/Input.Placeholder" msgid "Search by account, summary, domain…" msgstr "Rechercher par titre, artiste, domaine…" @@ -3746,7 +3979,12 @@ msgctxt "Content/Search/Input.Placeholder" msgid "Search by domain, username, bio…" msgstr "Rechercher par domaine, nom d'utilisateur·rice, bio…" -#: front/src/components/manage/moderation/DomainsTable.vue:151 +#: front/src/components/manage/library/TagsTable.vue:165 +msgctxt "Content/Search/Input.Placeholder" +msgid "Search by name" +msgstr "Rechercher par nom" + +#: front/src/components/manage/moderation/DomainsTable.vue:168 msgctxt "Content/Search/Input.Placeholder" msgid "Search by name…" msgstr "Rechercher par nom…" @@ -3761,12 +3999,12 @@ msgctxt "Content/Admin/Input.Placeholder/Verb" msgid "Search by username, e-mail address, code…" msgstr "Rechercher par nom d'utilisateur·rice, courriel, code…" -#: front/src/components/manage/users/UsersTable.vue:163 +#: front/src/components/manage/users/UsersTable.vue:164 msgctxt "Content/Search/Input.Placeholder" msgid "Search by username, e-mail address, name…" msgstr "Rechercher par nom d'utilisateur·rice, courriel, nom…" -#: front/src/components/audio/SearchBar.vue:20 +#: front/src/components/audio/SearchBar.vue:27 msgctxt "Sidebar/Search/Input.Placeholder" msgid "Search for artists, albums, tracks…" msgstr "Rechercher des artistes, albums, pistes…" @@ -3776,16 +4014,28 @@ msgctxt "Content/Search/Title" msgid "Search for some music" msgstr "Rechercher de la musique" -#: front/src/components/library/AlbumBase.vue:57 -#: front/src/components/library/ArtistBase.vue:68 -#: front/src/components/library/TrackBase.vue:76 +#: front/src/components/library/TagsSelector.vue:6 +msgctxt "*/Dropdown/Placeholder/Verb" +msgid "Search for tags…" +msgstr "Rechercher des tags…" + +#: front/src/components/library/AlbumBase.vue:66 +#: front/src/components/library/ArtistBase.vue:77 +#: front/src/components/library/TrackBase.vue:82 +msgctxt "Content/*/Button.Label/Verb" +msgid "Search on Discogs" +msgstr "Rechercher sur Discogs" + +#: front/src/components/library/AlbumBase.vue:58 +#: front/src/components/library/ArtistBase.vue:69 +#: front/src/components/library/TrackBase.vue:74 msgctxt "Content/*/Button.Label/Verb" msgid "Search on Wikipedia" msgstr "Rechercher sur Wikipédia" #: front/src/components/library/Library.vue:35 -#: src/views/admin/library/Base.vue:32 -#: front/src/views/admin/moderation/Base.vue:22 +#: src/views/admin/library/Base.vue:35 +#: front/src/views/admin/moderation/Base.vue:44 #: src/views/admin/users/Base.vue:21 front/src/views/content/Base.vue:19 msgctxt "Menu/*/Hidden text" msgid "Secondary menu" @@ -3796,13 +4046,32 @@ msgctxt "Content/Admin/Menu.Title" msgid "Sections" msgstr "Sections" +#: front/src/components/ShortcutsModal.vue:108 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek backwards 30s" +msgstr "Reculer de 30s" + +#: front/src/components/ShortcutsModal.vue:100 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek backwards 5s" +msgstr "Reculer de 5s" + +#: front/src/components/ShortcutsModal.vue:112 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek forwards 30s" +msgstr "Avancer de 30s" + +#: front/src/components/ShortcutsModal.vue:104 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek forwards 5s" +msgstr "Avancer de 5s" + #: front/src/components/library/radios/Builder.vue:46 msgctxt "Content/Radio/Dropdown.Placeholder/Verb" msgid "Select a filter" msgstr "Sélectionner un filtre" #: front/src/components/common/ActionTable.vue:79 -#, fuzzy msgctxt "Content/*/Link/Verb" msgid "Select all %{ total } elements" msgid_plural "Select all %{ total } elements" @@ -3814,9 +4083,14 @@ msgctxt "Content/*/Link/Verb" msgid "Select only current page" msgstr "Sélectionner seulement la page actuelle" -#: front/src/components/Sidebar.vue:43 src/components/Sidebar.vue:108 -#: front/src/components/manage/users/UsersTable.vue:181 -#: front/src/views/admin/moderation/AccountsDetail.vue:506 +#: front/src/components/Home.vue:43 +msgctxt "Content/Home/Link" +msgid "Server rules" +msgstr "Règles du serveur" + +#: front/src/components/Sidebar.vue:43 src/components/Sidebar.vue:112 +#: front/src/components/manage/users/UsersTable.vue:182 +#: front/src/views/admin/moderation/AccountsDetail.vue:526 msgctxt "*/*/*/Noun" msgid "Settings" msgstr "Paramètres" @@ -3838,50 +4112,67 @@ msgstr "Lien de partage" #: front/src/views/content/libraries/Detail.vue:15 msgctxt "Content/Library/Paragraph" -msgid "" -"Share this link with other users so they can request access to your library." -msgstr "" -"Partagez ce lien avec d'autres utilisateurs afin qu'ils puissent demander " -"l'accès à votre bibliothèque." +msgid "Share this link with other users so they can request access to your library." +msgstr "Partagez ce lien avec d'autres utilisateurs afin qu'ils puissent demander l'accès à votre bibliothèque." #: front/src/views/content/libraries/Detail.vue:14 -#: front/src/views/content/remote/Card.vue:77 +#: front/src/views/content/remote/Card.vue:90 msgctxt "Content/Library/Title" msgid "Sharing link" msgstr "Lien de partage" +#: front/src/components/audio/EmbedWizard.vue:5 +msgctxt "Content/Embed/Message" +msgid "Sharing will not work because this pod doesn't allow anonymous users to access content." +msgstr "" +"Le partage ne fonctionnera car ce pod n'autorise pas les utilisateur·ices " +"anonymes à accéder aux contenus." + +#: front/src/components/About.vue:156 +msgctxt "*/*/*/Verb" +msgid "Show" +msgstr "Afficher" + #: front/src/components/audio/album/Card.vue:38 -#, fuzzy msgctxt "Content/Album/Card.Link/Verb" msgid "Show %{ count } more track" msgid_plural "Show %{ count } more tracks" msgstr[0] "Afficher %{ count } autre piste" msgstr[1] "Afficher %{ count } autres pistes" -#: front/src/components/audio/artist/Card.vue:30 -#, fuzzy -msgctxt "Content/Artist/Card.Link" -msgid "Show 1 more album" -msgid_plural "Show %{ count } more albums" -msgstr[0] "Montrer 1 album supplémentaire" -msgstr[1] "Montrer %{ count } albums supplémentaires" +#: front/src/components/tags/List.vue:11 +msgctxt "Content/*/Button/Label/Verb" +msgid "Show 1 more tag" +msgid_plural "Show %{ count } more tags" +msgstr[0] "Montrer 1 tag supplémentaire" +msgstr[1] "Montrer %{ count } tags supplémentaires" #: front/src/components/library/EditForm.vue:21 msgctxt "Content/Library/Button.Label" msgid "Show all edits" -msgstr "" +msgstr "Afficher toutes les modifications" -#: front/src/components/ShortcutsModal.vue:42 +#: front/src/components/ShortcutsModal.vue:60 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Show available keyboard shortcuts" msgstr "Montrer les raccourcis clavier disponibles" -#: front/src/views/Notifications.vue:7 +#: front/src/components/common/ExpandableDiv.vue:7 +msgctxt "*/*/Button,Label" +msgid "Show less" +msgstr "Montrer moins" + +#: front/src/components/common/ExpandableDiv.vue:8 +msgctxt "*/*/Button,Label" +msgid "Show more" +msgstr "Montrer plus" + +#: front/src/views/Notifications.vue:72 msgctxt "Content/Notifications/Form.Label/Verb" msgid "Show read notifications" msgstr "Afficher les notifications lues" -#: front/src/components/forms/PasswordInput.vue:26 +#: front/src/components/forms/PasswordInput.vue:42 msgctxt "Content/Settings/Button.Tooltip/Verb" msgid "Show/hide password" msgstr "Afficher/masquer le mot de passe" @@ -3890,56 +4181,65 @@ msgstr "Afficher/masquer le mot de passe" #: front/src/components/manage/library/ArtistsTable.vue:84 #: front/src/components/manage/library/EditsCardList.vue:72 #: front/src/components/manage/library/LibrariesTable.vue:110 +#: front/src/components/manage/library/TagsTable.vue:79 #: front/src/components/manage/library/TracksTable.vue:95 #: front/src/components/manage/library/UploadsTable.vue:144 #: front/src/components/manage/moderation/AccountsTable.vue:88 -#: front/src/components/manage/moderation/DomainsTable.vue:74 +#: front/src/components/manage/moderation/DomainsTable.vue:85 #: front/src/components/manage/users/InvitationsTable.vue:76 -#: front/src/components/manage/users/UsersTable.vue:87 +#: front/src/components/manage/users/UsersTable.vue:88 #: front/src/views/content/libraries/FilesTable.vue:117 msgctxt "Content/*/Paragraph" msgid "Showing results %{ start }-%{ end } on %{ total }" msgstr "Affichage des résultats %{ start }-%{ end } sur %{ total }" -#: front/src/components/ShortcutsModal.vue:83 +#: front/src/components/ShortcutsModal.vue:140 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Shuffle queue" msgstr "Mélanger la file d'attente" -#: front/src/components/audio/Player.vue:641 +#: front/src/components/audio/Player.vue:667 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Shuffle your queue" msgstr "Mélanger votre file d’attente" -#: front/src/components/auth/Signup.vue:97 +#: front/src/components/Home.vue:103 +msgctxt "*/Signup/Title" +msgid "Sign up" +msgstr "Inscription" + +#: front/src/views/auth/Signup.vue:37 msgctxt "*/Signup/Title" msgid "Sign Up" msgstr "Inscription" +#: front/src/components/Home.vue:107 +msgctxt "Content/Home/Paragraph" +msgid "Sign up now to keep a track of your favorites, create playlists, discover new content and much more!" +msgstr "" +"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 !" + #: front/src/components/manage/users/UsersTable.vue:40 msgctxt "Content/Admin/Table.Label/Short, Noun (Value is a date)" msgid "Sign-up" msgstr "Inscription" -#: front/src/components/mixins/Translations.vue:57 -#: front/src/views/admin/moderation/AccountsDetail.vue:197 -#: front/src/components/mixins/Translations.vue:58 +#: front/src/components/mixins/Translations.vue:69 +#: front/src/views/admin/moderation/AccountsDetail.vue:198 +#: front/src/components/mixins/Translations.vue:70 msgctxt "Content/Admin/Table.Label/Noun" msgid "Sign-up date" msgstr "Date d'inscription" -#: front/src/components/manage/library/UploadsTable.vue:65 -#: front/src/views/admin/library/UploadDetail.vue:219 -msgctxt "Content/*/*/Noun" -msgid "Size" -msgstr "Taille" - #: front/src/components/library/FileUpload.vue:94 #: front/src/components/library/TrackDetail.vue:39 -#: front/src/components/mixins/Translations.vue:54 +#: front/src/components/manage/library/UploadsTable.vue:65 +#: front/src/components/mixins/Translations.vue:66 +#: front/src/views/admin/library/UploadDetail.vue:219 #: front/src/views/content/libraries/FilesTable.vue:61 -#: front/src/components/mixins/Translations.vue:55 -msgctxt "Content/Library/*/in MB" +#: front/src/components/mixins/Translations.vue:67 +msgctxt "Content/*/*/Noun" msgid "Size" msgstr "Taille" @@ -3956,7 +4256,7 @@ msgctxt "Content/Library/Label" msgid "Skipped files" msgstr "Fichiers ignorés" -#: front/src/views/admin/moderation/DomainsDetail.vue:89 +#: front/src/views/admin/moderation/DomainsDetail.vue:126 msgctxt "Content/Moderation/Table.Label" msgid "Software" msgstr "Logiciel" @@ -3964,100 +4264,70 @@ msgstr "Logiciel" #: front/src/components/playlists/Editor.vue:21 msgctxt "Content/Playlist/Paragraph" msgid "Some tracks in your queue are already in this playlist:" -msgstr "" +msgstr "Certaines pistes de votre file d'attente sont déjà dans cette liste de lecture :" #: front/src/components/PageNotFound.vue:10 msgctxt "Content/*/Paragraph" msgid "Sorry, the page you asked for does not exist:" msgstr "Désolé, la page demandée n’existe pas :" -#: front/src/components/Footer.vue:49 +#: front/src/components/Footer.vue:57 msgctxt "Footer/*/List item.Link" msgid "Source code" msgstr "Code source" #: front/src/components/auth/Profile.vue:23 -#: front/src/components/manage/users/UsersTable.vue:70 +#: front/src/components/manage/users/UsersTable.vue:71 msgctxt "Content/Profile/User role" msgid "Staff member" msgstr "Membre de l'équipe" -#: front/src/components/audio/PlayButton.vue:23 +#: front/src/components/audio/PlayButton.vue:27 #: src/components/radios/Button.vue:4 msgctxt "*/Queue/Button.Label/Short, Verb" msgid "Start radio" msgstr "Démarrer la radio" -#: front/src/views/admin/Settings.vue:86 -msgctxt "Content/Admin/Menu" +#: front/src/components/About.vue:170 src/components/Home.vue:53 +#: front/src/views/admin/Settings.vue:87 +msgctxt "Content/Home/Header" msgid "Statistics" msgstr "Statistiques" -#: front/src/views/admin/moderation/AccountsDetail.vue:490 +#: front/src/views/admin/moderation/AccountsDetail.vue:510 msgctxt "Content/Moderation/Help text" -msgid "" -"Statistics are computed from known activity and content on your instance, " -"and do not reflect general activity for this account" -msgstr "" -"Les statistiques sont calculées depuis les activités connues et le contenu " -"sur votre instance, et ne reflètent pas l'activité générale de ce compte" +msgid "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this account" +msgstr "Les statistiques sont calculées depuis les activités connues et le contenu sur votre instance, et ne reflètent pas l'activité générale de ce compte" -#: front/src/views/admin/moderation/DomainsDetail.vue:371 +#: front/src/views/admin/moderation/DomainsDetail.vue:418 msgctxt "Content/Moderation/Help text" -msgid "" -"Statistics are computed from known activity and content on your instance, " -"and do not reflect general activity for this domain" -msgstr "" -"Les statistiques sont calculées depuis les activités connues et le contenu " -"sur votre instance, et ne reflètent pas l'activité générale de ce domaine" - -#: front/src/views/admin/library/AlbumDetail.vue:329 -#: front/src/views/admin/library/ArtistDetail.vue:328 -#: front/src/views/admin/library/LibraryDetail.vue:316 -#: front/src/views/admin/library/TrackDetail.vue:371 +msgid "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this domain" +msgstr "Les statistiques sont calculées depuis les activités connues et le contenu sur votre instance, et ne reflètent pas l'activité générale de ce domaine" + +#: front/src/views/admin/library/AlbumDetail.vue:346 +#: front/src/views/admin/library/ArtistDetail.vue:345 +#: front/src/views/admin/library/LibraryDetail.vue:356 +#: front/src/views/admin/library/TagDetail.vue:210 +#: front/src/views/admin/library/TrackDetail.vue:389 #: front/src/views/admin/library/UploadDetail.vue:335 msgctxt "Content/Moderation/Help text" -msgid "" -"Statistics are computed from known activity and content on your instance, " -"and do not reflect general activity for this object" -msgstr "" -"Les statistiques sont calculées depuis les activités connues et le contenu " -"sur votre instance, et ne reflètent pas l'activité générale de ce compte" - -#: front/src/views/admin/moderation/DomainsDetail.vue:115 -msgctxt "Content/Moderation/Table.Label (Value is Error message)" -msgid "Status" -msgstr "Statut" +msgid "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" +msgstr "Les statistiques sont calculées depuis les activités connues et le contenu sur votre instance, et ne reflètent pas l'activité générale de ce compte" #: front/src/components/library/FileUpload.vue:95 -msgctxt "Content/Library/Table.Label (Value is Uploading/Uploaded/Error)" -msgid "Status" -msgstr "Statut" - -#: front/src/views/content/libraries/Detail.vue:28 -msgctxt "Content/Library.Federation/Table.Label (Value is Approved/Rejected)" -msgid "Status" -msgstr "Statut" - +#: front/src/components/manage/library/EditsCardList.vue:12 +#: front/src/components/manage/moderation/ReportCard.vue:57 #: front/src/components/manage/users/InvitationsTable.vue:17 #: front/src/components/manage/users/InvitationsTable.vue:39 -msgctxt "Content/Admin/*/Noun (Value is Used/Not used)" -msgid "Status" -msgstr "Statut" - #: front/src/components/manage/users/UsersTable.vue:43 -msgctxt "Content/Admin/Table.Label/Noun (Value is Regular user/Admin)" -msgid "Status" -msgstr "Statut" - -#: front/src/components/manage/library/EditsCardList.vue:12 -msgctxt "" -"Content/Search/Dropdown.Label (Value is All/Pending " -"review/Approved/Rejected)" +#: front/src/views/admin/moderation/DomainsDetail.vue:152 +#: front/src/views/admin/moderation/ReportsList.vue:14 +#: front/src/views/content/libraries/Detail.vue:28 +msgctxt "*/*/*" msgid "Status" msgstr "Statut" -#: front/src/components/Sidebar.vue:174 src/components/radios/Button.vue:3 +#: front/src/components/Sidebar.vue:178 src/components/radios/Button.vue:3 msgctxt "*/Player/Button.Label/Short, Verb" msgid "Stop radio" msgstr "Arrêter la radio" @@ -4067,22 +4337,32 @@ msgctxt "*/*/Button.Label/Verb" msgid "Submit" msgstr "Valider" -#: front/src/components/library/EditForm.vue:98 +#: front/src/components/library/EditForm.vue:110 msgctxt "Content/Library/Button.Label/Verb" msgid "Submit and apply edit" -msgstr "" +msgstr "Soumettre et appliquer la modification" #: front/src/components/library/EditForm.vue:7 msgctxt "Content/Library/Button.Label" msgid "Submit another edit" -msgstr "" +msgstr "Soumettre une nouvelle modification" -#: front/src/components/library/EditForm.vue:99 +#: front/src/components/moderation/ReportModal.vue:64 +msgctxt "Popup/*/Button.Label" +msgid "Submit report" +msgstr "Envoyer le signalement" + +#: front/src/components/library/EditForm.vue:111 msgctxt "Content/Library/Button.Label/Verb" msgid "Submit suggestion" -msgstr "" +msgstr "Soumettre la suggestion" -#: front/src/views/admin/Settings.vue:85 +#: front/src/components/manage/moderation/ReportCard.vue:17 +msgctxt "Content/Moderation/*" +msgid "Submitted by" +msgstr "Envoyé par" + +#: front/src/views/admin/Settings.vue:86 msgctxt "Content/Admin/Menu" msgid "Subsonic" msgstr "Subsonic" @@ -4095,7 +4375,7 @@ msgstr "Mot de passe de l'API Subsonic" #: front/src/components/library/EditForm.vue:38 msgctxt "Content/Library/Paragraph" msgid "Suggest a change using the form below." -msgstr "" +msgstr "Suggérer un changement avec le formulaire ci-dessous." #: front/src/components/library/AlbumEdit.vue:5 msgctxt "Content/*/Title" @@ -4122,16 +4402,21 @@ msgctxt "Content/Library/Tab.Title/Short" msgid "Summary" msgstr "Résumé" -#: front/src/components/library/EditForm.vue:87 +#: front/src/components/library/EditForm.vue:99 msgctxt "*/*/*" msgid "Summary (optional)" -msgstr "" +msgstr "Résumé (optionel)" -#: front/src/components/Footer.vue:39 +#: front/src/components/Footer.vue:47 msgctxt "Footer/*/Listitem.Link" msgid "Support forum" msgstr "Forum d'aide" +#: front/src/views/Notifications.vue:10 +msgctxt "Content/Notifications/Header" +msgid "Support this Funkwhale pod" +msgstr "Soutenir ce pod Funkwhale" + #: front/src/components/library/FileUpload.vue:85 msgctxt "Content/Library/Paragraph" msgid "Supported extensions: %{ extensions }" @@ -4142,92 +4427,101 @@ msgctxt "Content/Playlist/Paragraph" msgid "Syncing changes to server…" msgstr "Synchronisation des changements avec le serveur…" -#: front/src/components/audio/EmbedWizard.vue:25 +#: front/src/components/audio/SearchBar.vue:35 +msgctxt "*/*/*/Noun" +msgid "Tag" +msgstr "Étiquette" + +#: front/src/views/admin/library/TagDetail.vue:61 +msgctxt "Content/Moderation/Title" +msgid "Tag data" +msgstr "Données du tag" + +#: front/src/components/library/Albums.vue:23 +#: src/components/library/Artists.vue:15 +#: front/src/views/admin/library/Base.vue:23 +#: src/views/admin/library/TagsList.vue:24 front/src/edits.js:24 +#: src/edits.js:50 src/edits.js:91 src/entities.js:120 +msgctxt "*/*/*/Noun" +msgid "Tags" +msgstr "Étiquettes" + +#: front/src/components/mixins/Translations.vue:44 +#: front/src/components/mixins/Translations.vue:45 +msgctxt "Content/Moderation/Dropdown" +msgid "Takedown request" +msgstr "Demande de retrait" + +#: front/src/components/About.vue:35 src/components/About.vue:61 +msgctxt "Content/About/Header" +msgid "Terms and privacy policy" +msgstr "Condititions d'utilisation et politique de respect de la vie privée" + +#: front/src/components/audio/EmbedWizard.vue:35 #: front/src/components/common/CopyInput.vue:3 msgctxt "Content/*/Paragraph" msgid "Text copied to clipboard!" msgstr "La texte a été copié dans le presse-papier !" -#: front/src/components/Home.vue:26 -msgctxt "Content/Home/Paragraph" -msgid "" -"That's simple: we loved Grooveshark and we want to build something even " -"better." -msgstr "" -"C'est simple : nous adorions Grooveshark et nous voulions construire quelque" -" chose d'encore mieux." - -#: front/src/views/admin/library/AlbumDetail.vue:75 +#: front/src/views/admin/library/AlbumDetail.vue:81 msgctxt "Content/Moderation/Paragraph" -msgid "" -"The album will be removed, as well as associated uploads, tracks, favorites " -"and listening history. This action is irreversible." -msgstr "" +msgid "The album will be removed, as well as associated uploads, tracks, favorites and listening history. This action is irreversible." +msgstr "L’album sera supprimé, ainsi que les téléversements, pistes, favoris et historique d'écoute associés. Cette action est irréversible." #: front/src/components/auth/Authorize.vue:39 msgctxt "Content/Auth/Paragraph" msgid "The application is also requesting the following unknown permissions:" -msgstr "" +msgstr "L'application demande également les permissions inconnues suivantes :" -#: front/src/views/admin/library/ArtistDetail.vue:74 +#: front/src/views/admin/library/ArtistDetail.vue:79 msgctxt "Content/Moderation/Paragraph" -msgid "" -"The artist will be removed, as well as associated uploads, tracks, albums, " -"favorites and listening history. This action is irreversible." -msgstr "" +msgid "The artist will be removed, as well as associated uploads, tracks, albums, favorites and listening history. This action is irreversible." +msgstr "L’artiste sera supprimé, ainsi que les téléversements, pistes, albums, favoris et historique d'écoute associés. Cette action est irréversible." -#: front/src/components/Footer.vue:53 +#: front/src/components/Footer.vue:61 msgctxt "Footer/*/List item.Link" msgid "The funkwhale logo was kindly designed and provided by Francis Gading." -msgstr "" -"Le logo de Funkwhale a été généreusement dessiné et fourni par Francis " -"Gading." +msgstr "Le logo de Funkwhale a été généreusement dessiné et fourni par Francis Gading." #: front/src/components/SetInstanceModal.vue:8 msgctxt "Popup/Instance/Error message.List item" msgid "The given address is not a Funkwhale server" -msgstr "" +msgstr "L'adresse fournie n'est pas un serveur Funkwhale" #: front/src/views/content/libraries/Form.vue:34 msgctxt "Popup/Library/Paragraph" -msgid "" -"The library and all its tracks will be deleted. This can not be undone." -msgstr "" -"La bibliothèque et toutes ses pistes seront supprimées. Cette action est " -"irréversible." +msgid "The library and all its tracks will be deleted. This can not be undone." +msgstr "La bibliothèque et toutes ses pistes seront supprimées. Cette action est irréversible." #: front/src/views/admin/library/LibraryDetail.vue:61 msgctxt "Content/Moderation/Paragraph" -msgid "" -"The library will be removed, as well as associated uploads, and follows. " -"This action is irreversible." -msgstr "" +msgid "The library will be removed, as well as associated uploads, and follows. This action is irreversible." +msgstr "La bibliothèque sera supprimée, ainsi que les téléversements et abonnements associés. Cette action est irréversible." #: front/src/components/library/ImportStatusModal.vue:140 msgctxt "Popup/Import/Error.Label" -msgid "" -"The metadata included in the file is invalid or some mandatory fields are " -"missing." -msgstr "" +msgid "The metadata included in the file is invalid or some mandatory fields are missing." +msgstr "Les métadonnées inclues dans le fichier sont invalides, ou certains champs obligatoires sont manquants." #: front/src/components/library/FileUpload.vue:38 msgctxt "Content/Library/List item" msgid "The music files you are uploading are tagged properly." -msgstr "Les fichiers musicaux que vous téléversez sont correctement tagués :" +msgstr "Les fichiers musicaux que vous téléversez sont correctement tagués." #: front/src/components/audio/Player.vue:65 msgctxt "Sidebar/Player/Error message.Paragraph" msgid "The next track will play automatically in a few seconds…" msgstr "La piste suivante va se jouer automatiquement dans quelques secondes…" -#: front/src/components/Home.vue:116 -msgctxt "Content/Home/List item" -msgid "" -"The plaform is free and open-source, you can install it and modify it " -"without worries" -msgstr "" -"La plateforme est gratuite et open-source, vous pouvez l'installer et la " -"modifier sans restrictions" +#: front/src/components/manage/moderation/NotesThread.vue:27 +msgctxt "Content/Moderation/Paragraph" +msgid "The note will be removed. This action is irreversible." +msgstr "La note sera supprimée. Cette action est irréversible." + +#: front/src/components/manage/moderation/ReportCard.vue:120 +msgctxt "Content/Moderation/Message" +msgid "The object associated with this report was deleted." +msgstr "L’objet associé à ce signalement a été supprimé." #: front/src/components/playlists/Form.vue:14 msgctxt "Content/Playlist/Error message.Title" @@ -4237,51 +4531,49 @@ msgstr "Playlist créée" #: front/src/components/federation/FetchButton.vue:37 msgctxt "*/*/Error" msgid "The remote server answered with HTTP %{ status }" -msgstr "" +msgstr "Le serveur distant a répondu avec HTTP %{ status }" #: front/src/components/federation/FetchButton.vue:13 msgctxt "Popup/*/Message.Content" -msgid "" -"The remote server answered, but returned data was unsupported by Funkwhale." -msgstr "" +msgid "The remote server answered, but returned data was unsupported by Funkwhale." +msgstr "Le serveur distant a répondu, mais les données envoyées ne sont pas prises en charge par Funkwhale." #: front/src/components/federation/FetchButton.vue:44 msgctxt "*/*/Error" -msgid "The remote server didn't answered fast enough" -msgstr "" +msgid "The remote server didn't respond quickly enough" +msgstr "Le serveur distant n’a pas répondu assez vite" #: front/src/components/federation/FetchButton.vue:50 msgctxt "*/*/Error" -msgid "The return server returned invalid JSON or JSON-LD data" -msgstr "" +msgid "The remote server returned invalid JSON or JSON-LD data" +msgstr "Le serveur distant a envoyé des données JSON ou JSON-LD invalides" #: front/src/components/manage/library/AlbumsTable.vue:189 msgctxt "Popup/*/Paragraph" -msgid "" -"The selected albums will be removed, as well as associated tracks, uploads, " -"favorites and listening history. This action is irreversible." -msgstr "" +msgid "The selected albums will be removed, as well as associated tracks, uploads, favorites and listening history. This action is irreversible." +msgstr "Les albums sélectionnés seront supprimés, ainsi que les pistes, téléversements, favoris, et historique d'écoute associés. Cette action est irréversible." #: front/src/components/manage/library/ArtistsTable.vue:179 msgctxt "Popup/*/Paragraph" -msgid "" -"The selected artist will be removed, as well as associated uploads, tracks, " -"albums, favorites and listening history. This action is irreversible." -msgstr "" +msgid "The selected artist will be removed, as well as associated uploads, tracks, albums, favorites and listening history. This action is irreversible." +msgstr "L’artiste sélectionné sera supprimé, ainsi que les téléversements, pistes, albums, favoris et historique d’écoute associés. Cette action est irréversible." #: front/src/components/manage/library/LibrariesTable.vue:206 msgctxt "Popup/*/Paragraph" -msgid "" -"The selected library will be removed, as well as associated uploads and " -"follows. This action is irreversible." +msgid "The selected library will be removed, as well as associated uploads and follows. This action is irreversible." +msgstr "La bibliothèque sélectionnée sera supprimée, ainsi que les téléversements et abonnements associés. Cette action est irréversible." + +#: front/src/components/manage/library/TagsTable.vue:180 +msgctxt "Popup/*/Paragraph" +msgid "The selected tag will be removed and unlinked with existing content, if any. This action is irreversible." msgstr "" +"Le tag selectionné sera supprimé ainsi que son lien avec des contenus " +"existants, s'il y en a. Cette action est irréversible." #: front/src/components/manage/library/TracksTable.vue:189 msgctxt "Popup/*/Paragraph" -msgid "" -"The selected tracks will be removed, as well as associated uploads, " -"favorites and listening history. This action is irreversible." -msgstr "" +msgid "The selected tracks will be removed, as well as associated uploads, favorites and listening history. This action is irreversible." +msgstr "Les pistes sélectionnées seront supprimées, ainsi que les téléversements, favoris et historique d’écoute associés. Cette action est irréversible." #: front/src/components/manage/library/UploadsTable.vue:256 msgctxt "Popup/*/Paragraph" @@ -4291,7 +4583,7 @@ msgstr "Cette action est irréversible." #: front/src/components/SetInstanceModal.vue:7 msgctxt "Popup/Instance/Error message.List item" msgid "The server might be down" -msgstr "" +msgstr "Le serveur est peut-être hors-service" #: front/src/components/auth/SubsonicTokenForm.vue:4 msgctxt "Content/Settings/Paragraph" @@ -4300,9 +4592,15 @@ msgstr "L'API Subsonic n'est pas disponible sur cette instance Funkwhale." #: front/src/components/library/EditCard.vue:96 msgctxt "Popup/Library/Paragraph" -msgid "" -"The suggestion will be completely removed, this action is irreversible." +msgid "The suggestion will be completely removed, this action is irreversible." +msgstr "La suggestion sera entièrement supprimée, cette action est irréversible." + +#: front/src/views/admin/library/TagDetail.vue:44 +msgctxt "Content/Moderation/Paragraph" +msgid "The tag will be removed and unlinked from any existing entity. This action is irreversible." msgstr "" +"Le tag sera supprimé ainsi que son lien avec des contenus existants, s'il y " +"en a. Cette action est irréversible." #: front/src/components/playlists/PlaylistModal.vue:34 msgctxt "Popup/Playlist/Error message.Title" @@ -4312,14 +4610,12 @@ msgstr "Nous ne pouvons pas ajouter cette piste à une playlist" #: front/src/components/audio/Player.vue:62 msgctxt "Sidebar/Player/Error message.Title" msgid "The track cannot be loaded" -msgstr "" +msgstr "Échec du chargement de la piste" -#: front/src/views/admin/library/TrackDetail.vue:74 +#: front/src/views/admin/library/TrackDetail.vue:80 msgctxt "Content/Moderation/Paragraph" -msgid "" -"The track will be removed, as well as associated uploads, favorites and " -"listening history. This action is irreversible." -msgstr "" +msgid "The track will be removed, as well as associated uploads, favorites and listening history. This action is irreversible." +msgstr "La piste sera supprimée, ainsi que les téléversements, favoris et historique d’écoute associés. Cette action est irréversible." #: front/src/views/admin/library/UploadDetail.vue:68 msgctxt "Content/Moderation/Paragraph" @@ -4334,9 +4630,7 @@ msgstr "Les fichiers musicaux uploadés sont au format OGG, Flac ou MP3" #: front/src/views/content/Home.vue:4 msgctxt "Content/Library/Paragraph" msgid "There are various ways to grab new content and make it available here." -msgstr "" -"Il y a différentes manières de récupérer du nouveau contenu et de le rendre " -"disponible ici." +msgstr "Il y a différentes manières de récupérer du nouveau contenu et de le rendre disponible ici." #: front/src/components/manage/moderation/InstancePolicyForm.vue:66 msgctxt "Popup/Moderation/Paragraph" @@ -4353,28 +4647,41 @@ msgctxt "Content/Artist/Paragraph" msgid "This artist is present in the following libraries:" msgstr "Cetâ‹…te artiste est présentâ‹…e dans les bibliothèques suivantes :" +#: front/src/components/manage/moderation/DomainsTable.vue:169 +msgctxt "Content/Moderation/Popup" +msgid "This domain is present in your allow-list" +msgstr "Ce domaine est présent sur votre liste d'autorisations" + #: front/src/views/admin/moderation/AccountsDetail.vue:84 -#: front/src/views/admin/moderation/DomainsDetail.vue:48 +#: front/src/views/admin/moderation/DomainsDetail.vue:76 msgctxt "Content/Moderation/Card.Title" msgid "This domain is subject to specific moderation rules" msgstr "Ce domaine est sujet à des règles de modération spécifiques" +#: front/src/components/manage/moderation/InstancePolicyModal.vue:16 +msgctxt "Content/Moderation/Card.Title" +msgid "This entity is subject to specific moderation rules" +msgstr "Cet élément est sujet à des règles de modération spécifiques" + #: front/src/views/content/Home.vue:9 msgctxt "Content/Library/Paragraph" msgid "This instance offers up to %{quota} of storage space for every user." -msgstr "" -"Cette instance offre jusque %{quota} d'espace disque à chaque utilisateur." +msgstr "Cette instance offre jusque %{quota} d'espace disque à chaque utilisateur." + +#: front/src/components/auth/Settings.vue:300 +msgctxt "Popup/Settings/Paragraph" +msgid "This is irreversible and will permanently remove your data from our servers. You will we immediatly logged out." +msgstr "Ceci est irréversible et supprimera de façon permanente vos données de nos serveurs. Vous serez immédiatement déconnecté·e." #: front/src/components/auth/Settings.vue:165 msgctxt "Content/Settings/Paragraph" -msgid "" -"This is the list of applications that have access to your account data." -msgstr "" +msgid "This is the list of applications that have access to your account data." +msgstr "Voici la liste des applications qui ont accès aux donnnées de votre compte." #: front/src/components/auth/Settings.vue:218 msgctxt "Content/Settings/Paragraph" msgid "This is the list of applications that you have created." -msgstr "" +msgstr "Voici la liste des applications que vous avez créées." #: front/src/components/auth/Profile.vue:16 msgctxt "Content/Profile/Button.Paragraph" @@ -4384,41 +4691,37 @@ msgstr "C'est vous !" #: front/src/views/content/libraries/Form.vue:73 msgctxt "Content/Library/Input.Placeholder" msgid "This library contains my personal music, I hope you like it." -msgstr "" -"Cette bibliothèque contient ma musique personnelle, j'espère que vous " -"l'aimerez." +msgstr "Cette bibliothèque contient ma musique personnelle, j'espère que vous l'aimerez." -#: front/src/views/content/remote/Card.vue:141 +#: front/src/views/content/remote/Card.vue:169 msgctxt "Content/Library/Card.Help text" -msgid "" -"This library is private and your approval from its owner is needed to access" -" its content" -msgstr "" -"Cette bibliothèque est privée et son propriétaire doit vous approuver pour " -"accéder à son contenu" +msgid "This library is private and your approval from its owner is needed to access its content" +msgstr "Cette bibliothèque est privée et son propriétaire doit vous approuver pour accéder à son contenu" -#: front/src/views/content/remote/Card.vue:142 +#: front/src/views/content/remote/Card.vue:170 msgctxt "Content/Library/Card.Help text" msgid "This library is public and you can access its content freely" -msgstr "" -"Cette bibliothèque est publique et vous pouvez accéder à son contenu " -"librement" +msgstr "Cette bibliothèque est publique et vous pouvez accéder à son contenu librement" #: front/src/components/common/ActionTable.vue:47 msgctxt "Modal/*/Paragraph" -msgid "" -"This may affect a lot of elements or have irreversible consequences, please " -"double check this is really what you want." -msgstr "" -"Cela peut affecter de nombreux éléments ou avoir des conséquences " -"irréversibles, merci de vérifier que c'est bien ce que vous souhaitez." +msgid "This may affect a lot of elements or have irreversible consequences, please double check this is really what you want." +msgstr "Cela peut affecter de nombreux éléments ou avoir des conséquences irréversibles, merci de vérifier que c'est bien ce que vous souhaitez." #: front/src/components/library/AlbumEdit.vue:8 #: front/src/components/library/ArtistEdit.vue:8 #: front/src/components/library/TrackEdit.vue:8 msgctxt "Content/*/Message" msgid "This object is managed by another server, you cannot edit it." +msgstr "Cet objet est géré par un autre serveur, vous ne pouvez pas le modifier." + +#: front/src/components/Home.vue:87 +msgctxt "Content/Home/Paragraph" +msgid "This pod runs Funkwhale, a community-driven project that lets you listen and share music and audio within a decentralized, open network." msgstr "" +"Ce pod fonctionne grâce au logiciel Funkwhale, un projet communautaire qui " +"vous permet d'écouter et de partager de la musique et des contenus audio au " +"sein d'un réseau décentralisé et ouvert." #: front/src/components/library/FileUpload.vue:51 msgctxt "Content/Library/Paragraph" @@ -4428,16 +4731,15 @@ msgstr "Cette référence sera utilisée pour regrouper les fichiers importés." #: front/src/components/mixins/Translations.vue:33 #: front/src/components/mixins/Translations.vue:34 msgctxt "Content/Library/Help text" -msgid "This track could not be processed, please it is tagged correctly" +msgid "This track could not be processed, please make sure it is tagged correctly" msgstr "" -"Le traitement de cette piste a échoué, assurez-vous qu’elle est correctement" -" étiquetée" +"Cette piste n'a pu être traitée, merci de vous assurer qu'elle est taggée " +"correctement" #: front/src/components/mixins/Translations.vue:29 #: front/src/components/mixins/Translations.vue:30 msgctxt "Content/Library/Help text" -msgid "" -"This track has been uploaded, but hasn't been processed by the server yet" +msgid "This track has been uploaded, but hasn't been processed by the server yet" msgstr "La piste est importée mais n'a pas encore été traitée par le serveur" #: front/src/components/mixins/Translations.vue:25 @@ -4446,103 +4748,95 @@ msgctxt "Content/Library/Help text" msgid "This track is already present in one of your libraries" msgstr "La piste est déjà présente dans l'une de vos bibliothèques" -#: front/src/components/audio/PlayButton.vue:85 +#: front/src/components/audio/PlayButton.vue:103 msgctxt "*/Queue/Button/Title" msgid "This track is not available in any library you have access to" -msgstr "" -"Cette piste n'est pas accessible dans les bibliothèques auxquelles vous avez" -" accès" +msgstr "Cette piste n'est pas accessible dans les bibliothèques auxquelles vous avez accès" #: front/src/components/library/TrackDetail.vue:82 msgctxt "Content/Track/Paragraph" msgid "This track is present in the following libraries:" msgstr "Cette piste est présente dans les bibliothèques suivantes :" -#: front/src/views/playlists/Detail.vue:38 +#: front/src/views/playlists/Detail.vue:46 msgctxt "Popup/Playlist/Paragraph" msgid "This will completely delete this playlist and cannot be undone." -msgstr "" -"Cela supprimera définitivement cette playlist et ne pourra pas être annulé." +msgstr "Cela supprimera définitivement cette playlist et ne pourra pas être annulé." #: front/src/views/radios/Detail.vue:27 msgctxt "Popup/Radio/Paragraph" msgid "This will completely delete this radio and cannot be undone." -msgstr "" -"Cela supprimera définitivement cette radio et ne pourra pas être annulé." +msgstr "Cela supprimera définitivement cette radio et ne pourra pas être annulé." -#: front/src/components/auth/SubsonicTokenForm.vue:50 +#: front/src/components/auth/SubsonicTokenForm.vue:55 msgctxt "Popup/Settings/Paragraph" -msgid "" -"This will completely disable access to the Subsonic API using from account." +msgid "This will completely disable access to the Subsonic API using from account." +msgstr "Cela désactivera complétement l'accès à l'API Subsonic depuis votre compte." + +#: front/src/components/manage/moderation/ReportCard.vue:359 +msgctxt "Content/Moderation/Popup,Paragraph" +msgid "This will delete the object associated with this report and mark the report as resolved. The deletion is irreversible." msgstr "" -"Cela désactivera complétement l'accès à l'API Subsonic depuis votre compte." +"Cela supprimera l'élément associé avec ce signalement et marquera le rapport " +"comme résolu. La suppression est irreversible." -#: front/src/components/auth/SubsonicTokenForm.vue:35 +#: front/src/components/auth/SubsonicTokenForm.vue:40 msgctxt "Popup/Settings/Paragraph" -msgid "" -"This will log you out from existing devices that use the current password." -msgstr "" -"Cela vous déconnectera sur l'ensemble de vos appareils utilisant ce mot de " -"passe." +msgid "This will log you out from existing devices that use the current password." +msgstr "Cela vous déconnectera sur l'ensemble de vos appareils utilisant ce mot de passe." #: front/src/components/auth/Settings.vue:253 msgctxt "Popup/Settings/Paragraph" -msgid "" -"This will permanently delete the application and all the associated tokens." -msgstr "" -"Cela supprimera définitivement cette playlist et ne pourra pas être annulé." +msgid "This will permanently delete the application and all the associated tokens." +msgstr "Cela supprimera définitivement cette playlist et ne pourra pas être annulé." #: front/src/components/auth/Settings.vue:194 msgctxt "Popup/Settings/Paragraph" -msgid "" -"This will prevent this application from accessing the service on your " -"behalf." -msgstr "" +msgid "This will prevent this application from accessing the service on your behalf." +msgstr "Cela empêchera cette application d'accéder au service en votre nom." #: front/src/components/playlists/Editor.vue:54 msgctxt "Popup/Playlist/Paragraph" msgid "This will remove all tracks from this playlist and cannot be undone." -msgstr "" -"Cela supprimera toutes les pistes de la playlist et ne pourra pas être " -"annulé." - -#: front/src/views/admin/library/AlbumDetail.vue:99 -#: front/src/views/admin/library/TrackDetail.vue:98 src/edits.js:21 -#: src/edits.js:39 -msgctxt "*/*/*/Noun" -msgid "Title" -msgstr "Titre" +msgstr "Cela supprimera toutes les pistes de la playlist et ne pourra pas être annulé." #: front/src/components/audio/track/Table.vue:7 -#: front/src/views/content/libraries/FilesTable.vue:55 -msgctxt "Content/Track/*/Noun" -msgid "Title" -msgstr "Titre" - #: front/src/components/manage/library/AlbumsTable.vue:39 #: front/src/components/manage/library/TracksTable.vue:39 -msgctxt "*/*/*" +#: front/src/views/admin/library/AlbumDetail.vue:105 +#: front/src/views/admin/library/TrackDetail.vue:104 +#: front/src/views/content/libraries/FilesTable.vue:55 src/edits.js:36 +#: front/src/edits.js:62 +msgctxt "*/*/*/Noun" msgid "Title" msgstr "Titre" #: front/src/components/SetInstanceModal.vue:16 msgctxt "Popup/Instance/Paragraph" -msgid "" -"To continue, please select the Funkwhale instance you want to connect to. " -"Enter the address directly, or select one of the suggested choices." -msgstr "" +msgid "To continue, please select the Funkwhale instance you want to connect to. Enter the address directly, or select one of the suggested choices." +msgstr "Pour continuer, sélectionnez le pod Funkwhale auquel vous souhaitez vous connecter. Entrez l'adresse directement, ou sélectionnez l'un des choix suggérés." + +#: front/src/components/ShortcutsModal.vue:148 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Toggle favorite" +msgstr "Ajouter/Retirer des favoris" -#: front/src/components/ShortcutsModal.vue:79 +#: front/src/components/ShortcutsModal.vue:132 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Toggle mute" +msgstr "Rendre muet/réactiver le son" + +#: front/src/components/ShortcutsModal.vue:136 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Toggle queue looping" -msgstr "Basculer la boucle de file d'attente" - -#: front/src/views/admin/library/AlbumDetail.vue:222 -#: front/src/views/admin/library/ArtistDetail.vue:211 -#: front/src/views/admin/library/LibraryDetail.vue:200 -#: front/src/views/admin/library/TrackDetail.vue:274 -#: front/src/views/admin/moderation/AccountsDetail.vue:317 -#: front/src/views/admin/moderation/DomainsDetail.vue:225 +msgstr "Changer le mode de répétition" + +#: front/src/views/admin/library/AlbumDetail.vue:238 +#: front/src/views/admin/library/ArtistDetail.vue:226 +#: front/src/views/admin/library/LibraryDetail.vue:219 +#: front/src/views/admin/library/TrackDetail.vue:290 +#: front/src/views/admin/moderation/AccountsDetail.vue:329 +#: front/src/views/admin/moderation/DomainsDetail.vue:262 msgctxt "Content/Moderation/Table.Label" msgid "Total size" msgstr "Taille totale" @@ -4552,20 +4846,18 @@ msgctxt "Content/Library/Card.Help text" msgid "Total size of the files in this library" msgstr "Taille totale des fichiers de cette bibliothèque" -#: front/src/views/admin/moderation/DomainsDetail.vue:105 +#: front/src/views/admin/moderation/DomainsDetail.vue:142 msgctxt "Content/*/*" msgid "Total users" msgstr "Nombre total d'utilisateurs" -#: front/src/views/admin/library/UploadDetail.vue:199 -msgctxt "*/*/*" -msgid "Track" -msgstr "Piste" - -#: front/src/components/audio/SearchBar.vue:27 -#: front/src/components/library/TrackBase.vue:173 +#: front/src/components/audio/SearchBar.vue:34 +#: front/src/components/library/TrackBase.vue:188 #: front/src/components/library/TrackDetail.vue:128 #: front/src/components/metadata/Search.vue:138 +#: src/components/mixins/Report.vue:28 +#: front/src/views/admin/library/UploadDetail.vue:199 +#: front/src/components/mixins/Report.vue:29 msgctxt "*/*/*/Noun" msgid "Track" msgstr "Piste" @@ -4573,9 +4865,9 @@ msgstr "Piste" #: front/src/components/library/EditCard.vue:13 msgctxt "Content/Library/Card/Short" msgid "Track #%{ id } - %{ name }" -msgstr "" +msgstr "Piste #%{ id } - %{ name }" -#: front/src/views/admin/library/TrackDetail.vue:91 +#: front/src/views/admin/library/TrackDetail.vue:97 msgctxt "Content/Moderation/Title" msgid "Track data" msgstr "Nom de la piste" @@ -4585,30 +4877,28 @@ msgctxt "Content/Track/Title/Noun" msgid "Track information" msgstr "Information de la piste" -#: front/src/components/mixins/Translations.vue:50 -#: front/src/components/mixins/Translations.vue:51 +#: front/src/components/mixins/Translations.vue:60 +#: front/src/components/mixins/Translations.vue:61 msgctxt "Content/*/Dropdown/Noun" msgid "Track name" msgstr "Nom de la piste" -#: front/src/components/instance/Stats.vue:54 #: front/src/components/library/AlbumDetail.vue:19 -#: front/src/components/playlists/PlaylistModal.vue:47 -#: front/src/views/admin/moderation/AccountsDetail.vue:362 -#: front/src/views/admin/moderation/DomainsDetail.vue:274 -#: front/src/views/content/Base.vue:8 src/views/content/libraries/Detail.vue:8 -#: front/src/views/playlists/Detail.vue:51 src/views/radios/Detail.vue:34 -msgctxt "*/*/*/Noun" -msgid "Tracks" -msgstr "Pistes" - +#: front/src/components/library/TagDetail.vue:36 #: front/src/components/manage/library/AlbumsTable.vue:42 #: front/src/components/manage/library/ArtistsTable.vue:42 -#: front/src/views/admin/library/AlbumDetail.vue:252 -#: front/src/views/admin/library/ArtistDetail.vue:251 +#: front/src/components/manage/library/TagsTable.vue:44 +#: front/src/components/playlists/PlaylistModal.vue:47 +#: front/src/views/admin/library/AlbumDetail.vue:268 +#: front/src/views/admin/library/ArtistDetail.vue:266 #: front/src/views/admin/library/Base.vue:14 -#: front/src/views/admin/library/LibraryDetail.vue:229 +#: front/src/views/admin/library/LibraryDetail.vue:248 +#: front/src/views/admin/library/TagDetail.vue:143 #: front/src/views/admin/library/TracksList.vue:24 +#: front/src/views/admin/moderation/AccountsDetail.vue:374 +#: front/src/views/admin/moderation/DomainsDetail.vue:311 +#: front/src/views/content/Base.vue:8 src/views/content/libraries/Detail.vue:8 +#: front/src/views/playlists/Detail.vue:76 src/views/radios/Detail.vue:34 msgctxt "*/*/*" msgid "Tracks" msgstr "Pistes" @@ -4618,79 +4908,64 @@ msgctxt "Content/Artist/Title" msgid "Tracks by this artist" msgstr "Pistes par cetâ‹…te artiste" -#: front/src/components/instance/Stats.vue:25 -msgctxt "Content/About/Paragraph/Unit" -msgid "Tracks favorited" -msgstr "Pistes en favoris" - -#: front/src/components/instance/Stats.vue:19 -msgctxt "Content/About/Paragraph/Unit" -msgid "tracks listened" -msgstr "pistes écoutées" - #: front/src/components/library/radios/Filter.vue:44 msgctxt "Popup/Radio/Title/Noun" msgid "Tracks matching filter" msgstr "Piste correspondant au filtre" #: front/src/components/library/TrackDetail.vue:57 +#: front/src/components/manage/moderation/ReportCard.vue:134 #: front/src/views/admin/library/UploadDetail.vue:250 +#: front/src/views/admin/moderation/AccountsDetail.vue:181 msgctxt "Content/Track/Table.Label/Noun" msgid "Type" msgstr "Type" -#: front/src/views/admin/moderation/AccountsDetail.vue:180 -msgctxt "Content/Moderation/Table.Label/Noun" -msgid "Type" -msgstr "Type" - #: front/src/components/manage/moderation/AccountsTable.vue:44 -#: front/src/components/manage/moderation/DomainsTable.vue:42 +#: front/src/components/manage/moderation/DomainsTable.vue:50 msgctxt "Content/Moderation/Table.Label/Short" msgid "Under moderation rule" msgstr "Sous règle de modération" -#: front/src/views/content/remote/Card.vue:109 -#: src/views/content/remote/Card.vue:114 +#: front/src/components/ShortcutsModal.vue:68 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Unfocus searchbar" +msgstr "Retirer le focus de la barre de recherche" + +#: front/src/views/content/remote/Card.vue:122 +#: src/views/content/remote/Card.vue:127 msgctxt "*/Library/Button.Label/Verb" msgid "Unfollow" msgstr "Se désabonner" -#: front/src/views/content/remote/Card.vue:110 +#: front/src/views/content/remote/Card.vue:123 msgctxt "Popup/Library/Title" msgid "Unfollow this library?" msgstr "Se désabonner de cette bibliothèque ?" -#: front/src/components/About.vue:17 -msgctxt "Content/About/Paragraph" -msgid "" -"Unfortunately, the owners of this instance did not yet take the time to " -"complete this page." -msgstr "" -"Malheureusement, les gestionnaires de cette instance n'ont pas encore pris " -"le temps de compléter cette page." - #: front/src/components/federation/FetchButton.vue:54 #: front/src/components/federation/FetchButton.vue:55 -msgctxt "*/*/Error" -msgid "Unknowkn error" -msgstr "" - #: front/src/components/library/ImportStatusModal.vue:144 -msgctxt "Popup/Import/Error.Label" -msgid "Unkwown error" -msgstr "" - -#: front/src/components/Home.vue:37 -msgctxt "Content/Home/Title" -msgid "Unlimited music" -msgstr "Musique illimitée" +msgctxt "*/*/Error" +msgid "Unknown error" +msgstr "Erreur inconnue" -#: front/src/components/audio/Player.vue:630 +#: front/src/components/audio/Player.vue:656 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Unmute" msgstr "Réactiver le son" +#: front/src/components/manage/moderation/ReportCard.vue:225 +msgctxt "Content/*/Button.Label" +msgid "Unresolve" +msgstr "Rouvrir" + +#: front/src/components/manage/moderation/ReportCard.vue:67 +#: front/src/views/admin/moderation/ReportsList.vue:23 +msgctxt "Content/*/*/Short" +msgid "Unresolved" +msgstr "Non-résolu" + #: front/src/components/manage/moderation/InstancePolicyForm.vue:57 msgctxt "Content/Moderation/Card.Button.Label/Verb" msgid "Update" @@ -4754,35 +5029,28 @@ msgstr "Date d'envoi" #: front/src/components/library/FileUpload.vue:258 msgctxt "Content/Library/Help text" -msgid "" -"Upload denied, ensure the file is not too big and that you have not reached " -"your quota" -msgstr "" -"Import refusée, assurez-vous que le fichier n'est pas trop gros et que vous " -"n'avez pas atteint votre quota" +msgid "Upload denied, ensure the file is not too big and that you have not reached your quota" +msgstr "Import refusée, assurez-vous que le fichier n'est pas trop gros et que vous n'avez pas atteint votre quota" #: front/src/components/library/ImportStatusModal.vue:8 msgctxt "Popup/Import/Message" msgid "Upload is still pending and will soon be processed by the server." msgstr "" +"Le fichier est en encore attente et sera prochainement traité par le serveur." #: front/src/views/content/Home.vue:7 msgctxt "Content/Library/Paragraph" -msgid "" -"Upload music files (MP3, OGG, FLAC, etc.) from your personal library " -"directly from your browser to enjoy them here." -msgstr "" -"Importez des fichiers musicaux (MP3, OGG, Flac, etc.) depuis votre " -"bibliothèque personnelle directement depuis votre navigateur pour en " -"profiter ici." +msgid "Upload music files (MP3, OGG, FLAC, etc.) from your personal library directly from your browser to enjoy them here." +msgstr "Importez des fichiers musicaux (MP3, OGG, Flac, etc.) depuis votre bibliothèque personnelle directement depuis votre navigateur pour en profiter ici." #: front/src/components/library/FileUpload.vue:30 msgctxt "Content/Library/Title/Verb" msgid "Upload new tracks" msgstr "Téléverser de nouveaux morceaux" -#: front/src/views/admin/moderation/AccountsDetail.vue:298 -msgctxt "Content/Moderation/Table.Label/Noun" +#: front/src/components/About.vue:99 +#: front/src/views/admin/moderation/AccountsDetail.vue:309 +msgctxt "*/*/*" msgid "Upload quota" msgstr "Quota d’envoi" @@ -4793,15 +5061,13 @@ msgstr "Dépassement du délai d'envoi, veuillez réessayer" #: front/src/components/library/ImportStatusModal.vue:14 msgctxt "Popup/Import/Message" -msgid "" -"Upload was skipped because a similar one is already available in one of your" -" libraries." -msgstr "" +msgid "Upload was skipped because a similar one is already available in one of your libraries." +msgstr "L’import a été ignoré car un fichier similaire est déjà disponible dans une de vos bibliothèques." #: front/src/components/library/ImportStatusModal.vue:11 msgctxt "Popup/Import/Message" msgid "Upload was successfully processed by the server." -msgstr "" +msgstr "L'envoi a été correctement traité par le serveur." #: front/src/components/library/FileUpload.vue:109 msgctxt "Content/Library/Table" @@ -4818,75 +5084,87 @@ msgctxt "Content/Library/Table" msgid "Uploading…" msgstr "Envoi en cours…" +#: front/src/components/manage/library/LibrariesTable.vue:52 +#: front/src/components/manage/moderation/AccountsTable.vue:41 +#: front/src/components/mixins/Translations.vue:75 +#: front/src/views/admin/library/AlbumDetail.vue:258 +#: front/src/views/admin/library/ArtistDetail.vue:246 #: front/src/views/admin/library/Base.vue:20 +#: front/src/views/admin/library/LibraryDetail.vue:258 +#: front/src/views/admin/library/TrackDetail.vue:310 #: front/src/views/admin/library/UploadsList.vue:24 +#: front/src/views/admin/moderation/AccountsDetail.vue:349 +#: front/src/views/admin/moderation/DomainsDetail.vue:281 +#: front/src/components/mixins/Translations.vue:76 msgctxt "*/*/*" msgid "Uploads" msgstr "Téléversements" -#: front/src/components/manage/moderation/AccountsTable.vue:41 -#: front/src/components/mixins/Translations.vue:63 -#: front/src/views/admin/library/AlbumDetail.vue:242 -#: front/src/views/admin/library/ArtistDetail.vue:231 -#: front/src/views/admin/library/LibraryDetail.vue:239 -#: front/src/views/admin/library/TrackDetail.vue:294 -#: front/src/views/admin/moderation/AccountsDetail.vue:337 -#: front/src/views/admin/moderation/DomainsDetail.vue:244 -#: front/src/components/mixins/Translations.vue:64 -msgctxt "Content/Moderation/Table.Label/Noun" -msgid "Uploads" -msgstr "Téléversements" - -#: front/src/components/manage/library/LibrariesTable.vue:52 -msgctxt "Content/*/*/Noun" -msgid "Uploads" -msgstr "Téléversements" - #: front/src/components/auth/ApplicationForm.vue:16 msgctxt "Content/Applications/Help Text" -msgid "" -"Use \"urn:ietf:wg:oauth:2.0:oob\" as a redirect URI if your application is " -"not served on the web." +msgid "Use \"urn:ietf:wg:oauth:2.0:oob\" as a redirect URI if your application is not served on the web." msgstr "" +"Utiliser \"urn:ietf:wg:oauth:2.0:oob\" comme URI de redirection si votre " +"application n'est pas disponible sur le web." #: front/src/components/Footer.vue:16 msgctxt "Footer/*/List item.Link" msgid "Use another instance" msgstr "Utiliser une autre instance" +#: front/src/components/Home.vue:146 +msgctxt "Content/Home/Link" +msgid "Use Funkwhale on other devices with our apps" +msgstr "Utiliser Funkwhale sur d'autres terminaux avec nos applications" + +#: front/src/components/moderation/ReportModal.vue:44 +msgctxt "*/*/Field,Help" +msgid "Use this field to provide additional context to the moderator that will handle your report." +msgstr "" +"Utilisez ce champ pour fournir du contexte supplémentaire aux modérateur·" +"ices qui traiteront votre signalement." + #: front/src/views/auth/PasswordReset.vue:12 msgctxt "Content/Signup/Paragraph" -msgid "" -"Use this form to request a password reset. We will send an email to the " -"given address with instructions to reset your password." +msgid "Use this form to request a password reset. We will send an email to the given address with instructions to reset your password." +msgstr "Utilisez ce formulaire pour demander à réinitialiser votre mot de passe. Vous recevrez un courriel à l'adresse indiquée contenant les instructions de réinitialisation." + +#: front/src/components/moderation/ReportModal.vue:18 +msgctxt "*/Moderation/Popup,Paragraph" +msgid "Use this form to submit a report to our moderation team." msgstr "" -"Utilisez ce formulaire pour demander à réinitialiser votre mot de passe. " -"Vous recevrez un courriel à l'adresse indiquée contenant les instructions de" -" réinitialisation." +"Utilisez ce formulaire pour envoyer un signalement à notre équipe de " +"modération." #: front/src/components/manage/moderation/InstancePolicyForm.vue:111 msgctxt "Content/Moderation/Help text" -msgid "" -"Use this setting to temporarily enable/disable the policy without completely" -" removing it." -msgstr "" -"Utilisez ce paramètre pour activer/désactiver temporairement la règle sans " -"la supprimer complètement." +msgid "Use this setting to temporarily enable/disable the policy without completely removing it." +msgstr "Utilisez ce paramètre pour activer/désactiver temporairement la règle sans la supprimer complètement." #: front/src/components/manage/users/InvitationsTable.vue:49 msgctxt "Content/Admin/Table" msgid "Used" msgstr "Utilisé" +#: front/src/components/Home.vue:125 +msgctxt "Content/Home/Header" +msgid "Useful links" +msgstr "Liens utiles" + #: front/src/views/content/libraries/Detail.vue:26 msgctxt "Content/Library/Table.Label" msgid "User" msgstr "Utilisateur·rice" -#: front/src/components/instance/Stats.vue:5 -msgctxt "Content/About/Title/Noun" -msgid "User activity" -msgstr "Activité des utilisateur·ice·s" +#: front/src/components/Home.vue:154 +msgctxt "Content/Home/Link" +msgid "User guides" +msgstr "Guides d'utilisation" + +#: front/src/views/admin/Settings.vue:88 +msgctxt "Content/Admin/Menu" +msgid "User Interface" +msgstr "Interface utilisateur·ice" #: front/src/components/library/AlbumDetail.vue:26 #: front/src/components/library/ArtistDetail.vue:39 @@ -4900,35 +5178,37 @@ msgctxt "Content/Radio/Title" msgid "User radios" msgstr "Radios des utilisateur·ice·s" -#: front/src/components/auth/Signup.vue:19 +#: front/src/components/auth/SignupForm.vue:15 #: front/src/components/manage/users/UsersTable.vue:37 -#: front/src/components/mixins/Translations.vue:59 +#: front/src/components/mixins/Translations.vue:71 #: front/src/views/admin/moderation/AccountsDetail.vue:114 -#: front/src/components/mixins/Translations.vue:60 +#: front/src/components/mixins/Translations.vue:72 msgctxt "Content/*/*" msgid "Username" msgstr "Nom d'utilisateur" -#: front/src/components/auth/Login.vue:15 +#: front/src/components/auth/LoginForm.vue:11 msgctxt "Content/Login/Input.Label/Noun" msgid "Username or email" msgstr "Nom d'utilisateur ou email" -#: front/src/components/instance/Stats.vue:13 -msgctxt "Content/About/Paragraph/Unit" -msgid "users" -msgstr "utilisateur·rice·s" - -#: front/src/components/Sidebar.vue:102 -#: front/src/components/manage/moderation/DomainsTable.vue:39 -#: front/src/components/mixins/Translations.vue:61 +#: front/src/components/Sidebar.vue:106 +#: front/src/components/manage/moderation/DomainsTable.vue:47 +#: front/src/components/mixins/Translations.vue:73 #: src/views/admin/Settings.vue:81 front/src/views/admin/users/Base.vue:5 #: src/views/admin/users/UsersList.vue:21 -#: front/src/components/mixins/Translations.vue:62 +#: front/src/components/mixins/Translations.vue:74 msgctxt "*/*/*/Noun" msgid "Users" msgstr "Utilisateur·ice·s" +#: front/src/components/Home.vue:110 +msgctxt "Content/Home/Paragraph" +msgid "Users on this pod also get %{ quota } of free storage to upload their own content!" +msgstr "" +"Les utilisateur·ices de ce pod bénéficient également de %{ quota } d'espace " +"de stockage pour mettre en ligne leurs propres contenus !" + #: front/src/components/Footer.vue:29 msgctxt "Footer/*/Title" msgid "Using Funkwhale" @@ -4946,45 +5226,58 @@ msgctxt "Content/Library/Link/Verb" msgid "View files" msgstr "Afficher les fichiers" -#: front/src/components/library/AlbumBase.vue:81 -#: front/src/components/library/ArtistBase.vue:92 -#: front/src/components/library/TrackBase.vue:100 -#: front/src/views/admin/library/AlbumDetail.vue:42 -#: front/src/views/admin/library/ArtistDetail.vue:41 +#: front/src/components/library/AlbumBase.vue:95 +#: front/src/components/library/ArtistBase.vue:107 +#: front/src/components/library/TrackBase.vue:111 +#: front/src/views/admin/library/AlbumDetail.vue:48 +#: front/src/views/admin/library/ArtistDetail.vue:46 #: front/src/views/admin/library/LibraryDetail.vue:34 #: front/src/views/admin/library/LibraryDetail.vue:45 -#: front/src/views/admin/library/TrackDetail.vue:41 +#: front/src/views/admin/library/TagDetail.vue:32 +#: front/src/views/admin/library/TrackDetail.vue:47 #: front/src/views/admin/library/UploadDetail.vue:35 #: front/src/views/admin/library/UploadDetail.vue:46 #: front/src/views/admin/moderation/AccountsDetail.vue:37 #: front/src/views/admin/moderation/AccountsDetail.vue:45 +#: front/src/views/admin/moderation/DomainsDetail.vue:30 msgctxt "Content/Moderation/Link/Verb" msgid "View in Django's admin" -msgstr "" +msgstr "Voir dans l'administration Django" -#: front/src/components/library/AlbumBase.vue:61 -#: front/src/components/library/ArtistBase.vue:72 -#: front/src/components/library/TrackBase.vue:80 +#: front/src/components/Home.vue:169 +msgctxt "Content/Home/Link" +msgid "View more…" +msgstr "Voir plus…" + +#: front/src/components/library/AlbumBase.vue:62 +#: front/src/components/library/ArtistBase.vue:73 +#: front/src/components/library/TrackBase.vue:78 #: front/src/components/metadata/ArtistCard.vue:49 #: front/src/components/metadata/ReleaseCard.vue:53 msgctxt "Content/*/*/Clickable, Verb" msgid "View on MusicBrainz" msgstr "Voir sur MusicBrainz" +#: front/src/components/manage/moderation/ReportCard.vue:124 +msgctxt "Content/Moderation/Link" +msgid "View public page" +msgstr "Voir la page publique" + #: front/src/components/manage/library/LibrariesTable.vue:11 #: front/src/components/manage/library/LibrariesTable.vue:51 #: front/src/components/manage/library/UploadsTable.vue:11 #: front/src/components/manage/library/UploadsTable.vue:63 #: front/src/views/admin/library/LibraryDetail.vue:94 #: front/src/views/admin/library/UploadDetail.vue:101 +#: front/src/views/content/libraries/Form.vue:18 msgctxt "*/*/*" msgid "Visibility" msgstr "Visibilité" -#: front/src/views/content/libraries/Form.vue:18 -msgctxt "Content/Library/Dropdown.Label" -msgid "Visibility" -msgstr "Visibilité" +#: front/src/components/Home.vue:91 +msgctxt "Content/Home/Link" +msgid "Visit funkwhale.audio" +msgstr "Visiter funkwhale.audio" #: front/src/components/library/AlbumDetail.vue:4 msgctxt "Content/Album/" @@ -4996,7 +5289,12 @@ msgctxt "Popup/*/Loading.Title" msgid "Waiting for result…" msgstr "Chargement de vos favoris…" -#: front/src/components/auth/Login.vue:7 +#: front/src/components/auth/Settings.vue:285 +msgctxt "Content/Settings/Error message.Title" +msgid "We cannot delete your account" +msgstr "Nous ne pouvons pas supprimer votre compte" + +#: front/src/components/auth/LoginForm.vue:3 msgctxt "Content/Login/Error message.Title" msgid "We cannot log you in" msgstr "Erreur lors de la connexion" @@ -5004,44 +5302,43 @@ msgstr "Erreur lors de la connexion" #: front/src/components/auth/ApplicationForm.vue:3 msgctxt "Content/*/Error message.Title" msgid "We cannot save your changes" -msgstr "Création de votre compte impossible." +msgstr "Sauvegarde de vos modifications impossible" -#: front/src/components/Home.vue:122 -msgctxt "Content/Home/List item" -msgid "We do not track you or bother you with ads" -msgstr "Nous ne vous pistons pas et ne vous exposons pas à des publicités" +#: front/src/views/Notifications.vue:39 +msgctxt "Content/Notifications/Paragraph" +msgid "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!" +msgstr "" +"Nous avons remarqué que vous êtes là depuis quelques temps. Si Funkwhale " +"vous est utile, vous pouvez nous aider à le rendre encore meilleur !" #: front/src/components/library/FileUpload.vue:39 msgctxt "Content/Library/Link" msgid "We recommend using Picard for that purpose." msgstr "nous vous recommandons d'utiliser le logiciel Picard pour cela." -#: front/src/components/Home.vue:7 -msgctxt "Content/Home/Title" -msgid "We think listening to music should be simple." -msgstr "Nous pensons que l'accès à la musique devrait être simple." +#: front/src/components/moderation/ReportModal.vue:35 +msgctxt "*/*/Field,Help" +msgid "We'll use this email if we need to contact you regarding this report." +msgstr "" +"Nous utiliserons cet email si nous avons besoin de vous contacter à propos " +"de votre signalement." -#: front/src/components/Home.vue:148 +#: front/src/components/Home.vue:207 msgctxt "Head/Home/Title" msgid "Welcome" msgstr "Bienvenue" #: front/src/components/Home.vue:5 -msgctxt "Content/Home/Title/Verb" -msgid "Welcome on Funkwhale" -msgstr "Bienvenue sur Funkwhale" - -#: front/src/components/Home.vue:24 -msgctxt "Content/Home/Title" -msgid "Why funkwhale?" -msgstr "Pourquoi Funkwhale ?" +msgctxt "Content/Home/Header" +msgid "Welcome to %{ podName }!" +msgstr "Bienvenue sur %{ podName } !" -#: front/src/components/audio/EmbedWizard.vue:13 +#: front/src/components/audio/EmbedWizard.vue:23 msgctxt "Popup/Embed/Input.Label" msgid "Widget height" msgstr "Hauteur du widget" -#: front/src/components/audio/EmbedWizard.vue:6 +#: front/src/components/audio/EmbedWizard.vue:16 msgctxt "Popup/Embed/Input.Label" msgid "Widget width" msgstr "Largeur du widget" @@ -5049,21 +5346,23 @@ msgstr "Largeur du widget" #: front/src/components/auth/ApplicationForm.vue:157 msgctxt "Content/OAuth Scopes/Label/Verb" msgid "Write" -msgstr "" +msgstr "Écriture" #: front/src/components/auth/Authorize.vue:21 msgctxt "Content/Auth/Label/Noun" msgid "Write-only" -msgstr "" +msgstr "Écriture seule" #: front/src/components/auth/ApplicationForm.vue:158 msgctxt "Content/OAuth Scopes/Help Text" msgid "Write-only access to user data" -msgstr "" +msgstr "Accès aux données utilisateur en écriture seule" -#: front/src/components/Sidebar.vue:129 +#: front/src/components/Sidebar.vue:133 #: front/src/components/manage/moderation/AccountsTable.vue:72 -#: front/src/components/manage/moderation/DomainsTable.vue:58 +#: front/src/components/manage/moderation/DomainsTable.vue:12 +#: front/src/components/manage/moderation/DomainsTable.vue:69 +#: front/src/views/admin/moderation/DomainsDetail.vue:109 msgctxt "*/*/*" msgid "Yes" msgstr "Oui" @@ -5075,35 +5374,26 @@ msgstr "Oui, déconnectez-moi !" #: front/src/views/content/libraries/Form.vue:19 msgctxt "Content/Library/Paragraph" -msgid "" -"You are able to share your library with other people, regardless of its " -"visibility." -msgstr "" -"Vous pouvez partager votre bibliothèque avec d'autres personnes, quelle que " -"soit sa visibilité." +msgid "You are able to share your library with other people, regardless of its visibility." +msgstr "Vous pouvez partager votre bibliothèque avec d'autres personnes, quelle que soit sa visibilité." #: front/src/components/library/FileUpload.vue:32 msgctxt "Content/Library/Paragraph" -msgid "" -"You are about to upload music to your library. Before proceeding, please " -"ensure that:" -msgstr "" -"Vous êtes sur le point de transférer de la musique dans votre bibliothèque. " -"Avant de procéder, veuillez vous assurer que :" +msgid "You are about to upload music to your library. Before proceeding, please ensure that:" +msgstr "Vous êtes sur le point de transférer de la musique dans votre bibliothèque. Avant de procéder, veuillez vous assurer que :" #: front/src/components/SetInstanceModal.vue:12 msgctxt "Popup/Login/Paragraph" -msgid "" -"You are currently connected to <a href=\"%{ url }\" target=\"_blank\">%{ " -"hostname } <i class=\"external icon\"/></a>. If you continue, you will " -"be disconnected from your current instance and all your local data will be " -"deleted." +msgid "You are currently connected to <a href=\"%{ url }\" target=\"_blank\">%{ hostname } <i class=\"external icon\"/></a>. If you continue, you will be disconnected from your current instance and all your local data will be deleted." msgstr "" +"Vous êtes actuellement connecté·e a <a href=\"%{ url }\" target=\"_blank\">%{" +" hostname } <i class=\"external icon\"/></a>. Si vous continuez, vous " +"serez déconnecté·e et les données locales seront supprimées." #: front/src/components/library/ArtistDetail.vue:6 msgctxt "Content/Artist/Paragraph" msgid "You are currently hiding content related to this artist." -msgstr "" +msgstr "Vous masquez actuellement le contenu associé à cet·te artiste." #: front/src/components/auth/Logout.vue:7 msgctxt "Content/Login/Paragraph" @@ -5112,65 +5402,49 @@ msgstr "Vous êtes actuellement connecté·e en tant que %{ username }" #: front/src/components/library/FileUpload.vue:35 msgctxt "Content/Library/List item" -msgid "" -"You are not uploading copyrighted content in a public library, otherwise you" -" may be infringing the law" +msgid "You are not uploading copyrighted content in a public library, otherwise you may be infringing the law" msgstr "" +"Vous n'envoyez pas de contenu sous copyright dans une bibliothèque publique, " +"car dans le cas contraire, vous être probablement en infraction" #: front/src/components/SetInstanceModal.vue:98 msgctxt "*/Instance/Message" msgid "You are now using the Funkwhale instance at %{ url }" -msgstr "" +msgstr "Vous utilisez maintenant l’instance Funkwhale sur ${ url }" #: front/src/views/content/Home.vue:17 msgctxt "Content/Library/Paragraph" -msgid "" -"You can follow libraries from other users to get access to new music. Public" -" libraries can be followed immediatly, while following a private library " -"requires approval from its owner." +msgid "You can 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." msgstr "" "Vous pouvez suivre les bibliothèques d'autres utilisateurs pour avoir accès " "à de la nouvelle musique. Les bibliothèques publiques peuvent être suivies " "immédiatement, tandis que le suivi d'une bibliothèque privée nécessite " "l'approbation de son propriétaire." -#: front/src/components/Home.vue:128 -msgctxt "Content/Home/List item" -msgid "" -"You can invite friends and family to your instance so they can enjoy your " -"music" -msgstr "" -"Vous pouvez inviter vos ami·es et votre famille sur votre instance pour " -"qu'ils·elles puissent profiter de votre musique" - #: front/src/components/moderation/FilterModal.vue:31 msgctxt "Popup/Moderation/Paragraph" -msgid "" -"You can manage and update your filters anytime from your account settings." -msgstr "" +msgid "You can manage and update your filters any time from your account settings." +msgstr "Vous pouvez gérer et mettre à jour vos filtres à tout moment depuis les paramètres de votre compte." #: front/src/views/auth/EmailConfirm.vue:24 msgctxt "Content/Signup/Paragraph" msgid "You can now use the service without limitations." msgstr "Vous pouvez maintenant utiliser le service sans limitations." +#: front/src/components/auth/Settings.vue:278 +msgctxt "Content/Settings/Paragraph'" +msgid "You can permanently and irreversibly delete your account and all the associated data using the form below. You will be asked for confirmation." +msgstr "Vous pouvez de façon permanente et irrémédiable votre compte et toutes les données liées en utilisant le formulaire ci-dessous. Une confirmation vous sera demandée." + #: front/src/components/library/radios/Builder.vue:7 msgctxt "Content/Radio/Paragraph" -msgid "" -"You can use this interface to build your own custom radio, which will play " -"tracks according to your criteria." -msgstr "" -"Vous pouvez utiliser cette interface pour réaliser votre propre radio " -"personnalisée, qui jouera les pistes correspondant aux critères indiqués." +msgid "You can use this interface to build your own custom radio, which will play tracks according to your criteria." +msgstr "Vous pouvez utiliser cette interface pour réaliser votre propre radio personnalisée, qui jouera les pistes correspondant aux critères indiqués." #: front/src/components/auth/SubsonicTokenForm.vue:7 msgctxt "Content/Settings/Paragraph" -msgid "" -"You can use those to enjoy your playlist and music in offline mode, on your " -"smartphone or tablet, for instance." -msgstr "" -"Vous pouvez les utiliser pour profiter de vos playlists et de votre musique " -"en mode hors-ligne sur votre smatphone ou tablette, par exemple." +msgid "You can use those to enjoy your playlist and music in offline mode, on your smartphone or tablet, for instance." +msgstr "Vous pouvez les utiliser pour profiter de vos playlists et de votre musique en mode hors-ligne sur votre smatphone ou tablette, par exemple." #: front/src/components/auth/Settings.vue:202 msgctxt "Content/Applications/Paragraph" @@ -5187,19 +5461,20 @@ msgctxt "Content/Moderation/Card.Title" msgid "You don't have any rule in place for this account." msgstr "Vous n'avez aucune règle en place pour ce compte." -#: front/src/views/admin/moderation/DomainsDetail.vue:39 +#: front/src/views/admin/moderation/DomainsDetail.vue:67 msgctxt "Content/Moderation/Card.Title" msgid "You don't have any rule in place for this domain." msgstr "Vous n'avez aucune règle en place pour ce domaine." #: front/src/components/library/EditForm.vue:52 msgctxt "Content/Library/Paragraph" -msgid "" -"You don't have the permission to edit this object, but you can suggest " -"changes. Once submitted, suggestions will be reviewed before approval." +msgid "You don't have the permission to edit this object, but you can suggest changes. Once submitted, suggestions will be reviewed before approval." msgstr "" +"Vous n'avez pas la permission d'éditer cet élément, mais vous pouvez " +"suggérer des modifications. Une fois envoyées, les suggestions sont " +"examinées avant d'être approuvées." -#: front/src/components/Sidebar.vue:171 +#: front/src/components/Sidebar.vue:175 msgctxt "Sidebar/Player/Title" msgid "You have a radio playing" msgstr "Vous écoutez une radio" @@ -5211,42 +5486,43 @@ msgstr "Il se peut que vous ayez des problèmes de connexion." #: front/src/components/auth/Settings.vue:100 msgctxt "Popup/Settings/List item" -msgid "" -"You will be logged out from this session and have to log in with the new one" -msgstr "" -"Vous allez être déconnecté⋅e de cette session et vous devrez vous connecter " -"avec votre nouveau mot de passe" +msgid "You will be logged out from this session and have to log in with the new one" +msgstr "Vous allez être déconnecté⋅e de cette session et vous devrez vous connecter avec votre nouveau mot de passe" #: front/src/components/auth/Authorize.vue:51 msgctxt "Content/Auth/Paragraph" msgid "You will be redirected to <strong>%{ url }</strong>" -msgstr "" +msgstr "Vous allez être redirigé·e vers <strong>${ url }</strong>" #: front/src/components/auth/Authorize.vue:49 msgctxt "Content/Auth/Paragraph" msgid "You will be shown a code to copy-paste in the application." -msgstr "" +msgstr "Un code à copier-coller dans l'application vous sera présenté." #: front/src/components/auth/Settings.vue:71 msgctxt "Content/Settings/Paragraph" -msgid "" -"You will have to update your password on your clients that use this " -"password." -msgstr "" -"Vous devrez mettre à jour votre mot de passe sur l'ensemble des clients " -"utilisant ce mot de passe." +msgid "You will have to update your password on your clients that use this password." +msgstr "Vous devrez mettre à jour votre mot de passe sur l'ensemble des clients utilisant ce mot de passe." #: front/src/components/moderation/FilterModal.vue:20 msgctxt "Popup/Moderation/Paragraph" -msgid "" -"You will not see tracks, albums and user activity linked to this artist " -"anymore:" -msgstr "" +msgid "You will not see tracks, albums and user activity linked to this artist any more:" +msgstr "Vous ne verrez plus les pistes, albums et activité utilisateur liées à cet artiste :" -#: front/src/components/auth/Signup.vue:13 +#: front/src/components/auth/SignupForm.vue:9 msgctxt "Content/Signup/Form/Paragraph" msgid "Your account cannot be created." -msgstr "Playlist créée" +msgstr "Création de votre compte impossible." + +#: front/src/components/auth/Settings.vue:281 +msgctxt "Content/Settings/Paragraph'" +msgid "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." +msgstr "" +"Votre compte sera supprimé de nos serveurs en quelques minutes. Nous " +"informerons également les autres pods qui peuvent détenir une copie " +"partielle de vos données pour qu'ils puissent procéder à la suppression. " +"Cependant, merci de noter que certains de ces pods peuvent être hors lignes " +"où ne pas tenir compte de la demande de suppression." #: front/src/components/auth/Settings.vue:215 msgctxt "Content/Settings/Title/Noun" @@ -5256,24 +5532,31 @@ msgstr "Vos notifications" #: front/src/components/auth/Settings.vue:38 msgctxt "Content/Settings/Error message.Title" msgid "Your avatar cannot be saved" +msgstr "Impossible de sauvegarder votre avatar" + +#: front/src/components/auth/Settings.vue:527 +msgctxt "*/Auth/Message" +msgid "Your deletion request was submitted, your account and content will be deleted shortly" msgstr "" +"Votre demande de suppression a été envoyée, votre compte et le contenu " +"associé sera supprimé sous peu" #: front/src/components/library/EditForm.vue:3 msgctxt "Content/Library/Paragraph" msgid "Your edit was successfully submitted." -msgstr "" +msgstr "Votre modification a été envoyée avec succès." #: front/src/components/favorites/List.vue:116 msgctxt "Head/Favorites/Title" msgid "Your Favorites" msgstr "Vos favoris" -#: front/src/components/Home.vue:109 -msgctxt "Content/Home/Title" -msgid "Your music, your way" -msgstr "Votre musique, à votre façon" +#: front/src/views/Notifications.vue:5 +msgctxt "Content/Notifications/Title" +msgid "Your messages" +msgstr "Vos messages" -#: front/src/views/Notifications.vue:4 +#: front/src/views/Notifications.vue:69 msgctxt "Content/Notifications/Title" msgid "Your notifications" msgstr "Vos notifications" @@ -5281,7 +5564,7 @@ msgstr "Vos notifications" #: front/src/components/auth/Settings.vue:76 msgctxt "Content/Settings/Error message.Title" msgid "Your password cannot be changed" -msgstr "" +msgstr "Impossible de changer votre mot de passe" #: front/src/views/auth/PasswordResetConfirm.vue:29 msgctxt "Content/Signup/Card.Paragraph" @@ -5290,43 +5573,41 @@ msgstr "Votre mot de passe a été mis à jour avec succès." #: front/src/components/auth/Settings.vue:14 msgctxt "Content/Settings/Error message.Title" -msgid "Your settings can't be updateds" -msgstr "Paramètres mis à jour" +msgid "Your settings can't be updated" +msgstr "Vos paramètres ne peuvent être mis à jour" #: front/src/components/auth/Settings.vue:101 msgctxt "Popup/Settings/List item" -msgid "" -"Your Subsonic password will be changed to a new, random one, logging you out" -" from devices that used the old Subsonic password" -msgstr "" -"Votre mot de passe Subsonic sera remplacé par un nouveau mot de passe " -"aléatoire, ce qui vous déconnectera de tous les appareils utilisant l'ancien" -" mot de passe" +msgid "Your Subsonic password will be changed to a new, random one, logging you out from devices that used the old Subsonic password" +msgstr "Votre mot de passe Subsonic sera remplacé par un nouveau mot de passe aléatoire, ce qui vous déconnectera de tous les appareils utilisant l'ancien mot de passe" -#: front/src/edits.js:47 -msgctxt "*/*/*/Short, Noun" -msgid "Position" -msgstr "Pagination" +#: front/src/entities.js:126 +msgctxt "*/*/*/Noun" +msgid "MusicBrainz ID" +msgstr "ID MusicBrainz" -#: front/src/edits.js:54 -msgctxt "Content/Track/*/Noun" -msgid "Copyright" -msgstr "Copyright" +#: front/src/main.js:110 +msgctxt "*/Error/Paragraph" +msgid "You sent too many requests and have been rate limited, please try again in %{ delay }" +msgstr "" +"Vous avez envoyé trop de requêtes et êtes actuellement limité·e, merci de " +"réessayer dans %{ delay }" + +#: front/src/main.js:113 +msgctxt "*/Error/Paragraph" +msgid "You sent too many requests and have been rate limited, please try again later" +msgstr "" +"Vous avez envoyé trop de requêtes et êtes actuellement limité·e, merci de " +"réessayer plus tard" -#: front/src/components/library/AlbumBase.vue:183 -#, fuzzy +#: front/src/components/library/AlbumBase.vue:208 msgctxt "Content/Album/Header.Title" -msgid "" -"Album containing %{ count } track, by <a class=\"internal\" href=\"%{ " -"artistUrl }\">%{ artist }</a>" -msgid_plural "" -"Album containing %{ count } tracks, by <a class=\"internal\" href=\"%{ " -"artistUrl }\">%{ artist }</a>" -msgstr[0] "Album contenant %{ count } piste, par %{ artist }" -msgstr[1] "Album contenant %{ count } pistes, par %{ artist }" - -#: front/src/components/audio/PlayButton.vue:220 -#, fuzzy +msgid "Album containing %{ count } track, by <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" +msgid_plural "Album containing %{ count } tracks, by <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" +msgstr[0] "Album contenant %{ count } piste, par <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" +msgstr[1] "Album contenant %{ count } pistes, par <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" + +#: front/src/components/audio/PlayButton.vue:246 msgctxt "*/Queue/Message" msgid "%{ count } track was added to your queue" msgid_plural "%{ count } tracks were added to your queue" diff --git a/front/locales/gl/LC_MESSAGES/app.po b/front/locales/gl/LC_MESSAGES/app.po index f526bb7d6a51721462300b243d5581176f3025b9..16fcee9b202aa4e1aac2c1372966d37616826346 100644 --- a/front/locales/gl/LC_MESSAGES/app.po +++ b/front/locales/gl/LC_MESSAGES/app.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: front 1.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-05-16 10:35+0200\n" -"PO-Revision-Date: 2019-03-05 05:58+0000\n" +"POT-Creation-Date: 2019-10-01 15:15+0200\n" +"PO-Revision-Date: 2019-10-01 08:57+0000\n" "Last-Translator: Xosé M <xosem@disroot.org>\n" "Language-Team: none\n" "Language: gl\n" @@ -16,7 +16,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 3.2.2\n" +"X-Generator: Weblate 3.7\n" #: front/src/components/playlists/PlaylistModal.vue:9 msgctxt "Popup/Playlist/Paragraph" @@ -38,18 +38,58 @@ msgctxt "Content/Auth/Title" msgid "%{ app } wants to access your Funkwhale account" msgstr "Conecte coa súa conta Funkwhale" +#: front/src/components/About.vue:173 src/components/Home.vue:56 +msgctxt "Content/Home/Stat" +msgid "%{ count } active user" +msgid_plural "%{ count } active users" +msgstr[0] "%{ count } usuaria activa" +msgstr[1] "%{ count } usuarias activas" + +#: front/src/components/About.vue:182 +msgctxt "Content/Home/Stat" +msgid "%{ count } albums" +msgid_plural "%{ count } albums" +msgstr[0] "%{ count } álbume" +msgstr[1] "%{ count } álbumes" + +#: front/src/components/About.vue:152 +msgctxt "*/*/*" +msgid "%{ count } allowed domains" +msgid_plural "%{ count } allowed domains" +msgstr[0] "%{ count } dominio permitido" +msgstr[1] "%{ count } dominios permitidos" + +#: front/src/components/About.vue:179 +msgctxt "Content/Home/Stat" +msgid "%{ count } artists" +msgid_plural "%{ count } artists" +msgstr[0] "%{ count } artista" +msgstr[1] "%{ count } artistas" + +#: front/src/components/About.vue:176 src/components/Home.vue:59 +msgctxt "Content/Home/Stat" +msgid "%{ count } hour of music" +msgid_plural "%{ count } hours of music" +msgstr[0] "%{ count } hora de música" +msgstr[1] "%{ count } horas de música" + +#: front/src/components/About.vue:188 +msgctxt "Content/Home/Stat" +msgid "%{ count } listenings" +msgid_plural "%{ count } listenings" +msgstr[0] "%{ count } escoita" +msgstr[1] "%{ count } escoitas" + #: front/src/components/common/ActionTable.vue:68 -#, fuzzy msgctxt "Content/*/Paragraph" msgid "%{ count } on %{ total } selected" msgid_plural "%{ count } on %{ total } selected" msgstr[0] "%{ count } de %{ total } seleccionado" msgstr[1] "%{ count } de %{ total } seleccionados" -#: front/src/components/Sidebar.vue:121 src/components/audio/album/Card.vue:52 +#: front/src/components/Sidebar.vue:125 src/components/audio/album/Card.vue:52 #: front/src/views/content/libraries/Card.vue:40 -#: src/views/content/remote/Card.vue:30 -#, fuzzy +#: src/views/content/remote/Card.vue:43 msgctxt "*/*/*" msgid "%{ count } track" msgid_plural "%{ count } tracks" @@ -57,7 +97,6 @@ msgstr[0] "%{ count } canción" msgstr[1] "%{ count } cancións" #: front/src/components/library/ArtistBase.vue:13 -#, fuzzy msgctxt "Content/Artist/Paragraph" msgid "%{ count } track in %{ albumsCount } albums" msgid_plural "%{ count } tracks in %{ albumsCount } albums" @@ -65,15 +104,20 @@ msgstr[0] "%{ count } canción en %{ albumsCount } álbumes" msgstr[1] "%{ count } cancións en %{ albumsCount } álbumes" #: front/src/components/library/radios/Builder.vue:81 -#, fuzzy msgctxt "Content/Radio/Table.Paragraph/Short" msgid "%{ count } track matching combined filters" msgid_plural "%{ count } tracks matching combined filters" msgstr[0] "%{ count } canción coicidente cos filtros combinados" msgstr[1] "%{ count } cancións coincidentes cos filtros combinados" -#: front/src/components/playlists/Card.vue:18 -#, fuzzy +#: front/src/components/About.vue:185 +msgctxt "Content/Home/Stat" +msgid "%{ count } tracks" +msgid_plural "%{ count } tracks" +msgstr[0] "%{ count } canción" +msgstr[1] "%{ count } cancións" + +#: front/src/components/playlists/Card.vue:28 msgctxt "Content/*/Card/List item" msgid "%{ count} track" msgid_plural "%{ count } tracks" @@ -117,12 +161,10 @@ msgstr "Perfil de %{ username }" #: front/src/components/playlists/PlaylistModal.vue:21 msgctxt "Popup/Playlist/Paragraph" -msgid "" -"<strong>%{ track }</strong> is already in <strong>%{ playlist }</strong>." -msgstr "" +msgid "<strong>%{ track }</strong> is already in <strong>%{ playlist }</strong>." +msgstr "<strong>%{ track }</strong> xa está en <strong>%{ playlist }</strong>." -#: front/src/components/audio/artist/Card.vue:41 -#, fuzzy +#: front/src/components/audio/artist/Card.vue:11 msgctxt "Content/Artist/Card" msgid "1 album" msgid_plural "%{ count } albums" @@ -130,39 +172,55 @@ msgstr[0] "1 álbume" msgstr[1] "%{ count } álbumes" #: front/src/components/favorites/List.vue:10 -#, fuzzy msgctxt "Content/Favorites/Title" msgid "1 favorite" msgid_plural "%{ count } favorites" msgstr[0] "1 favorita" msgstr[1] "%{ count } favoritas" -#: front/src/components/Home.vue:64 -msgctxt "Content/Home/Title" -msgid "A clean library" -msgstr "Limpar biblioteca" +#: front/src/components/audio/artist/Card.vue:15 +msgctxt "Content/Artist/Card" +msgid "1 track" +msgid_plural "%{ count } tracks" +msgstr[0] "1 canción" +msgstr[1] "%{ count } cancións" + +#: front/src/views/Notifications.vue:21 src/views/Notifications.vue:55 +msgctxt "*/*/*" +msgid "30 days" +msgstr "30 dÃas" + +#: front/src/views/Notifications.vue:22 src/views/Notifications.vue:56 +msgctxt "*/*/*" +msgid "60 days" +msgstr "60 dÃas" + +#: front/src/views/Notifications.vue:23 src/views/Notifications.vue:57 +msgctxt "*/*/*" +msgid "90 days" +msgstr "90 dÃas" #: front/src/components/library/FileUpload.vue:264 msgctxt "Content/Library/Help text" -msgid "A network error occured while uploading this file" +msgid "A network error occurred while uploading this file" msgstr "Fallou a rede mentras se subÃa o ficheiro" -#: front/src/components/library/EditForm.vue:145 +#: front/src/components/library/EditForm.vue:161 msgctxt "*/*/Placeholder" msgid "A short summary describing your changes." -msgstr "Algo fallou ao gardar os cambios" +msgstr "Un breve resumen describindo os cambios." #: front/src/components/About.vue:5 -msgctxt "Content/About/Title/Short, Noun" -msgid "About %{ instance }" -msgstr "Acerca de %{ instance }" +msgctxt "Content/Home/Header" +msgid "About %{ podName }" +msgstr "Acerca de %{ podName }" #: front/src/components/Footer.vue:6 msgctxt "Footer/About/Title" msgid "About %{instanceName}" msgstr "Acerca de %{instanceName}" -#: front/src/components/Footer.vue:45 +#: front/src/components/Footer.vue:53 src/components/Home.vue:85 msgctxt "Footer/*/Title/Short" msgid "About Funkwhale" msgstr "Acerca de Funkwhale" @@ -172,9 +230,14 @@ msgctxt "Footer/About/List item.Link" msgid "About page" msgstr "Páxina Acerca de" -#: front/src/components/About.vue:8 src/components/About.vue:67 -msgctxt "Content/About/Title" -msgid "About this instance" +#: front/src/components/Home.vue:19 +msgctxt "Content/Home/Header" +msgid "About this Funkwhale pod" +msgstr "Acerca de esta instancia Funkwhale" + +#: front/src/components/About.vue:21 src/components/About.vue:51 +msgctxt "Content/About/Header" +msgid "About this pod" msgstr "Acerca de esta instancia" #: front/src/views/content/libraries/Detail.vue:48 @@ -187,96 +250,87 @@ msgctxt "Content/Library/Table/Short" msgid "Accepted" msgstr "Aceptado" -#: front/src/components/auth/SubsonicTokenForm.vue:110 +#: front/src/components/auth/SubsonicTokenForm.vue:117 msgctxt "Content/Settings/Message" msgid "Access disabled" msgstr "Acceso desactivado" -#: front/src/components/mixins/Translations.vue:73 -#: front/src/components/mixins/Translations.vue:74 +#: front/src/components/mixins/Translations.vue:85 +#: front/src/components/mixins/Translations.vue:86 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to audio files, libraries, artists, albums and tracks" -msgstr "" +msgstr "Acceso a ficheiros de audio, bibliotecas, artistas e cancións" -#: front/src/components/mixins/Translations.vue:97 -#: front/src/components/mixins/Translations.vue:98 +#: front/src/components/mixins/Translations.vue:109 +#: front/src/components/mixins/Translations.vue:110 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to content filters" msgstr "Escolla un filtro" -#: front/src/components/mixins/Translations.vue:105 -#: front/src/components/mixins/Translations.vue:106 +#: front/src/components/mixins/Translations.vue:117 +#: front/src/components/mixins/Translations.vue:118 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to edits" msgstr "Acceso desactivado" -#: front/src/components/mixins/Translations.vue:69 -#: front/src/components/mixins/Translations.vue:70 +#: front/src/components/mixins/Translations.vue:81 +#: front/src/components/mixins/Translations.vue:82 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to email, username, and profile information" -msgstr "" +msgstr "Acesso a correo-e, nome de usuaria, e información do perfil" -#: front/src/components/mixins/Translations.vue:77 -#: front/src/components/mixins/Translations.vue:78 +#: front/src/components/mixins/Translations.vue:89 +#: front/src/components/mixins/Translations.vue:90 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to favorites" msgstr "Engadir a favoritas" -#: front/src/components/mixins/Translations.vue:85 -#: front/src/components/mixins/Translations.vue:86 +#: front/src/components/mixins/Translations.vue:97 +#: front/src/components/mixins/Translations.vue:98 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to follows" -msgstr "" +msgstr "Acceso aos seguimentos" -#: front/src/components/mixins/Translations.vue:81 -#: front/src/components/mixins/Translations.vue:82 +#: front/src/components/mixins/Translations.vue:93 +#: front/src/components/mixins/Translations.vue:94 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to listening history" -msgstr "" +msgstr "Acceso ao historial de escoita" -#: front/src/components/mixins/Translations.vue:101 -#: front/src/components/mixins/Translations.vue:102 +#: front/src/components/mixins/Translations.vue:113 +#: front/src/components/mixins/Translations.vue:114 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to notifications" msgstr "Acalar notificacións" -#: front/src/components/mixins/Translations.vue:89 -#: front/src/components/mixins/Translations.vue:90 +#: front/src/components/mixins/Translations.vue:101 +#: front/src/components/mixins/Translations.vue:102 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to playlists" -msgstr "Engadir a lista de reprodución…" +msgstr "Accede a listas de reprodución" -#: front/src/components/mixins/Translations.vue:93 -#: front/src/components/mixins/Translations.vue:94 +#: front/src/components/mixins/Translations.vue:105 +#: front/src/components/mixins/Translations.vue:106 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to radios" msgstr "Acceso desactivado" -#: front/src/components/Home.vue:101 -msgctxt "Content/Home/List item" -msgid "" -"Access your music from a clean interface that focuses on what really matters" -msgstr "" -"Acceda a súa música desde unha interface clara que se centra no realmente " -"importante" - #: front/src/components/manage/library/UploadsTable.vue:67 -#: front/src/components/mixins/Translations.vue:45 +#: front/src/components/mixins/Translations.vue:55 #: front/src/views/admin/library/UploadDetail.vue:175 -#: front/src/components/mixins/Translations.vue:46 +#: front/src/components/mixins/Translations.vue:56 msgctxt "Content/*/*/Noun" msgid "Accessed date" msgstr "Acceso desactivado" -#: front/src/views/admin/library/LibraryDetail.vue:104 -#: front/src/views/admin/library/UploadDetail.vue:111 -msgctxt "*/*/*/Noun" -msgid "Account" -msgstr "Contas" - #: front/src/components/manage/library/LibrariesTable.vue:49 #: front/src/components/manage/library/UploadsTable.vue:61 -msgctxt "*/*/*" +#: front/src/components/manage/moderation/ReportCard.vue:156 +#: front/src/components/mixins/Report.vue:13 +#: front/src/views/admin/library/LibraryDetail.vue:113 +#: front/src/views/admin/library/UploadDetail.vue:111 +#: front/src/components/mixins/Report.vue:14 +msgctxt "*/*/*/Noun" msgid "Account" msgstr "Contas" @@ -290,7 +344,7 @@ msgctxt "Content/Settings/Title" msgid "Account settings" msgstr "Axustes da conta" -#: front/src/components/auth/Settings.vue:479 +#: front/src/components/auth/Settings.vue:544 msgctxt "Head/Settings/Title" msgid "Account Settings" msgstr "Axustes da conta" @@ -307,7 +361,7 @@ msgstr "Correo-e da conta" #: front/src/views/admin/moderation/AccountsList.vue:3 #: front/src/views/admin/moderation/AccountsList.vue:24 -#: front/src/views/admin/moderation/Base.vue:8 +#: front/src/views/admin/moderation/Base.vue:11 msgctxt "*/Moderation/Title" msgid "Accounts" msgstr "Contas" @@ -318,34 +372,32 @@ msgid "Action" msgstr "Acción" #: front/src/components/common/ActionTable.vue:101 -#, fuzzy msgctxt "Content/*/Paragraph" msgid "Action %{ action } was launched successfully on %{ count } element" -msgid_plural "" -"Action %{ action } was launched successfully on %{ count } elements" -msgstr[0] "" -"A acción %{ action } foi lanzada correctamente sobre %{ count } elemento" -msgstr[1] "" -"A accións %{ action } foi lanzada correctamente sobre %{ count } elementos" +msgid_plural "Action %{ action } was launched successfully on %{ count } elements" +msgstr[0] "A acción %{ action } foi lanzada correctamente sobre %{ count } elemento" +msgstr[1] "A acción %{ action } foi lanzada correctamente sobre %{ count } elementos" #: front/src/components/common/ActionTable.vue:22 #: front/src/components/library/radios/Builder.vue:65 +#: front/src/components/manage/moderation/ReportCard.vue:210 msgctxt "Content/*/*/Noun" msgid "Actions" msgstr "Accións" -#: front/src/components/manage/users/UsersTable.vue:53 +#: front/src/components/manage/users/UsersTable.vue:54 msgctxt "Content/Admin/Table" msgid "Active" msgstr "Activo" -#: front/src/views/admin/library/AlbumDetail.vue:134 -#: front/src/views/admin/library/ArtistDetail.vue:123 -#: front/src/views/admin/library/LibraryDetail.vue:138 -#: front/src/views/admin/library/TrackDetail.vue:186 +#: front/src/views/admin/library/AlbumDetail.vue:140 +#: front/src/views/admin/library/ArtistDetail.vue:128 +#: front/src/views/admin/library/LibraryDetail.vue:147 +#: front/src/views/admin/library/TagDetail.vue:83 +#: front/src/views/admin/library/TrackDetail.vue:192 #: front/src/views/admin/library/UploadDetail.vue:160 -#: front/src/views/admin/moderation/AccountsDetail.vue:220 -#: front/src/views/admin/moderation/DomainsDetail.vue:136 +#: front/src/views/admin/moderation/AccountsDetail.vue:221 +#: front/src/views/admin/moderation/DomainsDetail.vue:173 msgctxt "Content/Moderation/Title" msgid "Activity" msgstr "Actividade" @@ -356,7 +408,7 @@ msgctxt "Content/Settings/Dropdown.Label/Noun" msgid "Activity visibility" msgstr "Visibilidade da actividade" -#: front/src/views/admin/moderation/DomainsList.vue:18 +#: front/src/views/admin/moderation/DomainsList.vue:22 msgctxt "Content/Moderation/Button/Verb" msgid "Add" msgstr "Engadir" @@ -385,7 +437,7 @@ msgstr "Engadir e xestionar contido" #: front/src/components/playlists/PlaylistModal.vue:31 msgctxt "*/Playlist/Button.Label/Verb" msgid "Add anyways" -msgstr "" +msgstr "Engadir igualmente" #: front/src/components/Sidebar.vue:75 src/views/content/Base.vue:18 msgctxt "*/Library/*/Verb" @@ -402,7 +454,19 @@ msgctxt "Content/Radio/Paragraph" msgid "Add filters to customize your radio" msgstr "Engada filtros para personalizar a súa radio" -#: front/src/components/audio/PlayButton.vue:75 +#: front/src/components/manage/moderation/NoteForm.vue:12 +msgctxt "Content/Moderation/Button.Label/Verb" +msgid "Add note" +msgstr "Engadir nota" + +#: front/src/components/manage/moderation/DomainsTable.vue:191 +#: front/src/views/admin/moderation/DomainsDetail.vue:46 +#: front/src/views/admin/moderation/DomainsList.vue:18 +msgctxt "Content/Moderation/Action/Verb" +msgid "Add to allow-list" +msgstr "Engadir a lista-permitir" + +#: front/src/components/audio/PlayButton.vue:91 msgctxt "*/Queue/Dropdown/Button/Title" msgid "Add to current queue" msgstr "Engadir a cola actual" @@ -434,7 +498,7 @@ msgctxt "Popup/Playlist/Table.Button.Label/Verb" msgid "Add track" msgstr "Engadir canción" -#: front/src/components/manage/users/UsersTable.vue:69 +#: front/src/components/manage/users/UsersTable.vue:70 msgctxt "Content/Admin/Table.User role" msgid "Admin" msgstr "Admin" @@ -444,49 +508,49 @@ msgctxt "Sidebar/Admin/Title/Noun" msgid "Administration" msgstr "Administración" -#: front/src/views/admin/library/TrackDetail.vue:107 -msgctxt "*/*/*/Noun" -msgid "Album" -msgstr "Ãlbume" - -#: front/src/components/audio/SearchBar.vue:26 +#: front/src/components/audio/SearchBar.vue:33 #: src/components/audio/track/Table.vue:9 -#: front/src/components/library/AlbumBase.vue:152 -#: front/src/components/library/ArtistBase.vue:194 +#: front/src/components/library/AlbumBase.vue:170 +#: front/src/components/library/ArtistBase.vue:212 #: front/src/components/manage/library/TracksTable.vue:40 #: front/src/components/metadata/Search.vue:134 +#: src/components/mixins/Report.vue:41 +#: front/src/views/admin/library/TrackDetail.vue:113 #: front/src/views/content/libraries/FilesTable.vue:57 +#: front/src/components/mixins/Report.vue:42 msgctxt "*/*/*" msgid "Album" msgstr "Ãlbume" -#: front/src/views/admin/library/TrackDetail.vue:128 +#: front/src/views/admin/library/TrackDetail.vue:134 msgctxt "*/*/*/Noun" msgid "Album artist" msgstr "Ãlbumes de este artista" -#: front/src/views/admin/library/AlbumDetail.vue:92 +#: front/src/views/admin/library/AlbumDetail.vue:98 msgctxt "Content/Moderation/Title" msgid "Album data" msgstr "Nome do álbume" -#: front/src/components/mixins/Translations.vue:51 -#: front/src/components/mixins/Translations.vue:52 +#: front/src/components/mixins/Translations.vue:61 +#: front/src/components/mixins/Translations.vue:62 msgctxt "Content/*/Dropdown/Noun" msgid "Album name" msgstr "Nome do álbume" #: front/src/components/audio/Search.vue:19 -#: src/components/instance/Stats.vue:48 -#: front/src/components/library/Albums.vue:120 -#: src/components/library/Library.vue:7 +#: src/components/library/Albums.vue:129 +#: front/src/components/library/Library.vue:7 +#: src/components/library/TagDetail.vue:28 #: front/src/components/manage/library/ArtistsTable.vue:41 +#: front/src/components/manage/library/TagsTable.vue:43 #: front/src/views/admin/library/AlbumsList.vue:24 -#: front/src/views/admin/library/ArtistDetail.vue:241 +#: front/src/views/admin/library/ArtistDetail.vue:256 #: front/src/views/admin/library/Base.vue:11 -#: front/src/views/admin/library/LibraryDetail.vue:219 -#: front/src/views/admin/moderation/AccountsDetail.vue:354 -#: front/src/views/admin/moderation/DomainsDetail.vue:264 +#: front/src/views/admin/library/LibraryDetail.vue:238 +#: front/src/views/admin/library/TagDetail.vue:133 +#: front/src/views/admin/moderation/AccountsDetail.vue:366 +#: front/src/views/admin/moderation/DomainsDetail.vue:301 msgctxt "*/*/*" msgid "Albums" msgstr "Ãlbumes" @@ -500,60 +564,71 @@ msgstr "Ãlbumes de este artista" #: front/src/components/manage/library/LibrariesTable.vue:13 #: front/src/components/manage/library/UploadsTable.vue:13 #: front/src/components/manage/library/UploadsTable.vue:22 +#: front/src/components/manage/moderation/DomainsTable.vue:11 #: front/src/components/manage/users/InvitationsTable.vue:19 +#: front/src/components/moderation/ReportCategoryDropdown.vue:32 +#: front/src/views/admin/moderation/ReportsList.vue:17 #: front/src/views/content/libraries/FilesTable.vue:13 msgctxt "Content/*/Dropdown" msgid "All" msgstr "Todos" #: front/src/components/common/ActionTable.vue:59 -#, fuzzy msgctxt "Content/*/Paragraph" msgid "All %{ count } element selected" msgid_plural "All %{ count } elements selected" -msgstr[0] "%{ count } de %{ total } seleccionado" -msgstr[1] "%{ count } de %{ total } seleccionados" +msgstr[0] "%{ count } elemento seleccionado" +msgstr[1] "Todos os %{ count } elementos seleccionados" #: front/src/components/auth/Authorize.vue:107 msgctxt "Head/Authorize/Title" msgid "Allow application" -msgstr "" +msgstr "Permitir aplicación" + +#: front/src/components/About.vue:136 +msgctxt "*/*/*" +msgid "Allow-list" +msgstr "Permitir-lista" + +#: front/src/components/About.vue:149 +msgctxt "*/*/*" +msgid "Allowed domains" +msgstr "Dominios permitidos" #: front/src/components/library/ImportStatusModal.vue:17 msgctxt "Popup/Import/Message" -msgid "" -"An error occured during upload processing. You will find more information " -"below." -msgstr "" +msgid "An error occurred during upload processing. You will find more information below." +msgstr "Algo fallou no proceso de subida. Aquà abaixo atopará máis información." #: front/src/components/playlists/Editor.vue:13 msgctxt "Content/Playlist/Error message.Title" -msgid "An error occured while saving your changes" +msgid "An error occurred while saving your changes" msgstr "Algo fallou ao gardar os cambios" #: front/src/components/federation/FetchButton.vue:21 msgctxt "Popup/*/Message.Content" -msgid "An error occured while trying to refresh data:" -msgstr "Algo fallou ao gardar os cambios" +msgid "An error occurred while trying to refresh data:" +msgstr "Algo fallou ao actualizar os datos:" #: front/src/components/federation/FetchButton.vue:41 msgctxt "*/*/Error" -msgid "An HTTP error occured while contacting the remote server" -msgstr "Algo fallou ao gardar os cambios" - -#: front/src/components/auth/Login.vue:10 -msgctxt "Content/Login/Error message/List item" -msgid "" -"An unknown error happend, this can mean the server is down or cannot be " -"reached" -msgstr "" -"Aconteceu un fallo descoñecido, esto pode significar que o servidor está " -"caÃdo ou non pode ser alcanzado" +msgid "An HTTP error occurred while contacting the remote server" +msgstr "Houbo un fallo HTTP ao contactar co servidor remoto" #: front/src/components/library/ImportStatusModal.vue:145 msgctxt "Popup/Import/Error.Label" -msgid "An unkwown error occured" -msgstr "" +msgid "An unknown error occurred" +msgstr "Aconteceu un fallo descoñecido" + +#: front/src/components/About.vue:123 +msgctxt "*/*/*" +msgid "Anonymous access" +msgstr "Acceso anónimo" + +#: front/src/components/moderation/ReportModal.vue:54 +msgctxt "Popup/Moderation/Error message" +msgid "Anonymous reports are disabled, please sign-in to submit a report." +msgstr "Desactiváronse os informes anónimos, conéctese para enviar un informe." #: front/src/components/auth/Settings.vue:175 #: src/components/auth/Settings.vue:225 @@ -564,24 +639,22 @@ msgstr "Acción" #: front/src/components/auth/ApplicationEdit.vue:12 msgctxt "Content/Applications/Title" msgid "Application details" -msgstr "" +msgstr "Detalles da aplicación" #: front/src/components/auth/ApplicationEdit.vue:21 msgctxt "Content/Applications/Label" msgid "Application ID" -msgstr "" +msgstr "ID da aplicación" #: front/src/components/auth/ApplicationEdit.vue:16 msgctxt "Content/Application/Paragraph/" -msgid "" -"Application ID and secret are really sensitive values and must be treated " -"like passwords. Do not share those with anyone else." -msgstr "" +msgid "Application ID and secret are really sensitive values and must be treated like passwords. Do not share those with anyone else." +msgstr "O ID da aplicación e a clave segreda son valores sensibles que debes tratar como contrasinais. Non os compartas con ninguén." #: front/src/components/auth/ApplicationEdit.vue:25 msgctxt "Content/Applications/Label" msgid "Application secret" -msgstr "" +msgstr "Chave segreda da aplicación" #: front/src/components/library/EditCard.vue:81 #: front/src/components/notifications/NotificationRow.vue:66 @@ -598,36 +671,34 @@ msgstr "Aprovar" #: front/src/components/library/EditCard.vue:21 msgctxt "Content/Library/Card/Short" msgid "Approved and applied" -msgstr "" +msgstr "Aprobada e aplicada" #: front/src/components/auth/Logout.vue:5 msgctxt "Content/Login/Title" msgid "Are you sure you want to log out?" msgstr "Está segura de que quere desconectar?" +#: front/src/components/audio/SearchBar.vue:32 +#: src/components/audio/track/Table.vue:8 #: front/src/components/manage/library/AlbumsTable.vue:40 #: front/src/components/manage/library/TracksTable.vue:41 -msgctxt "*/*/*" -msgid "Artist" -msgstr "Artista" - -#: front/src/components/audio/SearchBar.vue:25 -#: src/components/audio/track/Table.vue:8 #: front/src/components/metadata/Search.vue:130 -#: front/src/views/admin/library/AlbumDetail.vue:108 -#: front/src/views/admin/library/TrackDetail.vue:118 -#: front/src/views/content/libraries/FilesTable.vue:56 +#: src/components/mixins/Report.vue:55 +#: front/src/views/admin/library/AlbumDetail.vue:114 +#: front/src/views/admin/library/TrackDetail.vue:124 +#: front/src/views/content/libraries/FilesTable.vue:56 src/entities.js:12 +#: front/src/components/mixins/Report.vue:56 msgctxt "*/*/*/Noun" msgid "Artist" msgstr "Artista" -#: front/src/views/admin/library/ArtistDetail.vue:91 +#: front/src/views/admin/library/ArtistDetail.vue:96 msgctxt "Content/Moderation/Title" msgid "Artist data" msgstr "Nome do artista" -#: front/src/components/mixins/Translations.vue:52 -#: front/src/components/mixins/Translations.vue:53 +#: front/src/components/mixins/Translations.vue:62 +#: front/src/components/mixins/Translations.vue:63 msgctxt "Content/*/Dropdown/Noun" msgid "Artist name" msgstr "Nome do artista" @@ -637,36 +708,36 @@ msgctxt "*/Search/Input.Placeholder" msgid "Artist, album, track…" msgstr "Artista, álbume, canción…" +#: front/src/components/audio/Search.vue:10 +#: src/components/library/Artists.vue:117 +#: front/src/components/library/Library.vue:10 +#: front/src/components/library/TagDetail.vue:19 +#: front/src/components/manage/library/TagsTable.vue:42 #: front/src/views/admin/library/ArtistsList.vue:24 #: front/src/views/admin/library/Base.vue:8 -#: front/src/views/admin/library/LibraryDetail.vue:209 -msgctxt "*/*/*" -msgid "Artists" -msgstr "Artistas" - -#: front/src/components/audio/Search.vue:10 -#: src/components/instance/Stats.vue:42 -#: front/src/components/library/Artists.vue:117 -#: src/components/library/Library.vue:10 -#: front/src/views/admin/moderation/AccountsDetail.vue:346 -#: front/src/views/admin/moderation/DomainsDetail.vue:254 +#: front/src/views/admin/library/LibraryDetail.vue:228 +#: front/src/views/admin/library/TagDetail.vue:123 +#: front/src/views/admin/moderation/AccountsDetail.vue:358 +#: front/src/views/admin/moderation/DomainsDetail.vue:291 msgctxt "*/*/*/Noun" msgid "Artists" msgstr "Artistas" #: front/src/components/favorites/List.vue:34 -#: src/components/library/Albums.vue:25 -#: front/src/components/library/Artists.vue:25 +#: src/components/library/Albums.vue:29 +#: front/src/components/library/Artists.vue:29 #: src/components/library/Radios.vue:44 #: front/src/components/manage/library/AlbumsTable.vue:21 #: front/src/components/manage/library/ArtistsTable.vue:21 #: front/src/components/manage/library/EditsCardList.vue:39 #: front/src/components/manage/library/LibrariesTable.vue:30 +#: front/src/components/manage/library/TagsTable.vue:21 #: front/src/components/manage/library/TracksTable.vue:21 #: front/src/components/manage/library/UploadsTable.vue:40 #: front/src/components/manage/moderation/AccountsTable.vue:21 -#: front/src/components/manage/moderation/DomainsTable.vue:19 +#: front/src/components/manage/moderation/DomainsTable.vue:27 #: front/src/components/manage/users/UsersTable.vue:19 +#: front/src/views/admin/moderation/ReportsList.vue:44 #: front/src/views/content/libraries/FilesTable.vue:31 #: front/src/views/playlists/List.vue:27 msgctxt "Content/Search/Dropdown" @@ -678,18 +749,24 @@ msgctxt "Content/Signup/Button.Label/Verb" msgid "Ask for a password reset" msgstr "Solicitar restablecer o contrasinal" -#: front/src/views/admin/library/AlbumDetail.vue:198 -#: front/src/views/admin/library/ArtistDetail.vue:187 -#: front/src/views/admin/library/LibraryDetail.vue:176 -#: front/src/views/admin/library/TrackDetail.vue:250 +#: front/src/components/manage/moderation/ReportCard.vue:72 +msgctxt "Content/Moderation/*" +msgid "Assigned to" +msgstr "Asignada a" + +#: front/src/views/admin/library/AlbumDetail.vue:214 +#: front/src/views/admin/library/ArtistDetail.vue:202 +#: front/src/views/admin/library/LibraryDetail.vue:195 +#: front/src/views/admin/library/TagDetail.vue:113 +#: front/src/views/admin/library/TrackDetail.vue:266 #: front/src/views/admin/library/UploadDetail.vue:191 -#: front/src/views/admin/moderation/AccountsDetail.vue:274 -#: front/src/views/admin/moderation/DomainsDetail.vue:202 +#: front/src/views/admin/moderation/AccountsDetail.vue:285 +#: front/src/views/admin/moderation/DomainsDetail.vue:239 msgctxt "Content/Moderation/Title" msgid "Audio content" msgstr "Contido de audio" -#: front/src/components/ShortcutsModal.vue:55 +#: front/src/components/ShortcutsModal.vue:92 msgctxt "Popup/Keyboard shortcuts/Title" msgid "Audio player shortcuts" msgstr "Atallos do reprodutor de audio" @@ -697,17 +774,17 @@ msgstr "Atallos do reprodutor de audio" #: front/src/components/auth/Authorize.vue:47 msgctxt "Content/Signup/Button.Label/Verb" msgid "Authorize %{ app }" -msgstr "" +msgstr "Autorizar %{ app }" #: front/src/components/auth/Authorize.vue:4 msgctxt "Content/Auth/Title/Verb" msgid "Authorize third-party app" -msgstr "" +msgstr "Autorizar app de terceiros" #: front/src/components/auth/Settings.vue:162 msgctxt "Content/Settings/Title/Noun" msgid "Authorized apps" -msgstr "" +msgstr "Apps autorizadas" #: front/src/components/playlists/PlaylistModal.vue:40 msgctxt "Popup/Playlist/Title" @@ -732,9 +809,9 @@ msgid "Back to settings" msgstr "Actualizar axustes" #: front/src/components/library/TrackDetail.vue:48 -#: front/src/components/mixins/Translations.vue:55 +#: front/src/components/mixins/Translations.vue:67 #: front/src/views/admin/library/UploadDetail.vue:227 -#: front/src/components/mixins/Translations.vue:56 +#: front/src/components/mixins/Translations.vue:68 msgctxt "Content/Track/*/Noun" msgid "Bitrate" msgstr "Taxa de bits" @@ -747,14 +824,8 @@ msgstr "Bloquear todo" #: front/src/components/manage/moderation/InstancePolicyForm.vue:112 msgctxt "Content/Moderation/Help text" -msgid "" -"Block everything from this account or domain. This will prevent any " -"interaction with the entity, and purge related content (uploads, libraries, " -"follows, etc.)" -msgstr "" -"Bloquear todo de esta conta ou dominio. Esto evitará calquera interacción " -"coa entidade, e eliminará o contido relacionado (subidas, bibliotecas, " -"seguimentos, etc.)" +msgid "Block everything from this account or domain. This will prevent any interaction with the entity, and purge related content (uploads, libraries, follows, etc.)" +msgstr "Bloquear todo de esta conta ou dominio. Esto evitará calquera interacción coa entidade, e eliminará o contido relacionado (subidas, bibliotecas, seguimentos, etc.)" #: front/src/components/Sidebar.vue:18 src/components/library/Library.vue:4 msgctxt "*/Library/*/Verb" @@ -766,6 +837,11 @@ msgctxt "Sidebar/Library/List item.Link/Verb" msgid "Browse library" msgstr "Buscar na biblioteca" +#: front/src/components/Home.vue:132 +msgctxt "Content/Home/Link" +msgid "Browse public content" +msgstr "Explorar contido público" + #: front/src/components/library/Albums.vue:4 msgctxt "Content/Album/Title" msgid "Browsing albums" @@ -796,42 +872,43 @@ msgctxt "Content/Album/Card" msgid "By %{ artist }" msgstr "De %{ artist }" -#: front/src/views/content/remote/Card.vue:112 +#: front/src/views/content/remote/Card.vue:125 msgctxt "Popup/Library/Paragraph" msgid "By unfollowing this library, you loose access to its content." msgstr "Ao deixar de seguir esta biblioteca perderá o acceso ao seu contido." -#: front/src/views/admin/library/AlbumDetail.vue:214 -#: front/src/views/admin/library/ArtistDetail.vue:203 -#: front/src/views/admin/library/LibraryDetail.vue:192 -#: front/src/views/admin/library/TrackDetail.vue:266 +#: front/src/views/admin/library/AlbumDetail.vue:230 +#: front/src/views/admin/library/ArtistDetail.vue:218 +#: front/src/views/admin/library/LibraryDetail.vue:211 +#: front/src/views/admin/library/TrackDetail.vue:282 #: front/src/views/admin/library/UploadDetail.vue:208 -#: front/src/views/admin/moderation/AccountsDetail.vue:290 -#: front/src/views/admin/moderation/DomainsDetail.vue:217 +#: front/src/views/admin/moderation/AccountsDetail.vue:301 +#: front/src/views/admin/moderation/DomainsDetail.vue:254 msgctxt "Content/Moderation/Table.Label/Noun" msgid "Cached size" msgstr "Tamaño da caché" #: front/src/components/SetInstanceModal.vue:37 #: front/src/components/common/DangerousButton.vue:17 -#: front/src/components/library/AlbumBase.vue:36 -#: front/src/components/library/ArtistBase.vue:47 -#: front/src/components/library/EditForm.vue:95 -#: front/src/components/library/TrackBase.vue:55 +#: front/src/components/library/AlbumBase.vue:37 +#: front/src/components/library/ArtistBase.vue:48 +#: front/src/components/library/EditForm.vue:107 +#: front/src/components/library/TrackBase.vue:53 #: front/src/components/library/radios/Filter.vue:53 #: front/src/components/manage/moderation/InstancePolicyForm.vue:54 #: front/src/components/moderation/FilterModal.vue:39 +#: front/src/components/moderation/ReportModal.vue:59 #: front/src/components/playlists/PlaylistModal.vue:26 #: front/src/components/playlists/PlaylistModal.vue:77 +#: front/src/views/playlists/Detail.vue:62 msgctxt "*/*/Button.Label/Verb" msgid "Cancel" msgstr "Cancelar" -#: front/src/views/content/remote/Card.vue:97 -#, fuzzy +#: front/src/views/content/remote/Card.vue:110 msgctxt "Content/Library/Card.Paragraph" msgid "Cancel follow request" -msgstr "Peticións de seguimento pendentes" +msgstr "Cancelar solicitude de seguimento" #: front/src/components/library/radios/Builder.vue:64 msgctxt "Content/Radio/Table.Label/Noun (Value is a number of Tracks)" @@ -843,6 +920,14 @@ msgctxt "Content/Library/Help text" msgid "Cannot upload this file, ensure it is not too big" msgstr "Fallou a subida, asegúrese de que non é demasiado grande" +#: front/src/components/manage/moderation/ReportCard.vue:30 +#: front/src/components/mixins/Translations.vue:42 +#: front/src/components/moderation/ReportCategoryDropdown.vue:2 +#: front/src/components/mixins/Translations.vue:43 +msgctxt "*/*/*" +msgid "Category" +msgstr "CategorÃa" + #: front/src/components/Footer.vue:21 msgctxt "Footer/Settings/Dropdown.Label/Short, Verb" msgid "Change language" @@ -858,6 +943,11 @@ msgctxt "Content/Settings/Button.Label" msgid "Change password" msgstr "Cambiar contrasinal" +#: front/src/components/Footer.vue:37 +msgctxt "Footer/Settings/Dropdown.Label/Short, Verb" +msgid "Change theme" +msgstr "Cambiar decorado" + #: front/src/views/auth/PasswordResetConfirm.vue:62 msgctxt "*/Signup/Title" msgid "Change your password" @@ -875,41 +965,32 @@ msgstr "Cambios sincronizados co servidor" #: front/src/components/auth/Settings.vue:71 msgctxt "Content/Settings/Paragraph'" -msgid "" -"Changing your password will also change your Subsonic API password if you " -"have requested one." -msgstr "" -"Ao cambiar o contrasinal tamén cambia o seu contrasinal no API Subsonic si é" -" que solicitou un." +msgid "Changing your password will also change your Subsonic API password if you have requested one." +msgstr "Ao cambiar o contrasinal tamén cambia o seu contrasinal no API Subsonic si é que solicitou un." #: front/src/components/auth/Settings.vue:98 msgctxt "Popup/Settings/Paragraph" msgid "Changing your password will have the following consequences:" -msgstr "Cambiar o contrasinal terá as seguintes consecuencias" +msgstr "Cambiar o contrasinal terá as seguintes consecuencias:" -#: front/src/components/Footer.vue:40 +#: front/src/components/Footer.vue:48 msgctxt "Footer/*/List item.Link" msgid "Chat room" msgstr "Sala de conversa" #: front/src/components/auth/ApplicationForm.vue:24 msgctxt "Content/Applications/Paragraph/" -msgid "" -"Checking the parent \"Read\" or \"Write\" scopes implies access to all the " -"corresponding children scopes." -msgstr "" +msgid "Checking the parent \"Read\" or \"Write\" scopes implies access to all the corresponding children scopes." +msgstr "Marcando \"Lectura\" e \"Escritura\" para o ámbito superior implica dar acceso aos ámbitos inferiores." #: front/src/components/SetInstanceModal.vue:2 msgctxt "Popup/Instance/Title" msgid "Choose your instance" msgstr "Escolla a súa instancia" -#: front/src/components/manage/users/InvitationForm.vue:37 -msgctxt "Content/Admin/Button.Label/Verb" -msgid "Clear" -msgstr "Limpar" - #: front/src/components/library/EditForm.vue:75 +#: front/src/components/library/EditForm.vue:88 +#: front/src/components/manage/users/InvitationForm.vue:37 msgctxt "Content/Library/Button.Label" msgid "Clear" msgstr "Limpar" @@ -920,46 +1001,44 @@ msgctxt "*/Playlist/Button.Label/Verb" msgid "Clear playlist" msgstr "Limpar lista reprodución" -#: front/src/components/audio/Player.vue:642 +#: front/src/components/ShortcutsModal.vue:144 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Clear queue" +msgstr "Limpar cola" + +#: front/src/components/audio/Player.vue:668 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Clear your queue" msgstr "Limpar cola de reprodución" -#: front/src/components/Home.vue:44 -msgctxt "Content/Home/List item/Verb" -msgid "Click once, listen for hours using built-in radios" -msgstr "" -"Pulse unha vez, escoite durante horas utilizando as radios incrustadas" - #: front/src/components/mixins/Translations.vue:21 #: front/src/components/mixins/Translations.vue:22 msgctxt "Content/Library/Link.Title" -msgid "" -"Click to display more information about the import process for this upload" -msgstr "" +msgid "Click to display more information about the import process for this upload" +msgstr "Preme para mostrar máis información sobre o proceso de importación de esta subida" #: front/src/components/library/FileUpload.vue:82 msgctxt "Content/Library/Paragraph/Call to action" msgid "Click to select files to upload or drag and drop files or directories" -msgstr "" -"Pulse para escoller os ficheiros a subir ou arrastre e solte ficheiros ou " -"directorios" +msgstr "Pulse para escoller os ficheiros a subir ou arrastre e solte ficheiros ou directorios" +#: front/src/components/ShortcutsModal.vue:38 #: front/src/components/federation/FetchButton.vue:85 #: front/src/components/library/ImportStatusModal.vue:79 +#: front/src/components/manage/moderation/InstancePolicyModal.vue:34 msgctxt "*/*/Button.Label/Verb" msgid "Close" msgstr "Pechar" -#: front/src/components/ShortcutsModal.vue:20 -msgctxt "Popup/Keyboard shortcuts/Button.Label/Verb" -msgid "Close" -msgstr "Pechar" - #: front/src/components/federation/FetchButton.vue:88 msgctxt "*/*/Button.Label/Verb" msgid "Close and reload page" -msgstr "" +msgstr "Pechar e recargar páxina" + +#: front/src/components/About.vue:94 +msgctxt "*/*/*/State of registrations" +msgid "Closed" +msgstr "Pechado" #: front/src/components/manage/users/InvitationForm.vue:26 #: front/src/components/manage/users/InvitationsTable.vue:42 @@ -968,10 +1047,10 @@ msgid "Code" msgstr "Código" #: front/src/components/audio/album/Card.vue:41 -#: front/src/components/audio/artist/Card.vue:33 -msgctxt "Content/*/Card.Link/Verb" +#: front/src/components/common/CollapseLink.vue:3 +msgctxt "*/*/Button,Label" msgid "Collapse" -msgstr "Pechar" +msgstr "Pregar" #: front/src/components/library/radios/Builder.vue:63 msgctxt "Content/Radio/Table.Label/Verb (Value is a List of Parameters)" @@ -993,41 +1072,46 @@ msgctxt "Content/Signup/Form.Label" msgid "Confirmation code" msgstr "Código de confirmación" +#: front/src/components/About.vue:67 src/components/Home.vue:65 +msgctxt "Content/Home/Header/Name" +msgid "Contact" +msgstr "Contactar" + #: front/src/components/moderation/FilterModal.vue:90 msgctxt "*/Moderation/Message" msgid "Content filter successfully added" -msgstr "" - -#: front/src/components/mixins/Translations.vue:96 -#: front/src/components/mixins/Translations.vue:97 -msgctxt "Content/OAuth Scopes/Label" -msgid "Content filters" -msgstr "Escolla un filtro" +msgstr "Engadeuse o filtro de contido" #: front/src/components/auth/Settings.vue:116 +#: front/src/components/mixins/Translations.vue:108 +#: front/src/components/mixins/Translations.vue:109 msgctxt "Content/Settings/Title/Noun" msgid "Content filters" msgstr "Escolla un filtro" #: front/src/components/auth/Settings.vue:119 msgctxt "Content/Settings/Paragraph" -msgid "" -"Content filters help you hide content you don't want to see on the service." -msgstr "" +msgid "Content filters help you hide content you don't want to see on the service." +msgstr "Os filtros de contido axúdanche a ocultar contido que non queres ver neste servizo." #: front/src/components/common/ActionTable.vue:8 msgctxt "Content/*/Button.Help text.Paragraph" msgid "Content have been updated, click refresh to see up-to-date content" -msgstr "" -"Actualizouse o contido, pulse actualizar para ver o contido actualizado" +msgstr "Actualizouse o contido, pulse actualizar para ver o contido actualizado" -#: front/src/components/Footer.vue:48 +#: front/src/components/About.vue:46 +msgctxt "Content/About/Header" +msgid "Contents" +msgstr "Contidos" + +#: front/src/components/Footer.vue:56 msgctxt "Footer/*/List item.Link" msgid "Contribute" msgstr "ContribuÃr" -#: front/src/components/audio/EmbedWizard.vue:19 +#: front/src/components/audio/EmbedWizard.vue:29 #: front/src/components/common/CopyInput.vue:8 +#: front/src/components/forms/PasswordInput.vue:43 msgctxt "*/*/Button.Label/Short, Verb" msgid "Copy" msgstr "Copiar" @@ -1040,16 +1124,16 @@ msgstr "Copiar cancións da cola a lista de reprodución" #: front/src/components/auth/Authorize.vue:55 msgctxt "Content/Auth/Paragraph" msgid "Copy-paste the following code in the application:" -msgstr "" +msgstr "Copiar-pegar o seguinte código na aplicación:" -#: front/src/components/audio/EmbedWizard.vue:21 +#: front/src/components/audio/EmbedWizard.vue:31 msgctxt "Popup/Embed/Paragraph" msgid "Copy/paste this code in your website HTML" msgstr "Copiar/pegar este código no HTML da súa web" #: front/src/components/library/TrackDetail.vue:10 -#: front/src/views/admin/library/TrackDetail.vue:153 -msgctxt "Content/Track/Table.Label/Noun" +#: front/src/views/admin/library/TrackDetail.vue:159 src/edits.js:77 +msgctxt "Content/Track/*/Noun" msgid "Copyright" msgstr "Copyright" @@ -1063,29 +1147,20 @@ msgctxt "Content/Library/Error message.Title" msgid "Could not fetch remote library" msgstr "Non se obtivo a biblioteca remota" -#: front/src/components/Home.vue:80 -msgctxt "Content/Home/List item" -msgid "Covers, lyrics, our goal is to have them all ;)" -msgstr "Portadas, letras, o noso obxetivo é telas todas ;)" - #: front/src/components/manage/moderation/InstancePolicyForm.vue:58 msgctxt "Content/Moderation/Card.Button.Label/Verb" msgid "Create" msgstr "Crear" -#: front/src/components/auth/Signup.vue:4 +#: front/src/views/auth/Signup.vue:4 msgctxt "Content/Signup/Title" msgid "Create a funkwhale account" msgstr "Crear unha conta funkwhale" -#: front/src/components/auth/Settings.vue:220 -msgctxt "Content/Settings/Button.Label" -msgid "Create a new application" -msgstr "Crear unha nova lista de reprodución" - #: front/src/components/auth/ApplicationNew.vue:8 #: front/src/components/auth/ApplicationNew.vue:41 -msgctxt "Content/Applications/Title" +#: front/src/components/auth/Settings.vue:220 +msgctxt "Content/Settings/Button.Label" msgid "Create a new application" msgstr "Crear unha nova lista de reprodución" @@ -1099,7 +1174,7 @@ msgctxt "Popup/Playlist/Title/Verb" msgid "Create a new playlist" msgstr "Crear unha nova lista de reprodución" -#: front/src/components/Sidebar.vue:57 src/components/auth/Login.vue:17 +#: front/src/components/Sidebar.vue:57 src/components/auth/LoginForm.vue:15 msgctxt "*/Signup/Link/Verb" msgid "Create an account" msgstr "Crear unha conta" @@ -1114,7 +1189,7 @@ msgctxt "Content/Library/Button.Label/Verb" msgid "Create library" msgstr "Crear biblioteca" -#: front/src/components/auth/Signup.vue:53 +#: front/src/components/auth/SignupForm.vue:49 msgctxt "Content/Signup/Button.Label" msgid "Create my account" msgstr "Crear a miña conta" @@ -1122,7 +1197,7 @@ msgstr "Crear a miña conta" #: front/src/components/auth/Settings.vue:264 msgctxt "Content/Applications/Paragraph" msgid "Create one to integrate Funkwhale with third-party applications." -msgstr "" +msgstr "Crear un para integrar Funkwhale con aplicacións de terceiros." #: front/src/components/playlists/Form.vue:34 msgctxt "Content/Playlist/Button.Label/Verb" @@ -1139,11 +1214,13 @@ msgstr "Cree a súa propia radio" #: front/src/components/manage/library/AlbumsTable.vue:44 #: front/src/components/manage/library/ArtistsTable.vue:43 #: front/src/components/manage/library/LibrariesTable.vue:54 +#: front/src/components/manage/library/TagsTable.vue:45 #: front/src/components/manage/library/TracksTable.vue:44 #: front/src/components/manage/library/UploadsTable.vue:66 +#: front/src/components/manage/moderation/ReportCard.vue:43 #: front/src/components/manage/users/InvitationsTable.vue:40 -#: front/src/components/mixins/Translations.vue:43 -#: front/src/components/mixins/Translations.vue:44 +#: front/src/components/mixins/Translations.vue:53 +#: front/src/components/mixins/Translations.vue:54 msgctxt "Content/*/*/Noun" msgid "Creation date" msgstr "Data de creación" @@ -1153,6 +1230,11 @@ msgctxt "Content/Settings/Title/Noun" msgid "Current avatar" msgstr "Avatar actual" +#: front/src/components/admin/SettingsGroup.vue:67 +msgctxt "Content/Settings/Title/Noun" +msgid "Current image" +msgstr "Imaxe actual" + #: front/src/views/content/libraries/DetailArea.vue:4 msgctxt "Content/Library/Title" msgid "Current library" @@ -1168,15 +1250,20 @@ msgctxt "Content/Library/Title" msgid "Current usage" msgstr "Uso actual" +#: front/src/components/Footer.vue:94 +msgctxt "Footer/Settings/Dropdown.Label/Theme name" +msgid "Dark" +msgstr "Escuro" + #: front/src/components/federation/FetchButton.vue:53 msgctxt "*/*/Error" msgid "Data returned by the remote server had invalid or missing attributes" -msgstr "" +msgstr "Os datos devoltos polo servidor remoto ten valores non válidos ou faltan atributos" #: front/src/components/federation/FetchButton.vue:17 msgctxt "Popup/*/Message.Content" msgid "Data was refreshed successfully from remote server." -msgstr "" +msgstr "Actualizáronse os datos desde o servidor remoto." #: front/src/views/content/libraries/Detail.vue:27 msgctxt "Content/Library/Table.Label" @@ -1188,7 +1275,7 @@ msgctxt "Popup/Import/Table.Label/Noun" msgid "Debug information" msgstr "Información da canción" -#: front/src/components/ShortcutsModal.vue:75 +#: front/src/components/ShortcutsModal.vue:128 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Decrease volume" msgstr "Baixar volume" @@ -1200,23 +1287,29 @@ msgstr "Baixar volume" #: front/src/components/manage/library/AlbumsTable.vue:188 #: front/src/components/manage/library/ArtistsTable.vue:178 #: front/src/components/manage/library/LibrariesTable.vue:205 +#: front/src/components/manage/library/TagsTable.vue:179 #: front/src/components/manage/library/TracksTable.vue:188 #: front/src/components/manage/library/UploadsTable.vue:255 #: front/src/components/manage/moderation/InstancePolicyForm.vue:61 +#: front/src/components/manage/moderation/NotesThread.vue:24 +#: front/src/components/manage/moderation/NotesThread.vue:29 +#: front/src/components/manage/moderation/ReportCard.vue:360 #: front/src/components/manage/users/InvitationsTable.vue:167 -#: front/src/views/admin/library/AlbumDetail.vue:72 -#: front/src/views/admin/library/AlbumDetail.vue:77 -#: front/src/views/admin/library/ArtistDetail.vue:71 +#: front/src/views/admin/library/AlbumDetail.vue:78 +#: front/src/views/admin/library/AlbumDetail.vue:83 #: front/src/views/admin/library/ArtistDetail.vue:76 +#: front/src/views/admin/library/ArtistDetail.vue:81 #: front/src/views/admin/library/LibraryDetail.vue:58 #: front/src/views/admin/library/LibraryDetail.vue:63 -#: front/src/views/admin/library/TrackDetail.vue:71 -#: front/src/views/admin/library/TrackDetail.vue:76 +#: front/src/views/admin/library/TagDetail.vue:41 +#: front/src/views/admin/library/TagDetail.vue:46 +#: front/src/views/admin/library/TrackDetail.vue:77 +#: front/src/views/admin/library/TrackDetail.vue:82 #: front/src/views/admin/library/UploadDetail.vue:65 #: front/src/views/admin/library/UploadDetail.vue:70 #: front/src/views/content/libraries/FilesTable.vue:222 #: front/src/views/content/libraries/Form.vue:29 -#: src/views/playlists/Detail.vue:34 +#: src/views/playlists/Detail.vue:42 msgctxt "*/*/*/Verb" msgid "Delete" msgstr "Borrar" @@ -1229,7 +1322,7 @@ msgstr "Borrar lista de reprodución" #: front/src/components/auth/Settings.vue:252 msgctxt "Popup/Settings/Title" msgid "Delete application \"%{ application }\"?" -msgstr "" +msgstr "Eliminada a aplicación \"%{ application }\"?" #: front/src/views/content/libraries/Form.vue:39 msgctxt "Popup/Library/Button.Label/Verb" @@ -1241,7 +1334,19 @@ msgctxt "Popup/Moderation/Button.Label/Verb" msgid "Delete moderation rule" msgstr "Borrar regra de moderación" -#: front/src/views/playlists/Detail.vue:39 +#: front/src/components/auth/Settings.vue:274 +#: src/components/auth/Settings.vue:302 +#, fuzzy +msgctxt "*/*/Button.Label" +msgid "Delete my account" +msgstr "Eliminar a miña conta" + +#: front/src/components/auth/Settings.vue:297 +msgctxt "*/*/Button.Label" +msgid "Delete my account…" +msgstr "Eliminar a miña conta…" + +#: front/src/views/playlists/Detail.vue:47 msgctxt "Popup/Playlist/Button.Label/Verb" msgid "Delete playlist" msgstr "Borrar lista de reprodución" @@ -1251,13 +1356,23 @@ msgctxt "Popup/Radio/Button.Label/Verb" msgid "Delete radio" msgstr "Borrar radio" -#: front/src/views/admin/library/AlbumDetail.vue:73 -#: front/src/views/admin/library/TrackDetail.vue:72 +#: front/src/components/manage/moderation/ReportCard.vue:357 +msgctxt "Content/Moderation/Button/Verb" +msgid "Delete reported object" +msgstr "Eliminar obxeto reportado" + +#: front/src/components/manage/moderation/ReportCard.vue:358 +msgctxt "Content/Moderation/Popup/Header" +msgid "Delete reported object?" +msgstr "Eliminar obxeto reportado?" + +#: front/src/views/admin/library/AlbumDetail.vue:79 +#: front/src/views/admin/library/TrackDetail.vue:78 msgctxt "Popup/Library/Title" msgid "Delete this album?" msgstr "Eliminar esta biblioteca?" -#: front/src/views/admin/library/ArtistDetail.vue:72 +#: front/src/views/admin/library/ArtistDetail.vue:77 msgctxt "Popup/Library/Title" msgid "Delete this artist?" msgstr "Eliminar esta biblioteca?" @@ -1273,60 +1388,69 @@ msgctxt "Popup/Moderation/Title" msgid "Delete this moderation rule?" msgstr "Eliminar esta regra de moderación?" +#: front/src/components/manage/moderation/NotesThread.vue:25 +msgctxt "Popup/Moderation/Title" +msgid "Delete this note?" +msgstr "Eliminar esta nota?" + #: front/src/components/library/EditCard.vue:94 msgctxt "Popup/Library/Title" msgid "Delete this suggestion?" msgstr "Eliminar esta regra de moderación?" +#: front/src/views/admin/library/TagDetail.vue:42 +msgctxt "Popup/Library/Title" +msgid "Delete this tag?" +msgstr "Eliminar esta etiqueta?" + #: front/src/views/admin/library/UploadDetail.vue:66 msgctxt "Popup/Library/Title" msgid "Delete this upload?" msgstr "Eliminar esta biblioteca?" #: front/src/components/favorites/List.vue:35 -#: src/components/library/Albums.vue:26 -#: front/src/components/library/Artists.vue:26 +#: src/components/library/Albums.vue:30 +#: front/src/components/library/Artists.vue:30 #: src/components/library/Radios.vue:47 #: front/src/components/manage/library/AlbumsTable.vue:22 #: front/src/components/manage/library/ArtistsTable.vue:22 #: front/src/components/manage/library/EditsCardList.vue:40 #: front/src/components/manage/library/LibrariesTable.vue:31 +#: front/src/components/manage/library/TagsTable.vue:22 #: front/src/components/manage/library/TracksTable.vue:22 #: front/src/components/manage/library/UploadsTable.vue:41 #: front/src/components/manage/moderation/AccountsTable.vue:22 -#: front/src/components/manage/moderation/DomainsTable.vue:20 +#: front/src/components/manage/moderation/DomainsTable.vue:28 #: front/src/components/manage/users/UsersTable.vue:20 +#: front/src/views/admin/moderation/ReportsList.vue:45 #: front/src/views/content/libraries/FilesTable.vue:32 #: front/src/views/playlists/List.vue:28 msgctxt "Content/Search/Dropdown" msgid "Descending" msgstr "Descendente" -#: front/src/views/admin/library/LibraryDetail.vue:123 -msgctxt "*/*/*/Noun" -msgid "Description" -msgstr "Descrición" +#: front/src/components/manage/moderation/NoteForm.vue:37 +msgctxt "Content/Moderation/Placeholder" +msgid "Describe what actions have been taken, or any other related updates…" +msgstr "Describe qué accións foron tomadas, ou calquera outra actualización…" #: front/src/components/library/radios/Builder.vue:25 +#: front/src/views/admin/library/LibraryDetail.vue:132 #: front/src/views/content/libraries/Form.vue:14 -msgctxt "Content/*/Input.Label/Noun" +msgctxt "*/*/*/Noun" msgid "Description" msgstr "Descrición" #: front/src/views/content/libraries/Card.vue:48 -#: src/views/content/remote/Card.vue:54 +#: src/views/content/remote/Card.vue:67 msgctxt "Content/Library/Card.Button.Label/Noun" msgid "Details" msgstr "Detalles" -#: front/src/views/admin/moderation/AccountsDetail.vue:491 +#: front/src/views/admin/moderation/AccountsDetail.vue:511 msgctxt "Content/Moderation/Help text" -msgid "" -"Determine how much content the user can upload. Leave empty to use the " -"default value of the instance." -msgstr "" -"Indique canto contido pode subir a usuaria. Deixe baldeiro para utilizar o " -"valor por omisión da instancia." +msgid "Determine how much content the user can upload. Leave empty to use the default value of the instance." +msgstr "Indique canto contido pode subir a usuaria. Deixe baldeiro para utilizar o valor por omisión da instancia." #: front/src/components/mixins/Translations.vue:8 #: front/src/components/mixins/Translations.vue:9 @@ -1335,38 +1459,50 @@ msgid "Determine the visibility level of your activity" msgstr "Indique o nivel de visibilidade da súa actividade" #: front/src/components/auth/Settings.vue:104 -#: front/src/components/auth/SubsonicTokenForm.vue:51 +#: front/src/components/auth/SubsonicTokenForm.vue:56 msgctxt "Popup/Settings/Button.Label" msgid "Disable access" msgstr "Desactivar o acceso" -#: front/src/components/auth/SubsonicTokenForm.vue:48 +#: front/src/components/auth/SubsonicTokenForm.vue:53 msgctxt "Content/Settings/Button.Label/Verb" msgid "Disable Subsonic access" msgstr "Desactivar o acceso Subsonic" -#: front/src/components/auth/SubsonicTokenForm.vue:49 +#: front/src/components/auth/SubsonicTokenForm.vue:54 msgctxt "Popup/Settings/Title" msgid "Disable Subsonic API access?" msgstr "Desactivar o acceso a API Subsonic?" +#: front/src/components/About.vue:118 src/components/About.vue:131 +#: front/src/components/About.vue:144 #: front/src/components/manage/moderation/InstancePolicyForm.vue:18 #: front/src/views/admin/moderation/AccountsDetail.vue:157 #: front/src/views/admin/moderation/AccountsDetail.vue:161 -msgctxt "*/*/*" +msgctxt "*/*/*/State of feature" msgid "Disabled" msgstr "Desactivado" -#: front/src/views/admin/library/TrackDetail.vue:145 +#: front/src/views/admin/library/TrackDetail.vue:151 msgctxt "*/*/*/Noun" msgid "Disc number" -msgstr "" +msgstr "Número de disco" + +#: front/src/components/Home.vue:157 +msgctxt "Content/Home/Link" +msgid "Discover everything you need to know about Funkwhale and its features" +msgstr "Descubre todo o que precisas saber sobre Funkwhale e as súas caracterÃsticas" #: front/src/components/auth/SubsonicTokenForm.vue:13 msgctxt "Content/Settings/Link" msgid "Discover how to use Funkwhale from other apps" msgstr "Descubra cómo utilizar Funkwhale desde outras apps" +#: front/src/views/Notifications.vue:45 +msgctxt "Content/Notifications/Button.Label/Verb" +msgid "Discover other ways to help" +msgstr "Descubre outros xeitos de axudar" + #: front/src/views/admin/moderation/AccountsDetail.vue:132 msgctxt "'Content/*/*/Noun'" msgid "Display name" @@ -1379,12 +1515,13 @@ msgstr "Mostrar públicamente" #: front/src/components/manage/moderation/InstancePolicyForm.vue:122 msgctxt "Content/Moderation/Help text" -msgid "" -"Do not download any media file (audio, album cover, account avatar…) from " -"this account or domain. This will purge existing content as well." -msgstr "" -"Non baixar ningún ficheiro de medios (audio, portada, avatar da conta...) de" -" esta conta ou dominio. Esto eliminará tamén o contido existente." +msgid "Do not download any media file (audio, album cover, account avatar…) from this account or domain. This will purge existing content as well." +msgstr "Non baixar ningún ficheiro de medios (audio, portada, avatar da conta…) de esta conta ou dominio. Esto eliminará tamén o contido existente." + +#: front/src/views/Notifications.vue:36 +msgctxt "Content/Notifications/Header" +msgid "Do you like Funkwhale?" +msgstr "Gozas de Funkwhale?" #: front/src/components/playlists/Editor.vue:51 msgctxt "Popup/Playlist/Title" @@ -1396,7 +1533,7 @@ msgctxt "Modal/*/Title" msgid "Do you want to confirm this action?" msgstr "Quere confirmar esta acción?" -#: front/src/views/playlists/Detail.vue:35 +#: front/src/views/playlists/Detail.vue:43 msgctxt "Popup/Playlist/Title/Call to action" msgid "Do you want to delete the playlist \"%{ playlist }\"?" msgstr "Quere eliminar esta lista de reprodución \"%{ playlist }\"?" @@ -1406,20 +1543,29 @@ msgctxt "Popup/Radio/Title" msgid "Do you want to delete the radio \"%{ radio }\"?" msgstr "Quere eliminar a radio \"%{ radio }\"?" +#: front/src/components/auth/Settings.vue:298 +msgctxt "Popup/Settings/Title" +msgid "Do you want to delete your account?" +msgstr "Desexas eliminar a túa conta?" + #: front/src/components/moderation/FilterModal.vue:3 msgctxt "Popup/Moderation/Title/Verb" msgid "Do you want to hide content from artist \"%{ name }\"?" msgstr "Quere eliminar a radio \"%{ radio }\"?" #: front/src/components/common/ActionTable.vue:37 -#, fuzzy msgctxt "Modal/*/Title" msgid "Do you want to launch %{ action } on %{ count } element?" msgid_plural "Do you want to launch %{ action } on %{ count } elements?" msgstr[0] "Quere executar %{ action } sobre %{ count } elemento?" msgstr[1] "Quere executar %{ action } sobre %{ count } elementos?" -#: front/src/components/Sidebar.vue:118 +#: front/src/components/moderation/ReportModal.vue:3 +msgctxt "Popup/Moderation/Title/Verb" +msgid "Do you want to report this object?" +msgstr "Quere informar sobre este obxeto?" + +#: front/src/components/Sidebar.vue:122 msgctxt "Sidebar/Queue/Message" msgid "Do you want to restore your previous queue?" msgstr "Quere restaurar a súa cola anterior?" @@ -1435,26 +1581,33 @@ msgstr "Documentación" #: front/src/components/manage/library/TracksTable.vue:42 #: front/src/components/manage/library/UploadsTable.vue:62 #: front/src/components/manage/moderation/AccountsTable.vue:40 -#: front/src/components/mixins/Translations.vue:60 -#: front/src/views/admin/library/AlbumDetail.vue:118 -#: front/src/views/admin/library/ArtistDetail.vue:107 -#: front/src/views/admin/library/LibraryDetail.vue:114 -#: front/src/views/admin/library/TrackDetail.vue:170 +#: front/src/components/manage/moderation/ReportCard.vue:169 +#: front/src/components/manage/moderation/ReportCard.vue:179 +#: front/src/components/mixins/Translations.vue:72 +#: front/src/views/admin/library/AlbumDetail.vue:124 +#: front/src/views/admin/library/ArtistDetail.vue:112 +#: front/src/views/admin/library/LibraryDetail.vue:123 +#: front/src/views/admin/library/TrackDetail.vue:176 #: front/src/views/admin/library/UploadDetail.vue:121 #: front/src/views/admin/moderation/AccountsDetail.vue:123 -#: front/src/components/mixins/Translations.vue:61 +#: front/src/components/mixins/Translations.vue:73 msgctxt "Content/Moderation/*/Noun" msgid "Domain" msgstr "Dominio" -#: front/src/views/admin/moderation/Base.vue:5 +#: front/src/views/admin/moderation/Base.vue:8 #: front/src/views/admin/moderation/DomainsList.vue:3 -#: front/src/views/admin/moderation/DomainsList.vue:48 +#: front/src/views/admin/moderation/DomainsList.vue:54 msgctxt "*/Moderation/*/Noun" msgid "Domains" msgstr "Dominios" -#: front/src/components/library/TrackBase.vue:39 +#: front/src/views/Notifications.vue:42 +msgctxt "Content/Notifications/Button.Label/Verb" +msgid "Donate" +msgstr "Doar" + +#: front/src/components/library/TrackBase.vue:37 #: front/src/views/admin/library/UploadDetail.vue:58 msgctxt "Content/Track/Link/Verb" msgid "Download" @@ -1467,10 +1620,10 @@ msgstr "Arrastre e solte filas para reordenar as cancións na lista" #: front/src/components/audio/track/Table.vue:10 #: front/src/components/library/TrackDetail.vue:30 -#: front/src/components/mixins/Translations.vue:56 +#: front/src/components/mixins/Translations.vue:68 #: front/src/views/admin/library/UploadDetail.vue:238 #: front/src/views/content/libraries/FilesTable.vue:60 -#: front/src/components/mixins/Translations.vue:57 +#: front/src/components/mixins/Translations.vue:69 msgctxt "Content/*/*" msgid "Duration" msgstr "Duración" @@ -1480,41 +1633,27 @@ msgctxt "Content/Signup/Message" msgid "E-mail address confirmed" msgstr "Enderezo correo-e confirmado" -#: front/src/components/Home.vue:88 -msgctxt "Content/Home/Title" -msgid "Easy to use" -msgstr "Fácil de utilizar" - -#: front/src/components/library/AlbumBase.vue:68 -#: front/src/components/library/ArtistBase.vue:79 -#: front/src/components/library/TrackBase.vue:87 +#: front/src/components/auth/Settings.vue:246 +#: src/components/library/AlbumBase.vue:73 +#: front/src/components/library/ArtistBase.vue:84 +#: front/src/components/library/TrackBase.vue:89 #: front/src/components/manage/moderation/InstancePolicyCard.vue:45 #: front/src/components/radios/Card.vue:23 -#: src/views/admin/library/AlbumDetail.vue:65 -#: front/src/views/admin/library/ArtistDetail.vue:64 -#: front/src/views/admin/library/TrackDetail.vue:64 +#: src/views/admin/library/AlbumDetail.vue:71 +#: front/src/views/admin/library/ArtistDetail.vue:69 +#: front/src/views/admin/library/TrackDetail.vue:70 #: front/src/views/content/libraries/Detail.vue:9 #: src/views/playlists/Detail.vue:31 msgctxt "Content/*/Button.Label/Verb" msgid "Edit" msgstr "Editar" -#: front/src/components/auth/Settings.vue:246 -msgctxt "Content/Settings/Button.Label" -msgid "Edit" -msgstr "Editar" - #: front/src/components/auth/ApplicationEdit.vue:30 #: front/src/components/auth/ApplicationEdit.vue:75 msgctxt "Content/Applications/Title" msgid "Edit application" msgstr "Fallo mentres se aplicaba a acción" -#: front/src/components/About.vue:22 -msgctxt "Content/Settings/Button.Label/Verb" -msgid "Edit instance info" -msgstr "Editar a info da instancia" - #: front/src/components/manage/moderation/InstancePolicyForm.vue:3 msgctxt "Content/Moderation/Card.Title/Verb" msgid "Edit moderation rule" @@ -1535,23 +1674,20 @@ msgctxt "Content/*/Title" msgid "Edit this track" msgstr "Reproducir esta canción" -#: front/src/views/admin/library/AlbumDetail.vue:182 -#: front/src/views/admin/library/ArtistDetail.vue:171 +#: front/src/components/mixins/Translations.vue:116 +#: front/src/views/admin/library/AlbumDetail.vue:198 +#: front/src/views/admin/library/ArtistDetail.vue:186 #: front/src/views/admin/library/Base.vue:5 #: src/views/admin/library/EditsList.vue:24 -#: front/src/views/admin/library/TrackDetail.vue:234 +#: front/src/views/admin/library/TrackDetail.vue:250 +#: front/src/components/mixins/Translations.vue:117 msgctxt "*/Admin/*/Noun" msgid "Edits" msgstr "Editar" -#: front/src/components/mixins/Translations.vue:104 -#: front/src/components/mixins/Translations.vue:105 -msgctxt "Content/OAuth Scopes/Label" -msgid "Edits" -msgstr "Editar" - -#: front/src/components/auth/Signup.vue:30 +#: front/src/components/auth/SignupForm.vue:26 #: front/src/components/manage/users/UsersTable.vue:38 +#: front/src/components/moderation/ReportModal.vue:31 msgctxt "Content/*/*/Noun" msgid "Email" msgstr "Correo-e" @@ -1561,50 +1697,58 @@ msgctxt "Content/*/*" msgid "Email address" msgstr "Enderezo de correo" -#: front/src/components/library/AlbumBase.vue:53 -#: front/src/components/library/ArtistBase.vue:64 -#: front/src/components/library/TrackBase.vue:72 +#: front/src/components/library/AlbumBase.vue:54 +#: front/src/components/library/ArtistBase.vue:65 +#: front/src/components/library/TrackBase.vue:70 +#: src/views/playlists/Detail.vue:38 msgctxt "Content/*/Button.Label/Verb" msgid "Embed" msgstr "Incrustado" -#: front/src/components/audio/EmbedWizard.vue:20 +#: front/src/components/audio/EmbedWizard.vue:30 msgctxt "Popup/Embed/Input.Label/Noun" msgid "Embed code" msgstr "Código incrustado" -#: front/src/components/library/AlbumBase.vue:26 +#: front/src/components/library/AlbumBase.vue:27 msgctxt "Popup/Album/Title/Verb" msgid "Embed this album on your website" msgstr "Incruste este álbume no seu sitio web" -#: front/src/components/library/ArtistBase.vue:37 +#: front/src/components/library/ArtistBase.vue:38 msgctxt "Popup/Artist/Title/Verb" msgid "Embed this artist work on your website" msgstr "Incruste esta canción no seu sitio web" -#: front/src/components/library/TrackBase.vue:45 +#: front/src/views/playlists/Detail.vue:52 +msgctxt "Popup/Album/Title/Verb" +msgid "Embed this playlist on your website" +msgstr "Incruste esta lista no seu sitio web" + +#: front/src/components/library/TrackBase.vue:43 msgctxt "Popup/Track/Title" msgid "Embed this track on your website" msgstr "Incruste esta canción no seu sitio web" -#: front/src/views/admin/moderation/AccountsDetail.vue:259 -#: front/src/views/admin/moderation/DomainsDetail.vue:187 +#: front/src/views/admin/moderation/AccountsDetail.vue:260 +#: front/src/views/admin/moderation/DomainsDetail.vue:224 msgctxt "Content/Moderation/Table.Label/Noun" msgid "Emitted library follows" msgstr "Seguimentos da biblioteca emitidos" -#: front/src/views/admin/moderation/AccountsDetail.vue:243 -#: front/src/views/admin/moderation/DomainsDetail.vue:171 +#: front/src/views/admin/moderation/AccountsDetail.vue:244 +#: front/src/views/admin/moderation/DomainsDetail.vue:208 msgctxt "Content/Moderation/Table.Label/Noun" msgid "Emitted messages" msgstr "Mensaxes emitidas" +#: front/src/components/About.vue:114 src/components/About.vue:127 +#: front/src/components/About.vue:140 #: front/src/components/manage/moderation/InstancePolicyCard.vue:8 #: front/src/components/manage/moderation/InstancePolicyForm.vue:17 #: front/src/views/admin/moderation/AccountsDetail.vue:156 #: front/src/views/admin/moderation/AccountsDetail.vue:160 -msgctxt "*/*/*" +msgctxt "*/*/*/State of feature" msgid "Enabled" msgstr "Activado" @@ -1623,10 +1767,10 @@ msgctxt "Content/Search/Input.Placeholder" msgid "Enter a radio name…" msgstr "Introduza un nome de radio…" -#: front/src/components/library/Albums.vue:119 +#: front/src/components/library/Albums.vue:128 msgctxt "Content/Search/Input.Placeholder" -msgid "Enter album title..." -msgstr "" +msgid "Enter album title…" +msgstr "Escribir tÃtulo de álbume…" #: front/src/components/library/Artists.vue:116 msgctxt "Content/Search/Input.Placeholder" @@ -1640,15 +1784,16 @@ msgstr "Nome de lista de reprodución…" #: front/src/views/auth/PasswordReset.vue:54 msgctxt "Content/Signup/Input.Placeholder" -msgid "Enter the email address binded to your account" +msgid "Enter the email address linked to your account" msgstr "Introducir o enderezo de correo ligado a súa conta" -#: front/src/components/auth/Signup.vue:103 +#: front/src/components/auth/SignupForm.vue:96 msgctxt "Content/Signup/Form/Placeholder" msgid "Enter your email" msgstr "Introduza o seu correo-e" -#: front/src/components/auth/Signup.vue:98 src/components/auth/Signup.vue:100 +#: front/src/components/auth/SignupForm.vue:91 +#: src/components/auth/SignupForm.vue:93 msgctxt "Content/Signup/Form/Placeholder" msgid "Enter your invitation code (case insensitive)" msgstr "Introduza o seu código de convite (dif. maiúsculas)" @@ -1658,12 +1803,12 @@ msgctxt "Content/Library/Input.Placeholder/Verb" msgid "Enter your search query…" msgstr "Introduza a consulta de busca…" -#: front/src/components/auth/Signup.vue:102 +#: front/src/components/auth/SignupForm.vue:95 msgctxt "Content/Signup/Form/Placeholder" msgid "Enter your username" msgstr "Introduza o nome de usuaria" -#: front/src/components/auth/Login.vue:83 +#: front/src/components/auth/LoginForm.vue:81 msgctxt "Content/Login/Input.Placeholder" msgid "Enter your username or email" msgstr "Introduza o nome de usuaria ou correo-e" @@ -1680,7 +1825,7 @@ msgctxt "Popup/Import/Table.Label/Noun" msgid "Error detail" msgstr "Fallo ao informar" -#: front/src/views/admin/Settings.vue:87 +#: front/src/views/admin/Settings.vue:89 msgctxt "Content/Admin/Menu" msgid "Error reporting" msgstr "Fallo ao informar" @@ -1736,16 +1881,12 @@ msgctxt "Popup/Moderation/Error message" msgid "Error while fetching application data" msgstr "Fallo ao crear o convite" -#: front/src/views/admin/moderation/DomainsDetail.vue:118 +#: front/src/views/admin/moderation/DomainsDetail.vue:155 msgctxt "Content/Moderation/Table" msgid "Error while fetching node info" msgstr "Fallo ao obter info da instancia" #: front/src/components/admin/SettingsGroup.vue:5 -msgctxt "Content/Settings/Error message.Title" -msgid "Error while saving settings" -msgstr "Fallo ao gardar os axustes" - #: front/src/components/federation/FetchButton.vue:73 msgctxt "Content/*/Error message.Title" msgid "Error while saving settings" @@ -1756,6 +1897,16 @@ msgctxt "Content/Library/Error message.Title" msgid "Error while submitting edit" msgstr "Fallo ao gardar os axustes" +#: front/src/components/manage/moderation/NoteForm.vue:3 +msgctxt "Content/Moderation/Error message.Title" +msgid "Error while submitting note" +msgstr "Fallo ao enviar a nota" + +#: front/src/components/moderation/ReportModal.vue:11 +msgctxt "Popup/Moderation/Error message" +msgid "Error while submitting report" +msgstr "Fallo ao enviar o informe" + #: front/src/components/mixins/Translations.vue:32 #: front/src/components/mixins/Translations.vue:33 msgctxt "Content/Library/Table/Short" @@ -1790,9 +1941,14 @@ msgctxt "Content/Radio/Table.Label/Verb" msgid "Exclude" msgstr "ExcluÃr" +#: front/src/components/common/CollapseLink.vue:2 +msgctxt "*/*/Button,Label" +msgid "Expand" +msgstr "Despregar" + #: front/src/components/manage/users/InvitationsTable.vue:41 -#: front/src/components/mixins/Translations.vue:49 -#: front/src/components/mixins/Translations.vue:50 +#: front/src/components/mixins/Translations.vue:59 +#: front/src/components/mixins/Translations.vue:60 msgctxt "Content/Admin/Table.Label/Noun" msgid "Expiration date" msgstr "Data de caducidade" @@ -1809,16 +1965,8 @@ msgstr "Caducado/utilizado" #: front/src/components/manage/moderation/InstancePolicyForm.vue:110 msgctxt "Content/Moderation/Help text" -msgid "" -"Explain why you're applying this policy. Depending on your instance " -"configuration, this will help you remember why you acted on this account or " -"domain, and may be displayed publicly to help users understand what " -"moderation rules are in place." -msgstr "" -"Explicar por que aplica esta polÃtica a todas as instancias. Dependendo da " -"configuración da súa instancia esto axudaralle a lembrar por que actuou " -"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." +msgid "Explain why you're applying this policy. Depending on your instance configuration, this will help you remember why you acted on this account or domain, and may be displayed publicly to help users understand what moderation rules are in place." +msgstr "Explicar por que aplica esta polÃtica a todas as instancias. Dependendo da configuración da súa instancia esto axudaralle a lembrar por que actuou 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." #: front/src/components/manage/library/UploadsTable.vue:25 #: front/src/views/content/libraries/FilesTable.vue:16 @@ -1826,31 +1974,27 @@ msgctxt "Content/Library/Dropdown" msgid "Failed" msgstr "Fallou" -#: front/src/views/content/remote/Card.vue:62 +#: front/src/views/content/remote/Card.vue:75 msgctxt "Content/Library/Card.List item/Noun" msgid "Failed tracks:" msgstr "Cancións fallidas:" -#: front/src/views/admin/library/AlbumDetail.vue:165 -#: front/src/views/admin/library/ArtistDetail.vue:154 -#: front/src/views/admin/library/TrackDetail.vue:217 +#: front/src/views/admin/library/AlbumDetail.vue:171 +#: front/src/views/admin/library/ArtistDetail.vue:159 +#: front/src/views/admin/library/TrackDetail.vue:223 msgctxt "*/*/*" msgid "Favorited tracks" -msgstr "Cancións fallidas:" +msgstr "Cancións favoritas" #: front/src/components/Sidebar.vue:66 +#: src/components/mixins/Translations.vue:88 +#: front/src/components/mixins/Translations.vue:89 msgctxt "Sidebar/Favorites/List item.Link/Noun" msgid "Favorites" msgstr "Favoritas" -#: front/src/components/mixins/Translations.vue:76 -#: front/src/components/mixins/Translations.vue:77 -msgctxt "Content/OAuth Scopes/Label" -msgid "Favorites" -msgstr "Favoritas" - -#: front/src/views/admin/Settings.vue:84 -msgctxt "Content/Admin/Menu" +#: front/src/components/About.vue:110 src/views/admin/Settings.vue:84 +msgctxt "*/*/*" msgid "Federation" msgstr "Federación" @@ -1862,7 +2006,7 @@ msgstr "Federación" #: front/src/components/library/EditCard.vue:45 msgctxt "Content/Library/Card.Table.Header/Short" msgid "Field" -msgstr "" +msgstr "Campo" #: front/src/components/library/FileUpload.vue:93 msgctxt "Content/Library/Table.Label" @@ -1874,6 +2018,11 @@ msgctxt "Content/Radio/Table.Label/Noun" msgid "Filter name" msgstr "Nome do filtro" +#: front/src/components/Home.vue:118 +msgctxt "Content/Home/Link" +msgid "Find another pod" +msgstr "Atopar outra instancia" + #: front/src/components/manage/library/UploadsTable.vue:26 #: front/src/components/mixins/Translations.vue:36 #: front/src/views/content/libraries/FilesTable.vue:17 @@ -1883,25 +2032,31 @@ msgid "Finished" msgstr "Rematado" #: front/src/components/manage/moderation/AccountsTable.vue:42 -#: front/src/components/manage/moderation/DomainsTable.vue:41 -#: front/src/views/admin/library/AlbumDetail.vue:149 -#: front/src/views/admin/library/ArtistDetail.vue:138 -#: front/src/views/admin/library/LibraryDetail.vue:153 -#: front/src/views/admin/library/TrackDetail.vue:201 +#: front/src/components/manage/moderation/DomainsTable.vue:49 +#: front/src/views/admin/library/AlbumDetail.vue:155 +#: front/src/views/admin/library/ArtistDetail.vue:143 +#: front/src/views/admin/library/LibraryDetail.vue:162 +#: front/src/views/admin/library/TagDetail.vue:98 +#: front/src/views/admin/library/TrackDetail.vue:207 #: front/src/views/admin/library/UploadDetail.vue:167 -#: front/src/views/admin/moderation/AccountsDetail.vue:235 -#: front/src/views/admin/moderation/DomainsDetail.vue:151 +#: front/src/views/admin/moderation/AccountsDetail.vue:236 +#: front/src/views/admin/moderation/DomainsDetail.vue:188 msgctxt "Content/Moderation/Table.Label/Short (Value is a date)" msgid "First seen" msgstr "Visto primeiro" -#: front/src/components/mixins/Translations.vue:46 -#: front/src/components/mixins/Translations.vue:47 +#: front/src/components/mixins/Translations.vue:56 +#: front/src/components/mixins/Translations.vue:57 msgctxt "Content/Moderation/Dropdown/Noun" msgid "First seen date" msgstr "Data da primeira visión" -#: front/src/views/content/remote/Card.vue:87 +#: front/src/components/ShortcutsModal.vue:64 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Focus searchbar" +msgstr "Foco na caixa de busca" + +#: front/src/views/content/remote/Card.vue:100 msgctxt "Content/Library/Card.Button.Label/Verb" msgid "Follow" msgstr "Seguir" @@ -1911,41 +2066,35 @@ msgctxt "Content/Library/Title/Verb" msgid "Follow remote libraries" msgstr "Seguir bibliotecas remotas" -#: front/src/views/content/remote/Card.vue:92 +#: front/src/views/content/remote/Card.vue:105 msgctxt "Content/Library/Card.Paragraph" msgid "Follow request pending approval" msgstr "Solicitude de seguimento pendente de aprobación" -#: front/src/components/mixins/Translations.vue:64 -#: front/src/views/admin/library/LibraryDetail.vue:161 +#: front/src/components/manage/library/LibrariesTable.vue:53 +#: front/src/components/mixins/Translations.vue:76 +#: front/src/views/admin/library/LibraryDetail.vue:170 #: front/src/views/content/libraries/Detail.vue:7 -#: front/src/components/mixins/Translations.vue:65 +#: front/src/components/mixins/Translations.vue:77 msgctxt "Content/Federation/*/Noun" msgid "Followers" msgstr "Seguidoras" -#: front/src/components/manage/library/LibrariesTable.vue:53 -msgctxt "Content/*/*/Noun" -msgid "Followers" -msgstr "Seguidoras" - -#: front/src/views/content/remote/Card.vue:103 +#: front/src/views/content/remote/Card.vue:116 msgctxt "Content/Library/Card.Paragraph" msgid "Following" msgstr "Seguindo" -#: front/src/components/mixins/Translations.vue:84 -#: front/src/components/mixins/Translations.vue:85 +#: front/src/components/mixins/Translations.vue:96 +#: front/src/components/mixins/Translations.vue:97 msgctxt "Content/OAuth Scopes/Label" msgid "Follows" msgstr "Seguir" -#: front/src/components/library/TrackBase.vue:17 +#: front/src/components/library/TrackBase.vue:245 msgctxt "Content/Track/Paragraph" -msgid "" -"From album <a class=\"internal\" href=\"%{ albumUrl }\">%{ album }</a> by <a" -" class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" -msgstr "" +msgid "From album <a class=\"internal\" href=\"%{ albumUrl }\">%{ album }</a> by <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" +msgstr "Do álbume <a class=\"internal\" href=\"%{ albumUrl }\">%{ album }</a> por <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" #: front/src/components/auth/Authorize.vue:28 msgctxt "Content/Auth/Label/Noun" @@ -1954,38 +2103,20 @@ msgstr "Desactivar o acceso" #: front/src/components/auth/SubsonicTokenForm.vue:7 msgctxt "Content/Settings/Paragraph'" -msgid "" -"Funkwhale is compatible with other music players that support the Subsonic " -"API." -msgstr "" -"Funkwhale é compatible con outros reprodutores de música compatibles coa API" -" Subsonic." +msgid "Funkwhale is compatible with other music players that support the Subsonic API." +msgstr "Funkwhale é compatible con outros reprodutores de música compatibles coa API Subsonic." -#: front/src/components/Home.vue:90 -msgctxt "Content/Home/Paragraph" -msgid "Funkwhale is dead simple to use." -msgstr "Funckwhale élle ben doado de utilizar." - -#: front/src/components/Home.vue:39 -msgctxt "Content/Home/Paragraph" -msgid "" -"Funkwhale is designed to make it easy to listen to music you like, or to " -"discover new artists." -msgstr "" -"Funkwhale está deseñado para escoitar facilmente a música que lle gusta ou " -"descubrir novos artistas." - -#: front/src/components/Home.vue:111 +#: front/src/components/Home.vue:88 msgctxt "Content/Home/Paragraph" -msgid "Funkwhale is free and gives you control on your music." -msgstr "Funkwhale é gratuÃto e dalle o control sobre a súa música." +msgid "Funkwhale is free and developped by a friendly community of volunteers." +msgstr "Funkwhale é libre e desenvolto por una comunidade amigable de voluntarias." -#: front/src/components/Home.vue:66 -msgctxt "Content/Home/Paragraph" -msgid "Funkwhale takes care of handling your music" -msgstr "Funkwhale ocúpase de xestionar a súa música" +#: front/src/components/About.vue:78 +msgctxt "*/*/*" +msgid "Funkwhale version" +msgstr "Versión de Funkwhale" -#: front/src/components/ShortcutsModal.vue:38 +#: front/src/components/ShortcutsModal.vue:56 msgctxt "Popup/Keyboard shortcuts/Title" msgid "General shortcuts" msgstr "Atallos xerais" @@ -1995,35 +2126,17 @@ msgctxt "Content/Admin/Button.Label/Verb" msgid "Get a new invitation" msgstr "Obter un novo convite" -#: front/src/components/Home.vue:13 -msgctxt "Content/Home/Button.Label/Verb" -msgid "Get me to the library" -msgstr "Lévame a biblioteca" - -#: front/src/components/Home.vue:70 -msgctxt "Content/Home/List item/Verb" -msgid "" -"Get quality metadata about your music thanks to <a href=\"%{ url }\" " -"target=\"_blank\">MusicBrainz</a>" -msgstr "" -"Obteña metadatos de calidade sobre a súa música grazas a <a href=\"%{ url " -"}\" target=\"_blank\">MusicBrainz</a>" - #: front/src/views/content/Home.vue:12 src/views/content/Home.vue:19 msgctxt "Content/Library/Button.Label/Verb" msgid "Get started" msgstr "Comezando" -#: front/src/components/Footer.vue:37 +#: front/src/components/Footer.vue:45 +#: src/components/library/ImportStatusModal.vue:45 msgctxt "Footer/*/Link" msgid "Getting help" msgstr "Obter axuda" -#: front/src/components/library/ImportStatusModal.vue:45 -msgctxt "Popup/Import/Table.Label/Noun" -msgid "Getting help" -msgstr "Obter axuda" - #: front/src/components/common/ActionTable.vue:35 #: front/src/components/common/ActionTable.vue:56 msgctxt "Content/*/Button.Label/Short, Verb" @@ -2035,11 +2148,21 @@ msgctxt "Content/*/Button.Label/Verb" msgid "Go to home page" msgstr "Ir ao inicio" +#: front/src/views/Notifications.vue:27 src/views/Notifications.vue:61 +msgctxt "Content/Notifications/Button.Label" +msgid "Got it!" +msgstr "Listo!" + #: front/src/components/auth/Settings.vue:128 msgctxt "Content/Settings/Title" msgid "Hidden artists" msgstr "Buscando artistas" +#: front/src/components/About.vue:155 +msgctxt "*/*/*/Verb" +msgid "Hide" +msgstr "Ocultar" + #: front/src/components/manage/moderation/InstancePolicyForm.vue:114 msgctxt "Content/Moderation/Help text" msgid "Hide account or domain content, except from followers." @@ -2050,52 +2173,41 @@ msgctxt "Popup/*/Button.Label" msgid "Hide content" msgstr "Engadir contido" -#: front/src/components/audio/PlayButton.vue:26 +#: front/src/components/audio/PlayButton.vue:31 msgctxt "*/Queue/Dropdown/Button/Label/Short" msgid "Hide content from this artist" -msgstr "" +msgstr "Ocultar contido de este artista" -#: front/src/components/audio/Player.vue:643 +#: front/src/components/audio/Player.vue:669 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Hide content from this artist…" -msgstr "" +msgstr "Ocultar contido de este artista…" #: front/src/components/library/Home.vue:65 msgctxt "Head/Home/Title" msgid "Home" msgstr "Inicio" -#: front/src/components/instance/Stats.vue:36 -msgctxt "Content/About/Paragraph/Unit" -msgid "Hours of music" -msgstr "Horas de música" - #: front/src/components/auth/SubsonicTokenForm.vue:10 msgctxt "Content/Settings/Paragraph" -msgid "" -"However, accessing Funkwhale from those clients require a separate password " -"you can set below." -msgstr "" -"Porén, o acceso a Funkwhale desde estos outros clientes precisa un " -"contrasinal separado que pode establecer aquà abaixo." +msgid "However, accessing Funkwhale from those clients require a separate password you can set below." +msgstr "Porén, o acceso a Funkwhale desde estos outros clientes precisa un contrasinal separado que pode establecer aquà abaixo." #: front/src/views/auth/PasswordResetConfirm.vue:24 msgctxt "Content/Signup/Paragraph" -msgid "" -"If the email address provided in the previous step is valid and binded to a " -"user account, you should receive an email with reset instructions in the " -"next couple of minutes." -msgstr "" -"Si o enderezo de correo proporcionado no paso anterior é válido e ligado a " -"unha conta de usuaria, deberÃa recibir un correo coas instrucións de " -"restablecemento nun par de minutos." +msgid "If the email address provided in the previous step is valid and linked to a user account, you should receive an email with reset instructions in the next couple of minutes." +msgstr "Se o enderezo de correo proporcionado no paso anterior é válido e ligado a unha conta de usuaria, deberÃa recibir un correo coas instrucións de restablecemento nun par de minutos." #: front/src/components/auth/Settings.vue:205 msgctxt "Content/Applications/Paragraph" -msgid "" -"If you authorize third-party applications to access your data, those " -"applications will be listed here." -msgstr "" +msgid "If you authorize third-party applications to access your data, those applications will be listed here." +msgstr "Se autoriza o acceso aos seus datos por aplicacións de terceiros, estas aplicacións aparecerán aquÃ." + +#: front/src/components/mixins/Translations.vue:46 +#: front/src/components/mixins/Translations.vue:47 +msgctxt "Content/Moderation/Dropdown" +msgid "Illegal content" +msgstr "Contido ilegal" #: front/src/components/library/ImportStatusModal.vue:3 msgctxt "Popup/Import/Title" @@ -2108,14 +2220,10 @@ msgid "Import reference" msgstr "Importar referencia" #: front/src/components/manage/library/UploadsTable.vue:20 -#: front/src/views/content/libraries/FilesTable.vue:11 -#: front/src/views/content/libraries/FilesTable.vue:59 -msgctxt "Content/Library/*/Noun" -msgid "Import status" -msgstr "Estado da importación" - #: front/src/components/manage/library/UploadsTable.vue:64 #: front/src/views/admin/library/UploadDetail.vue:131 +#: front/src/views/content/libraries/FilesTable.vue:11 +#: front/src/views/content/libraries/FilesTable.vue:59 msgctxt "Content/*/*/Noun" msgid "Import status" msgstr "Estado da importación" @@ -2129,7 +2237,7 @@ msgstr "Importado" #: front/src/components/federation/FetchButton.vue:47 msgctxt "*/*/Error" msgid "Impossible to connect to the remote server" -msgstr "" +msgstr "Non se puido conectar ao servidor remoto" #: front/src/components/moderation/FilterModal.vue:26 msgctxt "Popup/Moderation/List item" @@ -2139,7 +2247,7 @@ msgstr "Recentemente engadida" #: front/src/components/moderation/FilterModal.vue:27 msgctxt "Popup/Moderation/List item" msgid "In artists and album listings" -msgstr "" +msgstr "En listaxes de artistas e álbumes" #: front/src/components/favorites/TrackFavoriteIcon.vue:3 msgctxt "Content/Track/Button.Message" @@ -2149,25 +2257,24 @@ msgstr "Nas favoritas" #: front/src/components/moderation/FilterModal.vue:25 msgctxt "Popup/Moderation/List item" msgid "In other users favorites and listening history" -msgstr "" +msgstr "En favoritos e historial de escoita de outros usuarios" #: front/src/components/moderation/FilterModal.vue:28 msgctxt "Popup/Moderation/List item" msgid "In radio suggestions" -msgstr "" +msgstr "Nas suxestións de radios" -#: front/src/components/manage/users/UsersTable.vue:54 +#: front/src/components/manage/users/UsersTable.vue:55 msgctxt "Content/Admin/Table" msgid "Inactive" msgstr "Non activo" -#: front/src/components/ShortcutsModal.vue:71 +#: front/src/components/ShortcutsModal.vue:124 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Increase volume" msgstr "Aumentar volume" #: front/src/components/playlists/Editor.vue:41 -#, fuzzy msgctxt "Content/Playlist/Button.Label/Verb" msgid "Insert from queue (%{ count } track)" msgid_plural "Insert from queue (%{ count } tracks)" @@ -2180,7 +2287,7 @@ msgctxt "Content/Settings/Dropdown/Short" msgid "Instance" msgstr "Datos da instancia" -#: front/src/views/admin/moderation/DomainsDetail.vue:71 +#: front/src/views/admin/moderation/DomainsDetail.vue:99 msgctxt "Content/Moderation/Title" msgid "Instance data" msgstr "Datos da instancia" @@ -2205,21 +2312,25 @@ msgctxt "Popup/Instance/Input.Label/Noun" msgid "Instance URL" msgstr "Datos da instancia" +#: front/src/components/manage/moderation/ReportCard.vue:92 +#: front/src/components/manage/moderation/ReportCard.vue:203 +msgctxt "Content/*/*/Noun" +msgid "Internal notes" +msgstr "Notas internas" + #: front/src/components/library/FileUpload.vue:268 msgctxt "Content/Library/Help text" -msgid "" -"Invalid file type, ensure you are uploading an audio file. Supported file " -"extensions are %{ extensions }" -msgstr "" -"Tipo de ficheiro non válido, asegúrese de que sube un ficheiro de audio. " -"Extensións de ficheiros soportadas %{ extensions }" +msgid "Invalid file type, ensure you are uploading an audio file. Supported file extensions are %{ extensions }" +msgstr "Tipo de ficheiro non válido, asegúrese de que sube un ficheiro de audio. Extensións de ficheiros soportadas %{ extensions }" #: front/src/components/library/ImportStatusModal.vue:139 +#: front/src/components/mixins/Translations.vue:45 +#: front/src/components/mixins/Translations.vue:46 msgctxt "Popup/Import/Error.Label" msgid "Invalid metadata" -msgstr "" +msgstr "Metadatos non válidos" -#: front/src/components/auth/Signup.vue:44 +#: front/src/components/auth/SignupForm.vue:40 #: front/src/components/manage/users/InvitationForm.vue:11 msgctxt "Content/*/Input.Label" msgid "Invitation code" @@ -2231,7 +2342,13 @@ msgctxt "*/Admin/*/Noun" msgid "Invitations" msgstr "Convites" -#: front/src/components/Footer.vue:41 +#: front/src/components/manage/moderation/DomainsTable.vue:9 +#: front/src/views/admin/moderation/DomainsDetail.vue:106 +msgctxt "Content/Moderation/*/Adjective" +msgid "Is present on allow-list" +msgstr "Está presente na lista-permitidos" + +#: front/src/components/Footer.vue:49 msgctxt "Footer/*/List item.Link" msgid "Issue tracker" msgstr "Seguimento de problemas" @@ -2239,19 +2356,20 @@ msgstr "Seguimento de problemas" #: front/src/components/SetInstanceModal.vue:5 msgctxt "Popup/Instance/Error message.Title" msgid "It is not possible to connect to the given URL" -msgstr "" +msgstr "Non se puido conectar ao URL dado" -#: front/src/components/Home.vue:50 -msgctxt "Content/Home/List item/Verb" -msgid "Keep a track of your favorite songs" -msgstr "Faga seguimento das súas cancións favoritas" +#: front/src/components/mixins/Translations.vue:65 +#: front/src/components/mixins/Translations.vue:66 +msgctxt "*/*/*/Noun" +msgid "Items" +msgstr "Elementos" #: front/src/components/Footer.vue:33 src/components/ShortcutsModal.vue:3 msgctxt "*/*/*/Noun" msgid "Keyboard shortcuts" msgstr "Atallos de teclado" -#: front/src/views/admin/moderation/DomainsDetail.vue:161 +#: front/src/views/admin/moderation/DomainsDetail.vue:198 msgctxt "Content/Moderation/Table.Label.Link" msgid "Known accounts" msgstr "Contas coñecidas" @@ -2262,15 +2380,15 @@ msgid "Known libraries" msgstr "Bibliotecas coñecidas" #: front/src/components/manage/users/UsersTable.vue:41 -#: front/src/components/mixins/Translations.vue:58 -#: front/src/views/admin/moderation/AccountsDetail.vue:205 -#: front/src/components/mixins/Translations.vue:59 +#: front/src/components/mixins/Translations.vue:70 +#: front/src/views/admin/moderation/AccountsDetail.vue:206 +#: front/src/components/mixins/Translations.vue:71 msgctxt "Content/Profile/Table.Label/Short, Noun (Value is a date)" msgid "Last activity" msgstr "Última actividade" -#: front/src/views/admin/moderation/AccountsDetail.vue:188 -#: front/src/views/admin/moderation/DomainsDetail.vue:78 +#: front/src/views/admin/moderation/AccountsDetail.vue:189 +#: front/src/views/admin/moderation/DomainsDetail.vue:115 msgctxt "Content/*/Table.Label" msgid "Last checked" msgstr "Última comprobación" @@ -2285,13 +2403,13 @@ msgctxt "Content/Moderation/Table.Label/Noun" msgid "Last seen" msgstr "Última vista" -#: front/src/components/mixins/Translations.vue:47 -#: front/src/components/mixins/Translations.vue:48 +#: front/src/components/mixins/Translations.vue:57 +#: front/src/components/mixins/Translations.vue:58 msgctxt "Content/Moderation/Dropdown/Noun" msgid "Last seen date" msgstr "Data da última vista" -#: front/src/views/content/remote/Card.vue:60 +#: front/src/views/content/remote/Card.vue:73 msgctxt "Content/Library/Card.List item/Noun" msgid "Last update:" msgstr "Última actualización:" @@ -2301,60 +2419,59 @@ msgctxt "Modal/*/Button.Label/Short, Verb" msgid "Launch" msgstr "Lanzar" -#: front/src/components/Home.vue:10 -msgctxt "Content/Home/Button.Label/Verb" -msgid "Learn more about this instance" -msgstr "Coñeza máis sobre esta instancia" +#: front/src/components/Home.vue:35 +msgctxt "Content/Home/Link" +msgid "Learn more" +msgstr "Saber máis" #: front/src/components/manage/users/InvitationForm.vue:58 msgctxt "Content/Admin/Input.Placeholder" msgid "Leave empty for a random code" msgstr "Deixar baldeiro para un código aleatorio" -#: front/src/components/audio/EmbedWizard.vue:7 +#: front/src/components/audio/EmbedWizard.vue:17 msgctxt "Popup/Embed/Paragraph" msgid "Leave empty for a responsive widget" msgstr "Deixar baldeiro para un trebello interactivo" -#: front/src/views/admin/library/AlbumDetail.vue:232 -#: front/src/views/admin/library/ArtistDetail.vue:221 -#: front/src/views/admin/library/TrackDetail.vue:284 -#: front/src/views/admin/moderation/AccountsDetail.vue:327 -#: front/src/views/admin/moderation/DomainsDetail.vue:234 -#: front/src/views/content/Base.vue:5 +#: front/src/components/mixins/Translations.vue:64 +#: front/src/components/mixins/Translations.vue:65 msgctxt "*/*/*/Noun" -msgid "Libraries" -msgstr "Bibliotecas" +msgid "Length" +msgstr "Lonxitude" +#: front/src/views/admin/library/AlbumDetail.vue:248 +#: front/src/views/admin/library/ArtistDetail.vue:236 #: front/src/views/admin/library/Base.vue:17 #: front/src/views/admin/library/LibrariesList.vue:24 -msgctxt "*/*/*" +#: front/src/views/admin/library/TrackDetail.vue:300 +#: front/src/views/admin/moderation/AccountsDetail.vue:339 +#: front/src/views/admin/moderation/DomainsDetail.vue:271 +#: front/src/views/content/Base.vue:5 +msgctxt "*/*/*/Noun" msgid "Libraries" msgstr "Bibliotecas" -#: front/src/components/mixins/Translations.vue:72 -#: front/src/components/mixins/Translations.vue:73 +#: front/src/components/mixins/Translations.vue:84 +#: front/src/components/mixins/Translations.vue:85 msgctxt "Content/OAuth Scopes/Label" msgid "Libraries and uploads" msgstr "Biblioteca actualizada" #: front/src/views/content/libraries/Form.vue:2 msgctxt "Content/Library/Paragraph" -msgid "" -"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." -msgstr "" -"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." +msgid "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." +msgstr "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." -#: front/src/components/Sidebar.vue:85 src/components/instance/Stats.vue:30 +#: front/src/components/Sidebar.vue:85 #: front/src/components/manage/library/UploadsTable.vue:60 -#: front/src/components/manage/users/UsersTable.vue:173 +#: front/src/components/manage/users/UsersTable.vue:174 +#: front/src/components/mixins/Report.vue:77 #: front/src/views/admin/library/UploadDetail.vue:144 -#: front/src/views/admin/moderation/AccountsDetail.vue:498 -msgctxt "*/*/*" +#: front/src/views/admin/moderation/AccountsDetail.vue:518 src/entities.js:132 +#: front/src/components/mixins/Report.vue:78 +#, fuzzy +msgctxt "*/*/*/Noun" msgid "Library" msgstr "Biblioteca" @@ -2385,23 +2502,39 @@ msgstr "Biblioteca actualizada" #: front/src/components/library/TrackDetail.vue:19 #: front/src/components/manage/library/TracksTable.vue:43 -#: front/src/views/admin/library/TrackDetail.vue:159 src/edits.js:61 +#: front/src/views/admin/library/TrackDetail.vue:165 src/edits.js:84 +#: front/src/entities.js:115 msgctxt "Content/*/*/Noun" msgid "License" msgstr "Licenza" -#: front/src/views/admin/library/AlbumDetail.vue:157 -#: front/src/views/admin/library/ArtistDetail.vue:146 -#: front/src/views/admin/library/TrackDetail.vue:209 -msgctxt "*/*/*/Noun" -msgid "Listenings" -msgstr "" +#: front/src/components/Footer.vue:90 +msgctxt "Footer/Settings/Dropdown.Label/Theme name" +msgid "Light" +msgstr "Claro" -#: front/src/components/mixins/Translations.vue:80 -#: front/src/components/mixins/Translations.vue:81 -msgctxt "Content/OAuth Scopes/Label" +#: front/src/views/admin/library/AlbumDetail.vue:188 +#: front/src/views/admin/library/ArtistDetail.vue:176 +#: front/src/views/admin/library/LibraryDetail.vue:179 +#: front/src/views/admin/library/TrackDetail.vue:240 +#: front/src/views/admin/moderation/AccountsDetail.vue:269 +msgctxt "Content/Moderation/Table.Label/Noun" +msgid "Linked reports" +msgstr "Informes ligados" + +#: front/src/components/Home.vue:135 +msgctxt "Content/Home/Link" +msgid "Listen to public albums and playlists shared on this pod" +msgstr "Escoitar álbumes públicos e listas compartidas neste servidor" + +#: front/src/components/mixins/Translations.vue:92 +#: front/src/views/admin/library/AlbumDetail.vue:163 +#: front/src/views/admin/library/ArtistDetail.vue:151 +#: front/src/views/admin/library/TrackDetail.vue:215 +#: front/src/components/mixins/Translations.vue:93 +msgctxt "*/*/*/Noun" msgid "Listenings" -msgstr "" +msgstr "Escoitas" #: front/src/components/audio/track/Table.vue:25 #: front/src/components/library/ArtistDetail.vue:28 @@ -2425,7 +2558,7 @@ msgctxt "Content/Library/Paragraph" msgid "Loading library data…" msgstr "Cargando datos da biblioteca…" -#: front/src/views/Notifications.vue:19 +#: front/src/views/Notifications.vue:84 msgctxt "Content/Notifications/Paragraph" msgid "Loading notifications…" msgstr "Cargando notificacións…" @@ -2450,6 +2583,7 @@ msgstr "Cargando as favoritas…" #: front/src/components/manage/library/LibrariesTable.vue:75 #: front/src/components/manage/library/TracksTable.vue:71 #: front/src/components/manage/library/UploadsTable.vue:99 +#: front/src/components/manage/moderation/ReportCard.vue:173 #: front/src/views/admin/library/AlbumDetail.vue:19 #: front/src/views/admin/library/ArtistDetail.vue:18 #: front/src/views/admin/library/LibraryDetail.vue:18 @@ -2457,7 +2591,7 @@ msgstr "Cargando as favoritas…" #: front/src/views/admin/library/UploadDetail.vue:19 msgctxt "Content/Moderation/*/Short, Noun" msgid "Local" -msgstr "" +msgstr "Local" #: front/src/components/manage/moderation/AccountsTable.vue:59 #: front/src/views/admin/moderation/AccountsDetail.vue:18 @@ -2465,12 +2599,12 @@ msgctxt "Content/Moderation/*/Short, Noun" msgid "Local account" msgstr "Conta local" -#: front/src/components/auth/Login.vue:84 +#: front/src/components/Home.vue:96 src/views/auth/Login.vue:29 msgctxt "Head/Login/Title" msgid "Log In" msgstr "Conectar" -#: front/src/components/auth/Login.vue:4 +#: front/src/views/auth/Login.vue:4 msgctxt "Content/Login/Title/Verb" msgid "Log in to your Funkwhale account" msgstr "Conecte coa súa conta Funkwhale" @@ -2485,7 +2619,7 @@ msgctxt "Sidebar/Profile/List item.Link" msgid "Logged in as %{ username }" msgstr "Conectada como %{ username }" -#: front/src/components/Sidebar.vue:54 src/components/auth/Login.vue:42 +#: front/src/components/Sidebar.vue:54 src/components/auth/LoginForm.vue:41 msgctxt "*/Login/*/Verb" msgid "Login" msgstr "Conectar" @@ -2505,34 +2639,39 @@ msgctxt "Content/Library/Paragraph" msgid "Looks like you don't have a library, it's time to create one." msgstr "Semella que non ten unha biblioteca, é momento de crear unha." -#: front/src/components/audio/Player.vue:632 -#: src/components/audio/Player.vue:633 +#: front/src/components/audio/Player.vue:658 +#: src/components/audio/Player.vue:659 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Looping disabled. Click to switch to single-track looping." msgstr "Bucle desactivado. Pulse para cambiar ao bucle de unha soa canción." -#: front/src/components/audio/Player.vue:635 -#: src/components/audio/Player.vue:636 +#: front/src/components/audio/Player.vue:661 +#: src/components/audio/Player.vue:662 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Looping on a single track. Click to switch to whole queue looping." msgstr "Bucle de unha canción. Pulse para cambiar a bucle de toda a cola." -#: front/src/components/audio/Player.vue:638 -#: src/components/audio/Player.vue:639 +#: front/src/components/audio/Player.vue:664 +#: src/components/audio/Player.vue:665 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Looping on whole queue. Click to disable looping." msgstr "Bucle de toda a cola. Pulse para desactivar o bucle." -#: front/src/components/Sidebar.vue:223 +#: front/src/components/Sidebar.vue:230 msgctxt "Sidebar/*/Hidden text" msgid "Main menu" msgstr "Menú principal" -#: front/src/views/admin/library/Base.vue:31 +#: front/src/views/admin/library/Base.vue:34 msgctxt "Head/Admin/Title" msgid "Manage library" msgstr "Xestionar biblioteca" +#: front/src/components/manage/moderation/InstancePolicyModal.vue:8 +msgctxt "Popup/Moderation/Title/Verb" +msgid "Manage moderation rules for %{ obj }" +msgstr "Xestionar as regras de moderación para %{ obj }" + #: front/src/components/playlists/PlaylistModal.vue:3 msgctxt "Popup/Playlist/Title/Verb" msgid "Manage playlists" @@ -2548,7 +2687,7 @@ msgctxt "Content/Playlist/Button.Label/Verb" msgid "Manage your playlists" msgstr "Xestionar as súas listas de reprodución" -#: front/src/views/Notifications.vue:14 +#: front/src/views/Notifications.vue:79 msgctxt "Content/Notifications/Button.Label/Verb" msgid "Mark all as read" msgstr "Marcar todo como lido" @@ -2563,12 +2702,12 @@ msgctxt "Content/Notifications/Button.Tooltip/Verb" msgid "Mark as unread" msgstr "Marcar como non lido" -#: front/src/views/admin/moderation/AccountsDetail.vue:310 +#: front/src/views/admin/moderation/AccountsDetail.vue:321 msgctxt "Content/*/*/Unit" msgid "MB" msgstr "MB" -#: front/src/components/audio/Player.vue:625 +#: front/src/components/audio/Player.vue:651 msgctxt "Sidebar/Player/Hidden text" msgid "Media player" msgstr "Reprodutor" @@ -2578,53 +2717,67 @@ msgctxt "Content/Profile/Paragraph" msgid "Member since %{ date }" msgstr "Rexistrada desde %{ date }" +#: front/src/components/manage/moderation/ReportCard.vue:109 +#: front/src/components/moderation/ReportModal.vue:41 +msgctxt "*/*/Field.Label/Noun" +msgid "Message" +msgstr "Mensaxe" + #: front/src/components/Footer.vue:32 msgctxt "Footer/*/List item.Link" msgid "Mobile and desktop apps" msgstr "Apps de escritorio e móbil" +#: front/src/components/Home.vue:143 +msgctxt "Content/Home/Link" +msgid "Mobile apps" +msgstr "Apps móbiles" + #: front/src/components/Sidebar.vue:96 -#: src/components/manage/users/UsersTable.vue:177 -#: front/src/views/admin/moderation/AccountsDetail.vue:502 -#: front/src/views/admin/moderation/Base.vue:21 +#: src/components/manage/users/UsersTable.vue:178 +#: front/src/views/admin/Settings.vue:85 +#: front/src/views/admin/moderation/AccountsDetail.vue:522 +#: front/src/views/admin/moderation/Base.vue:43 msgctxt "*/Moderation/*" msgid "Moderation" msgstr "Moderación" #: front/src/views/admin/moderation/AccountsDetail.vue:78 -#: front/src/views/admin/moderation/DomainsDetail.vue:42 +#: front/src/views/admin/moderation/DomainsDetail.vue:70 msgctxt "Content/Moderation/Card.Paragraph" -msgid "" -"Moderation policies help you control how your instance interact with a given" -" domain or account." -msgstr "" -"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." +msgid "Moderation policies help you control how your instance interact with a given domain or account." +msgstr "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." + +#: front/src/components/manage/moderation/InstancePolicyModal.vue:4 +msgctxt "Content/Moderation/Button.Label" +msgid "Moderation rules…" +msgstr "Regras da moderación…" #: front/src/components/library/EditCard.vue:5 msgctxt "Content/Library/Card/Short" msgid "Modification %{ id }" msgstr "Data de modificación" -#: front/src/components/mixins/Translations.vue:48 -#: front/src/components/mixins/Translations.vue:49 +#: front/src/components/mixins/Translations.vue:58 +#: front/src/components/mixins/Translations.vue:59 msgctxt "Content/Playlist/Dropdown/Noun" msgid "Modification date" msgstr "Data de modificación" -#: front/src/components/library/AlbumBase.vue:42 -#: front/src/components/library/ArtistBase.vue:53 -#: front/src/components/library/TrackBase.vue:61 +#: front/src/components/audio/PlayButton.vue:100 +#: front/src/components/library/AlbumBase.vue:43 +#: front/src/components/library/ArtistBase.vue:54 +#: front/src/components/library/TrackBase.vue:59 msgctxt "*/*/Button.Label/Noun" msgid "More…" -msgstr "" +msgstr "Máis…" #: front/src/components/Sidebar.vue:63 src/views/admin/Settings.vue:82 msgctxt "*/*/*/Noun" msgid "Music" msgstr "Música" -#: front/src/components/audio/Player.vue:631 +#: front/src/components/audio/Player.vue:657 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Mute" msgstr "Acalar" @@ -2671,8 +2824,8 @@ msgctxt "Content/Library/Title" msgid "My libraries" msgstr "As miñas Bibliotecas" -#: front/src/components/audio/track/Row.vue:40 -#: src/components/library/EditCard.vue:60 +#: front/src/components/About.vue:105 src/components/audio/track/Row.vue:40 +#: front/src/components/library/EditCard.vue:60 #: front/src/components/library/EditForm.vue:70 #: front/src/components/library/TrackDetail.vue:34 #: front/src/components/library/TrackDetail.vue:43 @@ -2682,54 +2835,56 @@ msgstr "As miñas Bibliotecas" #: front/src/components/manage/library/TracksTable.vue:76 #: front/src/components/manage/library/UploadsTable.vue:121 #: front/src/components/manage/library/UploadsTable.vue:128 -#: front/src/components/manage/users/UsersTable.vue:61 +#: front/src/components/manage/moderation/ReportCard.vue:78 +#: front/src/components/manage/moderation/ReportCard.vue:87 +#: front/src/components/manage/moderation/ReportCard.vue:193 +#: front/src/components/manage/users/UsersTable.vue:62 #: front/src/views/admin/library/UploadDetail.vue:179 #: front/src/views/admin/library/UploadDetail.vue:214 #: front/src/views/admin/library/UploadDetail.vue:233 #: front/src/views/admin/library/UploadDetail.vue:244 #: front/src/views/admin/library/UploadDetail.vue:257 -#: front/src/views/admin/moderation/AccountsDetail.vue:192 -#: front/src/views/admin/moderation/DomainsDetail.vue:82 +#: front/src/views/admin/moderation/AccountsDetail.vue:193 +#: front/src/views/admin/moderation/DomainsDetail.vue:119 #: front/src/views/content/libraries/FilesTable.vue:95 #: front/src/views/content/libraries/FilesTable.vue:101 msgctxt "*/*/*" msgid "N/A" msgstr "N/A" -#: front/src/components/manage/library/LibrariesTable.vue:48 -#: front/src/components/manage/library/UploadsTable.vue:59 -msgctxt "*/*/*" -msgid "Name" -msgstr "Nome" - #: front/src/components/auth/ApplicationForm.vue:9 -msgctxt "Content/Applications/Input.Label/Noun" -msgid "Name" -msgstr "Nome" - #: front/src/components/auth/Settings.vue:133 #: front/src/components/manage/library/ArtistsTable.vue:39 +#: front/src/components/manage/library/LibrariesTable.vue:48 +#: front/src/components/manage/library/TagsTable.vue:41 +#: front/src/components/manage/library/UploadsTable.vue:59 #: front/src/components/manage/moderation/AccountsTable.vue:39 -#: front/src/components/manage/moderation/DomainsTable.vue:38 -#: front/src/components/mixins/Translations.vue:53 +#: front/src/components/manage/moderation/DomainsTable.vue:46 +#: front/src/components/mixins/Translations.vue:63 #: front/src/components/playlists/PlaylistModal.vue:45 -#: front/src/views/admin/library/ArtistDetail.vue:98 +#: front/src/views/admin/library/ArtistDetail.vue:103 #: front/src/views/admin/library/LibraryDetail.vue:85 +#: front/src/views/admin/library/TagDetail.vue:68 #: front/src/views/admin/library/UploadDetail.vue:92 -#: front/src/views/admin/moderation/DomainsDetail.vue:97 -#: front/src/views/content/libraries/Form.vue:10 src/edits.js:10 -#: front/src/components/mixins/Translations.vue:54 +#: front/src/views/admin/moderation/DomainsDetail.vue:134 +#: front/src/views/content/libraries/Form.vue:10 src/edits.js:17 +#: front/src/components/mixins/Translations.vue:64 msgctxt "*/*/*/Noun" msgid "Name" msgstr "Nome" +#: front/src/views/Notifications.vue:24 src/views/Notifications.vue:58 +msgctxt "*/*/*" +msgid "Never" +msgstr "Nunca" + #: front/src/components/auth/Settings.vue:88 #: front/src/views/auth/PasswordResetConfirm.vue:14 msgctxt "Content/Settings/Input.Label" msgid "New password" msgstr "Novo contrasinal" -#: front/src/components/Sidebar.vue:173 +#: front/src/components/Sidebar.vue:177 msgctxt "Sidebar/Player/Paragraph" msgid "New tracks will be appended here automatically." msgstr "As novas cancións engadiranse aquà automáticamente." @@ -2737,23 +2892,20 @@ msgstr "As novas cancións engadiranse aquà automáticamente." #: front/src/components/library/EditCard.vue:47 msgctxt "Content/Library/Card.Table.Header/Short" msgid "New value" -msgstr "" +msgstr "Novo valor" -#: front/src/components/audio/Player.vue:629 +#: front/src/components/audio/Player.vue:655 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Next track" msgstr "Seguinte canción" -#: front/src/components/Sidebar.vue:130 +#: front/src/components/Sidebar.vue:134 +#: front/src/components/manage/moderation/DomainsTable.vue:13 +#: front/src/views/admin/moderation/DomainsDetail.vue:110 msgctxt "*/*/*" msgid "No" msgstr "Non" -#: front/src/components/Home.vue:95 -msgctxt "Content/Home/List item" -msgid "No add-ons, no plugins : you only need a web library" -msgstr "Sin engadidos nin complementos: só precisa unha biblioteca na web" - #: front/src/components/audio/Search.vue:25 msgctxt "Content/Search/Paragraph" msgid "No album matched your query" @@ -2767,7 +2919,12 @@ msgstr "Ningún artista coincide coa busca" #: front/src/components/library/TrackDetail.vue:14 msgctxt "Content/Track/Table.Paragraph" msgid "No copyright information available for this track" -msgstr "Non hai letras dispoñibles para esta canción." +msgstr "Non hai información acerca dos dereitos sobre esta canción" + +#: front/src/components/About.vue:25 src/components/Home.vue:25 +msgctxt "Content/Home/Paragraph" +msgid "No description available." +msgstr "Non hai descrición." #: front/src/components/library/TrackDetail.vue:25 msgctxt "Content/Track/Table.Paragraph" @@ -2779,7 +2936,7 @@ msgctxt "Content/Federation/Paragraph" msgid "No matching library." msgstr "Sen biblioteca coincidente." -#: front/src/views/Notifications.vue:28 +#: front/src/views/Notifications.vue:93 msgctxt "Content/Notifications/Paragraph" msgid "No notification to show." msgstr "Sen notificación para mostrar." @@ -2787,7 +2944,17 @@ msgstr "Sen notificación para mostrar." #: front/src/components/common/EmptyState.vue:7 msgctxt "Content/*/Paragraph" msgid "No results were found." -msgstr "" +msgstr "Non se atoparon resultados." + +#: front/src/components/About.vue:32 +msgctxt "Content/Home/Paragraph" +msgid "No rules available." +msgstr "Sen regras dispoñibles." + +#: front/src/components/About.vue:39 +msgctxt "Content/Home/Paragraph" +msgid "No terms available." +msgstr "Sen termos dispoñibles." #: front/src/components/mixins/Translations.vue:10 #: front/src/components/mixins/Translations.vue:11 @@ -2805,18 +2972,21 @@ msgctxt "Content/Admin/Table" msgid "Not used" msgstr "Non utilizado" -#: front/src/components/mixins/Translations.vue:100 -#: front/src/components/mixins/Translations.vue:101 -msgctxt "Content/OAuth Scopes/Label" -msgid "Notifications" -msgstr "Notificacións" - -#: front/src/components/Sidebar.vue:46 src/views/Notifications.vue:76 +#: front/src/components/Sidebar.vue:46 +#: src/components/mixins/Translations.vue:112 +#: front/src/views/Notifications.vue:151 +#: src/components/mixins/Translations.vue:113 msgctxt "*/Notifications/*" msgid "Notifications" msgstr "Notificacións" -#: front/src/components/Footer.vue:47 +#: front/src/components/mixins/Translations.vue:47 +#: front/src/components/mixins/Translations.vue:48 +msgctxt "Content/Moderation/Dropdown" +msgid "Offensive content" +msgstr "Contido ofensivo" + +#: front/src/components/Footer.vue:55 msgctxt "Footer/*/List item.Link" msgid "Official website" msgstr "Sitio web oficial" @@ -2829,7 +2999,12 @@ msgstr "Contrasinal antigo" #: front/src/components/library/EditCard.vue:46 msgctxt "Content/Library/Card.Table.Header/Short" msgid "Old value" -msgstr "" +msgstr "Valor anterior" + +#: front/src/components/About.vue:90 +msgctxt "*/*/*/State of registrations" +msgid "Open" +msgstr "Abrir" #: front/src/components/manage/users/InvitationsTable.vue:20 msgctxt "Content/Admin/Dropdown/Adjective" @@ -2838,27 +3013,29 @@ msgstr "Abrir" #: front/src/components/library/ImportStatusModal.vue:56 msgctxt "Popup/Import/Table.Label/Value" -msgid "" -"Open a support thread (include the debug information below in your message)" -msgstr "" - -#: front/src/components/library/AlbumBase.vue:73 -#: front/src/components/library/ArtistBase.vue:84 -#: front/src/components/library/TrackBase.vue:92 +msgid "Open a support thread (include the debug information below in your message)" +msgstr "Abrir un fÃo de axuda (incluÃr información de depuración abaixo na súa mensaxe)" + +#: front/src/components/library/AlbumBase.vue:87 +#: front/src/components/library/ArtistBase.vue:99 +#: front/src/components/library/TagDetail.vue:11 +#: front/src/components/library/TrackBase.vue:103 +#: front/src/components/manage/moderation/ReportCard.vue:128 msgctxt "Content/Moderation/Link" msgid "Open in moderation interface" msgstr "Actualizar regra de moderación" -#: front/src/views/admin/library/AlbumDetail.vue:31 -#: front/src/views/admin/library/ArtistDetail.vue:30 -#: front/src/views/admin/library/TrackDetail.vue:30 +#: front/src/views/admin/library/AlbumDetail.vue:37 +#: front/src/views/admin/library/ArtistDetail.vue:35 +#: front/src/views/admin/library/TagDetail.vue:21 +#: front/src/views/admin/library/TrackDetail.vue:36 msgctxt "Content/Moderation/Link/Verb" msgid "Open local profile" msgstr "Abrir perfil" -#: front/src/views/admin/library/AlbumDetail.vue:46 -#: front/src/views/admin/library/ArtistDetail.vue:45 -#: front/src/views/admin/library/TrackDetail.vue:45 +#: front/src/views/admin/library/AlbumDetail.vue:52 +#: front/src/views/admin/library/ArtistDetail.vue:50 +#: front/src/views/admin/library/TrackDetail.vue:51 msgctxt "Content/Moderation/Link/Verb" msgid "Open on MusicBrainz" msgstr "Ver en MusicBrainz" @@ -2868,10 +3045,10 @@ msgctxt "Content/Moderation/Link/Verb" msgid "Open profile" msgstr "Abrir perfil" -#: front/src/views/admin/library/AlbumDetail.vue:54 -#: front/src/views/admin/library/ArtistDetail.vue:53 +#: front/src/views/admin/library/AlbumDetail.vue:60 +#: front/src/views/admin/library/ArtistDetail.vue:58 #: front/src/views/admin/library/LibraryDetail.vue:49 -#: front/src/views/admin/library/TrackDetail.vue:53 +#: front/src/views/admin/library/TrackDetail.vue:59 #: front/src/views/admin/library/UploadDetail.vue:50 #: front/src/views/admin/moderation/AccountsDetail.vue:52 msgctxt "Content/Moderation/Link/Verb" @@ -2892,6 +3069,7 @@ msgstr "Ou personalice a súa regra" #: src/components/library/Radios.vue:41 #: front/src/components/manage/library/EditsCardList.vue:37 #: front/src/components/manage/users/UsersTable.vue:17 +#: front/src/views/admin/moderation/ReportsList.vue:42 #: front/src/views/playlists/List.vue:25 msgctxt "Content/Search/Dropdown.Label/Noun" msgid "Order" @@ -2899,40 +3077,50 @@ msgstr "Ordear" #: front/src/components/favorites/List.vue:24 #: src/components/library/Albums.vue:15 -#: front/src/components/library/Artists.vue:15 +#: front/src/components/library/Artists.vue:19 #: src/components/library/Radios.vue:33 #: front/src/components/manage/library/AlbumsTable.vue:11 #: front/src/components/manage/library/ArtistsTable.vue:11 #: front/src/components/manage/library/EditsCardList.vue:29 #: front/src/components/manage/library/LibrariesTable.vue:20 +#: front/src/components/manage/library/TagsTable.vue:11 #: front/src/components/manage/library/TracksTable.vue:11 #: front/src/components/manage/library/UploadsTable.vue:30 #: front/src/components/manage/moderation/AccountsTable.vue:11 -#: front/src/components/manage/moderation/DomainsTable.vue:9 +#: front/src/components/manage/moderation/DomainsTable.vue:17 #: front/src/components/manage/users/InvitationsTable.vue:9 #: front/src/components/manage/users/UsersTable.vue:9 +#: front/src/views/admin/moderation/ReportsList.vue:34 #: front/src/views/content/libraries/FilesTable.vue:21 #: front/src/views/playlists/List.vue:17 msgctxt "Content/Search/Dropdown.Label/Noun" msgid "Ordering" msgstr "Ordenando" -#: front/src/components/library/Albums.vue:23 -#: src/components/library/Artists.vue:23 +#: front/src/components/library/Albums.vue:27 +#: src/components/library/Artists.vue:27 #: front/src/components/manage/library/AlbumsTable.vue:19 #: front/src/components/manage/library/ArtistsTable.vue:19 #: front/src/components/manage/library/LibrariesTable.vue:28 +#: front/src/components/manage/library/TagsTable.vue:19 #: front/src/components/manage/library/TracksTable.vue:19 #: front/src/components/manage/library/UploadsTable.vue:38 #: front/src/components/manage/moderation/AccountsTable.vue:19 -#: front/src/components/manage/moderation/DomainsTable.vue:17 +#: front/src/components/manage/moderation/DomainsTable.vue:25 #: front/src/views/content/libraries/FilesTable.vue:29 msgctxt "Content/Search/Dropdown.Label/Noun" msgid "Ordering direction" msgstr "Dirección da orde" +#: front/src/components/mixins/Translations.vue:48 +#: front/src/components/mixins/Translations.vue:49 +msgctxt "Content/Moderation/Dropdown" +msgid "Other" +msgstr "Outro" + +#: front/src/components/manage/moderation/ReportCard.vue:143 #: front/src/components/manage/users/InvitationsTable.vue:38 -msgctxt "Content/Admin/Table.Label" +msgctxt "*/*/*" msgid "Owner" msgstr "Dona" @@ -2951,12 +3139,14 @@ msgctxt "Content/*/Hidden text/Noun" msgid "Pagination" msgstr "Paxinación" -#: front/src/components/auth/Login.vue:33 src/components/auth/Signup.vue:40 -msgctxt "Content/*/Input.Label" +#: front/src/components/auth/LoginForm.vue:32 +#: src/components/auth/Settings.vue:291 +#: front/src/components/auth/SignupForm.vue:36 +msgctxt "*/*/*" msgid "Password" msgstr "Contrasinal" -#: front/src/components/auth/SubsonicTokenForm.vue:94 +#: front/src/components/auth/SubsonicTokenForm.vue:100 msgctxt "Content/Settings/Message" msgid "Password updated" msgstr "Contrasinal actualizado" @@ -2966,12 +3156,12 @@ msgctxt "Content/Signup/Card.Title" msgid "Password updated successfully" msgstr "Contrasinal actualizado correctamente" -#: front/src/components/audio/Player.vue:628 +#: front/src/components/audio/Player.vue:654 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Pause track" msgstr "Pausar canción" -#: front/src/components/ShortcutsModal.vue:59 +#: front/src/components/ShortcutsModal.vue:96 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Pause/play the current track" msgstr "Pausar/reproducir pista actual" @@ -3000,7 +3190,7 @@ msgctxt "Content/Library/Label" msgid "Pending files" msgstr "Ficheiros pendentes" -#: front/src/components/Sidebar.vue:225 +#: front/src/components/Sidebar.vue:232 msgctxt "Sidebar/Notifications/Hidden text" msgid "Pending follow requests" msgstr "Peticións de seguimento pendentes" @@ -3011,96 +3201,84 @@ msgctxt "Content/Admin/*/Noun" msgid "Pending review" msgstr "Ficheiros pendentes" -#: front/src/components/Sidebar.vue:226 +#: front/src/components/Sidebar.vue:233 msgctxt "Sidebar/Moderation/Hidden text" msgid "Pending review edits" msgstr "Ficheiros pendentes" +#: front/src/components/auth/Settings.vue:176 #: front/src/components/manage/users/UsersTable.vue:42 #: front/src/views/admin/moderation/AccountsDetail.vue:166 -msgctxt "Content/Admin/Table.Label/Noun" -msgid "Permissions" -msgstr "Permisos" - -#: front/src/components/auth/Settings.vue:176 msgctxt "Content/*/*/Noun" msgid "Permissions" msgstr "Permisos" #: front/src/components/audio/PlayButton.vue:9 -#: front/src/components/library/TrackBase.vue:26 +#: front/src/components/library/TrackBase.vue:24 msgctxt "*/Queue/Button.Label/Short, Verb" msgid "Play" msgstr "Reproducir" #: front/src/components/audio/album/Card.vue:48 -#: front/src/components/audio/artist/Card.vue:44 -#: front/src/components/library/AlbumBase.vue:20 +#: front/src/components/library/AlbumBase.vue:21 #: front/src/components/library/AlbumDetail.vue:11 #: src/views/playlists/Detail.vue:24 msgctxt "Content/Queue/Button.Label/Short, Verb" msgid "Play all" msgstr "Reproducir todo" -#: front/src/components/library/ArtistBase.vue:31 +#: front/src/components/library/ArtistBase.vue:32 msgctxt "Content/Artist/Button.Label/Verb" msgid "Play all albums" msgstr "Reproducir todos os álbumes" -#: front/src/components/audio/PlayButton.vue:76 +#: front/src/components/audio/PlayButton.vue:92 msgctxt "*/Queue/Dropdown/Button/Title" msgid "Play next" msgstr "Reproducir seguinte" -#: front/src/components/ShortcutsModal.vue:67 +#: front/src/components/ShortcutsModal.vue:120 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Play next track" msgstr "Reproducir canción seguinte" -#: front/src/components/audio/PlayButton.vue:74 +#: front/src/components/audio/PlayButton.vue:90 msgctxt "*/Queue/Dropdown/Button/Title" msgid "Play now" msgstr "Reproducir agora" -#: front/src/components/ShortcutsModal.vue:63 +#: front/src/components/ShortcutsModal.vue:116 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Play previous track" msgstr "Reproducir canción anterior" -#: front/src/components/audio/PlayButton.vue:77 +#: front/src/components/audio/PlayButton.vue:93 msgctxt "*/Queue/Dropdown/Button/Title" msgid "Play similar songs" -msgstr "" +msgstr "Reproducir cancións similares" -#: front/src/components/Sidebar.vue:224 +#: front/src/components/Sidebar.vue:231 msgctxt "Sidebar/Player/Hidden text" msgid "Play this track" msgstr "Reproducir esta canción" -#: front/src/components/audio/Player.vue:627 +#: front/src/components/audio/Player.vue:653 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Play track" msgstr "Reproducir canción" -#: front/src/components/audio/PlayButton.vue:82 -msgctxt "*/Queue/Button/Title" -msgid "Play..." -msgstr "Reproducir..." - -#: front/src/views/playlists/Detail.vue:91 -msgctxt "Head/Playlist/Title" +#: front/src/components/mixins/Report.vue:66 src/views/playlists/Detail.vue:121 +#: front/src/components/mixins/Report.vue:67 +msgctxt "*/*/*" msgid "Playlist" msgstr "Lista de reprodución" #: front/src/views/playlists/Detail.vue:12 -#, fuzzy msgctxt "Content/Playlist/Header.Subtitle" msgid "Playlist containing %{ count } track, by %{ username }" msgid_plural "Playlist containing %{ count } tracks, by %{ username }" -msgstr[0] "" -"Lista de reprodución que contén %{ count } canción, de %{ username }" -msgstr[1] "" -"Lista de reprodución que contén %{ count } cancións, de %{ username }" +msgstr[0] "Lista de reprodución que contén %{ count } canción, de %{ username }" +msgstr[1] "Lista de reprodución que contén %{ count } cancións, de %{ username }" #: front/src/components/playlists/Form.vue:9 msgctxt "Content/Playlist/Message" @@ -3127,33 +3305,30 @@ msgctxt "Content/Playlist/Dropdown.Label" msgid "Playlist visibility" msgstr "Visibilidade da lista de reprodución" -#: front/src/components/mixins/Translations.vue:88 -#: front/src/components/mixins/Translations.vue:89 -msgctxt "Content/OAuth Scopes/Label" -msgid "Playlists" -msgstr "Listas de reprodución" - #: front/src/components/Sidebar.vue:71 src/components/library/Home.vue:16 -#: front/src/components/library/Library.vue:16 src/views/admin/Settings.vue:83 -#: front/src/views/admin/library/AlbumDetail.vue:173 -#: front/src/views/admin/library/ArtistDetail.vue:162 -#: front/src/views/admin/library/TrackDetail.vue:225 +#: front/src/components/library/Library.vue:16 +#: front/src/components/mixins/Translations.vue:100 +#: src/views/admin/Settings.vue:83 +#: front/src/views/admin/library/AlbumDetail.vue:179 +#: front/src/views/admin/library/ArtistDetail.vue:167 +#: front/src/views/admin/library/TrackDetail.vue:231 #: src/views/playlists/List.vue:106 +#: front/src/components/mixins/Translations.vue:101 msgctxt "*/*/*" msgid "Playlists" msgstr "Listas de reprodución" -#: front/src/components/Home.vue:56 -msgctxt "Content/Home/List item" -msgid "Playlists? We got them" -msgstr "Listas de reprodución? Témolas" +#: front/src/components/audio/EmbedWizard.vue:9 +msgctxt "Content/Embed/Message" +msgid "Please contact your admins and ask them to update the corresponding setting." +msgstr "" #: front/src/components/auth/Settings.vue:79 msgctxt "Content/Settings/Error message.List item/Call to action" msgid "Please double-check your password is correct" msgstr "Por favor, comprobe que o seu contrasinal é correcto" -#: front/src/components/auth/Login.vue:9 +#: front/src/components/auth/LoginForm.vue:5 msgctxt "Content/Login/Error message.List item/Call to action" msgid "Please double-check your username/password couple is correct" msgstr "Por favor, comprobe que o par usuaria/contrasinal é correcto" @@ -3163,25 +3338,27 @@ msgctxt "Content/Settings/Paragraph" msgid "PNG, GIF or JPG. At most 2MB. Will be downscaled to 400x400px." msgstr "PNG, GIF ou JPG. 2MB como máximo. Será reducida a 400x400px." -#: front/src/views/admin/library/TrackDetail.vue:137 -msgctxt "*/*/*/Noun" +#: front/src/components/About.vue:72 +msgctxt "Content/About/Header/Name" +msgid "Pod configuration" +msgstr "Configuración do servidor" + +#: front/src/views/admin/library/TrackDetail.vue:143 src/edits.js:70 +msgctxt "*/*/*/Short, Noun" msgid "Position" msgstr "Paxinación" #: front/src/components/manage/moderation/InstancePolicyForm.vue:118 msgctxt "Content/Moderation/Help text" -msgid "" -"Prevent account or domain from triggering notifications, except from " -"followers." -msgstr "" -"Evitar que o dominio ou conta mostre notificacións, excepto das seguidoras." +msgid "Prevent account or domain from triggering notifications, except from followers." +msgstr "Evitar que o dominio ou conta mostre notificacións, excepto das seguidoras." -#: front/src/components/audio/EmbedWizard.vue:33 +#: front/src/components/audio/EmbedWizard.vue:43 msgctxt "Popup/Embed/Title/Noun" msgid "Preview" msgstr "Vista previa" -#: front/src/components/audio/Player.vue:626 +#: front/src/components/audio/Player.vue:652 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Previous track" msgstr "Canción anterior" @@ -3190,9 +3367,9 @@ msgstr "Canción anterior" #: front/src/components/mixins/Translations.vue:16 msgctxt "Content/Settings/Dropdown/Short" msgid "Private" -msgstr "" +msgstr "Privado" -#: front/src/views/content/remote/Card.vue:43 +#: front/src/views/content/remote/Card.vue:56 msgctxt "Content/Library/Card.List item" msgid "Problem during scanning" msgstr "Problema ao escanear" @@ -3213,14 +3390,19 @@ msgctxt "Content/Library/Tab.Title/Short" msgid "Processing" msgstr "Procesando" -#: front/src/components/mixins/Translations.vue:68 -#: front/src/components/mixins/Translations.vue:69 +#: front/src/components/mixins/Translations.vue:80 +#: front/src/components/mixins/Translations.vue:81 msgctxt "Content/OAuth Scopes/Label" msgid "Profile" msgstr "Abrir perfil" +#: front/src/components/auth/SignupForm.vue:5 +msgctxt "Content/Signup/Form/Paragraph" +msgid "Public registrations are not possible on this instance. You will need an invitation code to sign up." +msgstr "O rexistro público non é posible en esta instancia. Precisas un código de convite para rexistrarte." + #: front/src/components/manage/moderation/AccountsTable.vue:188 -#: front/src/components/manage/moderation/DomainsTable.vue:168 +#: front/src/components/manage/moderation/DomainsTable.vue:186 #: front/src/views/content/libraries/Quota.vue:36 #: front/src/views/content/libraries/Quota.vue:39 #: front/src/views/content/libraries/Quota.vue:62 @@ -3251,7 +3433,7 @@ msgctxt "Sidebar/Queue/Tab.Title/Noun" msgid "Queue" msgstr "Cola" -#: front/src/components/audio/Player.vue:322 +#: front/src/components/audio/Player.vue:329 msgctxt "Content/Queue/Message" msgid "Queue shuffled!" msgstr "Cola barallada!" @@ -3283,35 +3465,31 @@ msgstr "Radio actualizada" #: front/src/components/library/Library.vue:13 #: src/components/library/Radios.vue:142 +#: front/src/components/mixins/Translations.vue:104 +#: front/src/components/mixins/Translations.vue:105 msgctxt "*/*/*" msgid "Radios" msgstr "Radios" -#: front/src/components/mixins/Translations.vue:92 -#: front/src/components/mixins/Translations.vue:93 -msgctxt "Content/OAuth Scopes/Label" -msgid "Radios" -msgstr "Radios" - #: front/src/components/auth/ApplicationForm.vue:151 msgctxt "Content/OAuth Scopes/Label/Verb" msgid "Read" -msgstr "" +msgstr "Ler" #: front/src/components/library/ImportStatusModal.vue:51 msgctxt "Popup/Import/Table.Label/Value" msgid "Read our documentation for this error" -msgstr "" +msgstr "Lea a documentación para este fallo" #: front/src/components/auth/Authorize.vue:24 msgctxt "Content/Auth/Label/Noun" msgid "Read-only" -msgstr "" +msgstr "Só-lectura" #: front/src/components/auth/ApplicationForm.vue:152 msgctxt "Content/OAuth Scopes/Help Text" msgid "Read-only access to user data" -msgstr "" +msgstr "Acceso de só-lectura ao datos de usuario" #: front/src/components/manage/moderation/InstancePolicyCard.vue:39 #: front/src/components/manage/moderation/InstancePolicyForm.vue:25 @@ -3319,15 +3497,15 @@ msgctxt "Content/Moderation/*/Noun" msgid "Reason" msgstr "Razón" -#: front/src/views/admin/moderation/AccountsDetail.vue:251 -#: front/src/views/admin/moderation/DomainsDetail.vue:179 +#: front/src/views/admin/moderation/AccountsDetail.vue:252 +#: front/src/views/admin/moderation/DomainsDetail.vue:216 msgctxt "Content/Moderation/Table.Label/Noun" msgid "Received library follows" msgstr "Seguimentos de biblioteca recibidos" -#: front/src/components/manage/moderation/DomainsTable.vue:40 -#: front/src/components/mixins/Translations.vue:62 -#: front/src/components/mixins/Translations.vue:63 +#: front/src/components/manage/moderation/DomainsTable.vue:48 +#: front/src/components/mixins/Translations.vue:74 +#: front/src/components/mixins/Translations.vue:75 msgctxt "Content/Moderation/*/Noun" msgid "Received messages" msgstr "Mensaxes recibidas" @@ -3340,13 +3518,18 @@ msgstr "Recentemente engadida" #: front/src/components/library/EditForm.vue:17 msgctxt "Content/Library/Paragraph" msgid "Recent edits awaiting review" -msgstr "" +msgstr "Edicións recentes agardando revisión" #: front/src/components/library/Home.vue:24 msgctxt "Content/Home/Title" msgid "Recently added" msgstr "Recentemente engadida" +#: front/src/components/Home.vue:167 +msgctxt "Content/Home/Title" +msgid "Recently added albums" +msgstr "Ãlbumes recén engadidos" + #: front/src/components/library/Home.vue:11 msgctxt "Content/Home/Title" msgid "Recently favorited" @@ -3360,7 +3543,7 @@ msgstr "Escoitada recentemente" #: front/src/components/auth/ApplicationForm.vue:13 msgctxt "Content/Applications/Input.Label/Noun" msgid "Redirect URI" -msgstr "" +msgstr "URI de redirección" #: front/src/components/auth/Settings.vue:125 #: src/components/auth/Settings.vue:170 @@ -3375,14 +3558,14 @@ msgctxt "Popup/*/Message.Title" msgid "Refresh error" msgstr "Actualizar" -#: front/src/views/admin/library/AlbumDetail.vue:50 -#: front/src/views/admin/library/ArtistDetail.vue:49 -#: front/src/views/admin/library/TrackDetail.vue:49 +#: front/src/views/admin/library/AlbumDetail.vue:56 +#: front/src/views/admin/library/ArtistDetail.vue:54 +#: front/src/views/admin/library/TrackDetail.vue:55 msgctxt "Content/Moderation/Button/Verb" msgid "Refresh from remote server" -msgstr "" +msgstr "Actualizar desde servidor remoto" -#: front/src/views/admin/moderation/DomainsDetail.vue:127 +#: front/src/views/admin/moderation/DomainsDetail.vue:164 msgctxt "Content/Moderation/Button.Label/Verb" msgid "Refresh node info" msgstr "Actualizar info da instancia" @@ -3394,15 +3577,13 @@ msgstr "Actualizar info da instancia" #: front/src/components/federation/FetchButton.vue:80 msgctxt "Popup/*/Message.Content" -msgid "" -"Refresh request wasn't proceed in time by our server. It will be processed " -"later." -msgstr "" +msgid "Refresh request wasn't proceed in time by our server. It will be processed later." +msgstr "A solicitude de actualización non se realizou a tempo no noso servidor. Procesarase máis tarde." #: front/src/components/federation/FetchButton.vue:16 msgctxt "Popup/*/Message.Title" msgid "Refresh successful" -msgstr "" +msgstr "Actualización correcta" #: front/src/components/common/ActionTable.vue:275 msgctxt "Content/*/Button.Tooltip/Verb" @@ -3412,23 +3593,19 @@ msgstr "Actualizar contido da tabla" #: front/src/components/federation/FetchButton.vue:12 msgctxt "Popup/*/Message.Title" msgid "Refresh was skipped" -msgstr "" +msgstr "Omiteuse a actualización" #: front/src/components/federation/FetchButton.vue:7 msgctxt "Popup/*/Title" msgid "Refreshing object from remote…" -msgstr "" +msgstr "Actualizando obxeto desde remoto…" -#: front/src/components/auth/Signup.vue:9 -msgctxt "Content/Signup/Form/Paragraph" -msgid "" -"Registration are closed on this instance, you will need an invitation code " -"to signup." -msgstr "" -"O rexistro está pechado en esta instancia, necesita un código de convite " -"para rexistrarse." +#: front/src/components/About.vue:86 +msgctxt "*/*/*" +msgid "Registrations" +msgstr "Rexistros" -#: front/src/components/manage/users/UsersTable.vue:71 +#: front/src/components/manage/users/UsersTable.vue:72 msgctxt "Content/Admin/Table, User role" msgid "Regular user" msgstr "usuaria normal" @@ -3453,8 +3630,8 @@ msgid "Rejected" msgstr "Rexeitado" #: front/src/components/manage/library/AlbumsTable.vue:43 -#: front/src/components/mixins/Translations.vue:44 src/edits.js:28 -#: front/src/components/mixins/Translations.vue:45 +#: front/src/components/mixins/Translations.vue:54 src/edits.js:43 +#: front/src/components/mixins/Translations.vue:55 msgctxt "Content/*/*/Noun" msgid "Release date" msgstr "Data da última vista" @@ -3462,7 +3639,12 @@ msgstr "Data da última vista" #: front/src/components/library/FileUpload.vue:63 msgctxt "Content/Library/Paragraph" msgid "Remaining storage space" -msgstr "" +msgstr "Almacenaxe restante" + +#: front/src/views/Notifications.vue:18 src/views/Notifications.vue:52 +msgctxt "Content/Notifications/Label" +msgid "Remind me in:" +msgstr "Lembrarmo en:" #: front/src/views/content/remote/Home.vue:6 msgctxt "Content/Library/Title/Noun" @@ -3471,12 +3653,8 @@ msgstr "Bibliotecas remotas" #: front/src/views/content/remote/Home.vue:7 msgctxt "Content/Library/Paragraph" -msgid "" -"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." -msgstr "" -"As bibliotecas remotas pertences a outras usuarias na rede. Pode acceder a " -"elas se son públicas ou lle outorgan acceso." +msgid "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." +msgstr "As bibliotecas remotas pertences a outras usuarias na rede. Pode acceder a elas se son públicas ou lle outorgan acceso." #: front/src/components/library/radios/Filter.vue:59 msgctxt "Content/Radio/Button.Label/Verb" @@ -3493,6 +3671,12 @@ msgctxt "Content/Moderation/Button.Label" msgid "Remove filter" msgstr "Eliminar avatar" +#: front/src/components/manage/moderation/DomainsTable.vue:198 +#: front/src/views/admin/moderation/DomainsDetail.vue:39 +msgctxt "Content/Moderation/Action/Verb" +msgid "Remove from allow-list" +msgstr "Eliminar da lista-permitir" + #: front/src/components/favorites/TrackFavoriteIcon.vue:26 msgctxt "Content/Track/Icon.Tooltip/Verb" msgid "Remove from favorites" @@ -3500,43 +3684,98 @@ msgstr "Eliminar das favoritas" #: front/src/views/content/libraries/Quota.vue:38 msgctxt "Popup/Library/Paragraph" -msgid "" -"Removes uploaded but yet to be processed tracks completely, adding the " -"corresponding data to your quota." -msgstr "" -"Elimina completamente as cancións subidas pero aÃnda non procesadas, " -"engadindo o espazo correspondente a súa cuota." +msgid "Removes uploaded but yet to be processed tracks completely, adding the corresponding data to your quota." +msgstr "Elimina completamente as cancións subidas pero aÃnda non procesadas, engadindo o espazo correspondente a súa cuota." #: front/src/views/content/libraries/Quota.vue:64 msgctxt "Popup/Library/Paragraph" -msgid "" -"Removes uploaded tracks skipped during the import processes completely, " -"adding the corresponding data to your quota." -msgstr "" -"Elimina as cancións subidas saltadas durante o proceso de importación, " -"engadindo o espazo correspondente a súa cuota." +msgid "Removes uploaded tracks skipped during the import processes completely, adding the corresponding data to your quota." +msgstr "Elimina as cancións subidas saltadas durante o proceso de importación, engadindo o espazo correspondente a súa cuota." #: front/src/views/content/libraries/Quota.vue:90 msgctxt "Popup/Library/Paragraph" -msgid "" -"Removes uploaded tracks that could not be processed by the server " -"completely, adding the corresponding data to your quota." -msgstr "" -"Elimina as cancións subidas que non se procesaron completamente no servidor," -" engadindo o espazo correspondente a súa cuota." +msgid "Removes uploaded tracks that could not be processed by the server completely, adding the corresponding data to your quota." +msgstr "Elimina as cancións subidas que non se procesaron completamente no servidor, engadindo o espazo correspondente a súa cuota." + +#: front/src/components/audio/PlayButton.vue:94 +msgctxt "*/Queue/Dropdown/Button/Title" +msgid "Replace current queue" +msgstr "Cambiar cola actual" + +#: front/src/components/mixins/Report.vue:6 src/components/mixins/Report.vue:7 +msgctxt "*/Moderation/*/Verb" +msgid "Report @%{ username }…" +msgstr "Informar @%{ username }…" + +#: front/src/components/manage/moderation/ReportCard.vue:5 +msgctxt "Content/Moderation/Card/Short" +msgid "Report %{ id }" +msgstr "Informar %{ id }" + +#: front/src/components/moderation/ReportModal.vue:139 +msgctxt "*/Moderation/Message" +msgid "Report successfully submitted, thank you" +msgstr "Informe enviado correctamente, grazas" + +#: front/src/components/mixins/Report.vue:36 +#: src/components/mixins/Report.vue:37 +msgctxt "*/Moderation/*/Verb" +msgid "Report this album…" +msgstr "Informar sobre este álbume…" + +#: front/src/components/mixins/Report.vue:50 +#: src/components/mixins/Report.vue:51 +msgctxt "*/Moderation/*/Verb" +msgid "Report this artist…" +msgstr "Informar sobre este artista…" + +#: front/src/components/mixins/Report.vue:72 +#: src/components/mixins/Report.vue:73 +msgctxt "*/Moderation/*/Verb" +msgid "Report this library…" +msgstr "Informar sobre esta biblioteca…" + +#: front/src/components/mixins/Report.vue:61 +#: src/components/mixins/Report.vue:62 +msgctxt "*/Moderation/*/Verb" +msgid "Report this playlist…" +msgstr "Informar sobre esta lista…" + +#: front/src/components/mixins/Report.vue:23 +#: src/components/mixins/Report.vue:24 +msgctxt "*/Moderation/*/Verb" +msgid "Report this track…" +msgstr "Informar sobre esta canción…" + +#: front/src/components/audio/PlayButton.vue:95 +msgctxt "*/Moderation/*/Button/Label,Verb" +msgid "Report…" +msgstr "Informar…" + +#: front/src/components/manage/moderation/ReportCard.vue:117 +msgctxt "Content/*/*/Short" +msgid "Reported object" +msgstr "Informouse sobre o obxeto" + +#: front/src/views/admin/moderation/Base.vue:5 +#: front/src/views/admin/moderation/ReportsList.vue:3 +#: front/src/views/admin/moderation/ReportsList.vue:208 +msgctxt "*/Moderation/*/Noun" +msgid "Reports" +msgstr "Informes" -#: front/src/components/auth/SubsonicTokenForm.vue:33 -#: front/src/components/auth/SubsonicTokenForm.vue:36 +#: front/src/components/auth/SubsonicTokenForm.vue:38 +#: front/src/components/auth/SubsonicTokenForm.vue:41 msgctxt "*/Settings/Button.Label/Verb" msgid "Request a new password" msgstr "Solicitar un novo contrasinal" -#: front/src/components/auth/SubsonicTokenForm.vue:34 +#: front/src/components/auth/SubsonicTokenForm.vue:39 msgctxt "Popup/Settings/Title" msgid "Request a new Subsonic API password?" msgstr "Solicitar un nonvo contrasinal para o API Subsonic?" -#: front/src/components/auth/SubsonicTokenForm.vue:42 +#: front/src/components/auth/SubsonicTokenForm.vue:47 msgctxt "Content/Settings/Button.Label/Verb" msgid "Request a password" msgstr "Solicitar un contrasinal" @@ -3544,37 +3783,53 @@ msgstr "Solicitar un contrasinal" #: front/src/components/federation/FetchButton.vue:64 msgctxt "Popup/*/Loading.Title" msgid "Requesting a fetch…" -msgstr "" +msgstr "Solicitando a obtención…" -#: front/src/components/library/EditForm.vue:82 +#: front/src/components/library/EditForm.vue:94 msgctxt "Content/Library/Button.Label" -msgid "Reset to initial value: %{ value }" -msgstr "" +msgid "Reset to initial value" +msgstr "Restablecer ao valor inicial" -#: front/src/components/auth/Login.vue:35 src/views/auth/PasswordReset.vue:4 -#: front/src/views/auth/PasswordReset.vue:53 +#: front/src/components/auth/LoginForm.vue:34 +#: src/views/auth/PasswordReset.vue:4 front/src/views/auth/PasswordReset.vue:53 msgctxt "*/Login/*/Verb" msgid "Reset your password" msgstr "Restablecer o seu contrasinal" +#: front/src/components/manage/moderation/ReportCard.vue:83 +msgctxt "Content/*/*/Noun" +msgid "Resolution date" +msgstr "Data da resolución" + +#: front/src/components/manage/moderation/ReportCard.vue:218 +msgctxt "Content/*/Button.Label/Verb" +msgid "Resolve" +msgstr "Resolver" + +#: front/src/components/manage/moderation/ReportCard.vue:62 +#: front/src/views/admin/moderation/ReportsList.vue:20 +msgctxt "Content/*/*/Short" +msgid "Resolved" +msgstr "Resolto" + #: front/src/views/content/libraries/FilesTable.vue:223 msgctxt "Content/Library/Dropdown/Verb" msgid "Restart import" msgstr "Volte a lanzar importación" +#: front/src/components/library/EditForm.vue:31 +msgctxt "Content/Library/Button.Label" +msgid "Restrict to unreviewed edits" +msgstr "Restrinxir a edicións non revisadas" + #: front/src/components/favorites/List.vue:39 -#: src/components/library/Albums.vue:30 -#: front/src/components/library/Artists.vue:30 +#: src/components/library/Albums.vue:34 +#: front/src/components/library/Artists.vue:34 #: src/components/library/Radios.vue:52 front/src/views/playlists/List.vue:32 msgctxt "Content/Search/Dropdown.Label/Noun" msgid "Results per page" msgstr "Resultados por páxina" -#: front/src/components/library/EditForm.vue:31 -msgctxt "Content/Library/Button.Label" -msgid "Retrict to unreviewed edits" -msgstr "" - #: front/src/views/auth/EmailConfirm.vue:17 msgctxt "Content/Signup/Link/Verb" msgid "Return to login" @@ -3588,73 +3843,74 @@ msgstr "Ver ficheiros" #: front/src/components/auth/Settings.vue:192 msgctxt "*/*/*/Verb" msgid "Revoke" -msgstr "" +msgstr "Repudiar" #: front/src/components/auth/Settings.vue:195 msgctxt "*/Settings/Button.Label/Verb" msgid "Revoke access" -msgstr "" +msgstr "Retirar acceso" #: front/src/components/auth/Settings.vue:193 msgctxt "Popup/Settings/Title" msgid "Revoke access for application \"%{ application }\"?" -msgstr "" +msgstr "Retirar acceso para a aplicación \"%{ application }\"?" #: front/src/components/manage/moderation/InstancePolicyCard.vue:16 msgctxt "Content/Moderation/Card.Title/Noun" msgid "Rule" msgstr "Regra" -#: front/src/components/admin/SettingsGroup.vue:67 +#: front/src/components/About.vue:28 src/components/About.vue:56 +msgctxt "Content/About/Header" +msgid "Rules" +msgstr "Regras" + +#: front/src/components/admin/SettingsGroup.vue:75 #: front/src/components/library/radios/Builder.vue:34 msgctxt "Content/*/Button.Label/Verb" msgid "Save" msgstr "Gardar" -#: front/src/views/content/remote/Card.vue:175 +#: front/src/views/content/remote/Card.vue:203 msgctxt "Content/Library/Message" msgid "Scan launched" msgstr "Escaneado iniciado" -#: front/src/views/content/remote/Card.vue:67 +#: front/src/views/content/remote/Card.vue:80 msgctxt "Content/Library/Card.Button.Label/Verb" msgid "Scan now" msgstr "Escanear agora" -#: front/src/views/content/remote/Card.vue:35 +#: front/src/views/content/remote/Card.vue:48 msgctxt "Content/Library/Card.List item" msgid "Scan pending" msgstr "Ascendente" -#: front/src/views/content/remote/Card.vue:176 +#: front/src/views/content/remote/Card.vue:204 msgctxt "Content/Library/Message" msgid "Scan skipped (previous scan is too recent)" msgstr "Escaneado saltado (o escaneado anterior é moi recente)" -#: front/src/views/content/remote/Card.vue:47 +#: front/src/views/content/remote/Card.vue:60 msgctxt "Content/Library/Card.List item" msgid "Scanned" msgstr "Escaneado" -#: front/src/views/content/remote/Card.vue:51 +#: front/src/views/content/remote/Card.vue:64 msgctxt "Content/Library/Card.List item" msgid "Scanned with errors" msgstr "Escaneado con fallos" -#: front/src/views/content/remote/Card.vue:39 +#: front/src/views/content/remote/Card.vue:52 msgctxt "Content/Library/Card.List item" msgid "Scanning… (%{ progress }%)" -msgstr "Escaneando... (%{ progress }%)" +msgstr "Escaneando… (%{ progress }%)" #: front/src/components/auth/ApplicationForm.vue:22 -msgctxt "Content/Applications/Input.Label/Noun" -msgid "Scopes" -msgstr "" - #: front/src/components/auth/Settings.vue:226 msgctxt "Content/*/*/Noun" msgid "Scopes" -msgstr "" +msgstr "Ãmbitos" #: front/src/components/library/Albums.vue:10 #: src/components/library/Artists.vue:10 @@ -3663,12 +3919,14 @@ msgstr "" #: front/src/components/manage/library/ArtistsTable.vue:5 #: front/src/components/manage/library/EditsCardList.vue:6 #: front/src/components/manage/library/LibrariesTable.vue:5 +#: front/src/components/manage/library/TagsTable.vue:5 #: front/src/components/manage/library/TracksTable.vue:5 #: front/src/components/manage/library/UploadsTable.vue:5 #: front/src/components/manage/moderation/AccountsTable.vue:5 #: front/src/components/manage/moderation/DomainsTable.vue:5 #: front/src/components/manage/users/InvitationsTable.vue:5 #: front/src/components/manage/users/UsersTable.vue:5 +#: front/src/views/admin/moderation/ReportsList.vue:8 #: front/src/views/content/libraries/FilesTable.vue:5 #: src/views/playlists/List.vue:13 msgctxt "Content/Search/Input.Label/Noun" @@ -3681,6 +3939,7 @@ msgid "Search a remote library" msgstr "Buscar unha biblioteca remota" #: front/src/components/manage/library/EditsCardList.vue:211 +#: front/src/views/admin/moderation/ReportsList.vue:207 msgctxt "Content/Search/Input.Placeholder" msgid "Search by account, summary, domain…" msgstr "Buscar por tÃtulo, artista, dominio…" @@ -3715,7 +3974,12 @@ msgctxt "Content/Search/Input.Placeholder" msgid "Search by domain, username, bio…" msgstr "Buscar por dominio, nome de usuaria, bio…" -#: front/src/components/manage/moderation/DomainsTable.vue:151 +#: front/src/components/manage/library/TagsTable.vue:165 +msgctxt "Content/Search/Input.Placeholder" +msgid "Search by name" +msgstr "Buscar por nome" + +#: front/src/components/manage/moderation/DomainsTable.vue:168 msgctxt "Content/Search/Input.Placeholder" msgid "Search by name…" msgstr "Buscar por nome…" @@ -3730,12 +3994,12 @@ msgctxt "Content/Admin/Input.Placeholder/Verb" msgid "Search by username, e-mail address, code…" msgstr "Buscar por nome de usuaria, correo-e, código…" -#: front/src/components/manage/users/UsersTable.vue:163 +#: front/src/components/manage/users/UsersTable.vue:164 msgctxt "Content/Search/Input.Placeholder" msgid "Search by username, e-mail address, name…" msgstr "Buscar por nome de usuaria, correo-e, nome…" -#: front/src/components/audio/SearchBar.vue:20 +#: front/src/components/audio/SearchBar.vue:27 msgctxt "Sidebar/Search/Input.Placeholder" msgid "Search for artists, albums, tracks…" msgstr "Buscar por artistas, álbumes, cancións…" @@ -3745,16 +4009,28 @@ msgctxt "Content/Search/Title" msgid "Search for some music" msgstr "Buscar por algo de música" -#: front/src/components/library/AlbumBase.vue:57 -#: front/src/components/library/ArtistBase.vue:68 -#: front/src/components/library/TrackBase.vue:76 +#: front/src/components/library/TagsSelector.vue:6 +msgctxt "*/Dropdown/Placeholder/Verb" +msgid "Search for tags…" +msgstr "Buscar por etiquetas…" + +#: front/src/components/library/AlbumBase.vue:66 +#: front/src/components/library/ArtistBase.vue:77 +#: front/src/components/library/TrackBase.vue:82 +msgctxt "Content/*/Button.Label/Verb" +msgid "Search on Discogs" +msgstr "Buscar en Discogs" + +#: front/src/components/library/AlbumBase.vue:58 +#: front/src/components/library/ArtistBase.vue:69 +#: front/src/components/library/TrackBase.vue:74 msgctxt "Content/*/Button.Label/Verb" msgid "Search on Wikipedia" msgstr "Buscar en Wikipedia" #: front/src/components/library/Library.vue:35 -#: src/views/admin/library/Base.vue:32 -#: front/src/views/admin/moderation/Base.vue:22 +#: src/views/admin/library/Base.vue:35 +#: front/src/views/admin/moderation/Base.vue:44 #: src/views/admin/users/Base.vue:21 front/src/views/content/Base.vue:19 msgctxt "Menu/*/Hidden text" msgid "Secondary menu" @@ -3765,27 +4041,51 @@ msgctxt "Content/Admin/Menu.Title" msgid "Sections" msgstr "Seccións" +#: front/src/components/ShortcutsModal.vue:108 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek backwards 30s" +msgstr "Buscar atrás 30s" + +#: front/src/components/ShortcutsModal.vue:100 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek backwards 5s" +msgstr "Adiantar 5s" + +#: front/src/components/ShortcutsModal.vue:112 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek forwards 30s" +msgstr "Adiantar 30s" + +#: front/src/components/ShortcutsModal.vue:104 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek forwards 5s" +msgstr "Adiantar 5s" + #: front/src/components/library/radios/Builder.vue:46 msgctxt "Content/Radio/Dropdown.Placeholder/Verb" msgid "Select a filter" msgstr "Escolla un filtro" #: front/src/components/common/ActionTable.vue:79 -#, fuzzy msgctxt "Content/*/Link/Verb" msgid "Select all %{ total } elements" msgid_plural "Select all %{ total } elements" -msgstr[0] "Escolla %{ total } elemento" -msgstr[1] "Escolla todos os %{ total } elementos" +msgstr[0] "Escolle %{ total } elemento" +msgstr[1] "Escolle todos os %{ total } elementos" #: front/src/components/common/ActionTable.vue:88 msgctxt "Content/*/Link/Verb" msgid "Select only current page" msgstr "Seleccionar só páxina actual" -#: front/src/components/Sidebar.vue:43 src/components/Sidebar.vue:108 -#: front/src/components/manage/users/UsersTable.vue:181 -#: front/src/views/admin/moderation/AccountsDetail.vue:506 +#: front/src/components/Home.vue:43 +msgctxt "Content/Home/Link" +msgid "Server rules" +msgstr "Regras do servidor" + +#: front/src/components/Sidebar.vue:43 src/components/Sidebar.vue:112 +#: front/src/components/manage/users/UsersTable.vue:182 +#: front/src/views/admin/moderation/AccountsDetail.vue:526 msgctxt "*/*/*/Noun" msgid "Settings" msgstr "Axustes" @@ -3807,50 +4107,65 @@ msgstr "Compartir ligazón" #: front/src/views/content/libraries/Detail.vue:15 msgctxt "Content/Library/Paragraph" -msgid "" -"Share this link with other users so they can request access to your library." -msgstr "" -"Comparta esta ligazón con outras usuarias asà poderán solicitar acceso a súa" -" biblioteca." +msgid "Share this link with other users so they can request access to your library." +msgstr "Comparta esta ligazón con outras usuarias asà poderán solicitar acceso a súa biblioteca." #: front/src/views/content/libraries/Detail.vue:14 -#: front/src/views/content/remote/Card.vue:77 +#: front/src/views/content/remote/Card.vue:90 msgctxt "Content/Library/Title" msgid "Sharing link" msgstr "Compartir ligazón" +#: front/src/components/audio/EmbedWizard.vue:5 +msgctxt "Content/Embed/Message" +msgid "Sharing will not work because this pod doesn't allow anonymous users to access content." +msgstr "" + +#: front/src/components/About.vue:156 +msgctxt "*/*/*/Verb" +msgid "Show" +msgstr "Mostrar" + #: front/src/components/audio/album/Card.vue:38 -#, fuzzy msgctxt "Content/Album/Card.Link/Verb" msgid "Show %{ count } more track" msgid_plural "Show %{ count } more tracks" msgstr[0] "Mostrar %{ count } canción máis" msgstr[1] "Mostrar %{ count } cancións máis" -#: front/src/components/audio/artist/Card.vue:30 -#, fuzzy -msgctxt "Content/Artist/Card.Link" -msgid "Show 1 more album" -msgid_plural "Show %{ count } more albums" -msgstr[0] "Mostrar 1 álbume máis" -msgstr[1] "Mostrar %{ count } álbumes máis" +#: front/src/components/tags/List.vue:11 +msgctxt "Content/*/Button/Label/Verb" +msgid "Show 1 more tag" +msgid_plural "Show %{ count } more tags" +msgstr[0] "Mostrar 1 etiqueta máis" +msgstr[1] "Mostrar %{ count } etiquetas máis" #: front/src/components/library/EditForm.vue:21 msgctxt "Content/Library/Button.Label" msgid "Show all edits" -msgstr "" +msgstr "Mostrar todas as edicións" -#: front/src/components/ShortcutsModal.vue:42 +#: front/src/components/ShortcutsModal.vue:60 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Show available keyboard shortcuts" msgstr "Mostrar atallos de teclado dispoñibles" -#: front/src/views/Notifications.vue:7 +#: front/src/components/common/ExpandableDiv.vue:7 +msgctxt "*/*/Button,Label" +msgid "Show less" +msgstr "Mostrar menos" + +#: front/src/components/common/ExpandableDiv.vue:8 +msgctxt "*/*/Button,Label" +msgid "Show more" +msgstr "Mostrar máis" + +#: front/src/views/Notifications.vue:72 msgctxt "Content/Notifications/Form.Label/Verb" msgid "Show read notifications" msgstr "Mostrar notificacións lidas" -#: front/src/components/forms/PasswordInput.vue:26 +#: front/src/components/forms/PasswordInput.vue:42 msgctxt "Content/Settings/Button.Tooltip/Verb" msgid "Show/hide password" msgstr "Mostrar/ocultar contrasinal" @@ -3859,56 +4174,63 @@ msgstr "Mostrar/ocultar contrasinal" #: front/src/components/manage/library/ArtistsTable.vue:84 #: front/src/components/manage/library/EditsCardList.vue:72 #: front/src/components/manage/library/LibrariesTable.vue:110 +#: front/src/components/manage/library/TagsTable.vue:79 #: front/src/components/manage/library/TracksTable.vue:95 #: front/src/components/manage/library/UploadsTable.vue:144 #: front/src/components/manage/moderation/AccountsTable.vue:88 -#: front/src/components/manage/moderation/DomainsTable.vue:74 +#: front/src/components/manage/moderation/DomainsTable.vue:85 #: front/src/components/manage/users/InvitationsTable.vue:76 -#: front/src/components/manage/users/UsersTable.vue:87 +#: front/src/components/manage/users/UsersTable.vue:88 #: front/src/views/content/libraries/FilesTable.vue:117 msgctxt "Content/*/Paragraph" msgid "Showing results %{ start }-%{ end } on %{ total }" msgstr "Mostrando resultados %{ start }-%{ end } de %{ total }" -#: front/src/components/ShortcutsModal.vue:83 +#: front/src/components/ShortcutsModal.vue:140 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Shuffle queue" msgstr "Barallar a cola" -#: front/src/components/audio/Player.vue:641 +#: front/src/components/audio/Player.vue:667 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Shuffle your queue" msgstr "Barallar a cola" -#: front/src/components/auth/Signup.vue:97 +#: front/src/components/Home.vue:103 +msgctxt "*/Signup/Title" +msgid "Sign up" +msgstr "Rexistro" + +#: front/src/views/auth/Signup.vue:37 msgctxt "*/Signup/Title" msgid "Sign Up" msgstr "Rexistro" +#: front/src/components/Home.vue:107 +msgctxt "Content/Home/Paragraph" +msgid "Sign up now to keep a track of your favorites, create playlists, discover new content and much more!" +msgstr "RexÃstrate agora para gardar os teus favoritos, creas listas, descubrir novo contido e moito máis!" + #: front/src/components/manage/users/UsersTable.vue:40 msgctxt "Content/Admin/Table.Label/Short, Noun (Value is a date)" msgid "Sign-up" msgstr "Rexistrarse" -#: front/src/components/mixins/Translations.vue:57 -#: front/src/views/admin/moderation/AccountsDetail.vue:197 -#: front/src/components/mixins/Translations.vue:58 +#: front/src/components/mixins/Translations.vue:69 +#: front/src/views/admin/moderation/AccountsDetail.vue:198 +#: front/src/components/mixins/Translations.vue:70 msgctxt "Content/Admin/Table.Label/Noun" msgid "Sign-up date" msgstr "Data de rexistro" -#: front/src/components/manage/library/UploadsTable.vue:65 -#: front/src/views/admin/library/UploadDetail.vue:219 -msgctxt "Content/*/*/Noun" -msgid "Size" -msgstr "Tamaño" - #: front/src/components/library/FileUpload.vue:94 #: front/src/components/library/TrackDetail.vue:39 -#: front/src/components/mixins/Translations.vue:54 +#: front/src/components/manage/library/UploadsTable.vue:65 +#: front/src/components/mixins/Translations.vue:66 +#: front/src/views/admin/library/UploadDetail.vue:219 #: front/src/views/content/libraries/FilesTable.vue:61 -#: front/src/components/mixins/Translations.vue:55 -msgctxt "Content/Library/*/in MB" +#: front/src/components/mixins/Translations.vue:67 +msgctxt "Content/*/*/Noun" msgid "Size" msgstr "Tamaño" @@ -3925,7 +4247,7 @@ msgctxt "Content/Library/Label" msgid "Skipped files" msgstr "Ficheiros saltados" -#: front/src/views/admin/moderation/DomainsDetail.vue:89 +#: front/src/views/admin/moderation/DomainsDetail.vue:126 msgctxt "Content/Moderation/Table.Label" msgid "Software" msgstr "Software" @@ -3933,100 +4255,70 @@ msgstr "Software" #: front/src/components/playlists/Editor.vue:21 msgctxt "Content/Playlist/Paragraph" msgid "Some tracks in your queue are already in this playlist:" -msgstr "" +msgstr "Algunhas cancións na cola xa están nesta lista de reprodución:" #: front/src/components/PageNotFound.vue:10 msgctxt "Content/*/Paragraph" msgid "Sorry, the page you asked for does not exist:" msgstr "Lamentámolo, a páxina que solicitou non existe:" -#: front/src/components/Footer.vue:49 +#: front/src/components/Footer.vue:57 msgctxt "Footer/*/List item.Link" msgid "Source code" msgstr "Código fonte" #: front/src/components/auth/Profile.vue:23 -#: front/src/components/manage/users/UsersTable.vue:70 +#: front/src/components/manage/users/UsersTable.vue:71 msgctxt "Content/Profile/User role" msgid "Staff member" msgstr "Persoal do equipo" -#: front/src/components/audio/PlayButton.vue:23 +#: front/src/components/audio/PlayButton.vue:27 #: src/components/radios/Button.vue:4 msgctxt "*/Queue/Button.Label/Short, Verb" msgid "Start radio" msgstr "Deter radio" -#: front/src/views/admin/Settings.vue:86 -msgctxt "Content/Admin/Menu" +#: front/src/components/About.vue:170 src/components/Home.vue:53 +#: front/src/views/admin/Settings.vue:87 +msgctxt "Content/Home/Header" msgid "Statistics" msgstr "EstatÃsticas" -#: front/src/views/admin/moderation/AccountsDetail.vue:490 +#: front/src/views/admin/moderation/AccountsDetail.vue:510 msgctxt "Content/Moderation/Help text" -msgid "" -"Statistics are computed from known activity and content on your instance, " -"and do not reflect general activity for this account" -msgstr "" -"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" +msgid "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this account" +msgstr "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" -#: front/src/views/admin/moderation/DomainsDetail.vue:371 +#: front/src/views/admin/moderation/DomainsDetail.vue:418 msgctxt "Content/Moderation/Help text" -msgid "" -"Statistics are computed from known activity and content on your instance, " -"and do not reflect general activity for this domain" -msgstr "" -"As estatÃsticas contabilÃzanse pola actividade coñecida e o contido da súa " -"instancia, e non reflexan a actividade xeral de este dominio" - -#: front/src/views/admin/library/AlbumDetail.vue:329 -#: front/src/views/admin/library/ArtistDetail.vue:328 -#: front/src/views/admin/library/LibraryDetail.vue:316 -#: front/src/views/admin/library/TrackDetail.vue:371 +msgid "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this domain" +msgstr "As estatÃsticas contabilÃzanse pola actividade coñecida e o contido da súa instancia, e non reflexan a actividade xeral de este dominio" + +#: front/src/views/admin/library/AlbumDetail.vue:346 +#: front/src/views/admin/library/ArtistDetail.vue:345 +#: front/src/views/admin/library/LibraryDetail.vue:356 +#: front/src/views/admin/library/TagDetail.vue:210 +#: front/src/views/admin/library/TrackDetail.vue:389 #: front/src/views/admin/library/UploadDetail.vue:335 msgctxt "Content/Moderation/Help text" -msgid "" -"Statistics are computed from known activity and content on your instance, " -"and do not reflect general activity for this object" -msgstr "" -"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" - -#: front/src/views/admin/moderation/DomainsDetail.vue:115 -msgctxt "Content/Moderation/Table.Label (Value is Error message)" -msgid "Status" -msgstr "Estado" +msgid "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" +msgstr "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" #: front/src/components/library/FileUpload.vue:95 -msgctxt "Content/Library/Table.Label (Value is Uploading/Uploaded/Error)" -msgid "Status" -msgstr "Estado" - -#: front/src/views/content/libraries/Detail.vue:28 -msgctxt "Content/Library.Federation/Table.Label (Value is Approved/Rejected)" -msgid "Status" -msgstr "Estado" - +#: front/src/components/manage/library/EditsCardList.vue:12 +#: front/src/components/manage/moderation/ReportCard.vue:57 #: front/src/components/manage/users/InvitationsTable.vue:17 #: front/src/components/manage/users/InvitationsTable.vue:39 -msgctxt "Content/Admin/*/Noun (Value is Used/Not used)" -msgid "Status" -msgstr "Estado" - #: front/src/components/manage/users/UsersTable.vue:43 -msgctxt "Content/Admin/Table.Label/Noun (Value is Regular user/Admin)" -msgid "Status" -msgstr "Estado" - -#: front/src/components/manage/library/EditsCardList.vue:12 -msgctxt "" -"Content/Search/Dropdown.Label (Value is All/Pending " -"review/Approved/Rejected)" +#: front/src/views/admin/moderation/DomainsDetail.vue:152 +#: front/src/views/admin/moderation/ReportsList.vue:14 +#: front/src/views/content/libraries/Detail.vue:28 +msgctxt "*/*/*" msgid "Status" msgstr "Estado" -#: front/src/components/Sidebar.vue:174 src/components/radios/Button.vue:3 +#: front/src/components/Sidebar.vue:178 src/components/radios/Button.vue:3 msgctxt "*/Player/Button.Label/Short, Verb" msgid "Stop radio" msgstr "Deter radio" @@ -4036,22 +4328,32 @@ msgctxt "*/*/Button.Label/Verb" msgid "Submit" msgstr "Enviar" -#: front/src/components/library/EditForm.vue:98 +#: front/src/components/library/EditForm.vue:110 msgctxt "Content/Library/Button.Label/Verb" msgid "Submit and apply edit" -msgstr "" +msgstr "Enviar e aplicar a edición" #: front/src/components/library/EditForm.vue:7 msgctxt "Content/Library/Button.Label" msgid "Submit another edit" -msgstr "" +msgstr "Enviar outra edición" -#: front/src/components/library/EditForm.vue:99 +#: front/src/components/moderation/ReportModal.vue:64 +msgctxt "Popup/*/Button.Label" +msgid "Submit report" +msgstr "Enviar informe" + +#: front/src/components/library/EditForm.vue:111 msgctxt "Content/Library/Button.Label/Verb" msgid "Submit suggestion" -msgstr "" +msgstr "Enviar suxestión" -#: front/src/views/admin/Settings.vue:85 +#: front/src/components/manage/moderation/ReportCard.vue:17 +msgctxt "Content/Moderation/*" +msgid "Submitted by" +msgstr "Enviado por" + +#: front/src/views/admin/Settings.vue:86 msgctxt "Content/Admin/Menu" msgid "Subsonic" msgstr "Subsonic" @@ -4064,7 +4366,7 @@ msgstr "Contrasinal API Subsonic" #: front/src/components/library/EditForm.vue:38 msgctxt "Content/Library/Paragraph" msgid "Suggest a change using the form below." -msgstr "" +msgstr "Suxerir un cambio utilizando o formulario inferior." #: front/src/components/library/AlbumEdit.vue:5 msgctxt "Content/*/Title" @@ -4091,16 +4393,21 @@ msgctxt "Content/Library/Tab.Title/Short" msgid "Summary" msgstr "Resumo" -#: front/src/components/library/EditForm.vue:87 +#: front/src/components/library/EditForm.vue:99 msgctxt "*/*/*" msgid "Summary (optional)" -msgstr "" +msgstr "Resumen (optativo)" -#: front/src/components/Footer.vue:39 +#: front/src/components/Footer.vue:47 msgctxt "Footer/*/Listitem.Link" msgid "Support forum" msgstr "Foro de axuda" +#: front/src/views/Notifications.vue:10 +msgctxt "Content/Notifications/Header" +msgid "Support this Funkwhale pod" +msgstr "Axuda a este servidor Funkwhale" + #: front/src/components/library/FileUpload.vue:85 msgctxt "Content/Library/Paragraph" msgid "Supported extensions: %{ extensions }" @@ -4111,91 +4418,101 @@ msgctxt "Content/Playlist/Paragraph" msgid "Syncing changes to server…" msgstr "Sincronizando cambios co servidor…" -#: front/src/components/audio/EmbedWizard.vue:25 +#: front/src/components/audio/SearchBar.vue:35 +msgctxt "*/*/*/Noun" +msgid "Tag" +msgstr "Etiqueta" + +#: front/src/views/admin/library/TagDetail.vue:61 +msgctxt "Content/Moderation/Title" +msgid "Tag data" +msgstr "Etiquetar datos" + +#: front/src/components/library/Albums.vue:23 +#: src/components/library/Artists.vue:15 +#: front/src/views/admin/library/Base.vue:23 +#: src/views/admin/library/TagsList.vue:24 front/src/edits.js:24 +#: src/edits.js:50 src/edits.js:91 src/entities.js:120 +msgctxt "*/*/*/Noun" +msgid "Tags" +msgstr "Etiquetas" + +#: front/src/components/mixins/Translations.vue:44 +#: front/src/components/mixins/Translations.vue:45 +msgctxt "Content/Moderation/Dropdown" +msgid "Takedown request" +msgstr "Rexeitar petición" + +#: front/src/components/About.vue:35 src/components/About.vue:61 +msgctxt "Content/About/Header" +msgid "Terms and privacy policy" +msgstr "Termos e polÃtica de intimidade" + +#: front/src/components/audio/EmbedWizard.vue:35 #: front/src/components/common/CopyInput.vue:3 msgctxt "Content/*/Paragraph" msgid "Text copied to clipboard!" msgstr "Texto copiado ao portapapeis!" -#: front/src/components/Home.vue:26 -msgctxt "Content/Home/Paragraph" -msgid "" -"That's simple: we loved Grooveshark and we want to build something even " -"better." -msgstr "" -"É simple: encantábanos Grooveshark e queremos construÃr algo aÃnda mellor." - -#: front/src/views/admin/library/AlbumDetail.vue:75 +#: front/src/views/admin/library/AlbumDetail.vue:81 msgctxt "Content/Moderation/Paragraph" -msgid "" -"The album will be removed, as well as associated uploads, tracks, favorites " -"and listening history. This action is irreversible." -msgstr "" +msgid "The album will be removed, as well as associated uploads, tracks, favorites and listening history. This action is irreversible." +msgstr "Vaise a eliminar o álbume, asà como todas as subidas asociadas, pistas, favoritos e historial de escoita. Esta acción é irreversible." #: front/src/components/auth/Authorize.vue:39 msgctxt "Content/Auth/Paragraph" msgid "The application is also requesting the following unknown permissions:" -msgstr "" +msgstr "Esta aplicación tamén está solicitando os seguintes permisos descoñecidos:" -#: front/src/views/admin/library/ArtistDetail.vue:74 +#: front/src/views/admin/library/ArtistDetail.vue:79 msgctxt "Content/Moderation/Paragraph" -msgid "" -"The artist will be removed, as well as associated uploads, tracks, albums, " -"favorites and listening history. This action is irreversible." -msgstr "" +msgid "The artist will be removed, as well as associated uploads, tracks, albums, favorites and listening history. This action is irreversible." +msgstr "Vaise eliminar o artista, asà como todas as subidas asociadas, pistas, álbumes, favoritos e historial de escoita. Esta acción é irreversible." -#: front/src/components/Footer.vue:53 +#: front/src/components/Footer.vue:61 msgctxt "Footer/*/List item.Link" msgid "The funkwhale logo was kindly designed and provided by Francis Gading." -msgstr "" -"O logo de funckwhale foi amablemente deseñado e proporcionado por Francis " -"Gading." +msgstr "O logo de funckwhale foi amablemente deseñado e proporcionado por Francis Gading." #: front/src/components/SetInstanceModal.vue:8 msgctxt "Popup/Instance/Error message.List item" msgid "The given address is not a Funkwhale server" -msgstr "" +msgstr "O enderezo proporcionado non é un servidor Funkwhale" #: front/src/views/content/libraries/Form.vue:34 msgctxt "Popup/Library/Paragraph" -msgid "" -"The library and all its tracks will be deleted. This can not be undone." -msgstr "" -"Eliminará completamente a biblioteca e as cancións. Non poderá voltar atrás." +msgid "The library and all its tracks will be deleted. This can not be undone." +msgstr "Eliminará completamente a biblioteca e as cancións. Non poderá voltar atrás." #: front/src/views/admin/library/LibraryDetail.vue:61 msgctxt "Content/Moderation/Paragraph" -msgid "" -"The library will be removed, as well as associated uploads, and follows. " -"This action is irreversible." -msgstr "" +msgid "The library will be removed, as well as associated uploads, and follows. This action is irreversible." +msgstr "Vaise eliminar a biblioteca, asà como as subidas asociadas, e os seguimentos. A acción é irreversible." #: front/src/components/library/ImportStatusModal.vue:140 msgctxt "Popup/Import/Error.Label" -msgid "" -"The metadata included in the file is invalid or some mandatory fields are " -"missing." -msgstr "" +msgid "The metadata included in the file is invalid or some mandatory fields are missing." +msgstr "Os metadatos incluÃdos no ficheiro non son válidos ou faltan algúns campos requeridos." #: front/src/components/library/FileUpload.vue:38 msgctxt "Content/Library/List item" msgid "The music files you are uploading are tagged properly." -msgstr "" -"Os ficheiros de música que está a subir están etiquetados correctamente:" +msgstr "Os ficheiros de música que está a subir están correctamente etiquetados." #: front/src/components/audio/Player.vue:65 msgctxt "Sidebar/Player/Error message.Paragraph" msgid "The next track will play automatically in a few seconds…" msgstr "A seguinte canción reproducirase automáticamente en poucos segundos…" -#: front/src/components/Home.vue:116 -msgctxt "Content/Home/List item" -msgid "" -"The plaform is free and open-source, you can install it and modify it " -"without worries" -msgstr "" -"A plataforma é libre de código aberto, pode instalala e modificala sin " -"preocupación" +#: front/src/components/manage/moderation/NotesThread.vue:27 +msgctxt "Content/Moderation/Paragraph" +msgid "The note will be removed. This action is irreversible." +msgstr "Vai eliminar a nota. Esta acción non ten volta." + +#: front/src/components/manage/moderation/ReportCard.vue:120 +msgctxt "Content/Moderation/Message" +msgid "The object associated with this report was deleted." +msgstr "Eliminouse o obxeto asociado con este informe." #: front/src/components/playlists/Form.vue:14 msgctxt "Content/Playlist/Error message.Title" @@ -4205,51 +4522,47 @@ msgstr "Lista creada" #: front/src/components/federation/FetchButton.vue:37 msgctxt "*/*/Error" msgid "The remote server answered with HTTP %{ status }" -msgstr "" +msgstr "O servidor remoto respondeu con HTTP %{ status }" #: front/src/components/federation/FetchButton.vue:13 msgctxt "Popup/*/Message.Content" -msgid "" -"The remote server answered, but returned data was unsupported by Funkwhale." -msgstr "" +msgid "The remote server answered, but returned data was unsupported by Funkwhale." +msgstr "O servidor remoto respondeu, pero o tipo de resposta non está soportado por Funkwhale." #: front/src/components/federation/FetchButton.vue:44 msgctxt "*/*/Error" -msgid "The remote server didn't answered fast enough" -msgstr "" +msgid "The remote server didn't respond quickly enough" +msgstr "O servidor remoto non respondeu rápido abondo" #: front/src/components/federation/FetchButton.vue:50 msgctxt "*/*/Error" -msgid "The return server returned invalid JSON or JSON-LD data" -msgstr "" +msgid "The remote server returned invalid JSON or JSON-LD data" +msgstr "O servidor remoto devolveu un datos JSON ou JSON-LD non válidos" #: front/src/components/manage/library/AlbumsTable.vue:189 msgctxt "Popup/*/Paragraph" -msgid "" -"The selected albums will be removed, as well as associated tracks, uploads, " -"favorites and listening history. This action is irreversible." -msgstr "" +msgid "The selected albums will be removed, as well as associated tracks, uploads, favorites and listening history. This action is irreversible." +msgstr "Os álbumes seleccionados vanse eliminar, asà como as pistas asociadas, subidas, favoritos e historial de escoita. Esta acción non é reversible." #: front/src/components/manage/library/ArtistsTable.vue:179 msgctxt "Popup/*/Paragraph" -msgid "" -"The selected artist will be removed, as well as associated uploads, tracks, " -"albums, favorites and listening history. This action is irreversible." -msgstr "" +msgid "The selected artist will be removed, as well as associated uploads, tracks, albums, favorites and listening history. This action is irreversible." +msgstr "Vaise eliminar o artista seleccionado, asà como as subidas asociadas, cancións, álbumes, favoritos e historial de escoita. Esta acción é irreversible." #: front/src/components/manage/library/LibrariesTable.vue:206 msgctxt "Popup/*/Paragraph" -msgid "" -"The selected library will be removed, as well as associated uploads and " -"follows. This action is irreversible." -msgstr "" +msgid "The selected library will be removed, as well as associated uploads and follows. This action is irreversible." +msgstr "Vaise eliminar a biblioteca seleccionada, asà como as subidas asociadas e seguimentos. Esta acción é irreversible." + +#: front/src/components/manage/library/TagsTable.vue:180 +msgctxt "Popup/*/Paragraph" +msgid "The selected tag will be removed and unlinked with existing content, if any. This action is irreversible." +msgstr "Vas eliminar a etiqueta e desligala do contido existente, se o está. Esta acción non ten volta." #: front/src/components/manage/library/TracksTable.vue:189 msgctxt "Popup/*/Paragraph" -msgid "" -"The selected tracks will be removed, as well as associated uploads, " -"favorites and listening history. This action is irreversible." -msgstr "" +msgid "The selected tracks will be removed, as well as associated uploads, favorites and listening history. This action is irreversible." +msgstr "As cancións seleccionadas vanse eliminar, asà como as subidas asociadas, favoritos e historial de escoita. Esta acción é irreversible." #: front/src/components/manage/library/UploadsTable.vue:256 msgctxt "Popup/*/Paragraph" @@ -4259,7 +4572,7 @@ msgstr "Esta acción non é reversible." #: front/src/components/SetInstanceModal.vue:7 msgctxt "Popup/Instance/Error message.List item" msgid "The server might be down" -msgstr "" +msgstr "Igoal non está a funcionar o servidor" #: front/src/components/auth/SubsonicTokenForm.vue:4 msgctxt "Content/Settings/Paragraph" @@ -4268,9 +4581,13 @@ msgstr "O API Subsonic non está dispoñible en esta instancia Funkwhale." #: front/src/components/library/EditCard.vue:96 msgctxt "Popup/Library/Paragraph" -msgid "" -"The suggestion will be completely removed, this action is irreversible." -msgstr "" +msgid "The suggestion will be completely removed, this action is irreversible." +msgstr "Vaise eliminar completamente a suxestión, a acción é irreversible." + +#: front/src/views/admin/library/TagDetail.vue:44 +msgctxt "Content/Moderation/Paragraph" +msgid "The tag will be removed and unlinked from any existing entity. This action is irreversible." +msgstr "Vas eliminar a etiqueta e desligala de calquera entidade existente. Esta acción non é reversible." #: front/src/components/playlists/PlaylistModal.vue:34 msgctxt "Popup/Playlist/Error message.Title" @@ -4280,14 +4597,12 @@ msgstr "Non podemos engadir a canción a lista de reprodución" #: front/src/components/audio/Player.vue:62 msgctxt "Sidebar/Player/Error message.Title" msgid "The track cannot be loaded" -msgstr "" +msgstr "Non se puido cargar a canción" -#: front/src/views/admin/library/TrackDetail.vue:74 +#: front/src/views/admin/library/TrackDetail.vue:80 msgctxt "Content/Moderation/Paragraph" -msgid "" -"The track will be removed, as well as associated uploads, favorites and " -"listening history. This action is irreversible." -msgstr "" +msgid "The track will be removed, as well as associated uploads, favorites and listening history. This action is irreversible." +msgstr "Vaise eliminar a canción, asà como as subidas asociadas, favoritos e historial de escoita. Esta acción é irreversible." #: front/src/views/admin/library/UploadDetail.vue:68 msgctxt "Content/Moderation/Paragraph" @@ -4319,27 +4634,41 @@ msgctxt "Content/Artist/Paragraph" msgid "This artist is present in the following libraries:" msgstr "Este artista está presente nas seguintes bibliotecas:" +#: front/src/components/manage/moderation/DomainsTable.vue:169 +msgctxt "Content/Moderation/Popup" +msgid "This domain is present in your allow-list" +msgstr "Este dominio está presente na túa lista-permitido" + #: front/src/views/admin/moderation/AccountsDetail.vue:84 -#: front/src/views/admin/moderation/DomainsDetail.vue:48 +#: front/src/views/admin/moderation/DomainsDetail.vue:76 msgctxt "Content/Moderation/Card.Title" msgid "This domain is subject to specific moderation rules" msgstr "Este dominio está suxeito a regras especÃficas de moderación" +#: front/src/components/manage/moderation/InstancePolicyModal.vue:16 +msgctxt "Content/Moderation/Card.Title" +msgid "This entity is subject to specific moderation rules" +msgstr "Esta entidade está suxeita a regras especÃficas de moderación" + #: front/src/views/content/Home.vue:9 msgctxt "Content/Library/Paragraph" msgid "This instance offers up to %{quota} of storage space for every user." msgstr "Esta instancia ofrece %{quota} de almacenamento a cada usuaria." +#: front/src/components/auth/Settings.vue:300 +msgctxt "Popup/Settings/Paragraph" +msgid "This is irreversible and will permanently remove your data from our servers. You will we immediatly logged out." +msgstr "Esto non ten volta e eliminará permanentemente os teus datos dos nosos servidorese. Serás desconectado inmediatamente." + #: front/src/components/auth/Settings.vue:165 msgctxt "Content/Settings/Paragraph" -msgid "" -"This is the list of applications that have access to your account data." -msgstr "" +msgid "This is the list of applications that have access to your account data." +msgstr "Esta é unha lista das aplicacións que teñen acceso aos datos da túa conta." #: front/src/components/auth/Settings.vue:218 msgctxt "Content/Settings/Paragraph" msgid "This is the list of applications that you have created." -msgstr "" +msgstr "Esta é a lista das aplicacións que ti creaches." #: front/src/components/auth/Profile.vue:16 msgctxt "Content/Profile/Button.Paragraph" @@ -4351,35 +4680,32 @@ msgctxt "Content/Library/Input.Placeholder" msgid "This library contains my personal music, I hope you like it." msgstr "Esta biblioteca contén a miña música persoal, espero que che guste." -#: front/src/views/content/remote/Card.vue:141 +#: front/src/views/content/remote/Card.vue:169 msgctxt "Content/Library/Card.Help text" -msgid "" -"This library is private and your approval from its owner is needed to access" -" its content" -msgstr "" -"Esta biblioteca é privada e precisa que a usuaria lle conceda permiso para " -"acceder ao contido" +msgid "This library is private and your approval from its owner is needed to access its content" +msgstr "Esta biblioteca é privada e precisa que a usuaria lle conceda permiso para acceder ao contido" -#: front/src/views/content/remote/Card.vue:142 +#: front/src/views/content/remote/Card.vue:170 msgctxt "Content/Library/Card.Help text" msgid "This library is public and you can access its content freely" msgstr "Esta biblioteca é pública e pode acceder ao contido libremente" #: front/src/components/common/ActionTable.vue:47 msgctxt "Modal/*/Paragraph" -msgid "" -"This may affect a lot of elements or have irreversible consequences, please " -"double check this is really what you want." -msgstr "" -"Esto poderÃa afectar a moitos elementos ou ter consecuencias irreversibles, " -"por favor comprobe si realmente é o que quere." +msgid "This may affect a lot of elements or have irreversible consequences, please double check this is really what you want." +msgstr "Esto poderÃa afectar a moitos elementos ou ter consecuencias irreversibles, por favor comprobe si realmente é o que quere." #: front/src/components/library/AlbumEdit.vue:8 #: front/src/components/library/ArtistEdit.vue:8 #: front/src/components/library/TrackEdit.vue:8 msgctxt "Content/*/Message" msgid "This object is managed by another server, you cannot edit it." -msgstr "" +msgstr "Este obxeto está xestionado en outro servidor, non podes editalo." + +#: front/src/components/Home.vue:87 +msgctxt "Content/Home/Paragraph" +msgid "This pod runs Funkwhale, a community-driven project that lets you listen and share music and audio within a decentralized, open network." +msgstr "Este servidor executa Funkwhale, un proxecto comunitario que che permite escoitar e compartir música e audios nunha rede descentralizada e aberta." #: front/src/components/library/FileUpload.vue:51 msgctxt "Content/Library/Paragraph" @@ -4389,15 +4715,13 @@ msgstr "Esta referencia usarase para agrupar os ficheiros importados." #: front/src/components/mixins/Translations.vue:33 #: front/src/components/mixins/Translations.vue:34 msgctxt "Content/Library/Help text" -msgid "This track could not be processed, please it is tagged correctly" -msgstr "" -"Non se procesou esta canción, asegúrese que está correctamente etiquetada" +msgid "This track could not be processed, please make sure it is tagged correctly" +msgstr "Non se procesou esta canción, asegúrese que está correctamente etiquetada" #: front/src/components/mixins/Translations.vue:29 #: front/src/components/mixins/Translations.vue:30 msgctxt "Content/Library/Help text" -msgid "" -"This track has been uploaded, but hasn't been processed by the server yet" +msgid "This track has been uploaded, but hasn't been processed by the server yet" msgstr "Canción subida, pero aÃnda non procesada polo servidor" #: front/src/components/mixins/Translations.vue:25 @@ -4406,99 +4730,93 @@ msgctxt "Content/Library/Help text" msgid "This track is already present in one of your libraries" msgstr "A canción xa está presente nunha das súas bibliotecas" -#: front/src/components/audio/PlayButton.vue:85 +#: front/src/components/audio/PlayButton.vue:103 msgctxt "*/Queue/Button/Title" msgid "This track is not available in any library you have access to" -msgstr "" -"Esta canción non está dispoñible en ningunha biblioteca a que teña acceso" +msgstr "Esta canción non está dispoñible en ningunha biblioteca a que teña acceso" #: front/src/components/library/TrackDetail.vue:82 msgctxt "Content/Track/Paragraph" msgid "This track is present in the following libraries:" msgstr "Esta canción está presente nas seguintes bibliotecas:" -#: front/src/views/playlists/Detail.vue:38 +#: front/src/views/playlists/Detail.vue:46 msgctxt "Popup/Playlist/Paragraph" msgid "This will completely delete this playlist and cannot be undone." -msgstr "" -"Eliminará completamente a lista de reprodución e non poderá voltar atrás." +msgstr "Eliminará completamente a lista de reprodución e non poderá voltar atrás." #: front/src/views/radios/Detail.vue:27 msgctxt "Popup/Radio/Paragraph" msgid "This will completely delete this radio and cannot be undone." msgstr "Eliminará completamente a radio e non ten volta atrás." -#: front/src/components/auth/SubsonicTokenForm.vue:50 +#: front/src/components/auth/SubsonicTokenForm.vue:55 msgctxt "Popup/Settings/Paragraph" -msgid "" -"This will completely disable access to the Subsonic API using from account." +msgid "This will completely disable access to the Subsonic API using from account." msgstr "Desactivará o acceso a API Subsonic desde a conta." -#: front/src/components/auth/SubsonicTokenForm.vue:35 +#: front/src/components/manage/moderation/ReportCard.vue:359 +msgctxt "Content/Moderation/Popup,Paragraph" +msgid "This will delete the object associated with this report and mark the report as resolved. The deletion is irreversible." +msgstr "Esto vai eliminar o obxeto asociado a este informe e marcar o informe como resolto. Esta eliminación é irreversible." + +#: front/src/components/auth/SubsonicTokenForm.vue:40 msgctxt "Popup/Settings/Paragraph" -msgid "" -"This will log you out from existing devices that use the current password." -msgstr "" -"Será desconectada dos dispositivos existentes que utilicen o contrasinal " -"actual." +msgid "This will log you out from existing devices that use the current password." +msgstr "Será desconectada dos dispositivos existentes que utilicen o contrasinal actual." #: front/src/components/auth/Settings.vue:253 msgctxt "Popup/Settings/Paragraph" -msgid "" -"This will permanently delete the application and all the associated tokens." -msgstr "" -"Eliminará completamente a lista de reprodución e non poderá voltar atrás." +msgid "This will permanently delete the application and all the associated tokens." +msgstr "Eliminará completamente a lista de reprodución e non poderá voltar atrás." #: front/src/components/auth/Settings.vue:194 msgctxt "Popup/Settings/Paragraph" -msgid "" -"This will prevent this application from accessing the service on your " -"behalf." -msgstr "" +msgid "This will prevent this application from accessing the service on your behalf." +msgstr "Esto evitará que a aplicación acceda ao servizo no seu nome." #: front/src/components/playlists/Editor.vue:54 msgctxt "Popup/Playlist/Paragraph" msgid "This will remove all tracks from this playlist and cannot be undone." -msgstr "" -"Esto eliminará todas as cancións da lista de reprodución e non hai volta." - -#: front/src/views/admin/library/AlbumDetail.vue:99 -#: front/src/views/admin/library/TrackDetail.vue:98 src/edits.js:21 -#: src/edits.js:39 -msgctxt "*/*/*/Noun" -msgid "Title" -msgstr "TÃtulo" +msgstr "Esto eliminará todas as cancións da lista de reprodución e non hai volta." #: front/src/components/audio/track/Table.vue:7 -#: front/src/views/content/libraries/FilesTable.vue:55 -msgctxt "Content/Track/*/Noun" -msgid "Title" -msgstr "TÃtulo" - #: front/src/components/manage/library/AlbumsTable.vue:39 #: front/src/components/manage/library/TracksTable.vue:39 -msgctxt "*/*/*" +#: front/src/views/admin/library/AlbumDetail.vue:105 +#: front/src/views/admin/library/TrackDetail.vue:104 +#: front/src/views/content/libraries/FilesTable.vue:55 src/edits.js:36 +#: front/src/edits.js:62 +msgctxt "*/*/*/Noun" msgid "Title" msgstr "TÃtulo" #: front/src/components/SetInstanceModal.vue:16 msgctxt "Popup/Instance/Paragraph" -msgid "" -"To continue, please select the Funkwhale instance you want to connect to. " -"Enter the address directly, or select one of the suggested choices." -msgstr "" +msgid "To continue, please select the Funkwhale instance you want to connect to. Enter the address directly, or select one of the suggested choices." +msgstr "Para continuar, escolle a instancia de Funkwhale a que te queres conectar. Introducir o enderezo directamente, ou escoller unha das opcións suxeridas." + +#: front/src/components/ShortcutsModal.vue:148 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Toggle favorite" +msgstr "Marca de favorito" + +#: front/src/components/ShortcutsModal.vue:132 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Toggle mute" +msgstr "Activar silencio" -#: front/src/components/ShortcutsModal.vue:79 +#: front/src/components/ShortcutsModal.vue:136 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Toggle queue looping" msgstr "Activar a repetición da cola" -#: front/src/views/admin/library/AlbumDetail.vue:222 -#: front/src/views/admin/library/ArtistDetail.vue:211 -#: front/src/views/admin/library/LibraryDetail.vue:200 -#: front/src/views/admin/library/TrackDetail.vue:274 -#: front/src/views/admin/moderation/AccountsDetail.vue:317 -#: front/src/views/admin/moderation/DomainsDetail.vue:225 +#: front/src/views/admin/library/AlbumDetail.vue:238 +#: front/src/views/admin/library/ArtistDetail.vue:226 +#: front/src/views/admin/library/LibraryDetail.vue:219 +#: front/src/views/admin/library/TrackDetail.vue:290 +#: front/src/views/admin/moderation/AccountsDetail.vue:329 +#: front/src/views/admin/moderation/DomainsDetail.vue:262 msgctxt "Content/Moderation/Table.Label" msgid "Total size" msgstr "Tamaño total" @@ -4508,20 +4826,18 @@ msgctxt "Content/Library/Card.Help text" msgid "Total size of the files in this library" msgstr "Tamaño total dos ficheiros de esta biblioteca" -#: front/src/views/admin/moderation/DomainsDetail.vue:105 +#: front/src/views/admin/moderation/DomainsDetail.vue:142 msgctxt "Content/*/*" msgid "Total users" msgstr "Conta de usuarias" -#: front/src/views/admin/library/UploadDetail.vue:199 -msgctxt "*/*/*" -msgid "Track" -msgstr "Canción" - -#: front/src/components/audio/SearchBar.vue:27 -#: front/src/components/library/TrackBase.vue:173 +#: front/src/components/audio/SearchBar.vue:34 +#: front/src/components/library/TrackBase.vue:188 #: front/src/components/library/TrackDetail.vue:128 #: front/src/components/metadata/Search.vue:138 +#: src/components/mixins/Report.vue:28 +#: front/src/views/admin/library/UploadDetail.vue:199 +#: front/src/components/mixins/Report.vue:29 msgctxt "*/*/*/Noun" msgid "Track" msgstr "Canción" @@ -4529,9 +4845,9 @@ msgstr "Canción" #: front/src/components/library/EditCard.vue:13 msgctxt "Content/Library/Card/Short" msgid "Track #%{ id } - %{ name }" -msgstr "" +msgstr "Canción #%{ id } - % { name }" -#: front/src/views/admin/library/TrackDetail.vue:91 +#: front/src/views/admin/library/TrackDetail.vue:97 msgctxt "Content/Moderation/Title" msgid "Track data" msgstr "Nome da canción" @@ -4541,30 +4857,28 @@ msgctxt "Content/Track/Title/Noun" msgid "Track information" msgstr "Información da canción" -#: front/src/components/mixins/Translations.vue:50 -#: front/src/components/mixins/Translations.vue:51 +#: front/src/components/mixins/Translations.vue:60 +#: front/src/components/mixins/Translations.vue:61 msgctxt "Content/*/Dropdown/Noun" msgid "Track name" msgstr "Nome da canción" -#: front/src/components/instance/Stats.vue:54 #: front/src/components/library/AlbumDetail.vue:19 -#: front/src/components/playlists/PlaylistModal.vue:47 -#: front/src/views/admin/moderation/AccountsDetail.vue:362 -#: front/src/views/admin/moderation/DomainsDetail.vue:274 -#: front/src/views/content/Base.vue:8 src/views/content/libraries/Detail.vue:8 -#: front/src/views/playlists/Detail.vue:51 src/views/radios/Detail.vue:34 -msgctxt "*/*/*/Noun" -msgid "Tracks" -msgstr "Cancións" - +#: front/src/components/library/TagDetail.vue:36 #: front/src/components/manage/library/AlbumsTable.vue:42 #: front/src/components/manage/library/ArtistsTable.vue:42 -#: front/src/views/admin/library/AlbumDetail.vue:252 -#: front/src/views/admin/library/ArtistDetail.vue:251 +#: front/src/components/manage/library/TagsTable.vue:44 +#: front/src/components/playlists/PlaylistModal.vue:47 +#: front/src/views/admin/library/AlbumDetail.vue:268 +#: front/src/views/admin/library/ArtistDetail.vue:266 #: front/src/views/admin/library/Base.vue:14 -#: front/src/views/admin/library/LibraryDetail.vue:229 +#: front/src/views/admin/library/LibraryDetail.vue:248 +#: front/src/views/admin/library/TagDetail.vue:143 #: front/src/views/admin/library/TracksList.vue:24 +#: front/src/views/admin/moderation/AccountsDetail.vue:374 +#: front/src/views/admin/moderation/DomainsDetail.vue:311 +#: front/src/views/content/Base.vue:8 src/views/content/libraries/Detail.vue:8 +#: front/src/views/playlists/Detail.vue:76 src/views/radios/Detail.vue:34 msgctxt "*/*/*" msgid "Tracks" msgstr "Cancións" @@ -4574,79 +4888,64 @@ msgctxt "Content/Artist/Title" msgid "Tracks by this artist" msgstr "Cancións de este artista" -#: front/src/components/instance/Stats.vue:25 -msgctxt "Content/About/Paragraph/Unit" -msgid "Tracks favorited" -msgstr "Cancións favorecidas" - -#: front/src/components/instance/Stats.vue:19 -msgctxt "Content/About/Paragraph/Unit" -msgid "tracks listened" -msgstr "cancións escoitadas" - #: front/src/components/library/radios/Filter.vue:44 msgctxt "Popup/Radio/Title/Noun" msgid "Tracks matching filter" msgstr "Filtro coincidente da canción" #: front/src/components/library/TrackDetail.vue:57 +#: front/src/components/manage/moderation/ReportCard.vue:134 #: front/src/views/admin/library/UploadDetail.vue:250 +#: front/src/views/admin/moderation/AccountsDetail.vue:181 msgctxt "Content/Track/Table.Label/Noun" msgid "Type" msgstr "Tipo" -#: front/src/views/admin/moderation/AccountsDetail.vue:180 -msgctxt "Content/Moderation/Table.Label/Noun" -msgid "Type" -msgstr "Tipo" - #: front/src/components/manage/moderation/AccountsTable.vue:44 -#: front/src/components/manage/moderation/DomainsTable.vue:42 +#: front/src/components/manage/moderation/DomainsTable.vue:50 msgctxt "Content/Moderation/Table.Label/Short" msgid "Under moderation rule" msgstr "Baixo regra de moderación" -#: front/src/views/content/remote/Card.vue:109 -#: src/views/content/remote/Card.vue:114 +#: front/src/components/ShortcutsModal.vue:68 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Unfocus searchbar" +msgstr "SaÃr da barra de busca" + +#: front/src/views/content/remote/Card.vue:122 +#: src/views/content/remote/Card.vue:127 msgctxt "*/Library/Button.Label/Verb" msgid "Unfollow" msgstr "Deixar de seguir" -#: front/src/views/content/remote/Card.vue:110 +#: front/src/views/content/remote/Card.vue:123 msgctxt "Popup/Library/Title" msgid "Unfollow this library?" msgstr "Deixar de seguir biblioteca?" -#: front/src/components/About.vue:17 -msgctxt "Content/About/Paragraph" -msgid "" -"Unfortunately, the owners of this instance did not yet take the time to " -"complete this page." -msgstr "" -"Desgraciadamente os donos de esta instancia non tiveron tempo de completar " -"esta páxina." - #: front/src/components/federation/FetchButton.vue:54 #: front/src/components/federation/FetchButton.vue:55 -msgctxt "*/*/Error" -msgid "Unknowkn error" -msgstr "" - #: front/src/components/library/ImportStatusModal.vue:144 -msgctxt "Popup/Import/Error.Label" -msgid "Unkwown error" -msgstr "" - -#: front/src/components/Home.vue:37 -msgctxt "Content/Home/Title" -msgid "Unlimited music" -msgstr "Música sen lÃmites" +msgctxt "*/*/Error" +msgid "Unknown error" +msgstr "Fallo descoñecido" -#: front/src/components/audio/Player.vue:630 +#: front/src/components/audio/Player.vue:656 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Unmute" msgstr "Dar voz" +#: front/src/components/manage/moderation/ReportCard.vue:225 +msgctxt "Content/*/Button.Label" +msgid "Unresolve" +msgstr "Non resolto" + +#: front/src/components/manage/moderation/ReportCard.vue:67 +#: front/src/views/admin/moderation/ReportsList.vue:23 +msgctxt "Content/*/*/Short" +msgid "Unresolved" +msgstr "Non resolto" + #: front/src/components/manage/moderation/InstancePolicyForm.vue:57 msgctxt "Content/Moderation/Card.Button.Label/Verb" msgid "Update" @@ -4710,34 +5009,27 @@ msgstr "Data de subida" #: front/src/components/library/FileUpload.vue:258 msgctxt "Content/Library/Help text" -msgid "" -"Upload denied, ensure the file is not too big and that you have not reached " -"your quota" -msgstr "" -"Subida denegada, asegúrese de que o ficheiro non é demasiado grande e que " -"non acadou o lÃmite de cuota" +msgid "Upload denied, ensure the file is not too big and that you have not reached your quota" +msgstr "Subida denegada, asegúrese de que o ficheiro non é demasiado grande e que non acadou o lÃmite de cuota" #: front/src/components/library/ImportStatusModal.vue:8 msgctxt "Popup/Import/Message" msgid "Upload is still pending and will soon be processed by the server." -msgstr "" +msgstr "A subida está pendente e axiña será procesada polo servidor." #: front/src/views/content/Home.vue:7 msgctxt "Content/Library/Paragraph" -msgid "" -"Upload music files (MP3, OGG, FLAC, etc.) from your personal library " -"directly from your browser to enjoy them here." -msgstr "" -"Subir ficheiros de música (MP3, OGG, FLAC, etc.) desde a súa biblioteca " -"persoal co seu navegador e desfrútea aquÃ." +msgid "Upload music files (MP3, OGG, FLAC, etc.) from your personal library directly from your browser to enjoy them here." +msgstr "Subir ficheiros de música (MP3, OGG, FLAC, etc.) desde a súa biblioteca persoal co seu navegador e desfrútea aquÃ." #: front/src/components/library/FileUpload.vue:30 msgctxt "Content/Library/Title/Verb" msgid "Upload new tracks" msgstr "Subir novas cancións" -#: front/src/views/admin/moderation/AccountsDetail.vue:298 -msgctxt "Content/Moderation/Table.Label/Noun" +#: front/src/components/About.vue:99 +#: front/src/views/admin/moderation/AccountsDetail.vue:309 +msgctxt "*/*/*" msgid "Upload quota" msgstr "Cota de subida" @@ -4748,15 +5040,13 @@ msgstr "Caducou a subida, inténteo de novo" #: front/src/components/library/ImportStatusModal.vue:14 msgctxt "Popup/Import/Message" -msgid "" -"Upload was skipped because a similar one is already available in one of your" -" libraries." -msgstr "" +msgid "Upload was skipped because a similar one is already available in one of your libraries." +msgstr "A subida non se realizou porque xa ten unha semellante dispoñible nunha das súas bibliotecas." #: front/src/components/library/ImportStatusModal.vue:11 msgctxt "Popup/Import/Message" msgid "Upload was successfully processed by the server." -msgstr "" +msgstr "A subida non se procesou correctamente polo servidor." #: front/src/components/library/FileUpload.vue:109 msgctxt "Content/Library/Table" @@ -4773,74 +5063,81 @@ msgctxt "Content/Library/Table" msgid "Uploading…" msgstr "Subindo…" +#: front/src/components/manage/library/LibrariesTable.vue:52 +#: front/src/components/manage/moderation/AccountsTable.vue:41 +#: front/src/components/mixins/Translations.vue:75 +#: front/src/views/admin/library/AlbumDetail.vue:258 +#: front/src/views/admin/library/ArtistDetail.vue:246 #: front/src/views/admin/library/Base.vue:20 +#: front/src/views/admin/library/LibraryDetail.vue:258 +#: front/src/views/admin/library/TrackDetail.vue:310 #: front/src/views/admin/library/UploadsList.vue:24 +#: front/src/views/admin/moderation/AccountsDetail.vue:349 +#: front/src/views/admin/moderation/DomainsDetail.vue:281 +#: front/src/components/mixins/Translations.vue:76 msgctxt "*/*/*" msgid "Uploads" msgstr "Subidas" -#: front/src/components/manage/moderation/AccountsTable.vue:41 -#: front/src/components/mixins/Translations.vue:63 -#: front/src/views/admin/library/AlbumDetail.vue:242 -#: front/src/views/admin/library/ArtistDetail.vue:231 -#: front/src/views/admin/library/LibraryDetail.vue:239 -#: front/src/views/admin/library/TrackDetail.vue:294 -#: front/src/views/admin/moderation/AccountsDetail.vue:337 -#: front/src/views/admin/moderation/DomainsDetail.vue:244 -#: front/src/components/mixins/Translations.vue:64 -msgctxt "Content/Moderation/Table.Label/Noun" -msgid "Uploads" -msgstr "Subidas" - -#: front/src/components/manage/library/LibrariesTable.vue:52 -msgctxt "Content/*/*/Noun" -msgid "Uploads" -msgstr "Subidas" - #: front/src/components/auth/ApplicationForm.vue:16 msgctxt "Content/Applications/Help Text" -msgid "" -"Use \"urn:ietf:wg:oauth:2.0:oob\" as a redirect URI if your application is " -"not served on the web." -msgstr "" +msgid "Use \"urn:ietf:wg:oauth:2.0:oob\" as a redirect URI if your application is not served on the web." +msgstr "Utilice \"urn:ietf:wg:oauth:2.0:oob\" como unha URI de redirección se as aplicacións non son mostradas na web." #: front/src/components/Footer.vue:16 msgctxt "Footer/*/List item.Link" msgid "Use another instance" msgstr "Utilizar outra instancia" +#: front/src/components/Home.vue:146 +msgctxt "Content/Home/Link" +msgid "Use Funkwhale on other devices with our apps" +msgstr "Utilice Funkwhale en outros dispositivos coas nosas apps" + +#: front/src/components/moderation/ReportModal.vue:44 +msgctxt "*/*/Field,Help" +msgid "Use this field to provide additional context to the moderator that will handle your report." +msgstr "Utilice este campo para proporcionar contexto adicional a moderación para xestionar o seu informe." + #: front/src/views/auth/PasswordReset.vue:12 msgctxt "Content/Signup/Paragraph" -msgid "" -"Use this form to request a password reset. We will send an email to the " -"given address with instructions to reset your password." -msgstr "" -"Utilice este formulario para solicitar o restablecemento do contrasinal. " -"Enviarémoslle un correo-e con instrucións para restablecelo." +msgid "Use this form to request a password reset. We will send an email to the given address with instructions to reset your password." +msgstr "Utilice este formulario para solicitar o restablecemento do contrasinal. Enviarémoslle un correo-e con instrucións para restablecelo." + +#: front/src/components/moderation/ReportModal.vue:18 +msgctxt "*/Moderation/Popup,Paragraph" +msgid "Use this form to submit a report to our moderation team." +msgstr "Utilice este formulario para enviar un informe ao equipo de moderación." #: front/src/components/manage/moderation/InstancePolicyForm.vue:111 msgctxt "Content/Moderation/Help text" -msgid "" -"Use this setting to temporarily enable/disable the policy without completely" -" removing it." -msgstr "" -"Utilice este axuste para activar/desactivar temporalmente a condición sen " -"elminala completamente." +msgid "Use this setting to temporarily enable/disable the policy without completely removing it." +msgstr "Utilice este axuste para activar/desactivar temporalmente a condición sen elminala completamente." #: front/src/components/manage/users/InvitationsTable.vue:49 msgctxt "Content/Admin/Table" msgid "Used" msgstr "Utilizado" +#: front/src/components/Home.vue:125 +msgctxt "Content/Home/Header" +msgid "Useful links" +msgstr "Ligazóns útiles" + #: front/src/views/content/libraries/Detail.vue:26 msgctxt "Content/Library/Table.Label" msgid "User" msgstr "Usuaria" -#: front/src/components/instance/Stats.vue:5 -msgctxt "Content/About/Title/Noun" -msgid "User activity" -msgstr "Actividade da usuaria" +#: front/src/components/Home.vue:154 +msgctxt "Content/Home/Link" +msgid "User guides" +msgstr "GuÃas para a usuaria" + +#: front/src/views/admin/Settings.vue:88 +msgctxt "Content/Admin/Menu" +msgid "User Interface" +msgstr "Interface de usuaria" #: front/src/components/library/AlbumDetail.vue:26 #: front/src/components/library/ArtistDetail.vue:39 @@ -4854,35 +5151,35 @@ msgctxt "Content/Radio/Title" msgid "User radios" msgstr "Radios da usuaria" -#: front/src/components/auth/Signup.vue:19 +#: front/src/components/auth/SignupForm.vue:15 #: front/src/components/manage/users/UsersTable.vue:37 -#: front/src/components/mixins/Translations.vue:59 +#: front/src/components/mixins/Translations.vue:71 #: front/src/views/admin/moderation/AccountsDetail.vue:114 -#: front/src/components/mixins/Translations.vue:60 +#: front/src/components/mixins/Translations.vue:72 msgctxt "Content/*/*" msgid "Username" msgstr "Nome de usuaria" -#: front/src/components/auth/Login.vue:15 +#: front/src/components/auth/LoginForm.vue:11 msgctxt "Content/Login/Input.Label/Noun" msgid "Username or email" msgstr "Nome de usuaria ou correo-e" -#: front/src/components/instance/Stats.vue:13 -msgctxt "Content/About/Paragraph/Unit" -msgid "users" -msgstr "usuarias" - -#: front/src/components/Sidebar.vue:102 -#: front/src/components/manage/moderation/DomainsTable.vue:39 -#: front/src/components/mixins/Translations.vue:61 +#: front/src/components/Sidebar.vue:106 +#: front/src/components/manage/moderation/DomainsTable.vue:47 +#: front/src/components/mixins/Translations.vue:73 #: src/views/admin/Settings.vue:81 front/src/views/admin/users/Base.vue:5 #: src/views/admin/users/UsersList.vue:21 -#: front/src/components/mixins/Translations.vue:62 +#: front/src/components/mixins/Translations.vue:74 msgctxt "*/*/*/Noun" msgid "Users" msgstr "Usuarias" +#: front/src/components/Home.vue:110 +msgctxt "Content/Home/Paragraph" +msgid "Users on this pod also get %{ quota } of free storage to upload their own content!" +msgstr "As usuarias de este servidor tamén teñen %{ quota } de almacenaxe gratuÃta para o seu contido!" + #: front/src/components/Footer.vue:29 msgctxt "Footer/*/Title" msgid "Using Funkwhale" @@ -4900,45 +5197,58 @@ msgctxt "Content/Library/Link/Verb" msgid "View files" msgstr "Ver ficheiros" -#: front/src/components/library/AlbumBase.vue:81 -#: front/src/components/library/ArtistBase.vue:92 -#: front/src/components/library/TrackBase.vue:100 -#: front/src/views/admin/library/AlbumDetail.vue:42 -#: front/src/views/admin/library/ArtistDetail.vue:41 +#: front/src/components/library/AlbumBase.vue:95 +#: front/src/components/library/ArtistBase.vue:107 +#: front/src/components/library/TrackBase.vue:111 +#: front/src/views/admin/library/AlbumDetail.vue:48 +#: front/src/views/admin/library/ArtistDetail.vue:46 #: front/src/views/admin/library/LibraryDetail.vue:34 #: front/src/views/admin/library/LibraryDetail.vue:45 -#: front/src/views/admin/library/TrackDetail.vue:41 +#: front/src/views/admin/library/TagDetail.vue:32 +#: front/src/views/admin/library/TrackDetail.vue:47 #: front/src/views/admin/library/UploadDetail.vue:35 #: front/src/views/admin/library/UploadDetail.vue:46 #: front/src/views/admin/moderation/AccountsDetail.vue:37 #: front/src/views/admin/moderation/AccountsDetail.vue:45 +#: front/src/views/admin/moderation/DomainsDetail.vue:30 msgctxt "Content/Moderation/Link/Verb" msgid "View in Django's admin" -msgstr "" +msgstr "Ver na admin de Django" + +#: front/src/components/Home.vue:169 +msgctxt "Content/Home/Link" +msgid "View more…" +msgstr "Ver máis…" -#: front/src/components/library/AlbumBase.vue:61 -#: front/src/components/library/ArtistBase.vue:72 -#: front/src/components/library/TrackBase.vue:80 +#: front/src/components/library/AlbumBase.vue:62 +#: front/src/components/library/ArtistBase.vue:73 +#: front/src/components/library/TrackBase.vue:78 #: front/src/components/metadata/ArtistCard.vue:49 #: front/src/components/metadata/ReleaseCard.vue:53 msgctxt "Content/*/*/Clickable, Verb" msgid "View on MusicBrainz" msgstr "Ver en MusicBrainz" +#: front/src/components/manage/moderation/ReportCard.vue:124 +msgctxt "Content/Moderation/Link" +msgid "View public page" +msgstr "Ver páxina pública" + #: front/src/components/manage/library/LibrariesTable.vue:11 #: front/src/components/manage/library/LibrariesTable.vue:51 #: front/src/components/manage/library/UploadsTable.vue:11 #: front/src/components/manage/library/UploadsTable.vue:63 #: front/src/views/admin/library/LibraryDetail.vue:94 #: front/src/views/admin/library/UploadDetail.vue:101 +#: front/src/views/content/libraries/Form.vue:18 msgctxt "*/*/*" msgid "Visibility" msgstr "Visibilidade" -#: front/src/views/content/libraries/Form.vue:18 -msgctxt "Content/Library/Dropdown.Label" -msgid "Visibility" -msgstr "Visibilidade" +#: front/src/components/Home.vue:91 +msgctxt "Content/Home/Link" +msgid "Visit funkwhale.audio" +msgstr "Visita funkwhale.audio" #: front/src/components/library/AlbumDetail.vue:4 msgctxt "Content/Album/" @@ -4950,7 +5260,12 @@ msgctxt "Popup/*/Loading.Title" msgid "Waiting for result…" msgstr "Cargando as favoritas…" -#: front/src/components/auth/Login.vue:7 +#: front/src/components/auth/Settings.vue:285 +msgctxt "Content/Settings/Error message.Title" +msgid "We cannot delete your account" +msgstr "Non podemos eliminar a túa conta" + +#: front/src/components/auth/LoginForm.vue:3 msgctxt "Content/Login/Error message.Title" msgid "We cannot log you in" msgstr "Non podemos conectala" @@ -4960,42 +5275,37 @@ msgctxt "Content/*/Error message.Title" msgid "We cannot save your changes" msgstr "Non podemos crear a súa conta" -#: front/src/components/Home.vue:122 -msgctxt "Content/Home/List item" -msgid "We do not track you or bother you with ads" -msgstr "Nin a perseguimos na internet nin molestamos con publicidade" +#: front/src/views/Notifications.vue:39 +msgctxt "Content/Notifications/Paragraph" +msgid "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!" +msgstr "Levas por aquà un anaco. Se Funkwhale che resulta útil, poderiamos utilizar a túa axuda para facelo aÃnda mellor!" #: front/src/components/library/FileUpload.vue:39 msgctxt "Content/Library/Link" msgid "We recommend using Picard for that purpose." msgstr "Recomendámoslle utilizar Picard para ese propósito." -#: front/src/components/Home.vue:7 -msgctxt "Content/Home/Title" -msgid "We think listening to music should be simple." -msgstr "Cremos que escoitar música deberÃa ser simple." +#: front/src/components/moderation/ReportModal.vue:35 +msgctxt "*/*/Field,Help" +msgid "We'll use this email if we need to contact you regarding this report." +msgstr "Utilizaremos este correo se precisamos contactar contigo referente a este informe." -#: front/src/components/Home.vue:148 +#: front/src/components/Home.vue:207 msgctxt "Head/Home/Title" msgid "Welcome" msgstr "Benvida" #: front/src/components/Home.vue:5 -msgctxt "Content/Home/Title/Verb" -msgid "Welcome on Funkwhale" -msgstr "Benvida a Funkwhale" +msgctxt "Content/Home/Header" +msgid "Welcome to %{ podName }!" +msgstr "Ben vida a %{ podName }!" -#: front/src/components/Home.vue:24 -msgctxt "Content/Home/Title" -msgid "Why funkwhale?" -msgstr "Por qué funkwhale?" - -#: front/src/components/audio/EmbedWizard.vue:13 +#: front/src/components/audio/EmbedWizard.vue:23 msgctxt "Popup/Embed/Input.Label" msgid "Widget height" msgstr "Alto do trebello" -#: front/src/components/audio/EmbedWizard.vue:6 +#: front/src/components/audio/EmbedWizard.vue:16 msgctxt "Popup/Embed/Input.Label" msgid "Widget width" msgstr "Ancho do trebello" @@ -5003,21 +5313,23 @@ msgstr "Ancho do trebello" #: front/src/components/auth/ApplicationForm.vue:157 msgctxt "Content/OAuth Scopes/Label/Verb" msgid "Write" -msgstr "" +msgstr "Escribir" #: front/src/components/auth/Authorize.vue:21 msgctxt "Content/Auth/Label/Noun" msgid "Write-only" -msgstr "" +msgstr "Só-escritura" #: front/src/components/auth/ApplicationForm.vue:158 msgctxt "Content/OAuth Scopes/Help Text" msgid "Write-only access to user data" -msgstr "" +msgstr "Acceso de só-escritura aos datos de usuario" -#: front/src/components/Sidebar.vue:129 +#: front/src/components/Sidebar.vue:133 #: front/src/components/manage/moderation/AccountsTable.vue:72 -#: front/src/components/manage/moderation/DomainsTable.vue:58 +#: front/src/components/manage/moderation/DomainsTable.vue:12 +#: front/src/components/manage/moderation/DomainsTable.vue:69 +#: front/src/views/admin/moderation/DomainsDetail.vue:109 msgctxt "*/*/*" msgid "Yes" msgstr "Si" @@ -5029,33 +5341,23 @@ msgstr "Si, desconectádeme!" #: front/src/views/content/libraries/Form.vue:19 msgctxt "Content/Library/Paragraph" -msgid "" -"You are able to share your library with other people, regardless of its " -"visibility." -msgstr "" -"Pode compartir a biblioteca con outa xente, independentemente da súa " -"visibilidade." +msgid "You are able to share your library with other people, regardless of its visibility." +msgstr "Pode compartir a biblioteca con outa xente, independentemente da súa visibilidade." #: front/src/components/library/FileUpload.vue:32 msgctxt "Content/Library/Paragraph" -msgid "" -"You are about to upload music to your library. Before proceeding, please " -"ensure that:" +msgid "You are about to upload music to your library. Before proceeding, please ensure that:" msgstr "Vai subir música a súa biblioteca. Antes de seguir, asegúrese de que:" #: front/src/components/SetInstanceModal.vue:12 msgctxt "Popup/Login/Paragraph" -msgid "" -"You are currently connected to <a href=\"%{ url }\" target=\"_blank\">%{ " -"hostname } <i class=\"external icon\"/></a>. If you continue, you will " -"be disconnected from your current instance and all your local data will be " -"deleted." -msgstr "" +msgid "You are currently connected to <a href=\"%{ url }\" target=\"_blank\">%{ hostname } <i class=\"external icon\"/></a>. If you continue, you will be disconnected from your current instance and all your local data will be deleted." +msgstr "Estás conectada a <a href=\"%{ url }\" target=\"_blank\">%{ hostname }<i class=\"external icon\"/></a>. Se continúas serás desconectada da instancia actual e os teus datos serán eliminados." #: front/src/components/library/ArtistDetail.vue:6 msgctxt "Content/Artist/Paragraph" msgid "You are currently hiding content related to this artist." -msgstr "" +msgstr "Actualmente estás a ocultar contido relacionado con este artista." #: front/src/components/auth/Logout.vue:7 msgctxt "Content/Login/Paragraph" @@ -5064,64 +5366,43 @@ msgstr "Está conectada como %{ username }" #: front/src/components/library/FileUpload.vue:35 msgctxt "Content/Library/List item" -msgid "" -"You are not uploading copyrighted content in a public library, otherwise you" -" may be infringing the law" -msgstr "" +msgid "You are not uploading copyrighted content in a public library, otherwise you may be infringing the law" +msgstr "Non estás a subir contido con copyright a unha biblioteca pública, de outro xeito poderÃas faltarlle a lei" #: front/src/components/SetInstanceModal.vue:98 msgctxt "*/Instance/Message" msgid "You are now using the Funkwhale instance at %{ url }" -msgstr "" +msgstr "Estás utilizando a instancia Funkwhale en %{ url }" #: front/src/views/content/Home.vue:17 msgctxt "Content/Library/Paragraph" -msgid "" -"You can follow libraries from other users to get access to new music. Public" -" libraries can be followed immediatly, while following a private library " -"requires approval from its owner." -msgstr "" -"Pode seguir bibliotecas de outras usuarias para acceder a nova música. As " -"bibliotecas públicas pódense seguir inmediatamente, mentras que as privadas " -"precisan que a usuaria lle conceda acceso." - -#: front/src/components/Home.vue:128 -msgctxt "Content/Home/List item" -msgid "" -"You can invite friends and family to your instance so they can enjoy your " -"music" -msgstr "" -"Pode convidar amigos e familiares a súa instancia para que desfruten da súa " -"música" +msgid "You can 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." +msgstr "Podes seguir bibliotecas de outras usuarias para acceder a nova música. As bibliotecas públicas pódense seguir inmediatamente, mentras que as privadas precisan que a usuaria che conceda acceso." #: front/src/components/moderation/FilterModal.vue:31 msgctxt "Popup/Moderation/Paragraph" -msgid "" -"You can manage and update your filters anytime from your account settings." -msgstr "" +msgid "You can manage and update your filters any time from your account settings." +msgstr "Podes xestionar e actualizar os teus filtros desde os axustes da túa conta." #: front/src/views/auth/EmailConfirm.vue:24 msgctxt "Content/Signup/Paragraph" msgid "You can now use the service without limitations." msgstr "Xa pode utilizar o servizo sen limitacións." +#: front/src/components/auth/Settings.vue:278 +msgctxt "Content/Settings/Paragraph'" +msgid "You can permanently and irreversibly delete your account and all the associated data using the form below. You will be asked for confirmation." +msgstr "Podes eliminar de xeito irreversible epermanente a túa conta e todos os datos asociados utilizando o formulario inferior. Pedirase confirmación." + #: front/src/components/library/radios/Builder.vue:7 msgctxt "Content/Radio/Paragraph" -msgid "" -"You can use this interface to build your own custom radio, which will play " -"tracks according to your criteria." -msgstr "" -"Pode utilizar esta interface para construÃr a súa propia radio, que " -"reproducirá cancións segundo o seu criterio." +msgid "You can use this interface to build your own custom radio, which will play tracks according to your criteria." +msgstr "Pode utilizar esta interface para construÃr a súa propia radio, que reproducirá cancións segundo o seu criterio." #: front/src/components/auth/SubsonicTokenForm.vue:7 msgctxt "Content/Settings/Paragraph" -msgid "" -"You can use those to enjoy your playlist and music in offline mode, on your " -"smartphone or tablet, for instance." -msgstr "" -"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." +msgid "You can use those to enjoy your playlist and music in offline mode, on your smartphone or tablet, for instance." +msgstr "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." #: front/src/components/auth/Settings.vue:202 msgctxt "Content/Applications/Paragraph" @@ -5138,19 +5419,17 @@ msgctxt "Content/Moderation/Card.Title" msgid "You don't have any rule in place for this account." msgstr "Non ten ningunha regra activada para esta conta." -#: front/src/views/admin/moderation/DomainsDetail.vue:39 +#: front/src/views/admin/moderation/DomainsDetail.vue:67 msgctxt "Content/Moderation/Card.Title" msgid "You don't have any rule in place for this domain." msgstr "Non ten ningunha regra activada para este dominio." #: front/src/components/library/EditForm.vue:52 msgctxt "Content/Library/Paragraph" -msgid "" -"You don't have the permission to edit this object, but you can suggest " -"changes. Once submitted, suggestions will be reviewed before approval." -msgstr "" +msgid "You don't have the permission to edit this object, but you can suggest changes. Once submitted, suggestions will be reviewed before approval." +msgstr "Non tes permiso para editar este obxeto, pero podes suxerir cambios. Unha vez enviados serán revisados antes da súa aprobación." -#: front/src/components/Sidebar.vue:171 +#: front/src/components/Sidebar.vue:175 msgctxt "Sidebar/Player/Title" msgid "You have a radio playing" msgstr "Ten a radio a funcionar" @@ -5162,40 +5441,38 @@ msgstr "PoderÃa ter problemas de conectividade." #: front/src/components/auth/Settings.vue:100 msgctxt "Popup/Settings/List item" -msgid "" -"You will be logged out from this session and have to log in with the new one" +msgid "You will be logged out from this session and have to log in with the new one" msgstr "Será desconectada de esta sesión e deberá conectar co novo" #: front/src/components/auth/Authorize.vue:51 msgctxt "Content/Auth/Paragraph" msgid "You will be redirected to <strong>%{ url }</strong>" -msgstr "" +msgstr "Vas ser redirixida a <strong>%{ url }</strong>" #: front/src/components/auth/Authorize.vue:49 msgctxt "Content/Auth/Paragraph" msgid "You will be shown a code to copy-paste in the application." -msgstr "" +msgstr "Vaiseche mostrar un código para copiar-pegar na aplicación." #: front/src/components/auth/Settings.vue:71 msgctxt "Content/Settings/Paragraph" -msgid "" -"You will have to update your password on your clients that use this " -"password." -msgstr "" -"Deberá actualizar o contrasinal nos seus clientes que utilicen este " -"contrasinal." +msgid "You will have to update your password on your clients that use this password." +msgstr "Deberá actualizar o contrasinal nos seus clientes que utilicen este contrasinal." #: front/src/components/moderation/FilterModal.vue:20 msgctxt "Popup/Moderation/Paragraph" -msgid "" -"You will not see tracks, albums and user activity linked to this artist " -"anymore:" -msgstr "" +msgid "You will not see tracks, albums and user activity linked to this artist any more:" +msgstr "Non voltarás a ver as cancións, álbumes e actividade relacionados con este artista:" -#: front/src/components/auth/Signup.vue:13 +#: front/src/components/auth/SignupForm.vue:9 msgctxt "Content/Signup/Form/Paragraph" msgid "Your account cannot be created." -msgstr "Lista creada" +msgstr "Non se pode crear a conta." + +#: front/src/components/auth/Settings.vue:281 +msgctxt "Content/Settings/Paragraph'" +msgid "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." +msgstr "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." #: front/src/components/auth/Settings.vue:215 msgctxt "Content/Settings/Title/Noun" @@ -5205,24 +5482,29 @@ msgstr "As súas notificacións" #: front/src/components/auth/Settings.vue:38 msgctxt "Content/Settings/Error message.Title" msgid "Your avatar cannot be saved" -msgstr "" +msgstr "Non se gardou o avatar" + +#: front/src/components/auth/Settings.vue:527 +msgctxt "*/Auth/Message" +msgid "Your deletion request was submitted, your account and content will be deleted shortly" +msgstr "Enviouse a solicitude de borrado, o contido da conta eliminarase en breve" #: front/src/components/library/EditForm.vue:3 msgctxt "Content/Library/Paragraph" msgid "Your edit was successfully submitted." -msgstr "" +msgstr "Enviouse correctamente a edición." #: front/src/components/favorites/List.vue:116 msgctxt "Head/Favorites/Title" msgid "Your Favorites" msgstr "As súas Favoritas" -#: front/src/components/Home.vue:109 -msgctxt "Content/Home/Title" -msgid "Your music, your way" -msgstr "A súa música, o seu xeito" +#: front/src/views/Notifications.vue:5 +msgctxt "Content/Notifications/Title" +msgid "Your messages" +msgstr "Mensaxes" -#: front/src/views/Notifications.vue:4 +#: front/src/views/Notifications.vue:69 msgctxt "Content/Notifications/Title" msgid "Your notifications" msgstr "As súas notificacións" @@ -5230,7 +5512,7 @@ msgstr "As súas notificacións" #: front/src/components/auth/Settings.vue:76 msgctxt "Content/Settings/Error message.Title" msgid "Your password cannot be changed" -msgstr "" +msgstr "Non se pode cambiar o contrasinal" #: front/src/views/auth/PasswordResetConfirm.vue:29 msgctxt "Content/Signup/Card.Paragraph" @@ -5239,44 +5521,39 @@ msgstr "O seu contrasinal foi actualizado correctamente." #: front/src/components/auth/Settings.vue:14 msgctxt "Content/Settings/Error message.Title" -msgid "Your settings can't be updateds" -msgstr "Axustes actualizados" +msgid "Your settings can't be updated" +msgstr "Non se actualizaron os axustes" #: front/src/components/auth/Settings.vue:101 msgctxt "Popup/Settings/List item" -msgid "" -"Your Subsonic password will be changed to a new, random one, logging you out" -" from devices that used the old Subsonic password" -msgstr "" -"O seu contrasinal Subsonic será cambiado por un novo, aleatorio, " -"desconectándoa de todos os dispositivos que utilicen os contrasinal antigo" +msgid "Your Subsonic password will be changed to a new, random one, logging you out from devices that used the old Subsonic password" +msgstr "O seu contrasinal Subsonic será cambiado por un novo, aleatorio, desconectándoa de todos os dispositivos que utilicen os contrasinal antigo" -#: front/src/edits.js:47 -msgctxt "*/*/*/Short, Noun" -msgid "Position" -msgstr "Paxinación" +#: front/src/entities.js:126 +msgctxt "*/*/*/Noun" +msgid "MusicBrainz ID" +msgstr "ID en MusicBrainz" -#: front/src/edits.js:54 -msgctxt "Content/Track/*/Noun" -msgid "Copyright" -msgstr "Copyright" +#: front/src/main.js:110 +msgctxt "*/Error/Paragraph" +msgid "You sent too many requests and have been rate limited, please try again in %{ delay }" +msgstr "Enviaches demasiadas solicitudes en pouco tempo, inténtao de novo en %{ delay }" -#: front/src/components/library/AlbumBase.vue:183 -#, fuzzy +#: front/src/main.js:113 +msgctxt "*/Error/Paragraph" +msgid "You sent too many requests and have been rate limited, please try again later" +msgstr "Enviaches demasiadas solicitudes en pouco tempo, por favor inténtao máis tarde" + +#: front/src/components/library/AlbumBase.vue:208 msgctxt "Content/Album/Header.Title" -msgid "" -"Album containing %{ count } track, by <a class=\"internal\" href=\"%{ " -"artistUrl }\">%{ artist }</a>" -msgid_plural "" -"Album containing %{ count } tracks, by <a class=\"internal\" href=\"%{ " -"artistUrl }\">%{ artist }</a>" -msgstr[0] "Ãlbume que contén %{ count } canción, de %{ artist }" -msgstr[1] "Ãlbume que contén %{ count } cancións, de %{ artist }" - -#: front/src/components/audio/PlayButton.vue:220 -#, fuzzy +msgid "Album containing %{ count } track, by <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" +msgid_plural "Album containing %{ count } tracks, by <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" +msgstr[0] "Ãlbume que contén %{ count } canción, de <a class=\"internal\" href=\"%{ artistUrl }\"> %{ artist }</a>" +msgstr[1] "Ãlbume que contén %{ count } cancións, de <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" + +#: front/src/components/audio/PlayButton.vue:246 msgctxt "*/Queue/Message" msgid "%{ count } track was added to your queue" msgid_plural "%{ count } tracks were added to your queue" -msgstr[0] "Engadiuse %{ count } canción a cola" +msgstr[0] "Engadeuse %{ count } canción a cola" msgstr[1] "EngadÃronse %{ count } cancións a cola" diff --git a/front/locales/it/LC_MESSAGES/app.po b/front/locales/it/LC_MESSAGES/app.po index c145b715f23be550cbe6c84cd3239a90133ca3ae..6665f3409ee3d20ad3959e22fe27aa6aca468599 100644 --- a/front/locales/it/LC_MESSAGES/app.po +++ b/front/locales/it/LC_MESSAGES/app.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: front 1.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-05-16 10:35+0200\n" -"PO-Revision-Date: 2019-05-03 10:33+0000\n" +"POT-Creation-Date: 2019-10-01 15:15+0200\n" +"PO-Revision-Date: 2019-10-01 11:44+0000\n" "Last-Translator: Sylke Vicious <silkevicious@tuta.io>\n" "Language-Team: none\n" "Language: it\n" @@ -16,7 +16,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 3.2.2\n" +"X-Generator: Weblate 3.7\n" #: front/src/components/playlists/PlaylistModal.vue:9 msgctxt "Popup/Playlist/Paragraph" @@ -38,6 +38,53 @@ msgctxt "Content/Auth/Title" msgid "%{ app } wants to access your Funkwhale account" msgstr "%{ app } vuole accedere al tuo account Funkwhale" +#: front/src/components/About.vue:173 src/components/Home.vue:56 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } active user" +msgid_plural "%{ count } active users" +msgstr[0] "%{ count } traccia" +msgstr[1] "%{ count } tracce" + +#: front/src/components/About.vue:182 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } albums" +msgid_plural "%{ count } albums" +msgstr[0] "%{ count } traccia" +msgstr[1] "%{ count } tracce" + +#: front/src/components/About.vue:152 +msgctxt "*/*/*" +msgid "%{ count } allowed domains" +msgid_plural "%{ count } allowed domains" +msgstr[0] "%{ count } dominio consentito" +msgstr[1] "%{ count } domini consentiti" + +#: front/src/components/About.vue:179 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } artists" +msgid_plural "%{ count } artists" +msgstr[0] "%{ count } traccia" +msgstr[1] "%{ count } tracce" + +#: front/src/components/About.vue:176 src/components/Home.vue:59 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } hour of music" +msgid_plural "%{ count } hours of music" +msgstr[0] "%{ count } traccia" +msgstr[1] "%{ count } tracce" + +#: front/src/components/About.vue:188 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } listenings" +msgid_plural "%{ count } listenings" +msgstr[0] "%{ count } traccia" +msgstr[1] "%{ count } tracce" + #: front/src/components/common/ActionTable.vue:68 msgctxt "Content/*/Paragraph" msgid "%{ count } on %{ total } selected" @@ -45,9 +92,9 @@ msgid_plural "%{ count } on %{ total } selected" msgstr[0] "%{ count } su %{ total } selezionato" msgstr[1] "%{ count } su %{ total } selezionati" -#: front/src/components/Sidebar.vue:121 src/components/audio/album/Card.vue:52 +#: front/src/components/Sidebar.vue:125 src/components/audio/album/Card.vue:52 #: front/src/views/content/libraries/Card.vue:40 -#: src/views/content/remote/Card.vue:30 +#: src/views/content/remote/Card.vue:43 msgctxt "*/*/*" msgid "%{ count } track" msgid_plural "%{ count } tracks" @@ -68,7 +115,15 @@ msgid_plural "%{ count } tracks matching combined filters" msgstr[0] "%{ count } traccia corrisponde ai filtri selezionati" msgstr[1] "%{ count } tracce corrispondono ai filtri selezionati" -#: front/src/components/playlists/Card.vue:18 +#: front/src/components/About.vue:185 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } tracks" +msgid_plural "%{ count } tracks" +msgstr[0] "%{ count } traccia" +msgstr[1] "%{ count } tracce" + +#: front/src/components/playlists/Card.vue:28 msgctxt "Content/*/Card/List item" msgid "%{ count} track" msgid_plural "%{ count } tracks" @@ -93,9 +148,7 @@ msgstr "%{ minutes } min" #: front/src/components/notifications/NotificationRow.vue:40 msgctxt "Content/Notifications/Paragraph" msgid "%{ username } accepted your follow on library \"%{ library }\"" -msgstr "" -"%{ username } ha accettato la tua richiesta di seguire la libreria \"%{ " -"library }\"" +msgstr "%{ username } ha accettato la tua richiesta di seguire la libreria \"%{ library }\"" #: front/src/components/notifications/NotificationRow.vue:39 msgctxt "Content/Notifications/Paragraph" @@ -114,12 +167,10 @@ msgstr "Profilo di %{ username }" #: front/src/components/playlists/PlaylistModal.vue:21 msgctxt "Popup/Playlist/Paragraph" -msgid "" -"<strong>%{ track }</strong> is already in <strong>%{ playlist }</strong>." -msgstr "" -"<strong>%{ track }</strong> è già nella <strong>%{ playlist }</strong>." +msgid "<strong>%{ track }</strong> is already in <strong>%{ playlist }</strong>." +msgstr "<strong>%{ track }</strong> è già nella <strong>%{ playlist }</strong>." -#: front/src/components/audio/artist/Card.vue:41 +#: front/src/components/audio/artist/Card.vue:11 msgctxt "Content/Artist/Card" msgid "1 album" msgid_plural "%{ count } albums" @@ -133,24 +184,44 @@ msgid_plural "%{ count } favorites" msgstr[0] "1 mi piace" msgstr[1] "%{ count } mi piace" -#: front/src/components/Home.vue:64 -msgctxt "Content/Home/Title" -msgid "A clean library" -msgstr "Una libreria pulita" +#: front/src/components/audio/artist/Card.vue:15 +#, fuzzy +msgctxt "Content/Artist/Card" +msgid "1 track" +msgid_plural "%{ count } tracks" +msgstr[0] "Aggiungi traccia" +msgstr[1] "Aggiungi traccia" + +#: front/src/views/Notifications.vue:21 src/views/Notifications.vue:55 +msgctxt "*/*/*" +msgid "30 days" +msgstr "30 giorni" + +#: front/src/views/Notifications.vue:22 src/views/Notifications.vue:56 +msgctxt "*/*/*" +msgid "60 days" +msgstr "60 giorni" + +#: front/src/views/Notifications.vue:23 src/views/Notifications.vue:57 +msgctxt "*/*/*" +msgid "90 days" +msgstr "90 giorni" #: front/src/components/library/FileUpload.vue:264 +#, fuzzy msgctxt "Content/Library/Help text" -msgid "A network error occured while uploading this file" +msgid "A network error occurred while uploading this file" msgstr "C'è stato un errore durante il caricamento di questo file" -#: front/src/components/library/EditForm.vue:145 +#: front/src/components/library/EditForm.vue:161 msgctxt "*/*/Placeholder" msgid "A short summary describing your changes." msgstr "Un breve riassunto che descrive le tue modifiche." #: front/src/components/About.vue:5 -msgctxt "Content/About/Title/Short, Noun" -msgid "About %{ instance }" +#, fuzzy +msgctxt "Content/Home/Header" +msgid "About %{ podName }" msgstr "A proposito di %{ instance }" #: front/src/components/Footer.vue:6 @@ -158,7 +229,7 @@ msgctxt "Footer/About/Title" msgid "About %{instanceName}" msgstr "A proposito di %{instanceName}" -#: front/src/components/Footer.vue:45 +#: front/src/components/Footer.vue:53 src/components/Home.vue:85 msgctxt "Footer/*/Title/Short" msgid "About Funkwhale" msgstr "A proposito di Funkwhale" @@ -168,9 +239,16 @@ msgctxt "Footer/About/List item.Link" msgid "About page" msgstr "Pagina di informazioni" -#: front/src/components/About.vue:8 src/components/About.vue:67 -msgctxt "Content/About/Title" -msgid "About this instance" +#: front/src/components/Home.vue:19 +#, fuzzy +msgctxt "Content/Home/Header" +msgid "About this Funkwhale pod" +msgstr "A proposito di Funkwhale" + +#: front/src/components/About.vue:21 src/components/About.vue:51 +#, fuzzy +msgctxt "Content/About/Header" +msgid "About this pod" msgstr "A proposito di questa istanza" #: front/src/views/content/libraries/Detail.vue:48 @@ -183,96 +261,87 @@ msgctxt "Content/Library/Table/Short" msgid "Accepted" msgstr "Accettato" -#: front/src/components/auth/SubsonicTokenForm.vue:110 +#: front/src/components/auth/SubsonicTokenForm.vue:117 msgctxt "Content/Settings/Message" msgid "Access disabled" msgstr "Accesso disabilitato" -#: front/src/components/mixins/Translations.vue:73 -#: front/src/components/mixins/Translations.vue:74 +#: front/src/components/mixins/Translations.vue:85 +#: front/src/components/mixins/Translations.vue:86 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to audio files, libraries, artists, albums and tracks" msgstr "Accedi ai file audio, librerie, artisti, album e tracce" -#: front/src/components/mixins/Translations.vue:97 -#: front/src/components/mixins/Translations.vue:98 +#: front/src/components/mixins/Translations.vue:109 +#: front/src/components/mixins/Translations.vue:110 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to content filters" msgstr "Accesso ai filtri del contenuto" -#: front/src/components/mixins/Translations.vue:105 -#: front/src/components/mixins/Translations.vue:106 +#: front/src/components/mixins/Translations.vue:117 +#: front/src/components/mixins/Translations.vue:118 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to edits" msgstr "Accesso alle modifiche" -#: front/src/components/mixins/Translations.vue:69 -#: front/src/components/mixins/Translations.vue:70 +#: front/src/components/mixins/Translations.vue:81 +#: front/src/components/mixins/Translations.vue:82 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to email, username, and profile information" msgstr "Accedi ad email, nome utente e informazioni del profilo" -#: front/src/components/mixins/Translations.vue:77 -#: front/src/components/mixins/Translations.vue:78 +#: front/src/components/mixins/Translations.vue:89 +#: front/src/components/mixins/Translations.vue:90 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to favorites" msgstr "Accesso ai preferiti" -#: front/src/components/mixins/Translations.vue:85 -#: front/src/components/mixins/Translations.vue:86 +#: front/src/components/mixins/Translations.vue:97 +#: front/src/components/mixins/Translations.vue:98 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to follows" msgstr "Accesso ai seguiti" -#: front/src/components/mixins/Translations.vue:81 -#: front/src/components/mixins/Translations.vue:82 +#: front/src/components/mixins/Translations.vue:93 +#: front/src/components/mixins/Translations.vue:94 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to listening history" msgstr "Accedi alla cronologia di ascolto" -#: front/src/components/mixins/Translations.vue:101 -#: front/src/components/mixins/Translations.vue:102 +#: front/src/components/mixins/Translations.vue:113 +#: front/src/components/mixins/Translations.vue:114 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to notifications" msgstr "Accesso alle notifiche" -#: front/src/components/mixins/Translations.vue:89 -#: front/src/components/mixins/Translations.vue:90 +#: front/src/components/mixins/Translations.vue:101 +#: front/src/components/mixins/Translations.vue:102 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to playlists" msgstr "Accesso alle playlist" -#: front/src/components/mixins/Translations.vue:93 -#: front/src/components/mixins/Translations.vue:94 +#: front/src/components/mixins/Translations.vue:105 +#: front/src/components/mixins/Translations.vue:106 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to radios" msgstr "Accesso alle radio" -#: front/src/components/Home.vue:101 -msgctxt "Content/Home/List item" -msgid "" -"Access your music from a clean interface that focuses on what really matters" -msgstr "" -"Accedi alla tua musica da un'interfaccia pulita che si focalizza su quello " -"che conta davvero" - #: front/src/components/manage/library/UploadsTable.vue:67 -#: front/src/components/mixins/Translations.vue:45 +#: front/src/components/mixins/Translations.vue:55 #: front/src/views/admin/library/UploadDetail.vue:175 -#: front/src/components/mixins/Translations.vue:46 +#: front/src/components/mixins/Translations.vue:56 msgctxt "Content/*/*/Noun" msgid "Accessed date" msgstr "Data di accesso" -#: front/src/views/admin/library/LibraryDetail.vue:104 -#: front/src/views/admin/library/UploadDetail.vue:111 -msgctxt "*/*/*/Noun" -msgid "Account" -msgstr "Account" - #: front/src/components/manage/library/LibrariesTable.vue:49 #: front/src/components/manage/library/UploadsTable.vue:61 -msgctxt "*/*/*" +#: front/src/components/manage/moderation/ReportCard.vue:156 +#: front/src/components/mixins/Report.vue:13 +#: front/src/views/admin/library/LibraryDetail.vue:113 +#: front/src/views/admin/library/UploadDetail.vue:111 +#: front/src/components/mixins/Report.vue:14 +msgctxt "*/*/*/Noun" msgid "Account" msgstr "Account" @@ -286,7 +355,7 @@ msgctxt "Content/Settings/Title" msgid "Account settings" msgstr "Impostazioni dell'account" -#: front/src/components/auth/Settings.vue:479 +#: front/src/components/auth/Settings.vue:544 msgctxt "Head/Settings/Title" msgid "Account Settings" msgstr "Impostazioni dell'account" @@ -303,7 +372,7 @@ msgstr "Email dell'account" #: front/src/views/admin/moderation/AccountsList.vue:3 #: front/src/views/admin/moderation/AccountsList.vue:24 -#: front/src/views/admin/moderation/Base.vue:8 +#: front/src/views/admin/moderation/Base.vue:11 msgctxt "*/Moderation/Title" msgid "Accounts" msgstr "Account" @@ -316,31 +385,30 @@ msgstr "Azione" #: front/src/components/common/ActionTable.vue:101 msgctxt "Content/*/Paragraph" msgid "Action %{ action } was launched successfully on %{ count } element" -msgid_plural "" -"Action %{ action } was launched successfully on %{ count } elements" -msgstr[0] "" -"L'azione %{ action } è stata lanciata con successo su %{ count } elemento" -msgstr[1] "" -"L'azione %{ action } è stata lanciata con successo su %{ count } elementi" +msgid_plural "Action %{ action } was launched successfully on %{ count } elements" +msgstr[0] "L'azione %{ action } è stata lanciata con successo su %{ count } elemento" +msgstr[1] "L'azione %{ action } è stata lanciata con successo su %{ count } elementi" #: front/src/components/common/ActionTable.vue:22 #: front/src/components/library/radios/Builder.vue:65 +#: front/src/components/manage/moderation/ReportCard.vue:210 msgctxt "Content/*/*/Noun" msgid "Actions" msgstr "Azioni" -#: front/src/components/manage/users/UsersTable.vue:53 +#: front/src/components/manage/users/UsersTable.vue:54 msgctxt "Content/Admin/Table" msgid "Active" msgstr "Attivo" -#: front/src/views/admin/library/AlbumDetail.vue:134 -#: front/src/views/admin/library/ArtistDetail.vue:123 -#: front/src/views/admin/library/LibraryDetail.vue:138 -#: front/src/views/admin/library/TrackDetail.vue:186 +#: front/src/views/admin/library/AlbumDetail.vue:140 +#: front/src/views/admin/library/ArtistDetail.vue:128 +#: front/src/views/admin/library/LibraryDetail.vue:147 +#: front/src/views/admin/library/TagDetail.vue:83 +#: front/src/views/admin/library/TrackDetail.vue:192 #: front/src/views/admin/library/UploadDetail.vue:160 -#: front/src/views/admin/moderation/AccountsDetail.vue:220 -#: front/src/views/admin/moderation/DomainsDetail.vue:136 +#: front/src/views/admin/moderation/AccountsDetail.vue:221 +#: front/src/views/admin/moderation/DomainsDetail.vue:173 msgctxt "Content/Moderation/Title" msgid "Activity" msgstr "Attività " @@ -351,7 +419,7 @@ msgctxt "Content/Settings/Dropdown.Label/Noun" msgid "Activity visibility" msgstr "Visibilità dell'attività " -#: front/src/views/admin/moderation/DomainsList.vue:18 +#: front/src/views/admin/moderation/DomainsList.vue:22 msgctxt "Content/Moderation/Button/Verb" msgid "Add" msgstr "Aggiungi" @@ -397,7 +465,21 @@ msgctxt "Content/Radio/Paragraph" msgid "Add filters to customize your radio" msgstr "Aggiungi filtri per personalizzare la tua radio" -#: front/src/components/audio/PlayButton.vue:75 +#: front/src/components/manage/moderation/NoteForm.vue:12 +#, fuzzy +msgctxt "Content/Moderation/Button.Label/Verb" +msgid "Add note" +msgstr "Aggiungi contenuto" + +#: front/src/components/manage/moderation/DomainsTable.vue:191 +#: front/src/views/admin/moderation/DomainsDetail.vue:46 +#: front/src/views/admin/moderation/DomainsList.vue:18 +#, fuzzy +msgctxt "Content/Moderation/Action/Verb" +msgid "Add to allow-list" +msgstr "Aggiungi alla playlist…" + +#: front/src/components/audio/PlayButton.vue:91 msgctxt "*/Queue/Dropdown/Button/Title" msgid "Add to current queue" msgstr "Aggiungi alla coda attuale" @@ -429,7 +511,7 @@ msgctxt "Popup/Playlist/Table.Button.Label/Verb" msgid "Add track" msgstr "Aggiungi traccia" -#: front/src/components/manage/users/UsersTable.vue:69 +#: front/src/components/manage/users/UsersTable.vue:70 msgctxt "Content/Admin/Table.User role" msgid "Admin" msgstr "Amministratore" @@ -439,49 +521,49 @@ msgctxt "Sidebar/Admin/Title/Noun" msgid "Administration" msgstr "Amministrazione" -#: front/src/views/admin/library/TrackDetail.vue:107 -msgctxt "*/*/*/Noun" -msgid "Album" -msgstr "Album" - -#: front/src/components/audio/SearchBar.vue:26 +#: front/src/components/audio/SearchBar.vue:33 #: src/components/audio/track/Table.vue:9 -#: front/src/components/library/AlbumBase.vue:152 -#: front/src/components/library/ArtistBase.vue:194 +#: front/src/components/library/AlbumBase.vue:170 +#: front/src/components/library/ArtistBase.vue:212 #: front/src/components/manage/library/TracksTable.vue:40 #: front/src/components/metadata/Search.vue:134 +#: src/components/mixins/Report.vue:41 +#: front/src/views/admin/library/TrackDetail.vue:113 #: front/src/views/content/libraries/FilesTable.vue:57 +#: front/src/components/mixins/Report.vue:42 msgctxt "*/*/*" msgid "Album" msgstr "Album" -#: front/src/views/admin/library/TrackDetail.vue:128 +#: front/src/views/admin/library/TrackDetail.vue:134 msgctxt "*/*/*/Noun" msgid "Album artist" msgstr "Artista dell'album" -#: front/src/views/admin/library/AlbumDetail.vue:92 +#: front/src/views/admin/library/AlbumDetail.vue:98 msgctxt "Content/Moderation/Title" msgid "Album data" msgstr "Dati dell'album" -#: front/src/components/mixins/Translations.vue:51 -#: front/src/components/mixins/Translations.vue:52 +#: front/src/components/mixins/Translations.vue:61 +#: front/src/components/mixins/Translations.vue:62 msgctxt "Content/*/Dropdown/Noun" msgid "Album name" msgstr "Nome album" #: front/src/components/audio/Search.vue:19 -#: src/components/instance/Stats.vue:48 -#: front/src/components/library/Albums.vue:120 -#: src/components/library/Library.vue:7 +#: src/components/library/Albums.vue:129 +#: front/src/components/library/Library.vue:7 +#: src/components/library/TagDetail.vue:28 #: front/src/components/manage/library/ArtistsTable.vue:41 +#: front/src/components/manage/library/TagsTable.vue:43 #: front/src/views/admin/library/AlbumsList.vue:24 -#: front/src/views/admin/library/ArtistDetail.vue:241 +#: front/src/views/admin/library/ArtistDetail.vue:256 #: front/src/views/admin/library/Base.vue:11 -#: front/src/views/admin/library/LibraryDetail.vue:219 -#: front/src/views/admin/moderation/AccountsDetail.vue:354 -#: front/src/views/admin/moderation/DomainsDetail.vue:264 +#: front/src/views/admin/library/LibraryDetail.vue:238 +#: front/src/views/admin/library/TagDetail.vue:133 +#: front/src/views/admin/moderation/AccountsDetail.vue:366 +#: front/src/views/admin/moderation/DomainsDetail.vue:301 msgctxt "*/*/*" msgid "Albums" msgstr "Albums" @@ -495,7 +577,10 @@ msgstr "Albums di questo artista" #: front/src/components/manage/library/LibrariesTable.vue:13 #: front/src/components/manage/library/UploadsTable.vue:13 #: front/src/components/manage/library/UploadsTable.vue:22 +#: front/src/components/manage/moderation/DomainsTable.vue:11 #: front/src/components/manage/users/InvitationsTable.vue:19 +#: front/src/components/moderation/ReportCategoryDropdown.vue:32 +#: front/src/views/admin/moderation/ReportsList.vue:17 #: front/src/views/content/libraries/FilesTable.vue:13 msgctxt "Content/*/Dropdown" msgid "All" @@ -513,45 +598,57 @@ msgctxt "Head/Authorize/Title" msgid "Allow application" msgstr "Permetti applicazione" +#: front/src/components/About.vue:136 +msgctxt "*/*/*" +msgid "Allow-list" +msgstr "Lista dei consentiti" + +#: front/src/components/About.vue:149 +#, fuzzy +msgctxt "*/*/*" +msgid "Allowed domains" +msgstr "Aggiungi un dominio" + #: front/src/components/library/ImportStatusModal.vue:17 +#, fuzzy msgctxt "Popup/Import/Message" -msgid "" -"An error occured during upload processing. You will find more information " -"below." -msgstr "" -"Si è verificato un errore durante l'elaborazione del caricamento. Troverai " -"maggiori informazioni qui sotto." +msgid "An error occurred during upload processing. You will find more information below." +msgstr "Si è verificato un errore durante l'elaborazione del caricamento. Troverai maggiori informazioni qui sotto." #: front/src/components/playlists/Editor.vue:13 +#, fuzzy msgctxt "Content/Playlist/Error message.Title" -msgid "An error occured while saving your changes" +msgid "An error occurred while saving your changes" msgstr "C'è stato un errore durante il salvataggio delle tue modifiche" #: front/src/components/federation/FetchButton.vue:21 +#, fuzzy msgctxt "Popup/*/Message.Content" -msgid "An error occured while trying to refresh data:" -msgstr "" -"Si è verificato un errore durante il tentativo di aggiornamento dei dati:" +msgid "An error occurred while trying to refresh data:" +msgstr "Si è verificato un errore durante il tentativo di aggiornamento dei dati:" #: front/src/components/federation/FetchButton.vue:41 +#, fuzzy msgctxt "*/*/Error" -msgid "An HTTP error occured while contacting the remote server" +msgid "An HTTP error occurred while contacting the remote server" msgstr "Si è verificato un errore HTTP contattando il server remoto" -#: front/src/components/auth/Login.vue:10 -msgctxt "Content/Login/Error message/List item" -msgid "" -"An unknown error happend, this can mean the server is down or cannot be " -"reached" -msgstr "" -"Si è verificato un errore sconosciuto, questo significa che il server è " -"offline o non può essere raggiunto" - #: front/src/components/library/ImportStatusModal.vue:145 +#, fuzzy msgctxt "Popup/Import/Error.Label" -msgid "An unkwown error occured" +msgid "An unknown error occurred" msgstr "Si è verificato un errore sconosciuto" +#: front/src/components/About.vue:123 +msgctxt "*/*/*" +msgid "Anonymous access" +msgstr "Accesso anonimo" + +#: front/src/components/moderation/ReportModal.vue:54 +msgctxt "Popup/Moderation/Error message" +msgid "Anonymous reports are disabled, please sign-in to submit a report." +msgstr "Le segnalazioni anonime sono disabilitate, per favore accedi per inviare una segnalazione." + #: front/src/components/auth/Settings.vue:175 #: src/components/auth/Settings.vue:225 msgctxt "*/*/*/Noun" @@ -570,12 +667,8 @@ msgstr "ID Applicazione" #: front/src/components/auth/ApplicationEdit.vue:16 msgctxt "Content/Application/Paragraph/" -msgid "" -"Application ID and secret are really sensitive values and must be treated " -"like passwords. Do not share those with anyone else." -msgstr "" -"L'ID dell'applicazione e il suo secret sono valori molto sensibili e devono " -"essere trattati come password. Non condividerli con nessun altro." +msgid "Application ID and secret are really sensitive values and must be treated like passwords. Do not share those with anyone else." +msgstr "L'ID dell'applicazione e il suo secret sono valori molto sensibili e devono essere trattati come password. Non condividerli con nessun altro." #: front/src/components/auth/ApplicationEdit.vue:25 msgctxt "Content/Applications/Label" @@ -604,29 +697,27 @@ msgctxt "Content/Login/Title" msgid "Are you sure you want to log out?" msgstr "Sei sicuro di volerti disconnettere?" +#: front/src/components/audio/SearchBar.vue:32 +#: src/components/audio/track/Table.vue:8 #: front/src/components/manage/library/AlbumsTable.vue:40 #: front/src/components/manage/library/TracksTable.vue:41 -msgctxt "*/*/*" -msgid "Artist" -msgstr "Artista" - -#: front/src/components/audio/SearchBar.vue:25 -#: src/components/audio/track/Table.vue:8 #: front/src/components/metadata/Search.vue:130 -#: front/src/views/admin/library/AlbumDetail.vue:108 -#: front/src/views/admin/library/TrackDetail.vue:118 -#: front/src/views/content/libraries/FilesTable.vue:56 +#: src/components/mixins/Report.vue:55 +#: front/src/views/admin/library/AlbumDetail.vue:114 +#: front/src/views/admin/library/TrackDetail.vue:124 +#: front/src/views/content/libraries/FilesTable.vue:56 src/entities.js:12 +#: front/src/components/mixins/Report.vue:56 msgctxt "*/*/*/Noun" msgid "Artist" msgstr "Artista" -#: front/src/views/admin/library/ArtistDetail.vue:91 +#: front/src/views/admin/library/ArtistDetail.vue:96 msgctxt "Content/Moderation/Title" msgid "Artist data" msgstr "Dati dell'artista" -#: front/src/components/mixins/Translations.vue:52 -#: front/src/components/mixins/Translations.vue:53 +#: front/src/components/mixins/Translations.vue:62 +#: front/src/components/mixins/Translations.vue:63 msgctxt "Content/*/Dropdown/Noun" msgid "Artist name" msgstr "Nome dell'artista" @@ -636,36 +727,36 @@ msgctxt "*/Search/Input.Placeholder" msgid "Artist, album, track…" msgstr "Artista, album, traccia…" +#: front/src/components/audio/Search.vue:10 +#: src/components/library/Artists.vue:117 +#: front/src/components/library/Library.vue:10 +#: front/src/components/library/TagDetail.vue:19 +#: front/src/components/manage/library/TagsTable.vue:42 #: front/src/views/admin/library/ArtistsList.vue:24 #: front/src/views/admin/library/Base.vue:8 -#: front/src/views/admin/library/LibraryDetail.vue:209 -msgctxt "*/*/*" -msgid "Artists" -msgstr "Artisti" - -#: front/src/components/audio/Search.vue:10 -#: src/components/instance/Stats.vue:42 -#: front/src/components/library/Artists.vue:117 -#: src/components/library/Library.vue:10 -#: front/src/views/admin/moderation/AccountsDetail.vue:346 -#: front/src/views/admin/moderation/DomainsDetail.vue:254 +#: front/src/views/admin/library/LibraryDetail.vue:228 +#: front/src/views/admin/library/TagDetail.vue:123 +#: front/src/views/admin/moderation/AccountsDetail.vue:358 +#: front/src/views/admin/moderation/DomainsDetail.vue:291 msgctxt "*/*/*/Noun" msgid "Artists" msgstr "Artisti" #: front/src/components/favorites/List.vue:34 -#: src/components/library/Albums.vue:25 -#: front/src/components/library/Artists.vue:25 +#: src/components/library/Albums.vue:29 +#: front/src/components/library/Artists.vue:29 #: src/components/library/Radios.vue:44 #: front/src/components/manage/library/AlbumsTable.vue:21 #: front/src/components/manage/library/ArtistsTable.vue:21 #: front/src/components/manage/library/EditsCardList.vue:39 #: front/src/components/manage/library/LibrariesTable.vue:30 +#: front/src/components/manage/library/TagsTable.vue:21 #: front/src/components/manage/library/TracksTable.vue:21 #: front/src/components/manage/library/UploadsTable.vue:40 #: front/src/components/manage/moderation/AccountsTable.vue:21 -#: front/src/components/manage/moderation/DomainsTable.vue:19 +#: front/src/components/manage/moderation/DomainsTable.vue:27 #: front/src/components/manage/users/UsersTable.vue:19 +#: front/src/views/admin/moderation/ReportsList.vue:44 #: front/src/views/content/libraries/FilesTable.vue:31 #: front/src/views/playlists/List.vue:27 msgctxt "Content/Search/Dropdown" @@ -677,18 +768,24 @@ msgctxt "Content/Signup/Button.Label/Verb" msgid "Ask for a password reset" msgstr "Chiedi un reset della password" -#: front/src/views/admin/library/AlbumDetail.vue:198 -#: front/src/views/admin/library/ArtistDetail.vue:187 -#: front/src/views/admin/library/LibraryDetail.vue:176 -#: front/src/views/admin/library/TrackDetail.vue:250 +#: front/src/components/manage/moderation/ReportCard.vue:72 +msgctxt "Content/Moderation/*" +msgid "Assigned to" +msgstr "Assegnato a" + +#: front/src/views/admin/library/AlbumDetail.vue:214 +#: front/src/views/admin/library/ArtistDetail.vue:202 +#: front/src/views/admin/library/LibraryDetail.vue:195 +#: front/src/views/admin/library/TagDetail.vue:113 +#: front/src/views/admin/library/TrackDetail.vue:266 #: front/src/views/admin/library/UploadDetail.vue:191 -#: front/src/views/admin/moderation/AccountsDetail.vue:274 -#: front/src/views/admin/moderation/DomainsDetail.vue:202 +#: front/src/views/admin/moderation/AccountsDetail.vue:285 +#: front/src/views/admin/moderation/DomainsDetail.vue:239 msgctxt "Content/Moderation/Title" msgid "Audio content" msgstr "Contenuto audio" -#: front/src/components/ShortcutsModal.vue:55 +#: front/src/components/ShortcutsModal.vue:92 msgctxt "Popup/Keyboard shortcuts/Title" msgid "Audio player shortcuts" msgstr "Scorciatoie del lettore audio" @@ -731,9 +828,9 @@ msgid "Back to settings" msgstr "Torna alle impostazioni" #: front/src/components/library/TrackDetail.vue:48 -#: front/src/components/mixins/Translations.vue:55 +#: front/src/components/mixins/Translations.vue:67 #: front/src/views/admin/library/UploadDetail.vue:227 -#: front/src/components/mixins/Translations.vue:56 +#: front/src/components/mixins/Translations.vue:68 msgctxt "Content/Track/*/Noun" msgid "Bitrate" msgstr "Bitrate" @@ -746,14 +843,8 @@ msgstr "Blocca tutto" #: front/src/components/manage/moderation/InstancePolicyForm.vue:112 msgctxt "Content/Moderation/Help text" -msgid "" -"Block everything from this account or domain. This will prevent any " -"interaction with the entity, and purge related content (uploads, libraries, " -"follows, etc.)" -msgstr "" -"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.)" +msgid "Block everything from this account or domain. This will prevent any interaction with the entity, and purge related content (uploads, libraries, follows, etc.)" +msgstr "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.)" #: front/src/components/Sidebar.vue:18 src/components/library/Library.vue:4 msgctxt "*/Library/*/Verb" @@ -765,6 +856,12 @@ msgctxt "Sidebar/Library/List item.Link/Verb" msgid "Browse library" msgstr "Sfoglia libreria" +#: front/src/components/Home.vue:132 +#, fuzzy +msgctxt "Content/Home/Link" +msgid "Browse public content" +msgstr "Aggiorna tabella dei contenuti" + #: front/src/components/library/Albums.vue:4 msgctxt "Content/Album/Title" msgid "Browsing albums" @@ -795,43 +892,43 @@ msgctxt "Content/Album/Card" msgid "By %{ artist }" msgstr "Di %{ artist }" -#: front/src/views/content/remote/Card.vue:112 +#: front/src/views/content/remote/Card.vue:125 msgctxt "Popup/Library/Paragraph" msgid "By unfollowing this library, you loose access to its content." -msgstr "" -"Smettendo di seguire questa libreria, perderai l'accesso al suo contenuto." +msgstr "Smettendo di seguire questa libreria, perderai l'accesso al suo contenuto." -#: front/src/views/admin/library/AlbumDetail.vue:214 -#: front/src/views/admin/library/ArtistDetail.vue:203 -#: front/src/views/admin/library/LibraryDetail.vue:192 -#: front/src/views/admin/library/TrackDetail.vue:266 +#: front/src/views/admin/library/AlbumDetail.vue:230 +#: front/src/views/admin/library/ArtistDetail.vue:218 +#: front/src/views/admin/library/LibraryDetail.vue:211 +#: front/src/views/admin/library/TrackDetail.vue:282 #: front/src/views/admin/library/UploadDetail.vue:208 -#: front/src/views/admin/moderation/AccountsDetail.vue:290 -#: front/src/views/admin/moderation/DomainsDetail.vue:217 +#: front/src/views/admin/moderation/AccountsDetail.vue:301 +#: front/src/views/admin/moderation/DomainsDetail.vue:254 msgctxt "Content/Moderation/Table.Label/Noun" msgid "Cached size" msgstr "Dimensione in cache" #: front/src/components/SetInstanceModal.vue:37 #: front/src/components/common/DangerousButton.vue:17 -#: front/src/components/library/AlbumBase.vue:36 -#: front/src/components/library/ArtistBase.vue:47 -#: front/src/components/library/EditForm.vue:95 -#: front/src/components/library/TrackBase.vue:55 +#: front/src/components/library/AlbumBase.vue:37 +#: front/src/components/library/ArtistBase.vue:48 +#: front/src/components/library/EditForm.vue:107 +#: front/src/components/library/TrackBase.vue:53 #: front/src/components/library/radios/Filter.vue:53 #: front/src/components/manage/moderation/InstancePolicyForm.vue:54 #: front/src/components/moderation/FilterModal.vue:39 +#: front/src/components/moderation/ReportModal.vue:59 #: front/src/components/playlists/PlaylistModal.vue:26 #: front/src/components/playlists/PlaylistModal.vue:77 +#: front/src/views/playlists/Detail.vue:62 msgctxt "*/*/Button.Label/Verb" msgid "Cancel" msgstr "Annulla" -#: front/src/views/content/remote/Card.vue:97 -#, fuzzy +#: front/src/views/content/remote/Card.vue:110 msgctxt "Content/Library/Card.Paragraph" msgid "Cancel follow request" -msgstr "Richiesta di seguire in sospeso" +msgstr "Annulla richiesta di seguire" #: front/src/components/library/radios/Builder.vue:64 msgctxt "Content/Radio/Table.Label/Noun (Value is a number of Tracks)" @@ -843,6 +940,14 @@ msgctxt "Content/Library/Help text" msgid "Cannot upload this file, ensure it is not too big" msgstr "Impossibile caricare questo file, controlla che non sia troppo grande" +#: front/src/components/manage/moderation/ReportCard.vue:30 +#: front/src/components/mixins/Translations.vue:42 +#: front/src/components/moderation/ReportCategoryDropdown.vue:2 +#: front/src/components/mixins/Translations.vue:43 +msgctxt "*/*/*" +msgid "Category" +msgstr "Categoria" + #: front/src/components/Footer.vue:21 msgctxt "Footer/Settings/Dropdown.Label/Short, Verb" msgid "Change language" @@ -858,6 +963,11 @@ msgctxt "Content/Settings/Button.Label" msgid "Change password" msgstr "Cambia password" +#: front/src/components/Footer.vue:37 +msgctxt "Footer/Settings/Dropdown.Label/Short, Verb" +msgid "Change theme" +msgstr "Cambia tema" + #: front/src/views/auth/PasswordResetConfirm.vue:62 msgctxt "*/Signup/Title" msgid "Change your password" @@ -875,43 +985,32 @@ msgstr "Modifiche sincronizzate con il server" #: front/src/components/auth/Settings.vue:71 msgctxt "Content/Settings/Paragraph'" -msgid "" -"Changing your password will also change your Subsonic API password if you " -"have requested one." -msgstr "" -"Cambiando la tua password cambierà anche la password della API Subsonic se " -"ne hai richiesta una." +msgid "Changing your password will also change your Subsonic API password if you have requested one." +msgstr "Cambiando la tua password cambierà anche la password della API Subsonic se ne hai richiesta una." #: front/src/components/auth/Settings.vue:98 msgctxt "Popup/Settings/Paragraph" msgid "Changing your password will have the following consequences:" msgstr "Cambiare la tua password avrà queste conseguenze:" -#: front/src/components/Footer.vue:40 +#: front/src/components/Footer.vue:48 msgctxt "Footer/*/List item.Link" msgid "Chat room" msgstr "Stanza di conversazione" #: front/src/components/auth/ApplicationForm.vue:24 msgctxt "Content/Applications/Paragraph/" -msgid "" -"Checking the parent \"Read\" or \"Write\" scopes implies access to all the " -"corresponding children scopes." -msgstr "" -"Controllando i permessi \"Lettura\" o \"Scrittura\" del livello superiore " -"implica l'accesso a tutti i corrispondenti permessi dei livelli inferiori." +msgid "Checking the parent \"Read\" or \"Write\" scopes implies access to all the corresponding children scopes." +msgstr "Controllando i permessi \"Lettura\" o \"Scrittura\" del livello superiore implica l'accesso a tutti i corrispondenti permessi dei livelli inferiori." #: front/src/components/SetInstanceModal.vue:2 msgctxt "Popup/Instance/Title" msgid "Choose your instance" msgstr "Scegli la tua istanza" -#: front/src/components/manage/users/InvitationForm.vue:37 -msgctxt "Content/Admin/Button.Label/Verb" -msgid "Clear" -msgstr "Pulisci" - #: front/src/components/library/EditForm.vue:75 +#: front/src/components/library/EditForm.vue:88 +#: front/src/components/manage/users/InvitationForm.vue:37 msgctxt "Content/Library/Button.Label" msgid "Clear" msgstr "Pulisci" @@ -922,48 +1021,47 @@ msgctxt "*/Playlist/Button.Label/Verb" msgid "Clear playlist" msgstr "Pulisci playlist" -#: front/src/components/audio/Player.vue:642 +#: front/src/components/ShortcutsModal.vue:144 +#, fuzzy +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Clear queue" +msgstr "Pulisci la tua coda" + +#: front/src/components/audio/Player.vue:668 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Clear your queue" msgstr "Pulisci la tua coda" -#: front/src/components/Home.vue:44 -msgctxt "Content/Home/List item/Verb" -msgid "Click once, listen for hours using built-in radios" -msgstr "Clicca una volta, ascolta per ore utilizzando le radio integrate" - #: front/src/components/mixins/Translations.vue:21 #: front/src/components/mixins/Translations.vue:22 msgctxt "Content/Library/Link.Title" -msgid "" -"Click to display more information about the import process for this upload" -msgstr "" -"Clicca per visualizzare più informazioni sul processo di importazione di " -"questo caricamento" +msgid "Click to display more information about the import process for this upload" +msgstr "Clicca per visualizzare più informazioni sul processo di importazione di questo caricamento" #: front/src/components/library/FileUpload.vue:82 msgctxt "Content/Library/Paragraph/Call to action" msgid "Click to select files to upload or drag and drop files or directories" -msgstr "" -"Clicca per selezionare i file da caricare o trascina e rilascia file o " -"cartelle" +msgstr "Clicca per selezionare i file da caricare o trascina e rilascia file o cartelle" +#: front/src/components/ShortcutsModal.vue:38 #: front/src/components/federation/FetchButton.vue:85 #: front/src/components/library/ImportStatusModal.vue:79 +#: front/src/components/manage/moderation/InstancePolicyModal.vue:34 msgctxt "*/*/Button.Label/Verb" msgid "Close" msgstr "Chiudi" -#: front/src/components/ShortcutsModal.vue:20 -msgctxt "Popup/Keyboard shortcuts/Button.Label/Verb" -msgid "Close" -msgstr "Chiudi" - #: front/src/components/federation/FetchButton.vue:88 msgctxt "*/*/Button.Label/Verb" msgid "Close and reload page" msgstr "Chiudi e ricarica pagina" +#: front/src/components/About.vue:94 +#, fuzzy +msgctxt "*/*/*/State of registrations" +msgid "Closed" +msgstr "Chiudi" + #: front/src/components/manage/users/InvitationForm.vue:26 #: front/src/components/manage/users/InvitationsTable.vue:42 msgctxt "Content/Admin/Table.Label/Noun" @@ -971,8 +1069,9 @@ msgid "Code" msgstr "Codice" #: front/src/components/audio/album/Card.vue:41 -#: front/src/components/audio/artist/Card.vue:33 -msgctxt "Content/*/Card.Link/Verb" +#: front/src/components/common/CollapseLink.vue:3 +#, fuzzy +msgctxt "*/*/Button,Label" msgid "Collapse" msgstr "Riduci" @@ -996,44 +1095,47 @@ msgctxt "Content/Signup/Form.Label" msgid "Confirmation code" msgstr "Codice di conferma" +#: front/src/components/About.vue:67 src/components/Home.vue:65 +msgctxt "Content/Home/Header/Name" +msgid "Contact" +msgstr "Contatta" + #: front/src/components/moderation/FilterModal.vue:90 msgctxt "*/Moderation/Message" msgid "Content filter successfully added" msgstr "Filtro di contenuto aggiunto con successo" -#: front/src/components/mixins/Translations.vue:96 -#: front/src/components/mixins/Translations.vue:97 -msgctxt "Content/OAuth Scopes/Label" -msgid "Content filters" -msgstr "Filtri di contenuto" - #: front/src/components/auth/Settings.vue:116 +#: front/src/components/mixins/Translations.vue:108 +#: front/src/components/mixins/Translations.vue:109 msgctxt "Content/Settings/Title/Noun" msgid "Content filters" msgstr "Filtri di contenuto" #: front/src/components/auth/Settings.vue:119 msgctxt "Content/Settings/Paragraph" -msgid "" -"Content filters help you hide content you don't want to see on the service." -msgstr "" -"I filtri di contenuti ti aiutano a nascondere cose che non vuoi vedere su " -"questo servizio." +msgid "Content filters help you hide content you don't want to see on the service." +msgstr "I filtri di contenuti ti aiutano a nascondere cose che non vuoi vedere su questo servizio." #: front/src/components/common/ActionTable.vue:8 msgctxt "Content/*/Button.Help text.Paragraph" msgid "Content have been updated, click refresh to see up-to-date content" -msgstr "" -"Il contenuto è stato aggiornato, clicca aggiorna per visualizzaare il " -"contenuto aggiornato" +msgstr "Il contenuto è stato aggiornato, clicca aggiorna per visualizzaare il contenuto aggiornato" -#: front/src/components/Footer.vue:48 +#: front/src/components/About.vue:46 +#, fuzzy +msgctxt "Content/About/Header" +msgid "Contents" +msgstr "Filtri di contenuto" + +#: front/src/components/Footer.vue:56 msgctxt "Footer/*/List item.Link" msgid "Contribute" msgstr "Contribuisci" -#: front/src/components/audio/EmbedWizard.vue:19 +#: front/src/components/audio/EmbedWizard.vue:29 #: front/src/components/common/CopyInput.vue:8 +#: front/src/components/forms/PasswordInput.vue:43 msgctxt "*/*/Button.Label/Short, Verb" msgid "Copy" msgstr "Copia" @@ -1048,16 +1150,16 @@ msgctxt "Content/Auth/Paragraph" msgid "Copy-paste the following code in the application:" msgstr "Copia-incolla il codice seguente in questa applicazione:" -#: front/src/components/audio/EmbedWizard.vue:21 +#: front/src/components/audio/EmbedWizard.vue:31 msgctxt "Popup/Embed/Paragraph" msgid "Copy/paste this code in your website HTML" msgstr "Copia/incolla questo codice nel tuo sito HTML" #: front/src/components/library/TrackDetail.vue:10 -#: front/src/views/admin/library/TrackDetail.vue:153 -msgctxt "Content/Track/Table.Label/Noun" +#: front/src/views/admin/library/TrackDetail.vue:159 src/edits.js:77 +msgctxt "Content/Track/*/Noun" msgid "Copyright" -msgstr "Copyright" +msgstr "Diritti d'autore" #: front/src/views/auth/EmailConfirm.vue:7 msgctxt "Content/Signup/Paragraph" @@ -1069,29 +1171,20 @@ msgctxt "Content/Library/Error message.Title" msgid "Could not fetch remote library" msgstr "Non è stato possibile recuperare la libreria remota" -#: front/src/components/Home.vue:80 -msgctxt "Content/Home/List item" -msgid "Covers, lyrics, our goal is to have them all ;)" -msgstr "Copertine, testi, il nostro obbiettivo è averli tutti ;)" - #: front/src/components/manage/moderation/InstancePolicyForm.vue:58 msgctxt "Content/Moderation/Card.Button.Label/Verb" msgid "Create" msgstr "Crea" -#: front/src/components/auth/Signup.vue:4 +#: front/src/views/auth/Signup.vue:4 msgctxt "Content/Signup/Title" msgid "Create a funkwhale account" msgstr "Crea un account funkwhale" -#: front/src/components/auth/Settings.vue:220 -msgctxt "Content/Settings/Button.Label" -msgid "Create a new application" -msgstr "Crea una nuova applicazione" - #: front/src/components/auth/ApplicationNew.vue:8 #: front/src/components/auth/ApplicationNew.vue:41 -msgctxt "Content/Applications/Title" +#: front/src/components/auth/Settings.vue:220 +msgctxt "Content/Settings/Button.Label" msgid "Create a new application" msgstr "Crea una nuova applicazione" @@ -1105,7 +1198,7 @@ msgctxt "Popup/Playlist/Title/Verb" msgid "Create a new playlist" msgstr "Crea una nuova playlist" -#: front/src/components/Sidebar.vue:57 src/components/auth/Login.vue:17 +#: front/src/components/Sidebar.vue:57 src/components/auth/LoginForm.vue:15 msgctxt "*/Signup/Link/Verb" msgid "Create an account" msgstr "Crea un account" @@ -1120,7 +1213,7 @@ msgctxt "Content/Library/Button.Label/Verb" msgid "Create library" msgstr "Crea libreria" -#: front/src/components/auth/Signup.vue:53 +#: front/src/components/auth/SignupForm.vue:49 msgctxt "Content/Signup/Button.Label" msgid "Create my account" msgstr "Crea il mio account" @@ -1145,11 +1238,13 @@ msgstr "Crea la tua radio" #: front/src/components/manage/library/AlbumsTable.vue:44 #: front/src/components/manage/library/ArtistsTable.vue:43 #: front/src/components/manage/library/LibrariesTable.vue:54 +#: front/src/components/manage/library/TagsTable.vue:45 #: front/src/components/manage/library/TracksTable.vue:44 #: front/src/components/manage/library/UploadsTable.vue:66 +#: front/src/components/manage/moderation/ReportCard.vue:43 #: front/src/components/manage/users/InvitationsTable.vue:40 -#: front/src/components/mixins/Translations.vue:43 -#: front/src/components/mixins/Translations.vue:44 +#: front/src/components/mixins/Translations.vue:53 +#: front/src/components/mixins/Translations.vue:54 msgctxt "Content/*/*/Noun" msgid "Creation date" msgstr "Data di creazione" @@ -1159,6 +1254,12 @@ msgctxt "Content/Settings/Title/Noun" msgid "Current avatar" msgstr "Avatar attuale" +#: front/src/components/admin/SettingsGroup.vue:67 +#, fuzzy +msgctxt "Content/Settings/Title/Noun" +msgid "Current image" +msgstr "Utilizzo attuale" + #: front/src/views/content/libraries/DetailArea.vue:4 msgctxt "Content/Library/Title" msgid "Current library" @@ -1174,11 +1275,15 @@ msgctxt "Content/Library/Title" msgid "Current usage" msgstr "Utilizzo attuale" +#: front/src/components/Footer.vue:94 +msgctxt "Footer/Settings/Dropdown.Label/Theme name" +msgid "Dark" +msgstr "Scuro" + #: front/src/components/federation/FetchButton.vue:53 msgctxt "*/*/Error" msgid "Data returned by the remote server had invalid or missing attributes" -msgstr "" -"I dati riportati dal server remoto hanno attributi invalidi o mancanti" +msgstr "I dati riportati dal server remoto hanno attributi invalidi o mancanti" #: front/src/components/federation/FetchButton.vue:17 msgctxt "Popup/*/Message.Content" @@ -1195,7 +1300,7 @@ msgctxt "Popup/Import/Table.Label/Noun" msgid "Debug information" msgstr "Informazioni di debug" -#: front/src/components/ShortcutsModal.vue:75 +#: front/src/components/ShortcutsModal.vue:128 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Decrease volume" msgstr "Diminuisci volume" @@ -1207,23 +1312,29 @@ msgstr "Diminuisci volume" #: front/src/components/manage/library/AlbumsTable.vue:188 #: front/src/components/manage/library/ArtistsTable.vue:178 #: front/src/components/manage/library/LibrariesTable.vue:205 +#: front/src/components/manage/library/TagsTable.vue:179 #: front/src/components/manage/library/TracksTable.vue:188 #: front/src/components/manage/library/UploadsTable.vue:255 #: front/src/components/manage/moderation/InstancePolicyForm.vue:61 +#: front/src/components/manage/moderation/NotesThread.vue:24 +#: front/src/components/manage/moderation/NotesThread.vue:29 +#: front/src/components/manage/moderation/ReportCard.vue:360 #: front/src/components/manage/users/InvitationsTable.vue:167 -#: front/src/views/admin/library/AlbumDetail.vue:72 -#: front/src/views/admin/library/AlbumDetail.vue:77 -#: front/src/views/admin/library/ArtistDetail.vue:71 +#: front/src/views/admin/library/AlbumDetail.vue:78 +#: front/src/views/admin/library/AlbumDetail.vue:83 #: front/src/views/admin/library/ArtistDetail.vue:76 +#: front/src/views/admin/library/ArtistDetail.vue:81 #: front/src/views/admin/library/LibraryDetail.vue:58 #: front/src/views/admin/library/LibraryDetail.vue:63 -#: front/src/views/admin/library/TrackDetail.vue:71 -#: front/src/views/admin/library/TrackDetail.vue:76 +#: front/src/views/admin/library/TagDetail.vue:41 +#: front/src/views/admin/library/TagDetail.vue:46 +#: front/src/views/admin/library/TrackDetail.vue:77 +#: front/src/views/admin/library/TrackDetail.vue:82 #: front/src/views/admin/library/UploadDetail.vue:65 #: front/src/views/admin/library/UploadDetail.vue:70 #: front/src/views/content/libraries/FilesTable.vue:222 #: front/src/views/content/libraries/Form.vue:29 -#: src/views/playlists/Detail.vue:34 +#: src/views/playlists/Detail.vue:42 msgctxt "*/*/*/Verb" msgid "Delete" msgstr "Elimina" @@ -1248,7 +1359,20 @@ msgctxt "Popup/Moderation/Button.Label/Verb" msgid "Delete moderation rule" msgstr "Elimina regola di moderazione" -#: front/src/views/playlists/Detail.vue:39 +#: front/src/components/auth/Settings.vue:274 +#: src/components/auth/Settings.vue:302 +#, fuzzy +msgctxt "*/*/Button.Label" +msgid "Delete my account" +msgstr "Crea il mio account" + +#: front/src/components/auth/Settings.vue:297 +#, fuzzy +msgctxt "*/*/Button.Label" +msgid "Delete my account…" +msgstr "Crea il mio account" + +#: front/src/views/playlists/Detail.vue:47 msgctxt "Popup/Playlist/Button.Label/Verb" msgid "Delete playlist" msgstr "Elimina playlist" @@ -1258,13 +1382,23 @@ msgctxt "Popup/Radio/Button.Label/Verb" msgid "Delete radio" msgstr "Elimina radio" -#: front/src/views/admin/library/AlbumDetail.vue:73 -#: front/src/views/admin/library/TrackDetail.vue:72 +#: front/src/components/manage/moderation/ReportCard.vue:357 +msgctxt "Content/Moderation/Button/Verb" +msgid "Delete reported object" +msgstr "Elimina oggetto segnalato" + +#: front/src/components/manage/moderation/ReportCard.vue:358 +msgctxt "Content/Moderation/Popup/Header" +msgid "Delete reported object?" +msgstr "Eliminare oggetto segnalato?" + +#: front/src/views/admin/library/AlbumDetail.vue:79 +#: front/src/views/admin/library/TrackDetail.vue:78 msgctxt "Popup/Library/Title" msgid "Delete this album?" msgstr "Eliminare questo album?" -#: front/src/views/admin/library/ArtistDetail.vue:72 +#: front/src/views/admin/library/ArtistDetail.vue:77 msgctxt "Popup/Library/Title" msgid "Delete this artist?" msgstr "Eliminare questo artista?" @@ -1280,60 +1414,71 @@ msgctxt "Popup/Moderation/Title" msgid "Delete this moderation rule?" msgstr "Eliminare questa regola di moderazione?" -#: front/src/components/library/EditCard.vue:94 -msgctxt "Popup/Library/Title" -msgid "Delete this suggestion?" +#: front/src/components/manage/moderation/NotesThread.vue:25 +#, fuzzy +msgctxt "Popup/Moderation/Title" +msgid "Delete this note?" +msgstr "Eliminare questo artista?" + +#: front/src/components/library/EditCard.vue:94 +msgctxt "Popup/Library/Title" +msgid "Delete this suggestion?" msgstr "Eliminare questo suggerimento?" +#: front/src/views/admin/library/TagDetail.vue:42 +#, fuzzy +msgctxt "Popup/Library/Title" +msgid "Delete this tag?" +msgstr "Eliminare questo album?" + #: front/src/views/admin/library/UploadDetail.vue:66 msgctxt "Popup/Library/Title" msgid "Delete this upload?" msgstr "Eliminare questo caricamento?" #: front/src/components/favorites/List.vue:35 -#: src/components/library/Albums.vue:26 -#: front/src/components/library/Artists.vue:26 +#: src/components/library/Albums.vue:30 +#: front/src/components/library/Artists.vue:30 #: src/components/library/Radios.vue:47 #: front/src/components/manage/library/AlbumsTable.vue:22 #: front/src/components/manage/library/ArtistsTable.vue:22 #: front/src/components/manage/library/EditsCardList.vue:40 #: front/src/components/manage/library/LibrariesTable.vue:31 +#: front/src/components/manage/library/TagsTable.vue:22 #: front/src/components/manage/library/TracksTable.vue:22 #: front/src/components/manage/library/UploadsTable.vue:41 #: front/src/components/manage/moderation/AccountsTable.vue:22 -#: front/src/components/manage/moderation/DomainsTable.vue:20 +#: front/src/components/manage/moderation/DomainsTable.vue:28 #: front/src/components/manage/users/UsersTable.vue:20 +#: front/src/views/admin/moderation/ReportsList.vue:45 #: front/src/views/content/libraries/FilesTable.vue:32 #: front/src/views/playlists/List.vue:28 msgctxt "Content/Search/Dropdown" msgid "Descending" msgstr "Decrescente" -#: front/src/views/admin/library/LibraryDetail.vue:123 -msgctxt "*/*/*/Noun" -msgid "Description" -msgstr "Descrizione" +#: front/src/components/manage/moderation/NoteForm.vue:37 +msgctxt "Content/Moderation/Placeholder" +msgid "Describe what actions have been taken, or any other related updates…" +msgstr "Descrivi quali azioni sono state eseguite, o qualsiasi altro aggiornamento relativo a questo…" #: front/src/components/library/radios/Builder.vue:25 +#: front/src/views/admin/library/LibraryDetail.vue:132 #: front/src/views/content/libraries/Form.vue:14 -msgctxt "Content/*/Input.Label/Noun" +msgctxt "*/*/*/Noun" msgid "Description" msgstr "Descrizione" #: front/src/views/content/libraries/Card.vue:48 -#: src/views/content/remote/Card.vue:54 +#: src/views/content/remote/Card.vue:67 msgctxt "Content/Library/Card.Button.Label/Noun" msgid "Details" msgstr "Dettagli" -#: front/src/views/admin/moderation/AccountsDetail.vue:491 +#: front/src/views/admin/moderation/AccountsDetail.vue:511 msgctxt "Content/Moderation/Help text" -msgid "" -"Determine how much content the user can upload. Leave empty to use the " -"default value of the instance." -msgstr "" -"Determina quanto contenuto un utente può caricare. Lascia vuoto per usare il" -" valore predefinito dell'istanza." +msgid "Determine how much content the user can upload. Leave empty to use the default value of the instance." +msgstr "Determina quanto contenuto un utente può caricare. Lascia vuoto per usare il valore predefinito dell'istanza." #: front/src/components/mixins/Translations.vue:8 #: front/src/components/mixins/Translations.vue:9 @@ -1342,38 +1487,51 @@ msgid "Determine the visibility level of your activity" msgstr "Imposta il livello di visibilità delle tue attività " #: front/src/components/auth/Settings.vue:104 -#: front/src/components/auth/SubsonicTokenForm.vue:51 +#: front/src/components/auth/SubsonicTokenForm.vue:56 msgctxt "Popup/Settings/Button.Label" msgid "Disable access" msgstr "Disabilita accesso" -#: front/src/components/auth/SubsonicTokenForm.vue:48 +#: front/src/components/auth/SubsonicTokenForm.vue:53 msgctxt "Content/Settings/Button.Label/Verb" msgid "Disable Subsonic access" msgstr "Disabilita accesso Subsonic" -#: front/src/components/auth/SubsonicTokenForm.vue:49 +#: front/src/components/auth/SubsonicTokenForm.vue:54 msgctxt "Popup/Settings/Title" msgid "Disable Subsonic API access?" msgstr "Disabilitare l'accesso alle API Subsonic?" +#: front/src/components/About.vue:118 src/components/About.vue:131 +#: front/src/components/About.vue:144 #: front/src/components/manage/moderation/InstancePolicyForm.vue:18 #: front/src/views/admin/moderation/AccountsDetail.vue:157 #: front/src/views/admin/moderation/AccountsDetail.vue:161 -msgctxt "*/*/*" +#, fuzzy +msgctxt "*/*/*/State of feature" msgid "Disabled" msgstr "Disabilitato" -#: front/src/views/admin/library/TrackDetail.vue:145 +#: front/src/views/admin/library/TrackDetail.vue:151 msgctxt "*/*/*/Noun" msgid "Disc number" msgstr "Numero disco" +#: front/src/components/Home.vue:157 +msgctxt "Content/Home/Link" +msgid "Discover everything you need to know about Funkwhale and its features" +msgstr "Scopri tutto quello che devi sapere su Funkwhale e le sue funzionalità " + #: front/src/components/auth/SubsonicTokenForm.vue:13 msgctxt "Content/Settings/Link" msgid "Discover how to use Funkwhale from other apps" msgstr "Scopri come utilizzare Funkwhale attraverso altre app" +#: front/src/views/Notifications.vue:45 +msgctxt "Content/Notifications/Button.Label/Verb" +msgid "Discover other ways to help" +msgstr "Scopri altri modi per aiutare" + #: front/src/views/admin/moderation/AccountsDetail.vue:132 msgctxt "'Content/*/*/Noun'" msgid "Display name" @@ -1386,13 +1544,14 @@ msgstr "Mostra pubblicamente" #: front/src/components/manage/moderation/InstancePolicyForm.vue:122 msgctxt "Content/Moderation/Help text" -msgid "" -"Do not download any media file (audio, album cover, account avatar…) from " -"this account or domain. This will purge existing content as well." -msgstr "" -"Non scaricare nessun media (audio, copertina dell'album, avatar " -"dell'account...) da questo account o dominio. Questo eliminerà anche i " -"contenuti già esistenti." +msgid "Do not download any media file (audio, album cover, account avatar…) from this account or domain. This will purge existing content as well." +msgstr "Non scaricare nessun media (audio, copertina dell'album, avatar dell'account…) da questo account o dominio. Questo eliminerà anche i contenuti già esistenti." + +#: front/src/views/Notifications.vue:36 +#, fuzzy +msgctxt "Content/Notifications/Header" +msgid "Do you like Funkwhale?" +msgstr "A proposito di Funkwhale" #: front/src/components/playlists/Editor.vue:51 msgctxt "Popup/Playlist/Title" @@ -1404,7 +1563,7 @@ msgctxt "Modal/*/Title" msgid "Do you want to confirm this action?" msgstr "Vuoi confermare questa azione?" -#: front/src/views/playlists/Detail.vue:35 +#: front/src/views/playlists/Detail.vue:43 msgctxt "Popup/Playlist/Title/Call to action" msgid "Do you want to delete the playlist \"%{ playlist }\"?" msgstr "Vuoi eliminare la playlist \"%{ playlist }\"?" @@ -1414,6 +1573,12 @@ msgctxt "Popup/Radio/Title" msgid "Do you want to delete the radio \"%{ radio }\"?" msgstr "Vuoi eliminare la radio \"%{ radio }\"?" +#: front/src/components/auth/Settings.vue:298 +#, fuzzy +msgctxt "Popup/Settings/Title" +msgid "Do you want to delete your account?" +msgstr "Vuoi ripristinare la tua coda precedente?" + #: front/src/components/moderation/FilterModal.vue:3 msgctxt "Popup/Moderation/Title/Verb" msgid "Do you want to hide content from artist \"%{ name }\"?" @@ -1426,7 +1591,13 @@ msgid_plural "Do you want to launch %{ action } on %{ count } elements?" msgstr[0] "Vuoi eseguire %{ action } su %{ count } elemento?" msgstr[1] "Vuoi eseguire %{ action } su %{ count } elementi?" -#: front/src/components/Sidebar.vue:118 +#: front/src/components/moderation/ReportModal.vue:3 +#, fuzzy +msgctxt "Popup/Moderation/Title/Verb" +msgid "Do you want to report this object?" +msgstr "Vuoi confermare questa azione?" + +#: front/src/components/Sidebar.vue:122 msgctxt "Sidebar/Queue/Message" msgid "Do you want to restore your previous queue?" msgstr "Vuoi ripristinare la tua coda precedente?" @@ -1442,26 +1613,33 @@ msgstr "Documentazione" #: front/src/components/manage/library/TracksTable.vue:42 #: front/src/components/manage/library/UploadsTable.vue:62 #: front/src/components/manage/moderation/AccountsTable.vue:40 -#: front/src/components/mixins/Translations.vue:60 -#: front/src/views/admin/library/AlbumDetail.vue:118 -#: front/src/views/admin/library/ArtistDetail.vue:107 -#: front/src/views/admin/library/LibraryDetail.vue:114 -#: front/src/views/admin/library/TrackDetail.vue:170 +#: front/src/components/manage/moderation/ReportCard.vue:169 +#: front/src/components/manage/moderation/ReportCard.vue:179 +#: front/src/components/mixins/Translations.vue:72 +#: front/src/views/admin/library/AlbumDetail.vue:124 +#: front/src/views/admin/library/ArtistDetail.vue:112 +#: front/src/views/admin/library/LibraryDetail.vue:123 +#: front/src/views/admin/library/TrackDetail.vue:176 #: front/src/views/admin/library/UploadDetail.vue:121 #: front/src/views/admin/moderation/AccountsDetail.vue:123 -#: front/src/components/mixins/Translations.vue:61 +#: front/src/components/mixins/Translations.vue:73 msgctxt "Content/Moderation/*/Noun" msgid "Domain" msgstr "Dominio" -#: front/src/views/admin/moderation/Base.vue:5 +#: front/src/views/admin/moderation/Base.vue:8 #: front/src/views/admin/moderation/DomainsList.vue:3 -#: front/src/views/admin/moderation/DomainsList.vue:48 +#: front/src/views/admin/moderation/DomainsList.vue:54 msgctxt "*/Moderation/*/Noun" msgid "Domains" msgstr "Domini" -#: front/src/components/library/TrackBase.vue:39 +#: front/src/views/Notifications.vue:42 +msgctxt "Content/Notifications/Button.Label/Verb" +msgid "Donate" +msgstr "Dona" + +#: front/src/components/library/TrackBase.vue:37 #: front/src/views/admin/library/UploadDetail.vue:58 msgctxt "Content/Track/Link/Verb" msgid "Download" @@ -1474,10 +1652,10 @@ msgstr "Trascina e rilascia righe per riordinare le tracce nella playlist" #: front/src/components/audio/track/Table.vue:10 #: front/src/components/library/TrackDetail.vue:30 -#: front/src/components/mixins/Translations.vue:56 +#: front/src/components/mixins/Translations.vue:68 #: front/src/views/admin/library/UploadDetail.vue:238 #: front/src/views/content/libraries/FilesTable.vue:60 -#: front/src/components/mixins/Translations.vue:57 +#: front/src/components/mixins/Translations.vue:69 msgctxt "Content/*/*" msgid "Duration" msgstr "Durata" @@ -1487,41 +1665,27 @@ msgctxt "Content/Signup/Message" msgid "E-mail address confirmed" msgstr "Indirizzo e-mail confermato" -#: front/src/components/Home.vue:88 -msgctxt "Content/Home/Title" -msgid "Easy to use" -msgstr "Facile da utilizzare" - -#: front/src/components/library/AlbumBase.vue:68 -#: front/src/components/library/ArtistBase.vue:79 -#: front/src/components/library/TrackBase.vue:87 +#: front/src/components/auth/Settings.vue:246 +#: src/components/library/AlbumBase.vue:73 +#: front/src/components/library/ArtistBase.vue:84 +#: front/src/components/library/TrackBase.vue:89 #: front/src/components/manage/moderation/InstancePolicyCard.vue:45 #: front/src/components/radios/Card.vue:23 -#: src/views/admin/library/AlbumDetail.vue:65 -#: front/src/views/admin/library/ArtistDetail.vue:64 -#: front/src/views/admin/library/TrackDetail.vue:64 +#: src/views/admin/library/AlbumDetail.vue:71 +#: front/src/views/admin/library/ArtistDetail.vue:69 +#: front/src/views/admin/library/TrackDetail.vue:70 #: front/src/views/content/libraries/Detail.vue:9 #: src/views/playlists/Detail.vue:31 msgctxt "Content/*/Button.Label/Verb" msgid "Edit" msgstr "Modifica" -#: front/src/components/auth/Settings.vue:246 -msgctxt "Content/Settings/Button.Label" -msgid "Edit" -msgstr "Modifica" - #: front/src/components/auth/ApplicationEdit.vue:30 #: front/src/components/auth/ApplicationEdit.vue:75 msgctxt "Content/Applications/Title" msgid "Edit application" msgstr "Modifica applicazione" -#: front/src/components/About.vue:22 -msgctxt "Content/Settings/Button.Label/Verb" -msgid "Edit instance info" -msgstr "Modifica le info dell'istanza" - #: front/src/components/manage/moderation/InstancePolicyForm.vue:3 msgctxt "Content/Moderation/Card.Title/Verb" msgid "Edit moderation rule" @@ -1542,23 +1706,20 @@ msgctxt "Content/*/Title" msgid "Edit this track" msgstr "Modifica questa traccia" -#: front/src/views/admin/library/AlbumDetail.vue:182 -#: front/src/views/admin/library/ArtistDetail.vue:171 +#: front/src/components/mixins/Translations.vue:116 +#: front/src/views/admin/library/AlbumDetail.vue:198 +#: front/src/views/admin/library/ArtistDetail.vue:186 #: front/src/views/admin/library/Base.vue:5 #: src/views/admin/library/EditsList.vue:24 -#: front/src/views/admin/library/TrackDetail.vue:234 +#: front/src/views/admin/library/TrackDetail.vue:250 +#: front/src/components/mixins/Translations.vue:117 msgctxt "*/Admin/*/Noun" msgid "Edits" msgstr "Modifiche" -#: front/src/components/mixins/Translations.vue:104 -#: front/src/components/mixins/Translations.vue:105 -msgctxt "Content/OAuth Scopes/Label" -msgid "Edits" -msgstr "Modifiche" - -#: front/src/components/auth/Signup.vue:30 +#: front/src/components/auth/SignupForm.vue:26 #: front/src/components/manage/users/UsersTable.vue:38 +#: front/src/components/moderation/ReportModal.vue:31 msgctxt "Content/*/*/Noun" msgid "Email" msgstr "Email" @@ -1568,50 +1729,60 @@ msgctxt "Content/*/*" msgid "Email address" msgstr "Indirizzo email" -#: front/src/components/library/AlbumBase.vue:53 -#: front/src/components/library/ArtistBase.vue:64 -#: front/src/components/library/TrackBase.vue:72 +#: front/src/components/library/AlbumBase.vue:54 +#: front/src/components/library/ArtistBase.vue:65 +#: front/src/components/library/TrackBase.vue:70 +#: src/views/playlists/Detail.vue:38 msgctxt "Content/*/Button.Label/Verb" msgid "Embed" msgstr "Incorpora" -#: front/src/components/audio/EmbedWizard.vue:20 +#: front/src/components/audio/EmbedWizard.vue:30 msgctxt "Popup/Embed/Input.Label/Noun" msgid "Embed code" msgstr "Incorpora codice" -#: front/src/components/library/AlbumBase.vue:26 +#: front/src/components/library/AlbumBase.vue:27 msgctxt "Popup/Album/Title/Verb" msgid "Embed this album on your website" msgstr "Incorpora questo album nel tuo sito web" -#: front/src/components/library/ArtistBase.vue:37 +#: front/src/components/library/ArtistBase.vue:38 msgctxt "Popup/Artist/Title/Verb" msgid "Embed this artist work on your website" msgstr "Incorpora il lavoro di questo artista nel tuo sito web" -#: front/src/components/library/TrackBase.vue:45 +#: front/src/views/playlists/Detail.vue:52 +#, fuzzy +msgctxt "Popup/Album/Title/Verb" +msgid "Embed this playlist on your website" +msgstr "Incorpora questo album nel tuo sito web" + +#: front/src/components/library/TrackBase.vue:43 msgctxt "Popup/Track/Title" msgid "Embed this track on your website" msgstr "Incorpora questa traccia nel tuo sito web" -#: front/src/views/admin/moderation/AccountsDetail.vue:259 -#: front/src/views/admin/moderation/DomainsDetail.vue:187 +#: front/src/views/admin/moderation/AccountsDetail.vue:260 +#: front/src/views/admin/moderation/DomainsDetail.vue:224 msgctxt "Content/Moderation/Table.Label/Noun" msgid "Emitted library follows" msgstr "Emessi i follow della libreria" -#: front/src/views/admin/moderation/AccountsDetail.vue:243 -#: front/src/views/admin/moderation/DomainsDetail.vue:171 +#: front/src/views/admin/moderation/AccountsDetail.vue:244 +#: front/src/views/admin/moderation/DomainsDetail.vue:208 msgctxt "Content/Moderation/Table.Label/Noun" msgid "Emitted messages" msgstr "Messaggi emessi" +#: front/src/components/About.vue:114 src/components/About.vue:127 +#: front/src/components/About.vue:140 #: front/src/components/manage/moderation/InstancePolicyCard.vue:8 #: front/src/components/manage/moderation/InstancePolicyForm.vue:17 #: front/src/views/admin/moderation/AccountsDetail.vue:156 #: front/src/views/admin/moderation/AccountsDetail.vue:160 -msgctxt "*/*/*" +#, fuzzy +msgctxt "*/*/*/State of feature" msgid "Enabled" msgstr "Abilitato" @@ -1630,10 +1801,10 @@ msgctxt "Content/Search/Input.Placeholder" msgid "Enter a radio name…" msgstr "Inserisci un nome di una radio…" -#: front/src/components/library/Albums.vue:119 +#: front/src/components/library/Albums.vue:128 msgctxt "Content/Search/Input.Placeholder" -msgid "Enter album title..." -msgstr "Inserisci il titolo dell'album..." +msgid "Enter album title…" +msgstr "Inserisci il titolo dell'album…" #: front/src/components/library/Artists.vue:116 msgctxt "Content/Search/Input.Placeholder" @@ -1646,32 +1817,33 @@ msgid "Enter playlist name…" msgstr "Inserisci il nome di una playlist…" #: front/src/views/auth/PasswordReset.vue:54 +#, fuzzy msgctxt "Content/Signup/Input.Placeholder" -msgid "Enter the email address binded to your account" +msgid "Enter the email address linked to your account" msgstr "Inserisci l'indirizzo email collegato al tuo account" -#: front/src/components/auth/Signup.vue:103 +#: front/src/components/auth/SignupForm.vue:96 msgctxt "Content/Signup/Form/Placeholder" msgid "Enter your email" msgstr "Inserisci la tua email" -#: front/src/components/auth/Signup.vue:98 src/components/auth/Signup.vue:100 +#: front/src/components/auth/SignupForm.vue:91 +#: src/components/auth/SignupForm.vue:93 msgctxt "Content/Signup/Form/Placeholder" msgid "Enter your invitation code (case insensitive)" -msgstr "" -"Inserisci il tuo codice di invito (non tiene conto di maiuscole o minuscole)" +msgstr "Inserisci il tuo codice di invito (non tiene conto di maiuscole o minuscole)" #: front/src/components/metadata/Search.vue:114 msgctxt "Content/Library/Input.Placeholder/Verb" msgid "Enter your search query…" msgstr "Inserisci i tuoi criteri di ricerca…" -#: front/src/components/auth/Signup.vue:102 +#: front/src/components/auth/SignupForm.vue:95 msgctxt "Content/Signup/Form/Placeholder" msgid "Enter your username" msgstr "Inserisci il tuo nome utente" -#: front/src/components/auth/Login.vue:83 +#: front/src/components/auth/LoginForm.vue:81 msgctxt "Content/Login/Input.Placeholder" msgid "Enter your username or email" msgstr "Inserisci il tuo nome utente o l'email" @@ -1688,7 +1860,7 @@ msgctxt "Popup/Import/Table.Label/Noun" msgid "Error detail" msgstr "Dettaglio dell'errore" -#: front/src/views/admin/Settings.vue:87 +#: front/src/views/admin/Settings.vue:89 msgctxt "Content/Admin/Menu" msgid "Error reporting" msgstr "Segnalazione errore" @@ -1744,16 +1916,12 @@ msgctxt "Popup/Moderation/Error message" msgid "Error while fetching application data" msgstr "Errore durante il recupero dei dati dell'applicazione" -#: front/src/views/admin/moderation/DomainsDetail.vue:118 +#: front/src/views/admin/moderation/DomainsDetail.vue:155 msgctxt "Content/Moderation/Table" msgid "Error while fetching node info" msgstr "Errore durante il recupero delle informazioni del nodo" #: front/src/components/admin/SettingsGroup.vue:5 -msgctxt "Content/Settings/Error message.Title" -msgid "Error while saving settings" -msgstr "Errore durante il salvataggio delle impostazioni" - #: front/src/components/federation/FetchButton.vue:73 msgctxt "Content/*/Error message.Title" msgid "Error while saving settings" @@ -1764,6 +1932,18 @@ msgctxt "Content/Library/Error message.Title" msgid "Error while submitting edit" msgstr "Errore durante l'invio della modifica" +#: front/src/components/manage/moderation/NoteForm.vue:3 +#, fuzzy +msgctxt "Content/Moderation/Error message.Title" +msgid "Error while submitting note" +msgstr "Errore durante l'invio della modifica" + +#: front/src/components/moderation/ReportModal.vue:11 +#, fuzzy +msgctxt "Popup/Moderation/Error message" +msgid "Error while submitting report" +msgstr "Errore durante l'invio della modifica" + #: front/src/components/mixins/Translations.vue:32 #: front/src/components/mixins/Translations.vue:33 msgctxt "Content/Library/Table/Short" @@ -1798,9 +1978,14 @@ msgctxt "Content/Radio/Table.Label/Verb" msgid "Exclude" msgstr "Escludi" +#: front/src/components/common/CollapseLink.vue:2 +msgctxt "*/*/Button,Label" +msgid "Expand" +msgstr "Espandi" + #: front/src/components/manage/users/InvitationsTable.vue:41 -#: front/src/components/mixins/Translations.vue:49 -#: front/src/components/mixins/Translations.vue:50 +#: front/src/components/mixins/Translations.vue:59 +#: front/src/components/mixins/Translations.vue:60 msgctxt "Content/Admin/Table.Label/Noun" msgid "Expiration date" msgstr "Data di scadenza" @@ -1817,16 +2002,8 @@ msgstr "Scaduto/utilizzato" #: front/src/components/manage/moderation/InstancePolicyForm.vue:110 msgctxt "Content/Moderation/Help text" -msgid "" -"Explain why you're applying this policy. Depending on your instance " -"configuration, this will help you remember why you acted on this account or " -"domain, and may be displayed publicly to help users understand what " -"moderation rules are in place." -msgstr "" -"Spiega perchè stai applicando questa regola. In base alla configurazione " -"della tua istanza, questo ti aiuterà a ricordare perchè hai eseguito questa " -"azione su questo account o dominio, e può essere mostrata pubblicamente per " -"aiutare gli utenti a capire quali regole sono applicate qui." +msgid "Explain why you're applying this policy. Depending on your instance configuration, this will help you remember why you acted on this account or domain, and may be displayed publicly to help users understand what moderation rules are in place." +msgstr "Spiega perchè stai applicando questa regola. In base alla configurazione della tua istanza, questo ti aiuterà a ricordare perchè hai eseguito questa azione su questo account o dominio, e può essere mostrata pubblicamente per aiutare gli utenti a capire quali regole sono applicate qui." #: front/src/components/manage/library/UploadsTable.vue:25 #: front/src/views/content/libraries/FilesTable.vue:16 @@ -1834,31 +2011,28 @@ msgctxt "Content/Library/Dropdown" msgid "Failed" msgstr "Fallito" -#: front/src/views/content/remote/Card.vue:62 +#: front/src/views/content/remote/Card.vue:75 msgctxt "Content/Library/Card.List item/Noun" msgid "Failed tracks:" msgstr "Tracce con errore:" -#: front/src/views/admin/library/AlbumDetail.vue:165 -#: front/src/views/admin/library/ArtistDetail.vue:154 -#: front/src/views/admin/library/TrackDetail.vue:217 +#: front/src/views/admin/library/AlbumDetail.vue:171 +#: front/src/views/admin/library/ArtistDetail.vue:159 +#: front/src/views/admin/library/TrackDetail.vue:223 msgctxt "*/*/*" msgid "Favorited tracks" msgstr "Tracce preferite" #: front/src/components/Sidebar.vue:66 +#: src/components/mixins/Translations.vue:88 +#: front/src/components/mixins/Translations.vue:89 msgctxt "Sidebar/Favorites/List item.Link/Noun" msgid "Favorites" msgstr "Preferiti" -#: front/src/components/mixins/Translations.vue:76 -#: front/src/components/mixins/Translations.vue:77 -msgctxt "Content/OAuth Scopes/Label" -msgid "Favorites" -msgstr "Preferiti" - -#: front/src/views/admin/Settings.vue:84 -msgctxt "Content/Admin/Menu" +#: front/src/components/About.vue:110 src/views/admin/Settings.vue:84 +#, fuzzy +msgctxt "*/*/*" msgid "Federation" msgstr "Federazione" @@ -1882,6 +2056,12 @@ msgctxt "Content/Radio/Table.Label/Noun" msgid "Filter name" msgstr "Filtra nome" +#: front/src/components/Home.vue:118 +#, fuzzy +msgctxt "Content/Home/Link" +msgid "Find another pod" +msgstr "Invia un'altra modifica" + #: front/src/components/manage/library/UploadsTable.vue:26 #: front/src/components/mixins/Translations.vue:36 #: front/src/views/content/libraries/FilesTable.vue:17 @@ -1891,25 +2071,31 @@ msgid "Finished" msgstr "Finito" #: front/src/components/manage/moderation/AccountsTable.vue:42 -#: front/src/components/manage/moderation/DomainsTable.vue:41 -#: front/src/views/admin/library/AlbumDetail.vue:149 -#: front/src/views/admin/library/ArtistDetail.vue:138 -#: front/src/views/admin/library/LibraryDetail.vue:153 -#: front/src/views/admin/library/TrackDetail.vue:201 +#: front/src/components/manage/moderation/DomainsTable.vue:49 +#: front/src/views/admin/library/AlbumDetail.vue:155 +#: front/src/views/admin/library/ArtistDetail.vue:143 +#: front/src/views/admin/library/LibraryDetail.vue:162 +#: front/src/views/admin/library/TagDetail.vue:98 +#: front/src/views/admin/library/TrackDetail.vue:207 #: front/src/views/admin/library/UploadDetail.vue:167 -#: front/src/views/admin/moderation/AccountsDetail.vue:235 -#: front/src/views/admin/moderation/DomainsDetail.vue:151 +#: front/src/views/admin/moderation/AccountsDetail.vue:236 +#: front/src/views/admin/moderation/DomainsDetail.vue:188 msgctxt "Content/Moderation/Table.Label/Short (Value is a date)" msgid "First seen" msgstr "Visto per la prima volta" -#: front/src/components/mixins/Translations.vue:46 -#: front/src/components/mixins/Translations.vue:47 +#: front/src/components/mixins/Translations.vue:56 +#: front/src/components/mixins/Translations.vue:57 msgctxt "Content/Moderation/Dropdown/Noun" msgid "First seen date" msgstr "Visto per la prima volta in data" -#: front/src/views/content/remote/Card.vue:87 +#: front/src/components/ShortcutsModal.vue:64 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Focus searchbar" +msgstr "Metti in primo piano la barra di ricerca" + +#: front/src/views/content/remote/Card.vue:100 msgctxt "Content/Library/Card.Button.Label/Verb" msgid "Follow" msgstr "Segui" @@ -1919,43 +2105,35 @@ msgctxt "Content/Library/Title/Verb" msgid "Follow remote libraries" msgstr "Segui librerie remote" -#: front/src/views/content/remote/Card.vue:92 +#: front/src/views/content/remote/Card.vue:105 msgctxt "Content/Library/Card.Paragraph" msgid "Follow request pending approval" msgstr "Richiesta di seguire in attesa di approvazione" -#: front/src/components/mixins/Translations.vue:64 -#: front/src/views/admin/library/LibraryDetail.vue:161 +#: front/src/components/manage/library/LibrariesTable.vue:53 +#: front/src/components/mixins/Translations.vue:76 +#: front/src/views/admin/library/LibraryDetail.vue:170 #: front/src/views/content/libraries/Detail.vue:7 -#: front/src/components/mixins/Translations.vue:65 +#: front/src/components/mixins/Translations.vue:77 msgctxt "Content/Federation/*/Noun" msgid "Followers" msgstr "Seguito da" -#: front/src/components/manage/library/LibrariesTable.vue:53 -msgctxt "Content/*/*/Noun" -msgid "Followers" -msgstr "Seguito da" - -#: front/src/views/content/remote/Card.vue:103 +#: front/src/views/content/remote/Card.vue:116 msgctxt "Content/Library/Card.Paragraph" msgid "Following" msgstr "Seguendo" -#: front/src/components/mixins/Translations.vue:84 -#: front/src/components/mixins/Translations.vue:85 +#: front/src/components/mixins/Translations.vue:96 +#: front/src/components/mixins/Translations.vue:97 msgctxt "Content/OAuth Scopes/Label" msgid "Follows" msgstr "Segue" -#: front/src/components/library/TrackBase.vue:17 +#: front/src/components/library/TrackBase.vue:245 msgctxt "Content/Track/Paragraph" -msgid "" -"From album <a class=\"internal\" href=\"%{ albumUrl }\">%{ album }</a> by <a" -" class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" -msgstr "" -"Dall'album <a class=\"internal\" href=\"%{ albumUrl }\">%{ album }</a> di <a" -" class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" +msgid "From album <a class=\"internal\" href=\"%{ albumUrl }\">%{ album }</a> by <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" +msgstr "Dall'album <a class=\"internal\" href=\"%{ albumUrl }\">%{ album }</a> di <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" #: front/src/components/auth/Authorize.vue:28 msgctxt "Content/Auth/Label/Noun" @@ -1964,38 +2142,21 @@ msgstr "Accesso completo" #: front/src/components/auth/SubsonicTokenForm.vue:7 msgctxt "Content/Settings/Paragraph'" -msgid "" -"Funkwhale is compatible with other music players that support the Subsonic " -"API." -msgstr "" -"Funkwhale è compatibile con altri lettori musicali che supportano le " -"Subsonic API." - -#: front/src/components/Home.vue:90 -msgctxt "Content/Home/Paragraph" -msgid "Funkwhale is dead simple to use." -msgstr "Funkwhale è semplicissimo da usare." - -#: front/src/components/Home.vue:39 -msgctxt "Content/Home/Paragraph" -msgid "" -"Funkwhale is designed to make it easy to listen to music you like, or to " -"discover new artists." -msgstr "" -"Funkwhale è progettato per permetterti di ascoltare facilmente la musica che" -" ti piace, o per farti scoprire nuovi artisti." +msgid "Funkwhale is compatible with other music players that support the Subsonic API." +msgstr "Funkwhale è compatibile con altri lettori musicali che supportano le Subsonic API." -#: front/src/components/Home.vue:111 +#: front/src/components/Home.vue:88 +#, fuzzy msgctxt "Content/Home/Paragraph" -msgid "Funkwhale is free and gives you control on your music." +msgid "Funkwhale is free and developped by a friendly community of volunteers." msgstr "Funkwhale è gratuito e ti da il controllo sulla tua musica." -#: front/src/components/Home.vue:66 -msgctxt "Content/Home/Paragraph" -msgid "Funkwhale takes care of handling your music" -msgstr "Funkwhale si preoccupa di gestire la tua musica" +#: front/src/components/About.vue:78 +msgctxt "*/*/*" +msgid "Funkwhale version" +msgstr "Versione Funkwhale" -#: front/src/components/ShortcutsModal.vue:38 +#: front/src/components/ShortcutsModal.vue:56 msgctxt "Popup/Keyboard shortcuts/Title" msgid "General shortcuts" msgstr "Scorciatoie generali" @@ -2005,35 +2166,17 @@ msgctxt "Content/Admin/Button.Label/Verb" msgid "Get a new invitation" msgstr "Ottieni un nuovo invito" -#: front/src/components/Home.vue:13 -msgctxt "Content/Home/Button.Label/Verb" -msgid "Get me to the library" -msgstr "Portami alla libreria" - -#: front/src/components/Home.vue:70 -msgctxt "Content/Home/List item/Verb" -msgid "" -"Get quality metadata about your music thanks to <a href=\"%{ url }\" " -"target=\"_blank\">MusicBrainz</a>" -msgstr "" -"Ottieni metadati di qualità sulla tua musica grazie a <a href=\"%{ url }\" " -"target=\"_blank\">MusicBrainz</a>" - #: front/src/views/content/Home.vue:12 src/views/content/Home.vue:19 msgctxt "Content/Library/Button.Label/Verb" msgid "Get started" msgstr "Per iniziare" -#: front/src/components/Footer.vue:37 +#: front/src/components/Footer.vue:45 +#: src/components/library/ImportStatusModal.vue:45 msgctxt "Footer/*/Link" msgid "Getting help" msgstr "Chiedi aiuto" -#: front/src/components/library/ImportStatusModal.vue:45 -msgctxt "Popup/Import/Table.Label/Noun" -msgid "Getting help" -msgstr "Chiedi aiuto" - #: front/src/components/common/ActionTable.vue:35 #: front/src/components/common/ActionTable.vue:56 msgctxt "Content/*/Button.Label/Short, Verb" @@ -2045,28 +2188,37 @@ msgctxt "Content/*/Button.Label/Verb" msgid "Go to home page" msgstr "Vai alla pagina iniziale" +#: front/src/views/Notifications.vue:27 src/views/Notifications.vue:61 +msgctxt "Content/Notifications/Button.Label" +msgid "Got it!" +msgstr "Ho capito!" + #: front/src/components/auth/Settings.vue:128 msgctxt "Content/Settings/Title" msgid "Hidden artists" msgstr "Artisti nascosti" +#: front/src/components/About.vue:155 +msgctxt "*/*/*/Verb" +msgid "Hide" +msgstr "Nascondi" + #: front/src/components/manage/moderation/InstancePolicyForm.vue:114 msgctxt "Content/Moderation/Help text" msgid "Hide account or domain content, except from followers." -msgstr "" -"Nascondi contenuto dell'account o del dominio, ad esclusione dei seguaci." +msgstr "Nascondi contenuto dell'account o del dominio, ad esclusione dei seguaci." #: front/src/components/moderation/FilterModal.vue:40 msgctxt "Popup/*/Button.Label" msgid "Hide content" msgstr "Nascondi contenuto" -#: front/src/components/audio/PlayButton.vue:26 +#: front/src/components/audio/PlayButton.vue:31 msgctxt "*/Queue/Dropdown/Button/Label/Short" msgid "Hide content from this artist" msgstr "Nascondi contenuti di questo artista" -#: front/src/components/audio/Player.vue:643 +#: front/src/components/audio/Player.vue:669 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Hide content from this artist…" msgstr "Nascondi contenuti di questo artista…" @@ -2076,39 +2228,28 @@ msgctxt "Head/Home/Title" msgid "Home" msgstr "Pagina Iniziale" -#: front/src/components/instance/Stats.vue:36 -msgctxt "Content/About/Paragraph/Unit" -msgid "Hours of music" -msgstr "Ore di musica" - #: front/src/components/auth/SubsonicTokenForm.vue:10 msgctxt "Content/Settings/Paragraph" -msgid "" -"However, accessing Funkwhale from those clients require a separate password " -"you can set below." -msgstr "" -"Comunque, accedere a Funkwhale da quei client richiede un'altra password che" -" puoi impostare qui sotto." +msgid "However, accessing Funkwhale from those clients require a separate password you can set below." +msgstr "Comunque, accedere a Funkwhale da quei client richiede un'altra password che puoi impostare qui sotto." #: front/src/views/auth/PasswordResetConfirm.vue:24 +#, fuzzy msgctxt "Content/Signup/Paragraph" -msgid "" -"If the email address provided in the previous step is valid and binded to a " -"user account, you should receive an email with reset instructions in the " -"next couple of minutes." -msgstr "" -"Se l'indirizzo email fornito nel passo precedente è valido e legato ad un " -"account utente, dovresti ricevere un'email con le istruzioni per il reset " -"nel prossimo paio di minuti." +msgid "If the email address provided in the previous step is valid and linked to a user account, you should receive an email with reset instructions in the next couple of minutes." +msgstr "Se l'indirizzo email fornito nel passo precedente è valido e legato ad un account utente, dovresti ricevere un'email con le istruzioni per il reset nel prossimo paio di minuti." #: front/src/components/auth/Settings.vue:205 msgctxt "Content/Applications/Paragraph" -msgid "" -"If you authorize third-party applications to access your data, those " -"applications will be listed here." -msgstr "" -"Se autorizzi applicazioni di terze parti ad accedere ai tuoi dati, queste " -"applicazioni verranno elencate qui." +msgid "If you authorize third-party applications to access your data, those applications will be listed here." +msgstr "Se autorizzi applicazioni di terze parti ad accedere ai tuoi dati, queste applicazioni verranno elencate qui." + +#: front/src/components/mixins/Translations.vue:46 +#: front/src/components/mixins/Translations.vue:47 +#, fuzzy +msgctxt "Content/Moderation/Dropdown" +msgid "Illegal content" +msgstr "Nascondi contenuto" #: front/src/components/library/ImportStatusModal.vue:3 msgctxt "Popup/Import/Title" @@ -2121,14 +2262,10 @@ msgid "Import reference" msgstr "Importa riferimento" #: front/src/components/manage/library/UploadsTable.vue:20 -#: front/src/views/content/libraries/FilesTable.vue:11 -#: front/src/views/content/libraries/FilesTable.vue:59 -msgctxt "Content/Library/*/Noun" -msgid "Import status" -msgstr "Stato dell'importazione" - #: front/src/components/manage/library/UploadsTable.vue:64 #: front/src/views/admin/library/UploadDetail.vue:131 +#: front/src/views/content/libraries/FilesTable.vue:11 +#: front/src/views/content/libraries/FilesTable.vue:59 msgctxt "Content/*/*/Noun" msgid "Import status" msgstr "Stato dell'importazione" @@ -2169,12 +2306,12 @@ msgctxt "Popup/Moderation/List item" msgid "In radio suggestions" msgstr "Nei suggerimenti radio" -#: front/src/components/manage/users/UsersTable.vue:54 +#: front/src/components/manage/users/UsersTable.vue:55 msgctxt "Content/Admin/Table" msgid "Inactive" msgstr "Inattivo" -#: front/src/components/ShortcutsModal.vue:71 +#: front/src/components/ShortcutsModal.vue:124 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Increase volume" msgstr "Aumenta volume" @@ -2192,7 +2329,7 @@ msgctxt "Content/Settings/Dropdown/Short" msgid "Instance" msgstr "Istanza" -#: front/src/views/admin/moderation/DomainsDetail.vue:71 +#: front/src/views/admin/moderation/DomainsDetail.vue:99 msgctxt "Content/Moderation/Title" msgid "Instance data" msgstr "Dati dell'istanza" @@ -2217,21 +2354,25 @@ msgctxt "Popup/Instance/Input.Label/Noun" msgid "Instance URL" msgstr "URL dell'istanza" +#: front/src/components/manage/moderation/ReportCard.vue:92 +#: front/src/components/manage/moderation/ReportCard.vue:203 +msgctxt "Content/*/*/Noun" +msgid "Internal notes" +msgstr "Note interne" + #: front/src/components/library/FileUpload.vue:268 msgctxt "Content/Library/Help text" -msgid "" -"Invalid file type, ensure you are uploading an audio file. Supported file " -"extensions are %{ extensions }" -msgstr "" -"Tipo di file non valido, assicurati che stai caricando un file audio. Le " -"estensioni di file supportate sono %{ extensions }" +msgid "Invalid file type, ensure you are uploading an audio file. Supported file extensions are %{ extensions }" +msgstr "Tipo di file non valido, assicurati che stai caricando un file audio. Le estensioni di file supportate sono %{ extensions }" #: front/src/components/library/ImportStatusModal.vue:139 +#: front/src/components/mixins/Translations.vue:45 +#: front/src/components/mixins/Translations.vue:46 msgctxt "Popup/Import/Error.Label" msgid "Invalid metadata" msgstr "Metadati non validi" -#: front/src/components/auth/Signup.vue:44 +#: front/src/components/auth/SignupForm.vue:40 #: front/src/components/manage/users/InvitationForm.vue:11 msgctxt "Content/*/Input.Label" msgid "Invitation code" @@ -2243,7 +2384,13 @@ msgctxt "*/Admin/*/Noun" msgid "Invitations" msgstr "Inviti" -#: front/src/components/Footer.vue:41 +#: front/src/components/manage/moderation/DomainsTable.vue:9 +#: front/src/views/admin/moderation/DomainsDetail.vue:106 +msgctxt "Content/Moderation/*/Adjective" +msgid "Is present on allow-list" +msgstr "è presente sulla lista dei consentiti" + +#: front/src/components/Footer.vue:49 msgctxt "Footer/*/List item.Link" msgid "Issue tracker" msgstr "Elenco problemi" @@ -2253,17 +2400,18 @@ msgctxt "Popup/Instance/Error message.Title" msgid "It is not possible to connect to the given URL" msgstr "Non è possibile connettersi all'URL dato" -#: front/src/components/Home.vue:50 -msgctxt "Content/Home/List item/Verb" -msgid "Keep a track of your favorite songs" -msgstr "Tieni d'occhio le tue tracce preferite" +#: front/src/components/mixins/Translations.vue:65 +#: front/src/components/mixins/Translations.vue:66 +msgctxt "*/*/*/Noun" +msgid "Items" +msgstr "Oggetti" #: front/src/components/Footer.vue:33 src/components/ShortcutsModal.vue:3 msgctxt "*/*/*/Noun" msgid "Keyboard shortcuts" msgstr "Scorciatoie da tastiera" -#: front/src/views/admin/moderation/DomainsDetail.vue:161 +#: front/src/views/admin/moderation/DomainsDetail.vue:198 msgctxt "Content/Moderation/Table.Label.Link" msgid "Known accounts" msgstr "Account conosciuti" @@ -2274,15 +2422,15 @@ msgid "Known libraries" msgstr "Librerie conosciute" #: front/src/components/manage/users/UsersTable.vue:41 -#: front/src/components/mixins/Translations.vue:58 -#: front/src/views/admin/moderation/AccountsDetail.vue:205 -#: front/src/components/mixins/Translations.vue:59 +#: front/src/components/mixins/Translations.vue:70 +#: front/src/views/admin/moderation/AccountsDetail.vue:206 +#: front/src/components/mixins/Translations.vue:71 msgctxt "Content/Profile/Table.Label/Short, Noun (Value is a date)" msgid "Last activity" msgstr "Ultima attività " -#: front/src/views/admin/moderation/AccountsDetail.vue:188 -#: front/src/views/admin/moderation/DomainsDetail.vue:78 +#: front/src/views/admin/moderation/AccountsDetail.vue:189 +#: front/src/views/admin/moderation/DomainsDetail.vue:115 msgctxt "Content/*/Table.Label" msgid "Last checked" msgstr "Controllato l'ultima volta" @@ -2297,13 +2445,13 @@ msgctxt "Content/Moderation/Table.Label/Noun" msgid "Last seen" msgstr "Visto l'ultima volta" -#: front/src/components/mixins/Translations.vue:47 -#: front/src/components/mixins/Translations.vue:48 +#: front/src/components/mixins/Translations.vue:57 +#: front/src/components/mixins/Translations.vue:58 msgctxt "Content/Moderation/Dropdown/Noun" msgid "Last seen date" msgstr "Visto l'ultima volta in data" -#: front/src/views/content/remote/Card.vue:60 +#: front/src/views/content/remote/Card.vue:73 msgctxt "Content/Library/Card.List item/Noun" msgid "Last update:" msgstr "Ultimo aggiornamento:" @@ -2313,60 +2461,60 @@ msgctxt "Modal/*/Button.Label/Short, Verb" msgid "Launch" msgstr "Inizia" -#: front/src/components/Home.vue:10 -msgctxt "Content/Home/Button.Label/Verb" -msgid "Learn more about this instance" -msgstr "Scopri di più su questa istanza" +#: front/src/components/Home.vue:35 +#, fuzzy +msgctxt "Content/Home/Link" +msgid "Learn more" +msgstr "Carica di più…" #: front/src/components/manage/users/InvitationForm.vue:58 msgctxt "Content/Admin/Input.Placeholder" msgid "Leave empty for a random code" msgstr "Lascia vuoto per un codice casuale" -#: front/src/components/audio/EmbedWizard.vue:7 +#: front/src/components/audio/EmbedWizard.vue:17 msgctxt "Popup/Embed/Paragraph" msgid "Leave empty for a responsive widget" msgstr "Lascia vuoto per un widget adattivo" -#: front/src/views/admin/library/AlbumDetail.vue:232 -#: front/src/views/admin/library/ArtistDetail.vue:221 -#: front/src/views/admin/library/TrackDetail.vue:284 -#: front/src/views/admin/moderation/AccountsDetail.vue:327 -#: front/src/views/admin/moderation/DomainsDetail.vue:234 -#: front/src/views/content/Base.vue:5 +#: front/src/components/mixins/Translations.vue:64 +#: front/src/components/mixins/Translations.vue:65 msgctxt "*/*/*/Noun" -msgid "Libraries" -msgstr "Librerie" +msgid "Length" +msgstr "Lunghezza" +#: front/src/views/admin/library/AlbumDetail.vue:248 +#: front/src/views/admin/library/ArtistDetail.vue:236 #: front/src/views/admin/library/Base.vue:17 #: front/src/views/admin/library/LibrariesList.vue:24 -msgctxt "*/*/*" +#: front/src/views/admin/library/TrackDetail.vue:300 +#: front/src/views/admin/moderation/AccountsDetail.vue:339 +#: front/src/views/admin/moderation/DomainsDetail.vue:271 +#: front/src/views/content/Base.vue:5 +msgctxt "*/*/*/Noun" msgid "Libraries" msgstr "Librerie" -#: front/src/components/mixins/Translations.vue:72 -#: front/src/components/mixins/Translations.vue:73 +#: front/src/components/mixins/Translations.vue:84 +#: front/src/components/mixins/Translations.vue:85 msgctxt "Content/OAuth Scopes/Label" msgid "Libraries and uploads" msgstr "Librerie e caricamenti" #: front/src/views/content/libraries/Form.vue:2 msgctxt "Content/Library/Paragraph" -msgid "" -"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." -msgstr "" -"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." +msgid "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." +msgstr "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." -#: front/src/components/Sidebar.vue:85 src/components/instance/Stats.vue:30 +#: front/src/components/Sidebar.vue:85 #: front/src/components/manage/library/UploadsTable.vue:60 -#: front/src/components/manage/users/UsersTable.vue:173 +#: front/src/components/manage/users/UsersTable.vue:174 +#: front/src/components/mixins/Report.vue:77 #: front/src/views/admin/library/UploadDetail.vue:144 -#: front/src/views/admin/moderation/AccountsDetail.vue:498 -msgctxt "*/*/*" +#: front/src/views/admin/moderation/AccountsDetail.vue:518 src/entities.js:132 +#: front/src/components/mixins/Report.vue:78 +#, fuzzy +msgctxt "*/*/*/Noun" msgid "Library" msgstr "Libreria" @@ -2397,21 +2545,37 @@ msgstr "Libreria aggiornata" #: front/src/components/library/TrackDetail.vue:19 #: front/src/components/manage/library/TracksTable.vue:43 -#: front/src/views/admin/library/TrackDetail.vue:159 src/edits.js:61 +#: front/src/views/admin/library/TrackDetail.vue:165 src/edits.js:84 +#: front/src/entities.js:115 msgctxt "Content/*/*/Noun" msgid "License" msgstr "Licenza" -#: front/src/views/admin/library/AlbumDetail.vue:157 -#: front/src/views/admin/library/ArtistDetail.vue:146 -#: front/src/views/admin/library/TrackDetail.vue:209 -msgctxt "*/*/*/Noun" -msgid "Listenings" -msgstr "Ascolti" +#: front/src/components/Footer.vue:90 +msgctxt "Footer/Settings/Dropdown.Label/Theme name" +msgid "Light" +msgstr "Chiaro" -#: front/src/components/mixins/Translations.vue:80 -#: front/src/components/mixins/Translations.vue:81 -msgctxt "Content/OAuth Scopes/Label" +#: front/src/views/admin/library/AlbumDetail.vue:188 +#: front/src/views/admin/library/ArtistDetail.vue:176 +#: front/src/views/admin/library/LibraryDetail.vue:179 +#: front/src/views/admin/library/TrackDetail.vue:240 +#: front/src/views/admin/moderation/AccountsDetail.vue:269 +msgctxt "Content/Moderation/Table.Label/Noun" +msgid "Linked reports" +msgstr "Segnalazioni collegate" + +#: front/src/components/Home.vue:135 +msgctxt "Content/Home/Link" +msgid "Listen to public albums and playlists shared on this pod" +msgstr "Ascolta album e liste di riproduzione pubbliche condivise su questo pod" + +#: front/src/components/mixins/Translations.vue:92 +#: front/src/views/admin/library/AlbumDetail.vue:163 +#: front/src/views/admin/library/ArtistDetail.vue:151 +#: front/src/views/admin/library/TrackDetail.vue:215 +#: front/src/components/mixins/Translations.vue:93 +msgctxt "*/*/*/Noun" msgid "Listenings" msgstr "Ascolti" @@ -2437,7 +2601,7 @@ msgctxt "Content/Library/Paragraph" msgid "Loading library data…" msgstr "Caricando i dati della libreria…" -#: front/src/views/Notifications.vue:19 +#: front/src/views/Notifications.vue:84 msgctxt "Content/Notifications/Paragraph" msgid "Loading notifications…" msgstr "Caricando le notifiche…" @@ -2462,6 +2626,7 @@ msgstr "Caricando i tuoi preferiti…" #: front/src/components/manage/library/LibrariesTable.vue:75 #: front/src/components/manage/library/TracksTable.vue:71 #: front/src/components/manage/library/UploadsTable.vue:99 +#: front/src/components/manage/moderation/ReportCard.vue:173 #: front/src/views/admin/library/AlbumDetail.vue:19 #: front/src/views/admin/library/ArtistDetail.vue:18 #: front/src/views/admin/library/LibraryDetail.vue:18 @@ -2477,12 +2642,12 @@ msgctxt "Content/Moderation/*/Short, Noun" msgid "Local account" msgstr "Account locale" -#: front/src/components/auth/Login.vue:84 +#: front/src/components/Home.vue:96 src/views/auth/Login.vue:29 msgctxt "Head/Login/Title" msgid "Log In" msgstr "Accedi" -#: front/src/components/auth/Login.vue:4 +#: front/src/views/auth/Login.vue:4 msgctxt "Content/Login/Title/Verb" msgid "Log in to your Funkwhale account" msgstr "Accedi al tuo account Funkwhale" @@ -2497,7 +2662,7 @@ msgctxt "Sidebar/Profile/List item.Link" msgid "Logged in as %{ username }" msgstr "Accesso effettuato come %{ username }" -#: front/src/components/Sidebar.vue:54 src/components/auth/Login.vue:42 +#: front/src/components/Sidebar.vue:54 src/components/auth/LoginForm.vue:41 msgctxt "*/Login/*/Verb" msgid "Login" msgstr "Accedi" @@ -2515,39 +2680,42 @@ msgstr "Disconnettiti" #: front/src/views/content/libraries/Home.vue:9 msgctxt "Content/Library/Paragraph" msgid "Looks like you don't have a library, it's time to create one." -msgstr "" -"Sembra che tu non abbia ancora nessuna libreria, è tempo di crearne una." +msgstr "Sembra che tu non abbia ancora nessuna libreria, è tempo di crearne una." -#: front/src/components/audio/Player.vue:632 -#: src/components/audio/Player.vue:633 +#: front/src/components/audio/Player.vue:658 +#: src/components/audio/Player.vue:659 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Looping disabled. Click to switch to single-track looping." -msgstr "" -"Ripetizione disattivata. Clicca per attivare la ripetizione della singola " -"traccia." +msgstr "Ripetizione disattivata. Clicca per attivare la ripetizione della singola traccia." -#: front/src/components/audio/Player.vue:635 -#: src/components/audio/Player.vue:636 +#: front/src/components/audio/Player.vue:661 +#: src/components/audio/Player.vue:662 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Looping on a single track. Click to switch to whole queue looping." msgstr "Ripeti una singola traccia. Clicca per ripetere l'intera coda." -#: front/src/components/audio/Player.vue:638 -#: src/components/audio/Player.vue:639 +#: front/src/components/audio/Player.vue:664 +#: src/components/audio/Player.vue:665 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Looping on whole queue. Click to disable looping." msgstr "Ripete l'intera coda. Clicca per disattivare la ripetizione." -#: front/src/components/Sidebar.vue:223 +#: front/src/components/Sidebar.vue:230 msgctxt "Sidebar/*/Hidden text" msgid "Main menu" msgstr "Menu principale" -#: front/src/views/admin/library/Base.vue:31 +#: front/src/views/admin/library/Base.vue:34 msgctxt "Head/Admin/Title" msgid "Manage library" msgstr "Gestisci libreria" +#: front/src/components/manage/moderation/InstancePolicyModal.vue:8 +#, fuzzy +msgctxt "Popup/Moderation/Title/Verb" +msgid "Manage moderation rules for %{ obj }" +msgstr "Sotto regole di moderazione" + #: front/src/components/playlists/PlaylistModal.vue:3 msgctxt "Popup/Playlist/Title/Verb" msgid "Manage playlists" @@ -2563,7 +2731,7 @@ msgctxt "Content/Playlist/Button.Label/Verb" msgid "Manage your playlists" msgstr "Gestisci le tue playlist" -#: front/src/views/Notifications.vue:14 +#: front/src/views/Notifications.vue:79 msgctxt "Content/Notifications/Button.Label/Verb" msgid "Mark all as read" msgstr "Segna tutte come lette" @@ -2578,12 +2746,12 @@ msgctxt "Content/Notifications/Button.Tooltip/Verb" msgid "Mark as unread" msgstr "Segna come non letta" -#: front/src/views/admin/moderation/AccountsDetail.vue:310 +#: front/src/views/admin/moderation/AccountsDetail.vue:321 msgctxt "Content/*/*/Unit" msgid "MB" msgstr "MB" -#: front/src/components/audio/Player.vue:625 +#: front/src/components/audio/Player.vue:651 msgctxt "Sidebar/Player/Hidden text" msgid "Media player" msgstr "Riproduttore musicale" @@ -2593,43 +2761,59 @@ msgctxt "Content/Profile/Paragraph" msgid "Member since %{ date }" msgstr "Membro da %{ date }" +#: front/src/components/manage/moderation/ReportCard.vue:109 +#: front/src/components/moderation/ReportModal.vue:41 +msgctxt "*/*/Field.Label/Noun" +msgid "Message" +msgstr "Messaggio" + #: front/src/components/Footer.vue:32 msgctxt "Footer/*/List item.Link" msgid "Mobile and desktop apps" msgstr "Applicazioni desktop e mobile" +#: front/src/components/Home.vue:143 +#, fuzzy +msgctxt "Content/Home/Link" +msgid "Mobile apps" +msgstr "Applicazioni desktop e mobile" + #: front/src/components/Sidebar.vue:96 -#: src/components/manage/users/UsersTable.vue:177 -#: front/src/views/admin/moderation/AccountsDetail.vue:502 -#: front/src/views/admin/moderation/Base.vue:21 +#: src/components/manage/users/UsersTable.vue:178 +#: front/src/views/admin/Settings.vue:85 +#: front/src/views/admin/moderation/AccountsDetail.vue:522 +#: front/src/views/admin/moderation/Base.vue:43 msgctxt "*/Moderation/*" msgid "Moderation" msgstr "Moderazione" #: front/src/views/admin/moderation/AccountsDetail.vue:78 -#: front/src/views/admin/moderation/DomainsDetail.vue:42 +#: front/src/views/admin/moderation/DomainsDetail.vue:70 msgctxt "Content/Moderation/Card.Paragraph" -msgid "" -"Moderation policies help you control how your instance interact with a given" -" domain or account." -msgstr "" -"Le regole di moderazione ti aiutano a controllare come la tua istanza " -"interagisce con un dato dominio o account." +msgid "Moderation policies help you control how your instance interact with a given domain or account." +msgstr "Le regole di moderazione ti aiutano a controllare come la tua istanza interagisce con un dato dominio o account." + +#: front/src/components/manage/moderation/InstancePolicyModal.vue:4 +#, fuzzy +msgctxt "Content/Moderation/Button.Label" +msgid "Moderation rules…" +msgstr "Modifica regola di moderazione" #: front/src/components/library/EditCard.vue:5 msgctxt "Content/Library/Card/Short" msgid "Modification %{ id }" msgstr "Modifica %{ id }" -#: front/src/components/mixins/Translations.vue:48 -#: front/src/components/mixins/Translations.vue:49 +#: front/src/components/mixins/Translations.vue:58 +#: front/src/components/mixins/Translations.vue:59 msgctxt "Content/Playlist/Dropdown/Noun" msgid "Modification date" msgstr "Data di modifica" -#: front/src/components/library/AlbumBase.vue:42 -#: front/src/components/library/ArtistBase.vue:53 -#: front/src/components/library/TrackBase.vue:61 +#: front/src/components/audio/PlayButton.vue:100 +#: front/src/components/library/AlbumBase.vue:43 +#: front/src/components/library/ArtistBase.vue:54 +#: front/src/components/library/TrackBase.vue:59 msgctxt "*/*/Button.Label/Noun" msgid "More…" msgstr "Di più…" @@ -2639,7 +2823,7 @@ msgctxt "*/*/*/Noun" msgid "Music" msgstr "Musica" -#: front/src/components/audio/Player.vue:631 +#: front/src/components/audio/Player.vue:657 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Mute" msgstr "Muto" @@ -2686,8 +2870,8 @@ msgctxt "Content/Library/Title" msgid "My libraries" msgstr "Le mie librerie" -#: front/src/components/audio/track/Row.vue:40 -#: src/components/library/EditCard.vue:60 +#: front/src/components/About.vue:105 src/components/audio/track/Row.vue:40 +#: front/src/components/library/EditCard.vue:60 #: front/src/components/library/EditForm.vue:70 #: front/src/components/library/TrackDetail.vue:34 #: front/src/components/library/TrackDetail.vue:43 @@ -2697,54 +2881,56 @@ msgstr "Le mie librerie" #: front/src/components/manage/library/TracksTable.vue:76 #: front/src/components/manage/library/UploadsTable.vue:121 #: front/src/components/manage/library/UploadsTable.vue:128 -#: front/src/components/manage/users/UsersTable.vue:61 +#: front/src/components/manage/moderation/ReportCard.vue:78 +#: front/src/components/manage/moderation/ReportCard.vue:87 +#: front/src/components/manage/moderation/ReportCard.vue:193 +#: front/src/components/manage/users/UsersTable.vue:62 #: front/src/views/admin/library/UploadDetail.vue:179 #: front/src/views/admin/library/UploadDetail.vue:214 #: front/src/views/admin/library/UploadDetail.vue:233 #: front/src/views/admin/library/UploadDetail.vue:244 #: front/src/views/admin/library/UploadDetail.vue:257 -#: front/src/views/admin/moderation/AccountsDetail.vue:192 -#: front/src/views/admin/moderation/DomainsDetail.vue:82 +#: front/src/views/admin/moderation/AccountsDetail.vue:193 +#: front/src/views/admin/moderation/DomainsDetail.vue:119 #: front/src/views/content/libraries/FilesTable.vue:95 #: front/src/views/content/libraries/FilesTable.vue:101 msgctxt "*/*/*" msgid "N/A" msgstr "N/D" +#: front/src/components/auth/ApplicationForm.vue:9 +#: front/src/components/auth/Settings.vue:133 +#: front/src/components/manage/library/ArtistsTable.vue:39 #: front/src/components/manage/library/LibrariesTable.vue:48 +#: front/src/components/manage/library/TagsTable.vue:41 #: front/src/components/manage/library/UploadsTable.vue:59 -msgctxt "*/*/*" -msgid "Name" -msgstr "Nome" - -#: front/src/components/auth/ApplicationForm.vue:9 -msgctxt "Content/Applications/Input.Label/Noun" -msgid "Name" -msgstr "Nome" - -#: front/src/components/auth/Settings.vue:133 -#: front/src/components/manage/library/ArtistsTable.vue:39 #: front/src/components/manage/moderation/AccountsTable.vue:39 -#: front/src/components/manage/moderation/DomainsTable.vue:38 -#: front/src/components/mixins/Translations.vue:53 +#: front/src/components/manage/moderation/DomainsTable.vue:46 +#: front/src/components/mixins/Translations.vue:63 #: front/src/components/playlists/PlaylistModal.vue:45 -#: front/src/views/admin/library/ArtistDetail.vue:98 +#: front/src/views/admin/library/ArtistDetail.vue:103 #: front/src/views/admin/library/LibraryDetail.vue:85 +#: front/src/views/admin/library/TagDetail.vue:68 #: front/src/views/admin/library/UploadDetail.vue:92 -#: front/src/views/admin/moderation/DomainsDetail.vue:97 -#: front/src/views/content/libraries/Form.vue:10 src/edits.js:10 -#: front/src/components/mixins/Translations.vue:54 +#: front/src/views/admin/moderation/DomainsDetail.vue:134 +#: front/src/views/content/libraries/Form.vue:10 src/edits.js:17 +#: front/src/components/mixins/Translations.vue:64 msgctxt "*/*/*/Noun" msgid "Name" msgstr "Nome" +#: front/src/views/Notifications.vue:24 src/views/Notifications.vue:58 +msgctxt "*/*/*" +msgid "Never" +msgstr "Mai" + #: front/src/components/auth/Settings.vue:88 #: front/src/views/auth/PasswordResetConfirm.vue:14 msgctxt "Content/Settings/Input.Label" msgid "New password" msgstr "Nuova password" -#: front/src/components/Sidebar.vue:173 +#: front/src/components/Sidebar.vue:177 msgctxt "Sidebar/Player/Paragraph" msgid "New tracks will be appended here automatically." msgstr "Le nuove tracce saranno allegate qui automaticamente." @@ -2754,21 +2940,18 @@ msgctxt "Content/Library/Card.Table.Header/Short" msgid "New value" msgstr "Nuovo valore" -#: front/src/components/audio/Player.vue:629 +#: front/src/components/audio/Player.vue:655 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Next track" msgstr "Prossima traccia" -#: front/src/components/Sidebar.vue:130 +#: front/src/components/Sidebar.vue:134 +#: front/src/components/manage/moderation/DomainsTable.vue:13 +#: front/src/views/admin/moderation/DomainsDetail.vue:110 msgctxt "*/*/*" msgid "No" msgstr "No" -#: front/src/components/Home.vue:95 -msgctxt "Content/Home/List item" -msgid "No add-ons, no plugins : you only need a web library" -msgstr "Nessun addon, nessun plugin: ti serve solo una libreria in rete" - #: front/src/components/audio/Search.vue:25 msgctxt "Content/Search/Paragraph" msgid "No album matched your query" @@ -2782,8 +2965,12 @@ msgstr "Nessun artista corrisponde alla tua ricerca" #: front/src/components/library/TrackDetail.vue:14 msgctxt "Content/Track/Table.Paragraph" msgid "No copyright information available for this track" -msgstr "" -"Nessuna informazione sui diritti d'autore disponibile per questa traccia" +msgstr "Nessuna informazione sui diritti d'autore disponibile per questa traccia" + +#: front/src/components/About.vue:25 src/components/Home.vue:25 +msgctxt "Content/Home/Paragraph" +msgid "No description available." +msgstr "Nessuna descrizione disponibile." #: front/src/components/library/TrackDetail.vue:25 msgctxt "Content/Track/Table.Paragraph" @@ -2795,7 +2982,7 @@ msgctxt "Content/Federation/Paragraph" msgid "No matching library." msgstr "Nessuna libreria corrispondente." -#: front/src/views/Notifications.vue:28 +#: front/src/views/Notifications.vue:93 msgctxt "Content/Notifications/Paragraph" msgid "No notification to show." msgstr "Nessuna notifica da visualizzare." @@ -2805,6 +2992,16 @@ msgctxt "Content/*/Paragraph" msgid "No results were found." msgstr "Nessun risultato trovato." +#: front/src/components/About.vue:32 +msgctxt "Content/Home/Paragraph" +msgid "No rules available." +msgstr "Nessuna regola disponibile." + +#: front/src/components/About.vue:39 +msgctxt "Content/Home/Paragraph" +msgid "No terms available." +msgstr "Nessun termine disponibile." + #: front/src/components/mixins/Translations.vue:10 #: front/src/components/mixins/Translations.vue:11 msgctxt "Content/Settings/Dropdown" @@ -2821,18 +3018,22 @@ msgctxt "Content/Admin/Table" msgid "Not used" msgstr "Non utilizzato" -#: front/src/components/mixins/Translations.vue:100 -#: front/src/components/mixins/Translations.vue:101 -msgctxt "Content/OAuth Scopes/Label" -msgid "Notifications" -msgstr "Notifiche" - -#: front/src/components/Sidebar.vue:46 src/views/Notifications.vue:76 +#: front/src/components/Sidebar.vue:46 +#: src/components/mixins/Translations.vue:112 +#: front/src/views/Notifications.vue:151 +#: src/components/mixins/Translations.vue:113 msgctxt "*/Notifications/*" msgid "Notifications" msgstr "Notifiche" -#: front/src/components/Footer.vue:47 +#: front/src/components/mixins/Translations.vue:47 +#: front/src/components/mixins/Translations.vue:48 +#, fuzzy +msgctxt "Content/Moderation/Dropdown" +msgid "Offensive content" +msgstr "Nascondi contenuto" + +#: front/src/components/Footer.vue:55 msgctxt "Footer/*/List item.Link" msgid "Official website" msgstr "Sito ufficiale" @@ -2847,6 +3048,12 @@ msgctxt "Content/Library/Card.Table.Header/Short" msgid "Old value" msgstr "Vecchio valore" +#: front/src/components/About.vue:90 +#, fuzzy +msgctxt "*/*/*/State of registrations" +msgid "Open" +msgstr "Aperto" + #: front/src/components/manage/users/InvitationsTable.vue:20 msgctxt "Content/Admin/Dropdown/Adjective" msgid "Open" @@ -2854,29 +3061,29 @@ msgstr "Aperto" #: front/src/components/library/ImportStatusModal.vue:56 msgctxt "Popup/Import/Table.Label/Value" -msgid "" -"Open a support thread (include the debug information below in your message)" -msgstr "" -"Apri una conversazione di supporto (includi nel tuo messaggio le " -"informazioni di debug qui sotto)" - -#: front/src/components/library/AlbumBase.vue:73 -#: front/src/components/library/ArtistBase.vue:84 -#: front/src/components/library/TrackBase.vue:92 +msgid "Open a support thread (include the debug information below in your message)" +msgstr "Apri una conversazione di supporto (includi nel tuo messaggio le informazioni di debug qui sotto)" + +#: front/src/components/library/AlbumBase.vue:87 +#: front/src/components/library/ArtistBase.vue:99 +#: front/src/components/library/TagDetail.vue:11 +#: front/src/components/library/TrackBase.vue:103 +#: front/src/components/manage/moderation/ReportCard.vue:128 msgctxt "Content/Moderation/Link" msgid "Open in moderation interface" msgstr "Apri nell'interfaccia di moderazione" -#: front/src/views/admin/library/AlbumDetail.vue:31 -#: front/src/views/admin/library/ArtistDetail.vue:30 -#: front/src/views/admin/library/TrackDetail.vue:30 +#: front/src/views/admin/library/AlbumDetail.vue:37 +#: front/src/views/admin/library/ArtistDetail.vue:35 +#: front/src/views/admin/library/TagDetail.vue:21 +#: front/src/views/admin/library/TrackDetail.vue:36 msgctxt "Content/Moderation/Link/Verb" msgid "Open local profile" msgstr "Apri profilo locale" -#: front/src/views/admin/library/AlbumDetail.vue:46 -#: front/src/views/admin/library/ArtistDetail.vue:45 -#: front/src/views/admin/library/TrackDetail.vue:45 +#: front/src/views/admin/library/AlbumDetail.vue:52 +#: front/src/views/admin/library/ArtistDetail.vue:50 +#: front/src/views/admin/library/TrackDetail.vue:51 msgctxt "Content/Moderation/Link/Verb" msgid "Open on MusicBrainz" msgstr "Apri su MusicBrainz" @@ -2886,10 +3093,10 @@ msgctxt "Content/Moderation/Link/Verb" msgid "Open profile" msgstr "Apri profilo" -#: front/src/views/admin/library/AlbumDetail.vue:54 -#: front/src/views/admin/library/ArtistDetail.vue:53 +#: front/src/views/admin/library/AlbumDetail.vue:60 +#: front/src/views/admin/library/ArtistDetail.vue:58 #: front/src/views/admin/library/LibraryDetail.vue:49 -#: front/src/views/admin/library/TrackDetail.vue:53 +#: front/src/views/admin/library/TrackDetail.vue:59 #: front/src/views/admin/library/UploadDetail.vue:50 #: front/src/views/admin/moderation/AccountsDetail.vue:52 msgctxt "Content/Moderation/Link/Verb" @@ -2910,6 +3117,7 @@ msgstr "O personalizza la tua regola" #: src/components/library/Radios.vue:41 #: front/src/components/manage/library/EditsCardList.vue:37 #: front/src/components/manage/users/UsersTable.vue:17 +#: front/src/views/admin/moderation/ReportsList.vue:42 #: front/src/views/playlists/List.vue:25 msgctxt "Content/Search/Dropdown.Label/Noun" msgid "Order" @@ -2917,40 +3125,51 @@ msgstr "Ordine" #: front/src/components/favorites/List.vue:24 #: src/components/library/Albums.vue:15 -#: front/src/components/library/Artists.vue:15 +#: front/src/components/library/Artists.vue:19 #: src/components/library/Radios.vue:33 #: front/src/components/manage/library/AlbumsTable.vue:11 #: front/src/components/manage/library/ArtistsTable.vue:11 #: front/src/components/manage/library/EditsCardList.vue:29 #: front/src/components/manage/library/LibrariesTable.vue:20 +#: front/src/components/manage/library/TagsTable.vue:11 #: front/src/components/manage/library/TracksTable.vue:11 #: front/src/components/manage/library/UploadsTable.vue:30 #: front/src/components/manage/moderation/AccountsTable.vue:11 -#: front/src/components/manage/moderation/DomainsTable.vue:9 +#: front/src/components/manage/moderation/DomainsTable.vue:17 #: front/src/components/manage/users/InvitationsTable.vue:9 #: front/src/components/manage/users/UsersTable.vue:9 +#: front/src/views/admin/moderation/ReportsList.vue:34 #: front/src/views/content/libraries/FilesTable.vue:21 #: front/src/views/playlists/List.vue:17 msgctxt "Content/Search/Dropdown.Label/Noun" msgid "Ordering" msgstr "Ordinamento" -#: front/src/components/library/Albums.vue:23 -#: src/components/library/Artists.vue:23 +#: front/src/components/library/Albums.vue:27 +#: src/components/library/Artists.vue:27 #: front/src/components/manage/library/AlbumsTable.vue:19 #: front/src/components/manage/library/ArtistsTable.vue:19 #: front/src/components/manage/library/LibrariesTable.vue:28 +#: front/src/components/manage/library/TagsTable.vue:19 #: front/src/components/manage/library/TracksTable.vue:19 #: front/src/components/manage/library/UploadsTable.vue:38 #: front/src/components/manage/moderation/AccountsTable.vue:19 -#: front/src/components/manage/moderation/DomainsTable.vue:17 +#: front/src/components/manage/moderation/DomainsTable.vue:25 #: front/src/views/content/libraries/FilesTable.vue:29 msgctxt "Content/Search/Dropdown.Label/Noun" msgid "Ordering direction" msgstr "Direzione di ordinamento" +#: front/src/components/mixins/Translations.vue:48 +#: front/src/components/mixins/Translations.vue:49 +msgctxt "Content/Moderation/Dropdown" +msgid "Other" +msgstr "Altro" + +#: front/src/components/manage/moderation/ReportCard.vue:143 #: front/src/components/manage/users/InvitationsTable.vue:38 -msgctxt "Content/Admin/Table.Label" +#, fuzzy +msgctxt "*/*/*" msgid "Owner" msgstr "Proprietario" @@ -2969,12 +3188,15 @@ msgctxt "Content/*/Hidden text/Noun" msgid "Pagination" msgstr "Impaginazione" -#: front/src/components/auth/Login.vue:33 src/components/auth/Signup.vue:40 -msgctxt "Content/*/Input.Label" +#: front/src/components/auth/LoginForm.vue:32 +#: src/components/auth/Settings.vue:291 +#: front/src/components/auth/SignupForm.vue:36 +#, fuzzy +msgctxt "*/*/*" msgid "Password" msgstr "Password" -#: front/src/components/auth/SubsonicTokenForm.vue:94 +#: front/src/components/auth/SubsonicTokenForm.vue:100 msgctxt "Content/Settings/Message" msgid "Password updated" msgstr "Password aggiornata" @@ -2984,12 +3206,12 @@ msgctxt "Content/Signup/Card.Title" msgid "Password updated successfully" msgstr "Password aggiornata con successo" -#: front/src/components/audio/Player.vue:628 +#: front/src/components/audio/Player.vue:654 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Pause track" msgstr "Metti in pausa" -#: front/src/components/ShortcutsModal.vue:59 +#: front/src/components/ShortcutsModal.vue:96 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Pause/play the current track" msgstr "Pausa/riproduci la traccia corrente" @@ -3018,7 +3240,7 @@ msgctxt "Content/Library/Label" msgid "Pending files" msgstr "File in sospeso" -#: front/src/components/Sidebar.vue:225 +#: front/src/components/Sidebar.vue:232 msgctxt "Sidebar/Notifications/Hidden text" msgid "Pending follow requests" msgstr "Richiesta di seguire in sospeso" @@ -3029,84 +3251,76 @@ msgctxt "Content/Admin/*/Noun" msgid "Pending review" msgstr "Revisione in sospeso" -#: front/src/components/Sidebar.vue:226 +#: front/src/components/Sidebar.vue:233 msgctxt "Sidebar/Moderation/Hidden text" msgid "Pending review edits" msgstr "Revisioni delle modifiche in sospeso" +#: front/src/components/auth/Settings.vue:176 #: front/src/components/manage/users/UsersTable.vue:42 #: front/src/views/admin/moderation/AccountsDetail.vue:166 -msgctxt "Content/Admin/Table.Label/Noun" -msgid "Permissions" -msgstr "Permessi" - -#: front/src/components/auth/Settings.vue:176 msgctxt "Content/*/*/Noun" msgid "Permissions" msgstr "Permessi" #: front/src/components/audio/PlayButton.vue:9 -#: front/src/components/library/TrackBase.vue:26 +#: front/src/components/library/TrackBase.vue:24 msgctxt "*/Queue/Button.Label/Short, Verb" msgid "Play" msgstr "Riproduci" #: front/src/components/audio/album/Card.vue:48 -#: front/src/components/audio/artist/Card.vue:44 -#: front/src/components/library/AlbumBase.vue:20 +#: front/src/components/library/AlbumBase.vue:21 #: front/src/components/library/AlbumDetail.vue:11 #: src/views/playlists/Detail.vue:24 msgctxt "Content/Queue/Button.Label/Short, Verb" msgid "Play all" msgstr "Riproduci tutto" -#: front/src/components/library/ArtistBase.vue:31 +#: front/src/components/library/ArtistBase.vue:32 msgctxt "Content/Artist/Button.Label/Verb" msgid "Play all albums" msgstr "Riproduci tutti gli album" -#: front/src/components/audio/PlayButton.vue:76 +#: front/src/components/audio/PlayButton.vue:92 msgctxt "*/Queue/Dropdown/Button/Title" msgid "Play next" msgstr "Riproduci la prossima" -#: front/src/components/ShortcutsModal.vue:67 +#: front/src/components/ShortcutsModal.vue:120 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Play next track" msgstr "Riproduci traccia successiva" -#: front/src/components/audio/PlayButton.vue:74 +#: front/src/components/audio/PlayButton.vue:90 msgctxt "*/Queue/Dropdown/Button/Title" msgid "Play now" msgstr "Riproduci ora" -#: front/src/components/ShortcutsModal.vue:63 +#: front/src/components/ShortcutsModal.vue:116 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Play previous track" msgstr "Riproduci traccia precedente" -#: front/src/components/audio/PlayButton.vue:77 +#: front/src/components/audio/PlayButton.vue:93 msgctxt "*/Queue/Dropdown/Button/Title" msgid "Play similar songs" msgstr "Riproduci canzoni simili" -#: front/src/components/Sidebar.vue:224 +#: front/src/components/Sidebar.vue:231 msgctxt "Sidebar/Player/Hidden text" msgid "Play this track" msgstr "Riproduci questa traccia" -#: front/src/components/audio/Player.vue:627 +#: front/src/components/audio/Player.vue:653 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Play track" msgstr "Riproduci traccia" -#: front/src/components/audio/PlayButton.vue:82 -msgctxt "*/Queue/Button/Title" -msgid "Play..." -msgstr "Riproduci..." - -#: front/src/views/playlists/Detail.vue:91 -msgctxt "Head/Playlist/Title" +#: front/src/components/mixins/Report.vue:66 src/views/playlists/Detail.vue:121 +#: front/src/components/mixins/Report.vue:67 +#, fuzzy +msgctxt "*/*/*" msgid "Playlist" msgstr "Lista di riproduzione" @@ -3114,10 +3328,8 @@ msgstr "Lista di riproduzione" msgctxt "Content/Playlist/Header.Subtitle" msgid "Playlist containing %{ count } track, by %{ username }" msgid_plural "Playlist containing %{ count } tracks, by %{ username }" -msgstr[0] "" -"Lista di riproduzione contenente %{ count } traccia, di %{ username }" -msgstr[1] "" -"Lista di riproduzione contenente %{ count } tracce, di %{ username }" +msgstr[0] "Lista di riproduzione contenente %{ count } traccia, di %{ username }" +msgstr[1] "Lista di riproduzione contenente %{ count } tracce, di %{ username }" #: front/src/components/playlists/Form.vue:9 msgctxt "Content/Playlist/Message" @@ -3144,63 +3356,60 @@ msgctxt "Content/Playlist/Dropdown.Label" msgid "Playlist visibility" msgstr "Visibilità lista di riproduzione" -#: front/src/components/mixins/Translations.vue:88 -#: front/src/components/mixins/Translations.vue:89 -msgctxt "Content/OAuth Scopes/Label" -msgid "Playlists" -msgstr "Liste di riproduzione" - #: front/src/components/Sidebar.vue:71 src/components/library/Home.vue:16 -#: front/src/components/library/Library.vue:16 src/views/admin/Settings.vue:83 -#: front/src/views/admin/library/AlbumDetail.vue:173 -#: front/src/views/admin/library/ArtistDetail.vue:162 -#: front/src/views/admin/library/TrackDetail.vue:225 +#: front/src/components/library/Library.vue:16 +#: front/src/components/mixins/Translations.vue:100 +#: src/views/admin/Settings.vue:83 +#: front/src/views/admin/library/AlbumDetail.vue:179 +#: front/src/views/admin/library/ArtistDetail.vue:167 +#: front/src/views/admin/library/TrackDetail.vue:231 #: src/views/playlists/List.vue:106 +#: front/src/components/mixins/Translations.vue:101 msgctxt "*/*/*" msgid "Playlists" msgstr "Liste di riproduzione" -#: front/src/components/Home.vue:56 -msgctxt "Content/Home/List item" -msgid "Playlists? We got them" -msgstr "Liste di riproduzione? Ce le abbiamo" +#: front/src/components/audio/EmbedWizard.vue:9 +msgctxt "Content/Embed/Message" +msgid "Please contact your admins and ask them to update the corresponding setting." +msgstr "" #: front/src/components/auth/Settings.vue:79 msgctxt "Content/Settings/Error message.List item/Call to action" msgid "Please double-check your password is correct" msgstr "Per favore controlla se la tua password è corretta" -#: front/src/components/auth/Login.vue:9 +#: front/src/components/auth/LoginForm.vue:5 msgctxt "Content/Login/Error message.List item/Call to action" msgid "Please double-check your username/password couple is correct" -msgstr "" -"Per favore controlla se la combinazione nome utente/password è corretta" +msgstr "Per favore controlla se la combinazione nome utente/password è corretta" #: front/src/components/auth/Settings.vue:46 msgctxt "Content/Settings/Paragraph" msgid "PNG, GIF or JPG. At most 2MB. Will be downscaled to 400x400px." msgstr "PNG, GIF or JPG. Massimo 2MB. Saranno scalate a 400x400px." -#: front/src/views/admin/library/TrackDetail.vue:137 -msgctxt "*/*/*/Noun" +#: front/src/components/About.vue:72 +msgctxt "Content/About/Header/Name" +msgid "Pod configuration" +msgstr "Configurazione Pod" + +#: front/src/views/admin/library/TrackDetail.vue:143 src/edits.js:70 +msgctxt "*/*/*/Short, Noun" msgid "Position" msgstr "Posizione" #: front/src/components/manage/moderation/InstancePolicyForm.vue:118 msgctxt "Content/Moderation/Help text" -msgid "" -"Prevent account or domain from triggering notifications, except from " -"followers." -msgstr "" -"Evita che l'account o il dominio facciano scattare notifiche, ad esclusione " -"dei seguaci." +msgid "Prevent account or domain from triggering notifications, except from followers." +msgstr "Evita che l'account o il dominio facciano scattare notifiche, ad esclusione dei seguaci." -#: front/src/components/audio/EmbedWizard.vue:33 +#: front/src/components/audio/EmbedWizard.vue:43 msgctxt "Popup/Embed/Title/Noun" msgid "Preview" msgstr "Anteprima" -#: front/src/components/audio/Player.vue:626 +#: front/src/components/audio/Player.vue:652 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Previous track" msgstr "Traccia precedente" @@ -3211,7 +3420,7 @@ msgctxt "Content/Settings/Dropdown/Short" msgid "Private" msgstr "Privato" -#: front/src/views/content/remote/Card.vue:43 +#: front/src/views/content/remote/Card.vue:56 msgctxt "Content/Library/Card.List item" msgid "Problem during scanning" msgstr "Errore durante la scansione" @@ -3232,14 +3441,20 @@ msgctxt "Content/Library/Tab.Title/Short" msgid "Processing" msgstr "Elaborazione" -#: front/src/components/mixins/Translations.vue:68 -#: front/src/components/mixins/Translations.vue:69 +#: front/src/components/mixins/Translations.vue:80 +#: front/src/components/mixins/Translations.vue:81 msgctxt "Content/OAuth Scopes/Label" msgid "Profile" msgstr "Profilo" +#: front/src/components/auth/SignupForm.vue:5 +#, fuzzy +msgctxt "Content/Signup/Form/Paragraph" +msgid "Public registrations are not possible on this instance. You will need an invitation code to sign up." +msgstr "Le registrazioni sono chiuse su questa istanza, avrai bisogno di un codice d'invito per registrarti." + #: front/src/components/manage/moderation/AccountsTable.vue:188 -#: front/src/components/manage/moderation/DomainsTable.vue:168 +#: front/src/components/manage/moderation/DomainsTable.vue:186 #: front/src/views/content/libraries/Quota.vue:36 #: front/src/views/content/libraries/Quota.vue:39 #: front/src/views/content/libraries/Quota.vue:62 @@ -3270,7 +3485,7 @@ msgctxt "Sidebar/Queue/Tab.Title/Noun" msgid "Queue" msgstr "Coda" -#: front/src/components/audio/Player.vue:322 +#: front/src/components/audio/Player.vue:329 msgctxt "Content/Queue/Message" msgid "Queue shuffled!" msgstr "Coda mischiata!" @@ -3302,16 +3517,12 @@ msgstr "Radio aggiornata" #: front/src/components/library/Library.vue:13 #: src/components/library/Radios.vue:142 +#: front/src/components/mixins/Translations.vue:104 +#: front/src/components/mixins/Translations.vue:105 msgctxt "*/*/*" msgid "Radios" msgstr "Radio" -#: front/src/components/mixins/Translations.vue:92 -#: front/src/components/mixins/Translations.vue:93 -msgctxt "Content/OAuth Scopes/Label" -msgid "Radios" -msgstr "Radio" - #: front/src/components/auth/ApplicationForm.vue:151 msgctxt "Content/OAuth Scopes/Label/Verb" msgid "Read" @@ -3338,15 +3549,15 @@ msgctxt "Content/Moderation/*/Noun" msgid "Reason" msgstr "Motivo" -#: front/src/views/admin/moderation/AccountsDetail.vue:251 -#: front/src/views/admin/moderation/DomainsDetail.vue:179 +#: front/src/views/admin/moderation/AccountsDetail.vue:252 +#: front/src/views/admin/moderation/DomainsDetail.vue:216 msgctxt "Content/Moderation/Table.Label/Noun" msgid "Received library follows" msgstr "Ricevuto un follow della libreria" -#: front/src/components/manage/moderation/DomainsTable.vue:40 -#: front/src/components/mixins/Translations.vue:62 -#: front/src/components/mixins/Translations.vue:63 +#: front/src/components/manage/moderation/DomainsTable.vue:48 +#: front/src/components/mixins/Translations.vue:74 +#: front/src/components/mixins/Translations.vue:75 msgctxt "Content/Moderation/*/Noun" msgid "Received messages" msgstr "Messaggi ricevuti" @@ -3366,6 +3577,12 @@ msgctxt "Content/Home/Title" msgid "Recently added" msgstr "Aggiunte recentemente" +#: front/src/components/Home.vue:167 +#, fuzzy +msgctxt "Content/Home/Title" +msgid "Recently added albums" +msgstr "Aggiunte recentemente" + #: front/src/components/library/Home.vue:11 msgctxt "Content/Home/Title" msgid "Recently favorited" @@ -3394,14 +3611,14 @@ msgctxt "Popup/*/Message.Title" msgid "Refresh error" msgstr "Errore di aggiornamento" -#: front/src/views/admin/library/AlbumDetail.vue:50 -#: front/src/views/admin/library/ArtistDetail.vue:49 -#: front/src/views/admin/library/TrackDetail.vue:49 +#: front/src/views/admin/library/AlbumDetail.vue:56 +#: front/src/views/admin/library/ArtistDetail.vue:54 +#: front/src/views/admin/library/TrackDetail.vue:55 msgctxt "Content/Moderation/Button/Verb" msgid "Refresh from remote server" msgstr "Aggiorna da un server remoto" -#: front/src/views/admin/moderation/DomainsDetail.vue:127 +#: front/src/views/admin/moderation/DomainsDetail.vue:164 msgctxt "Content/Moderation/Button.Label/Verb" msgid "Refresh node info" msgstr "Aggiorna informazioni del nodo" @@ -3413,12 +3630,8 @@ msgstr "Aggiornamento in sospeso" #: front/src/components/federation/FetchButton.vue:80 msgctxt "Popup/*/Message.Content" -msgid "" -"Refresh request wasn't proceed in time by our server. It will be processed " -"later." -msgstr "" -"La richiesta di aggiornamento non è stata processata in tempo dal nostro " -"server. Sarà processata più tardi." +msgid "Refresh request wasn't proceed in time by our server. It will be processed later." +msgstr "La richiesta di aggiornamento non è stata processata in tempo dal nostro server. Sarà processata più tardi." #: front/src/components/federation/FetchButton.vue:16 msgctxt "Popup/*/Message.Title" @@ -3440,16 +3653,13 @@ msgctxt "Popup/*/Title" msgid "Refreshing object from remote…" msgstr "Aggiornando oggetto da remoto…" -#: front/src/components/auth/Signup.vue:9 -msgctxt "Content/Signup/Form/Paragraph" -msgid "" -"Registration are closed on this instance, you will need an invitation code " -"to signup." -msgstr "" -"Le registrazioni sono chiuse su questa istanza, avrai bisogno di un codice " -"d'invito per registrarti." +#: front/src/components/About.vue:86 +#, fuzzy +msgctxt "*/*/*" +msgid "Registrations" +msgstr "Amministrazione" -#: front/src/components/manage/users/UsersTable.vue:71 +#: front/src/components/manage/users/UsersTable.vue:72 msgctxt "Content/Admin/Table, User role" msgid "Regular user" msgstr "Utente semplice" @@ -3474,8 +3684,8 @@ msgid "Rejected" msgstr "Rifiutato" #: front/src/components/manage/library/AlbumsTable.vue:43 -#: front/src/components/mixins/Translations.vue:44 src/edits.js:28 -#: front/src/components/mixins/Translations.vue:45 +#: front/src/components/mixins/Translations.vue:54 src/edits.js:43 +#: front/src/components/mixins/Translations.vue:55 msgctxt "Content/*/*/Noun" msgid "Release date" msgstr "Data di rilascio" @@ -3485,6 +3695,11 @@ msgctxt "Content/Library/Paragraph" msgid "Remaining storage space" msgstr "Spazio di archiviazione rimanente" +#: front/src/views/Notifications.vue:18 src/views/Notifications.vue:52 +msgctxt "Content/Notifications/Label" +msgid "Remind me in:" +msgstr "Ricordamelo tra:" + #: front/src/views/content/remote/Home.vue:6 msgctxt "Content/Library/Title/Noun" msgid "Remote libraries" @@ -3492,12 +3707,8 @@ msgstr "Librerie remote" #: front/src/views/content/remote/Home.vue:7 msgctxt "Content/Library/Paragraph" -msgid "" -"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." -msgstr "" -"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." +msgid "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." +msgstr "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." #: front/src/components/library/radios/Filter.vue:59 msgctxt "Content/Radio/Button.Label/Verb" @@ -3514,6 +3725,13 @@ msgctxt "Content/Moderation/Button.Label" msgid "Remove filter" msgstr "Rimuovi filtro" +#: front/src/components/manage/moderation/DomainsTable.vue:198 +#: front/src/views/admin/moderation/DomainsDetail.vue:39 +#, fuzzy +msgctxt "Content/Moderation/Action/Verb" +msgid "Remove from allow-list" +msgstr "Rimuovi dai preferiti" + #: front/src/components/favorites/TrackFavoriteIcon.vue:26 msgctxt "Content/Track/Icon.Tooltip/Verb" msgid "Remove from favorites" @@ -3521,44 +3739,105 @@ msgstr "Rimuovi dai preferiti" #: front/src/views/content/libraries/Quota.vue:38 msgctxt "Popup/Library/Paragraph" -msgid "" -"Removes uploaded but yet to be processed tracks completely, adding the " -"corresponding data to your quota." -msgstr "" -"Rimuovi completamente tracce caricate ma non ancora processate, aggiungendo " -"lo spazio corrispondente alla tua quota." +msgid "Removes uploaded but yet to be processed tracks completely, adding the corresponding data to your quota." +msgstr "Rimuovi completamente tracce caricate ma non ancora processate, aggiungendo lo spazio corrispondente alla tua quota." #: front/src/views/content/libraries/Quota.vue:64 msgctxt "Popup/Library/Paragraph" -msgid "" -"Removes uploaded tracks skipped during the import processes completely, " -"adding the corresponding data to your quota." -msgstr "" -"Rimuove completamente le tracce caricate ma che sono state saltate durante " -"la fase di importazione, aggiungendo lo spazio corrispondente alla tua " -"quota." +msgid "Removes uploaded tracks skipped during the import processes completely, adding the corresponding data to your quota." +msgstr "Rimuove completamente le tracce caricate ma che sono state saltate durante la fase di importazione, aggiungendo lo spazio corrispondente alla tua quota." #: front/src/views/content/libraries/Quota.vue:90 msgctxt "Popup/Library/Paragraph" -msgid "" -"Removes uploaded tracks that could not be processed by the server " -"completely, adding the corresponding data to your quota." -msgstr "" -"Rimuove completamente le tracce caricate ma che non sono state processate " -"correttamente, aggiungendo lo spazio corrispondente alla tua quota." +msgid "Removes uploaded tracks that could not be processed by the server completely, adding the corresponding data to your quota." +msgstr "Rimuove completamente le tracce caricate ma che non sono state processate correttamente, aggiungendo lo spazio corrispondente alla tua quota." -#: front/src/components/auth/SubsonicTokenForm.vue:33 -#: front/src/components/auth/SubsonicTokenForm.vue:36 +#: front/src/components/audio/PlayButton.vue:94 +#, fuzzy +msgctxt "*/Queue/Dropdown/Button/Title" +msgid "Replace current queue" +msgstr "Aggiungi alla coda attuale" + +#: front/src/components/mixins/Report.vue:6 src/components/mixins/Report.vue:7 +msgctxt "*/Moderation/*/Verb" +msgid "Report @%{ username }…" +msgstr "Segnala @%{ username }…" + +#: front/src/components/manage/moderation/ReportCard.vue:5 +msgctxt "Content/Moderation/Card/Short" +msgid "Report %{ id }" +msgstr "Segnala %{ id }" + +#: front/src/components/moderation/ReportModal.vue:139 +#, fuzzy +msgctxt "*/Moderation/Message" +msgid "Report successfully submitted, thank you" +msgstr "La tua modifica è stata inviata correttamente." + +#: front/src/components/mixins/Report.vue:36 +#: src/components/mixins/Report.vue:37 +#, fuzzy +msgctxt "*/Moderation/*/Verb" +msgid "Report this album…" +msgstr "Modifica questo album" + +#: front/src/components/mixins/Report.vue:50 +#: src/components/mixins/Report.vue:51 +#, fuzzy +msgctxt "*/Moderation/*/Verb" +msgid "Report this artist…" +msgstr "Modifica questo artista" + +#: front/src/components/mixins/Report.vue:72 +#: src/components/mixins/Report.vue:73 +#, fuzzy +msgctxt "*/Moderation/*/Verb" +msgid "Report this library…" +msgstr "Eliminare questa libreria?" + +#: front/src/components/mixins/Report.vue:61 +#: src/components/mixins/Report.vue:62 +#, fuzzy +msgctxt "*/Moderation/*/Verb" +msgid "Report this playlist…" +msgstr "Aggiungi a questa playlist" + +#: front/src/components/mixins/Report.vue:23 +#: src/components/mixins/Report.vue:24 +#, fuzzy +msgctxt "*/Moderation/*/Verb" +msgid "Report this track…" +msgstr "Modifica questa traccia" + +#: front/src/components/audio/PlayButton.vue:95 +msgctxt "*/Moderation/*/Button/Label,Verb" +msgid "Report…" +msgstr "Segnala…" + +#: front/src/components/manage/moderation/ReportCard.vue:117 +msgctxt "Content/*/*/Short" +msgid "Reported object" +msgstr "Oggetto segnalato" + +#: front/src/views/admin/moderation/Base.vue:5 +#: front/src/views/admin/moderation/ReportsList.vue:3 +#: front/src/views/admin/moderation/ReportsList.vue:208 +msgctxt "*/Moderation/*/Noun" +msgid "Reports" +msgstr "Segnalazioni" + +#: front/src/components/auth/SubsonicTokenForm.vue:38 +#: front/src/components/auth/SubsonicTokenForm.vue:41 msgctxt "*/Settings/Button.Label/Verb" msgid "Request a new password" msgstr "Richiedi una nuova password" -#: front/src/components/auth/SubsonicTokenForm.vue:34 +#: front/src/components/auth/SubsonicTokenForm.vue:39 msgctxt "Popup/Settings/Title" msgid "Request a new Subsonic API password?" msgstr "Richiedere una nuova password API Subsonic?" -#: front/src/components/auth/SubsonicTokenForm.vue:42 +#: front/src/components/auth/SubsonicTokenForm.vue:47 msgctxt "Content/Settings/Button.Label/Verb" msgid "Request a password" msgstr "Richiedi una password" @@ -3568,35 +3847,53 @@ msgctxt "Popup/*/Loading.Title" msgid "Requesting a fetch…" msgstr "Richiedendo un recupero…" -#: front/src/components/library/EditForm.vue:82 +#: front/src/components/library/EditForm.vue:94 +#, fuzzy msgctxt "Content/Library/Button.Label" -msgid "Reset to initial value: %{ value }" +msgid "Reset to initial value" msgstr "Ripristina al valore iniziale: %{ value }" -#: front/src/components/auth/Login.vue:35 src/views/auth/PasswordReset.vue:4 -#: front/src/views/auth/PasswordReset.vue:53 +#: front/src/components/auth/LoginForm.vue:34 +#: src/views/auth/PasswordReset.vue:4 front/src/views/auth/PasswordReset.vue:53 msgctxt "*/Login/*/Verb" msgid "Reset your password" msgstr "Resetta la tua password" +#: front/src/components/manage/moderation/ReportCard.vue:83 +#, fuzzy +msgctxt "Content/*/*/Noun" +msgid "Resolution date" +msgstr "Data di creazione" + +#: front/src/components/manage/moderation/ReportCard.vue:218 +msgctxt "Content/*/Button.Label/Verb" +msgid "Resolve" +msgstr "Risolvi" + +#: front/src/components/manage/moderation/ReportCard.vue:62 +#: front/src/views/admin/moderation/ReportsList.vue:20 +msgctxt "Content/*/*/Short" +msgid "Resolved" +msgstr "Risolti" + #: front/src/views/content/libraries/FilesTable.vue:223 msgctxt "Content/Library/Dropdown/Verb" msgid "Restart import" msgstr "Riavvia importazione" +#: front/src/components/library/EditForm.vue:31 +msgctxt "Content/Library/Button.Label" +msgid "Restrict to unreviewed edits" +msgstr "Restringi alle modifiche non revisionate" + #: front/src/components/favorites/List.vue:39 -#: src/components/library/Albums.vue:30 -#: front/src/components/library/Artists.vue:30 +#: src/components/library/Albums.vue:34 +#: front/src/components/library/Artists.vue:34 #: src/components/library/Radios.vue:52 front/src/views/playlists/List.vue:32 msgctxt "Content/Search/Dropdown.Label/Noun" msgid "Results per page" msgstr "Risultati per pagina" -#: front/src/components/library/EditForm.vue:31 -msgctxt "Content/Library/Button.Label" -msgid "Retrict to unreviewed edits" -msgstr "Restringi alle modifiche non revisionate" - #: front/src/views/auth/EmailConfirm.vue:17 msgctxt "Content/Signup/Link/Verb" msgid "Return to login" @@ -3627,52 +3924,54 @@ msgctxt "Content/Moderation/Card.Title/Noun" msgid "Rule" msgstr "Regola" -#: front/src/components/admin/SettingsGroup.vue:67 +#: front/src/components/About.vue:28 src/components/About.vue:56 +#, fuzzy +msgctxt "Content/About/Header" +msgid "Rules" +msgstr "Regola" + +#: front/src/components/admin/SettingsGroup.vue:75 #: front/src/components/library/radios/Builder.vue:34 msgctxt "Content/*/Button.Label/Verb" msgid "Save" msgstr "Salva" -#: front/src/views/content/remote/Card.vue:175 +#: front/src/views/content/remote/Card.vue:203 msgctxt "Content/Library/Message" msgid "Scan launched" msgstr "Scansione avviata" -#: front/src/views/content/remote/Card.vue:67 +#: front/src/views/content/remote/Card.vue:80 msgctxt "Content/Library/Card.Button.Label/Verb" msgid "Scan now" msgstr "Scansiona ora" -#: front/src/views/content/remote/Card.vue:35 +#: front/src/views/content/remote/Card.vue:48 msgctxt "Content/Library/Card.List item" msgid "Scan pending" msgstr "Scansione in sospeso" -#: front/src/views/content/remote/Card.vue:176 +#: front/src/views/content/remote/Card.vue:204 msgctxt "Content/Library/Message" msgid "Scan skipped (previous scan is too recent)" msgstr "Scansione saltata (la scansione precedente è troppo recente)" -#: front/src/views/content/remote/Card.vue:47 +#: front/src/views/content/remote/Card.vue:60 msgctxt "Content/Library/Card.List item" msgid "Scanned" msgstr "Scansionata" -#: front/src/views/content/remote/Card.vue:51 +#: front/src/views/content/remote/Card.vue:64 msgctxt "Content/Library/Card.List item" msgid "Scanned with errors" msgstr "Scansione eseguita con errori" -#: front/src/views/content/remote/Card.vue:39 +#: front/src/views/content/remote/Card.vue:52 msgctxt "Content/Library/Card.List item" msgid "Scanning… (%{ progress }%)" -msgstr "Scansionando... (%{ progress }%)" +msgstr "Scansionando… (%{ progress }%)" #: front/src/components/auth/ApplicationForm.vue:22 -msgctxt "Content/Applications/Input.Label/Noun" -msgid "Scopes" -msgstr "Visibilità " - #: front/src/components/auth/Settings.vue:226 msgctxt "Content/*/*/Noun" msgid "Scopes" @@ -3685,12 +3984,14 @@ msgstr "Visibilità " #: front/src/components/manage/library/ArtistsTable.vue:5 #: front/src/components/manage/library/EditsCardList.vue:6 #: front/src/components/manage/library/LibrariesTable.vue:5 +#: front/src/components/manage/library/TagsTable.vue:5 #: front/src/components/manage/library/TracksTable.vue:5 #: front/src/components/manage/library/UploadsTable.vue:5 #: front/src/components/manage/moderation/AccountsTable.vue:5 #: front/src/components/manage/moderation/DomainsTable.vue:5 #: front/src/components/manage/users/InvitationsTable.vue:5 #: front/src/components/manage/users/UsersTable.vue:5 +#: front/src/views/admin/moderation/ReportsList.vue:8 #: front/src/views/content/libraries/FilesTable.vue:5 #: src/views/playlists/List.vue:13 msgctxt "Content/Search/Input.Label/Noun" @@ -3703,6 +4004,7 @@ msgid "Search a remote library" msgstr "Cerca una libreria remota" #: front/src/components/manage/library/EditsCardList.vue:211 +#: front/src/views/admin/moderation/ReportsList.vue:207 msgctxt "Content/Search/Input.Placeholder" msgid "Search by account, summary, domain…" msgstr "Cerca per account, informazioni, dominio…" @@ -3737,7 +4039,13 @@ msgctxt "Content/Search/Input.Placeholder" msgid "Search by domain, username, bio…" msgstr "Cerca per dominio, nome utente, descrizione…" -#: front/src/components/manage/moderation/DomainsTable.vue:151 +#: front/src/components/manage/library/TagsTable.vue:165 +#, fuzzy +msgctxt "Content/Search/Input.Placeholder" +msgid "Search by name" +msgstr "Cerca per nome…" + +#: front/src/components/manage/moderation/DomainsTable.vue:168 msgctxt "Content/Search/Input.Placeholder" msgid "Search by name…" msgstr "Cerca per nome…" @@ -3752,12 +4060,12 @@ msgctxt "Content/Admin/Input.Placeholder/Verb" msgid "Search by username, e-mail address, code…" msgstr "Cerca per nome utente, indirizzo e-mail, codice…" -#: front/src/components/manage/users/UsersTable.vue:163 +#: front/src/components/manage/users/UsersTable.vue:164 msgctxt "Content/Search/Input.Placeholder" msgid "Search by username, e-mail address, name…" msgstr "Cerca per nome utente, indirizzo e-mail, nome…" -#: front/src/components/audio/SearchBar.vue:20 +#: front/src/components/audio/SearchBar.vue:27 msgctxt "Sidebar/Search/Input.Placeholder" msgid "Search for artists, albums, tracks…" msgstr "Cerca per artisti, album, tracce…" @@ -3767,16 +4075,30 @@ msgctxt "Content/Search/Title" msgid "Search for some music" msgstr "Cerca un po' di musica" -#: front/src/components/library/AlbumBase.vue:57 -#: front/src/components/library/ArtistBase.vue:68 -#: front/src/components/library/TrackBase.vue:76 +#: front/src/components/library/TagsSelector.vue:6 +#, fuzzy +msgctxt "*/Dropdown/Placeholder/Verb" +msgid "Search for tags…" +msgstr "Cerca per nome…" + +#: front/src/components/library/AlbumBase.vue:66 +#: front/src/components/library/ArtistBase.vue:77 +#: front/src/components/library/TrackBase.vue:82 +#, fuzzy +msgctxt "Content/*/Button.Label/Verb" +msgid "Search on Discogs" +msgstr "Cerca un po' di musica" + +#: front/src/components/library/AlbumBase.vue:58 +#: front/src/components/library/ArtistBase.vue:69 +#: front/src/components/library/TrackBase.vue:74 msgctxt "Content/*/Button.Label/Verb" msgid "Search on Wikipedia" msgstr "Cerca su Wikipedia" #: front/src/components/library/Library.vue:35 -#: src/views/admin/library/Base.vue:32 -#: front/src/views/admin/moderation/Base.vue:22 +#: src/views/admin/library/Base.vue:35 +#: front/src/views/admin/moderation/Base.vue:44 #: src/views/admin/users/Base.vue:21 front/src/views/content/Base.vue:19 msgctxt "Menu/*/Hidden text" msgid "Secondary menu" @@ -3787,6 +4109,26 @@ msgctxt "Content/Admin/Menu.Title" msgid "Sections" msgstr "Sezioni" +#: front/src/components/ShortcutsModal.vue:108 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek backwards 30s" +msgstr "Salta indietro 30s" + +#: front/src/components/ShortcutsModal.vue:100 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek backwards 5s" +msgstr "Salta indietro 5s" + +#: front/src/components/ShortcutsModal.vue:112 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek forwards 30s" +msgstr "Salta avanti 30s" + +#: front/src/components/ShortcutsModal.vue:104 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek forwards 5s" +msgstr "Salta avanti 5s" + #: front/src/components/library/radios/Builder.vue:46 msgctxt "Content/Radio/Dropdown.Placeholder/Verb" msgid "Select a filter" @@ -3804,9 +4146,14 @@ msgctxt "Content/*/Link/Verb" msgid "Select only current page" msgstr "Seleziona solo la pagina attuale" -#: front/src/components/Sidebar.vue:43 src/components/Sidebar.vue:108 -#: front/src/components/manage/users/UsersTable.vue:181 -#: front/src/views/admin/moderation/AccountsDetail.vue:506 +#: front/src/components/Home.vue:43 +msgctxt "Content/Home/Link" +msgid "Server rules" +msgstr "Regole del server" + +#: front/src/components/Sidebar.vue:43 src/components/Sidebar.vue:112 +#: front/src/components/manage/users/UsersTable.vue:182 +#: front/src/views/admin/moderation/AccountsDetail.vue:526 msgctxt "*/*/*/Noun" msgid "Settings" msgstr "Impostazioni" @@ -3828,18 +4175,25 @@ msgstr "Condividi collegamento" #: front/src/views/content/libraries/Detail.vue:15 msgctxt "Content/Library/Paragraph" -msgid "" -"Share this link with other users so they can request access to your library." -msgstr "" -"Condividi questo collegamento con altri utenti in modo che possano " -"richiedere l'accesso alla tua libreria." +msgid "Share this link with other users so they can request access to your library." +msgstr "Condividi questo collegamento con altri utenti in modo che possano richiedere l'accesso alla tua libreria." #: front/src/views/content/libraries/Detail.vue:14 -#: front/src/views/content/remote/Card.vue:77 +#: front/src/views/content/remote/Card.vue:90 msgctxt "Content/Library/Title" msgid "Sharing link" msgstr "Condividi collegamento" +#: front/src/components/audio/EmbedWizard.vue:5 +msgctxt "Content/Embed/Message" +msgid "Sharing will not work because this pod doesn't allow anonymous users to access content." +msgstr "" + +#: front/src/components/About.vue:156 +msgctxt "*/*/*/Verb" +msgid "Show" +msgstr "Mostra" + #: front/src/components/audio/album/Card.vue:38 msgctxt "Content/Album/Card.Link/Verb" msgid "Show %{ count } more track" @@ -3847,10 +4201,11 @@ msgid_plural "Show %{ count } more tracks" msgstr[0] "Mostra %{ count } traccia in più" msgstr[1] "Mostra %{ count } tracce in più" -#: front/src/components/audio/artist/Card.vue:30 -msgctxt "Content/Artist/Card.Link" -msgid "Show 1 more album" -msgid_plural "Show %{ count } more albums" +#: front/src/components/tags/List.vue:11 +#, fuzzy +msgctxt "Content/*/Button/Label/Verb" +msgid "Show 1 more tag" +msgid_plural "Show %{ count } more tags" msgstr[0] "Mostra 1 altro album" msgstr[1] "Mostra %{ count } altri album" @@ -3859,17 +4214,29 @@ msgctxt "Content/Library/Button.Label" msgid "Show all edits" msgstr "Mostra tutte le modifiche" -#: front/src/components/ShortcutsModal.vue:42 +#: front/src/components/ShortcutsModal.vue:60 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Show available keyboard shortcuts" msgstr "Mostra scorciatoie da tastiera disponibili" -#: front/src/views/Notifications.vue:7 +#: front/src/components/common/ExpandableDiv.vue:7 +#, fuzzy +msgctxt "*/*/Button,Label" +msgid "Show less" +msgstr "Mostra tutte le modifiche" + +#: front/src/components/common/ExpandableDiv.vue:8 +#, fuzzy +msgctxt "*/*/Button,Label" +msgid "Show more" +msgstr "Mostra 1 altro album" + +#: front/src/views/Notifications.vue:72 msgctxt "Content/Notifications/Form.Label/Verb" msgid "Show read notifications" msgstr "Mostra notifiche lette" -#: front/src/components/forms/PasswordInput.vue:26 +#: front/src/components/forms/PasswordInput.vue:42 msgctxt "Content/Settings/Button.Tooltip/Verb" msgid "Show/hide password" msgstr "Mostra/nascondi password" @@ -3878,56 +4245,64 @@ msgstr "Mostra/nascondi password" #: front/src/components/manage/library/ArtistsTable.vue:84 #: front/src/components/manage/library/EditsCardList.vue:72 #: front/src/components/manage/library/LibrariesTable.vue:110 +#: front/src/components/manage/library/TagsTable.vue:79 #: front/src/components/manage/library/TracksTable.vue:95 #: front/src/components/manage/library/UploadsTable.vue:144 #: front/src/components/manage/moderation/AccountsTable.vue:88 -#: front/src/components/manage/moderation/DomainsTable.vue:74 +#: front/src/components/manage/moderation/DomainsTable.vue:85 #: front/src/components/manage/users/InvitationsTable.vue:76 -#: front/src/components/manage/users/UsersTable.vue:87 +#: front/src/components/manage/users/UsersTable.vue:88 #: front/src/views/content/libraries/FilesTable.vue:117 msgctxt "Content/*/Paragraph" msgid "Showing results %{ start }-%{ end } on %{ total }" msgstr "Mostrando i risultati da %{ start } a %{ end } su %{ total }" -#: front/src/components/ShortcutsModal.vue:83 +#: front/src/components/ShortcutsModal.vue:140 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Shuffle queue" msgstr "Mischia la tua coda" -#: front/src/components/audio/Player.vue:641 +#: front/src/components/audio/Player.vue:667 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Shuffle your queue" msgstr "Mischia la tua coda" -#: front/src/components/auth/Signup.vue:97 +#: front/src/components/Home.vue:103 +#, fuzzy +msgctxt "*/Signup/Title" +msgid "Sign up" +msgstr "Registrati" + +#: front/src/views/auth/Signup.vue:37 msgctxt "*/Signup/Title" msgid "Sign Up" msgstr "Registrati" +#: front/src/components/Home.vue:107 +msgctxt "Content/Home/Paragraph" +msgid "Sign up now to keep a track of your favorites, create playlists, discover new content and much more!" +msgstr "Iscriviti ora per tenere traccia dei tuoi preferiti, creare liste di riproduzione, scoprire nuovi contenuti e molto altro!" + #: front/src/components/manage/users/UsersTable.vue:40 msgctxt "Content/Admin/Table.Label/Short, Noun (Value is a date)" msgid "Sign-up" msgstr "Registrati" -#: front/src/components/mixins/Translations.vue:57 -#: front/src/views/admin/moderation/AccountsDetail.vue:197 -#: front/src/components/mixins/Translations.vue:58 +#: front/src/components/mixins/Translations.vue:69 +#: front/src/views/admin/moderation/AccountsDetail.vue:198 +#: front/src/components/mixins/Translations.vue:70 msgctxt "Content/Admin/Table.Label/Noun" msgid "Sign-up date" msgstr "Data di registrazione" -#: front/src/components/manage/library/UploadsTable.vue:65 -#: front/src/views/admin/library/UploadDetail.vue:219 -msgctxt "Content/*/*/Noun" -msgid "Size" -msgstr "Dimensione" - #: front/src/components/library/FileUpload.vue:94 #: front/src/components/library/TrackDetail.vue:39 -#: front/src/components/mixins/Translations.vue:54 +#: front/src/components/manage/library/UploadsTable.vue:65 +#: front/src/components/mixins/Translations.vue:66 +#: front/src/views/admin/library/UploadDetail.vue:219 #: front/src/views/content/libraries/FilesTable.vue:61 -#: front/src/components/mixins/Translations.vue:55 -msgctxt "Content/Library/*/in MB" +#: front/src/components/mixins/Translations.vue:67 +msgctxt "Content/*/*/Noun" msgid "Size" msgstr "Dimensione" @@ -3944,7 +4319,7 @@ msgctxt "Content/Library/Label" msgid "Skipped files" msgstr "File saltati" -#: front/src/views/admin/moderation/DomainsDetail.vue:89 +#: front/src/views/admin/moderation/DomainsDetail.vue:126 msgctxt "Content/Moderation/Table.Label" msgid "Software" msgstr "Software" @@ -3952,102 +4327,72 @@ msgstr "Software" #: front/src/components/playlists/Editor.vue:21 msgctxt "Content/Playlist/Paragraph" msgid "Some tracks in your queue are already in this playlist:" -msgstr "" -"Alcune tracce nella tua coda sono già presenti in questo elenco di " -"riproduzione:" +msgstr "Alcune tracce nella tua coda sono già presenti in questo elenco di riproduzione:" #: front/src/components/PageNotFound.vue:10 msgctxt "Content/*/Paragraph" msgid "Sorry, the page you asked for does not exist:" msgstr "Ci dispiace, la pagina che hai richiesto non esiste:" -#: front/src/components/Footer.vue:49 +#: front/src/components/Footer.vue:57 msgctxt "Footer/*/List item.Link" msgid "Source code" msgstr "Codice sorgente" #: front/src/components/auth/Profile.vue:23 -#: front/src/components/manage/users/UsersTable.vue:70 +#: front/src/components/manage/users/UsersTable.vue:71 msgctxt "Content/Profile/User role" msgid "Staff member" msgstr "Membro dello staff" -#: front/src/components/audio/PlayButton.vue:23 +#: front/src/components/audio/PlayButton.vue:27 #: src/components/radios/Button.vue:4 msgctxt "*/Queue/Button.Label/Short, Verb" msgid "Start radio" msgstr "Riproduci radio" -#: front/src/views/admin/Settings.vue:86 -msgctxt "Content/Admin/Menu" +#: front/src/components/About.vue:170 src/components/Home.vue:53 +#: front/src/views/admin/Settings.vue:87 +#, fuzzy +msgctxt "Content/Home/Header" msgid "Statistics" msgstr "Statistiche" -#: front/src/views/admin/moderation/AccountsDetail.vue:490 +#: front/src/views/admin/moderation/AccountsDetail.vue:510 msgctxt "Content/Moderation/Help text" -msgid "" -"Statistics are computed from known activity and content on your instance, " -"and do not reflect general activity for this account" -msgstr "" -"Le statistiche sono calcolate da attività conosciute e contenuti della tua " -"istanza, e non riflette l'attività generale per questo account" +msgid "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this account" +msgstr "Le statistiche sono calcolate da attività conosciute e contenuti della tua istanza, e non riflette l'attività generale per questo account" -#: front/src/views/admin/moderation/DomainsDetail.vue:371 +#: front/src/views/admin/moderation/DomainsDetail.vue:418 msgctxt "Content/Moderation/Help text" -msgid "" -"Statistics are computed from known activity and content on your instance, " -"and do not reflect general activity for this domain" -msgstr "" -"Le statistiche sono calcolate da attività conosciute e contenuti della tua " -"istanza, e non riflette l'attività generale per questo dominio" - -#: front/src/views/admin/library/AlbumDetail.vue:329 -#: front/src/views/admin/library/ArtistDetail.vue:328 -#: front/src/views/admin/library/LibraryDetail.vue:316 -#: front/src/views/admin/library/TrackDetail.vue:371 +msgid "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this domain" +msgstr "Le statistiche sono calcolate da attività conosciute e contenuti della tua istanza, e non riflette l'attività generale per questo dominio" + +#: front/src/views/admin/library/AlbumDetail.vue:346 +#: front/src/views/admin/library/ArtistDetail.vue:345 +#: front/src/views/admin/library/LibraryDetail.vue:356 +#: front/src/views/admin/library/TagDetail.vue:210 +#: front/src/views/admin/library/TrackDetail.vue:389 #: front/src/views/admin/library/UploadDetail.vue:335 msgctxt "Content/Moderation/Help text" -msgid "" -"Statistics are computed from known activity and content on your instance, " -"and do not reflect general activity for this object" -msgstr "" -"Le statistiche sono calcolate da attività conosciute e contenuti della tua " -"istanza, e non riflette l'attività generale per questo oggetto" - -#: front/src/views/admin/moderation/DomainsDetail.vue:115 -msgctxt "Content/Moderation/Table.Label (Value is Error message)" -msgid "Status" -msgstr "Stato" +msgid "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" +msgstr "Le statistiche sono calcolate da attività conosciute e contenuti della tua istanza, e non riflette l'attività generale per questo oggetto" #: front/src/components/library/FileUpload.vue:95 -msgctxt "Content/Library/Table.Label (Value is Uploading/Uploaded/Error)" -msgid "Status" -msgstr "Stato" - -#: front/src/views/content/libraries/Detail.vue:28 -msgctxt "Content/Library.Federation/Table.Label (Value is Approved/Rejected)" -msgid "Status" -msgstr "Stato" - +#: front/src/components/manage/library/EditsCardList.vue:12 +#: front/src/components/manage/moderation/ReportCard.vue:57 #: front/src/components/manage/users/InvitationsTable.vue:17 #: front/src/components/manage/users/InvitationsTable.vue:39 -msgctxt "Content/Admin/*/Noun (Value is Used/Not used)" -msgid "Status" -msgstr "Stato" - #: front/src/components/manage/users/UsersTable.vue:43 -msgctxt "Content/Admin/Table.Label/Noun (Value is Regular user/Admin)" -msgid "Status" -msgstr "Stato" - -#: front/src/components/manage/library/EditsCardList.vue:12 -msgctxt "" -"Content/Search/Dropdown.Label (Value is All/Pending " -"review/Approved/Rejected)" +#: front/src/views/admin/moderation/DomainsDetail.vue:152 +#: front/src/views/admin/moderation/ReportsList.vue:14 +#: front/src/views/content/libraries/Detail.vue:28 +#, fuzzy +msgctxt "*/*/*" msgid "Status" msgstr "Stato" -#: front/src/components/Sidebar.vue:174 src/components/radios/Button.vue:3 +#: front/src/components/Sidebar.vue:178 src/components/radios/Button.vue:3 msgctxt "*/Player/Button.Label/Short, Verb" msgid "Stop radio" msgstr "Ferma radio" @@ -4057,7 +4402,7 @@ msgctxt "*/*/Button.Label/Verb" msgid "Submit" msgstr "Invia" -#: front/src/components/library/EditForm.vue:98 +#: front/src/components/library/EditForm.vue:110 msgctxt "Content/Library/Button.Label/Verb" msgid "Submit and apply edit" msgstr "Invia e applica modifica" @@ -4067,12 +4412,24 @@ msgctxt "Content/Library/Button.Label" msgid "Submit another edit" msgstr "Invia un'altra modifica" -#: front/src/components/library/EditForm.vue:99 +#: front/src/components/moderation/ReportModal.vue:64 +#, fuzzy +msgctxt "Popup/*/Button.Label" +msgid "Submit report" +msgstr "Invia" + +#: front/src/components/library/EditForm.vue:111 msgctxt "Content/Library/Button.Label/Verb" msgid "Submit suggestion" msgstr "Invia suggerimento" -#: front/src/views/admin/Settings.vue:85 +#: front/src/components/manage/moderation/ReportCard.vue:17 +#, fuzzy +msgctxt "Content/Moderation/*" +msgid "Submitted by" +msgstr "Invia" + +#: front/src/views/admin/Settings.vue:86 msgctxt "Content/Admin/Menu" msgid "Subsonic" msgstr "Subsonic" @@ -4112,16 +4469,21 @@ msgctxt "Content/Library/Tab.Title/Short" msgid "Summary" msgstr "Riepilogo" -#: front/src/components/library/EditForm.vue:87 +#: front/src/components/library/EditForm.vue:99 msgctxt "*/*/*" msgid "Summary (optional)" msgstr "Riassunto (opzionale)" -#: front/src/components/Footer.vue:39 +#: front/src/components/Footer.vue:47 msgctxt "Footer/*/Listitem.Link" msgid "Support forum" msgstr "Forum di supporto" +#: front/src/views/Notifications.vue:10 +msgctxt "Content/Notifications/Header" +msgid "Support this Funkwhale pod" +msgstr "Supporta questo pod di Funkwhale" + #: front/src/components/library/FileUpload.vue:85 msgctxt "Content/Library/Paragraph" msgid "Supported extensions: %{ extensions }" @@ -4132,50 +4494,63 @@ msgctxt "Content/Playlist/Paragraph" msgid "Syncing changes to server…" msgstr "Sincronizzando le modifiche con il server…" -#: front/src/components/audio/EmbedWizard.vue:25 +#: front/src/components/audio/SearchBar.vue:35 +msgctxt "*/*/*/Noun" +msgid "Tag" +msgstr "Etichetta" + +#: front/src/views/admin/library/TagDetail.vue:61 +#, fuzzy +msgctxt "Content/Moderation/Title" +msgid "Tag data" +msgstr "Dati della traccia" + +#: front/src/components/library/Albums.vue:23 +#: src/components/library/Artists.vue:15 +#: front/src/views/admin/library/Base.vue:23 +#: src/views/admin/library/TagsList.vue:24 front/src/edits.js:24 +#: src/edits.js:50 src/edits.js:91 src/entities.js:120 +msgctxt "*/*/*/Noun" +msgid "Tags" +msgstr "Etichette" + +#: front/src/components/mixins/Translations.vue:44 +#: front/src/components/mixins/Translations.vue:45 +#, fuzzy +msgctxt "Content/Moderation/Dropdown" +msgid "Takedown request" +msgstr "Annulla richiesta di seguire" + +#: front/src/components/About.vue:35 src/components/About.vue:61 +msgctxt "Content/About/Header" +msgid "Terms and privacy policy" +msgstr "Termini e regole sulla privacy" + +#: front/src/components/audio/EmbedWizard.vue:35 #: front/src/components/common/CopyInput.vue:3 msgctxt "Content/*/Paragraph" msgid "Text copied to clipboard!" msgstr "Testo copiato negli appunti!" -#: front/src/components/Home.vue:26 -msgctxt "Content/Home/Paragraph" -msgid "" -"That's simple: we loved Grooveshark and we want to build something even " -"better." -msgstr "" -"È molto semplice: amavamo Grooveshark e volevamo creare qualcosa ancora più " -"bello." - -#: front/src/views/admin/library/AlbumDetail.vue:75 +#: front/src/views/admin/library/AlbumDetail.vue:81 msgctxt "Content/Moderation/Paragraph" -msgid "" -"The album will be removed, as well as associated uploads, tracks, favorites " -"and listening history. This action is irreversible." -msgstr "" -"L'album sarà rimosso, ed anche i caricamenti associati, tracce, preferiti e " -"cronologia di ascolto. Questa azione è irreversibile." +msgid "The album will be removed, as well as associated uploads, tracks, favorites and listening history. This action is irreversible." +msgstr "L'album sarà rimosso, ed anche i caricamenti associati, tracce, preferiti e cronologia di ascolto. Questa azione è irreversibile." #: front/src/components/auth/Authorize.vue:39 msgctxt "Content/Auth/Paragraph" msgid "The application is also requesting the following unknown permissions:" msgstr "L'applicazione sta anche richiedendo i seguenti permessi sconosciuti:" -#: front/src/views/admin/library/ArtistDetail.vue:74 +#: front/src/views/admin/library/ArtistDetail.vue:79 msgctxt "Content/Moderation/Paragraph" -msgid "" -"The artist will be removed, as well as associated uploads, tracks, albums, " -"favorites and listening history. This action is irreversible." -msgstr "" -"L'artista sarà rimosso, ed anche i caricamenti associati, tracce, album, " -"preferiti e cronologia di ascolto. Questa azione è irreversibile." +msgid "The artist will be removed, as well as associated uploads, tracks, albums, favorites and listening history. This action is irreversible." +msgstr "L'artista sarà rimosso, ed anche i caricamenti associati, tracce, album, preferiti e cronologia di ascolto. Questa azione è irreversibile." -#: front/src/components/Footer.vue:53 +#: front/src/components/Footer.vue:61 msgctxt "Footer/*/List item.Link" msgid "The funkwhale logo was kindly designed and provided by Francis Gading." -msgstr "" -"Il logo di Funkwhale è stato gentilmente disegnato e concesso da Francis " -"Gading." +msgstr "Il logo di Funkwhale è stato gentilmente disegnato e concesso da Francis Gading." #: front/src/components/SetInstanceModal.vue:8 msgctxt "Popup/Instance/Error message.List item" @@ -4184,29 +4559,18 @@ msgstr "L'indirizzo fornito non è quello di un server Funkwhale" #: front/src/views/content/libraries/Form.vue:34 msgctxt "Popup/Library/Paragraph" -msgid "" -"The library and all its tracks will be deleted. This can not be undone." -msgstr "" -"La libreria e tutte le sue tracce saranno eliminate. Questa azione è " -"irreversibile." +msgid "The library and all its tracks will be deleted. This can not be undone." +msgstr "La libreria e tutte le sue tracce saranno eliminate. Questa azione è irreversibile." #: front/src/views/admin/library/LibraryDetail.vue:61 msgctxt "Content/Moderation/Paragraph" -msgid "" -"The library will be removed, as well as associated uploads, and follows. " -"This action is irreversible." -msgstr "" -"La libreria sarà rimossa, ed anche i caricamenti associati e gli iscritti. " -"Questa azione è irreversibile." +msgid "The library will be removed, as well as associated uploads, and follows. This action is irreversible." +msgstr "La libreria sarà rimossa, ed anche i caricamenti associati e gli iscritti. Questa azione è irreversibile." #: front/src/components/library/ImportStatusModal.vue:140 msgctxt "Popup/Import/Error.Label" -msgid "" -"The metadata included in the file is invalid or some mandatory fields are " -"missing." -msgstr "" -"I metadati inclusi nel file non sono validi o alcuni campi obbligatori sono " -"mancanti." +msgid "The metadata included in the file is invalid or some mandatory fields are missing." +msgstr "I metadati inclusi nel file non sono validi o alcuni campi obbligatori sono mancanti." #: front/src/components/library/FileUpload.vue:38 msgctxt "Content/Library/List item" @@ -4216,17 +4580,18 @@ msgstr "I file musicali che stai caricando sono correttamente etichettati." #: front/src/components/audio/Player.vue:65 msgctxt "Sidebar/Player/Error message.Paragraph" msgid "The next track will play automatically in a few seconds…" -msgstr "" -"La traccia seguente verrà riprodotta automaticamente tra pochi secondi…" +msgstr "La traccia seguente verrà riprodotta automaticamente tra pochi secondi…" -#: front/src/components/Home.vue:116 -msgctxt "Content/Home/List item" -msgid "" -"The plaform is free and open-source, you can install it and modify it " -"without worries" -msgstr "" -"La piattaforma è libera e open source, puoi installarla e modificarla senza " -"problemi" +#: front/src/components/manage/moderation/NotesThread.vue:27 +#, fuzzy +msgctxt "Content/Moderation/Paragraph" +msgid "The note will be removed. This action is irreversible." +msgstr "Il caricamento sarà rimosso. Questa azione è irreversibile." + +#: front/src/components/manage/moderation/ReportCard.vue:120 +msgctxt "Content/Moderation/Message" +msgid "The object associated with this report was deleted." +msgstr "L'oggetto associato a questa segnalazione è stato eliminato." #: front/src/components/playlists/Form.vue:14 msgctxt "Content/Playlist/Error message.Title" @@ -4240,64 +4605,51 @@ msgstr "Il server remoto ha risposto con il codice HTTP %{ status }" #: front/src/components/federation/FetchButton.vue:13 msgctxt "Popup/*/Message.Content" -msgid "" -"The remote server answered, but returned data was unsupported by Funkwhale." -msgstr "" -"Il server remoto ha risposto, ma i dati ricevuti non sono supportati da " -"Funkwhale." +msgid "The remote server answered, but returned data was unsupported by Funkwhale." +msgstr "Il server remoto ha risposto, ma i dati ricevuti non sono supportati da Funkwhale." #: front/src/components/federation/FetchButton.vue:44 +#, fuzzy msgctxt "*/*/Error" -msgid "The remote server didn't answered fast enough" +msgid "The remote server didn't respond quickly enough" msgstr "Il server remoto non ha risposto abbastanza velocemente" #: front/src/components/federation/FetchButton.vue:50 +#, fuzzy msgctxt "*/*/Error" -msgid "The return server returned invalid JSON or JSON-LD data" +msgid "The remote server returned invalid JSON or JSON-LD data" msgstr "Il server remoto ha risposto con dati JSON o JSON-LD non validi" #: front/src/components/manage/library/AlbumsTable.vue:189 msgctxt "Popup/*/Paragraph" -msgid "" -"The selected albums will be removed, as well as associated tracks, uploads, " -"favorites and listening history. This action is irreversible." -msgstr "" -"Gli album selezionati saranno rimossi, ed anche i caricamenti associati, " -"tracce, preferiti e cronologia di ascolto. Questa azione è irreversibile." +msgid "The selected albums will be removed, as well as associated tracks, uploads, favorites and listening history. This action is irreversible." +msgstr "Gli album selezionati saranno rimossi, ed anche i caricamenti associati, tracce, preferiti e cronologia di ascolto. Questa azione è irreversibile." #: front/src/components/manage/library/ArtistsTable.vue:179 msgctxt "Popup/*/Paragraph" -msgid "" -"The selected artist will be removed, as well as associated uploads, tracks, " -"albums, favorites and listening history. This action is irreversible." -msgstr "" -"Gli artisti selezionati saranno rimossi, ed anche i caricamenti associati, " -"tracce, album, preferiti e cronologia di ascolto. Questa azione è " -"irreversibile." +msgid "The selected artist will be removed, as well as associated uploads, tracks, albums, favorites and listening history. This action is irreversible." +msgstr "Gli artisti selezionati saranno rimossi, ed anche i caricamenti associati, tracce, album, preferiti e cronologia di ascolto. Questa azione è irreversibile." #: front/src/components/manage/library/LibrariesTable.vue:206 msgctxt "Popup/*/Paragraph" -msgid "" -"The selected library will be removed, as well as associated uploads and " -"follows. This action is irreversible." -msgstr "" -"Le librerie selezionate saranno rimosse, ed anche i caricamenti associati, " -"ed iscritti. Questa azione è irreversibile." +msgid "The selected library will be removed, as well as associated uploads and follows. This action is irreversible." +msgstr "Le librerie selezionate saranno rimosse, ed anche i caricamenti associati, ed iscritti. Questa azione è irreversibile." + +#: front/src/components/manage/library/TagsTable.vue:180 +#, fuzzy +msgctxt "Popup/*/Paragraph" +msgid "The selected tag will be removed and unlinked with existing content, if any. This action is irreversible." +msgstr "Il caricamento selezionato sarà rimosso. Questa azione è irreversibile." #: front/src/components/manage/library/TracksTable.vue:189 msgctxt "Popup/*/Paragraph" -msgid "" -"The selected tracks will be removed, as well as associated uploads, " -"favorites and listening history. This action is irreversible." -msgstr "" -"Le tracce selezionate saranno rimosse, ed anche i caricamenti associati, " -"preferiti e cronologia di ascolto. Questa azione è irreversibile." +msgid "The selected tracks will be removed, as well as associated uploads, favorites and listening history. This action is irreversible." +msgstr "Le tracce selezionate saranno rimosse, ed anche i caricamenti associati, preferiti e cronologia di ascolto. Questa azione è irreversibile." #: front/src/components/manage/library/UploadsTable.vue:256 msgctxt "Popup/*/Paragraph" msgid "The selected upload will be removed. This action is irreversible." -msgstr "" -"Il caricamento selezionato sarà rimosso. Questa azione è irreversibile." +msgstr "Il caricamento selezionato sarà rimosso. Questa azione è irreversibile." #: front/src/components/SetInstanceModal.vue:7 msgctxt "Popup/Instance/Error message.List item" @@ -4311,10 +4663,14 @@ msgstr "L'API Subsonic non è disponibile su questa istanza Funkwhale." #: front/src/components/library/EditCard.vue:96 msgctxt "Popup/Library/Paragraph" -msgid "" -"The suggestion will be completely removed, this action is irreversible." -msgstr "" -"Il suggerimento sarà completamente rimosso, questa azione è irreversibile." +msgid "The suggestion will be completely removed, this action is irreversible." +msgstr "Il suggerimento sarà completamente rimosso, questa azione è irreversibile." + +#: front/src/views/admin/library/TagDetail.vue:44 +#, fuzzy +msgctxt "Content/Moderation/Paragraph" +msgid "The tag will be removed and unlinked from any existing entity. This action is irreversible." +msgstr "La traccia sarà rimossa, ed anche i caricamenti associati, preferiti e cronologia di ascolto. Questa azione è irreversibile." #: front/src/components/playlists/PlaylistModal.vue:34 msgctxt "Popup/Playlist/Error message.Title" @@ -4326,14 +4682,10 @@ msgctxt "Sidebar/Player/Error message.Title" msgid "The track cannot be loaded" msgstr "La traccia non può essere caricata" -#: front/src/views/admin/library/TrackDetail.vue:74 +#: front/src/views/admin/library/TrackDetail.vue:80 msgctxt "Content/Moderation/Paragraph" -msgid "" -"The track will be removed, as well as associated uploads, favorites and " -"listening history. This action is irreversible." -msgstr "" -"La traccia sarà rimossa, ed anche i caricamenti associati, preferiti e " -"cronologia di ascolto. Questa azione è irreversibile." +msgid "The track will be removed, as well as associated uploads, favorites and listening history. This action is irreversible." +msgstr "La traccia sarà rimossa, ed anche i caricamenti associati, preferiti e cronologia di ascolto. Questa azione è irreversibile." #: front/src/views/admin/library/UploadDetail.vue:68 msgctxt "Content/Moderation/Paragraph" @@ -4348,9 +4700,7 @@ msgstr "I file musicali caricati sono in formato OGG, Flac o MP3" #: front/src/views/content/Home.vue:4 msgctxt "Content/Library/Paragraph" msgid "There are various ways to grab new content and make it available here." -msgstr "" -"Offriamo vari modi per recuperare nuovi contenuti e renderli disponibili " -"qui." +msgstr "Offriamo vari modi per recuperare nuovi contenuti e renderli disponibili qui." #: front/src/components/manage/moderation/InstancePolicyForm.vue:66 msgctxt "Popup/Moderation/Paragraph" @@ -4367,25 +4717,38 @@ msgctxt "Content/Artist/Paragraph" msgid "This artist is present in the following libraries:" msgstr "Questo artista è presente nelle seguenti librerie:" +#: front/src/components/manage/moderation/DomainsTable.vue:169 +#, fuzzy +msgctxt "Content/Moderation/Popup" +msgid "This domain is present in your allow-list" +msgstr "Questo artista è presente nelle seguenti librerie:" + #: front/src/views/admin/moderation/AccountsDetail.vue:84 -#: front/src/views/admin/moderation/DomainsDetail.vue:48 +#: front/src/views/admin/moderation/DomainsDetail.vue:76 msgctxt "Content/Moderation/Card.Title" msgid "This domain is subject to specific moderation rules" msgstr "Questo dominio è soggetto a regole specifiche di moderazione" +#: front/src/components/manage/moderation/InstancePolicyModal.vue:16 +#, fuzzy +msgctxt "Content/Moderation/Card.Title" +msgid "This entity is subject to specific moderation rules" +msgstr "Questo dominio è soggetto a regole specifiche di moderazione" + #: front/src/views/content/Home.vue:9 msgctxt "Content/Library/Paragraph" msgid "This instance offers up to %{quota} of storage space for every user." -msgstr "" -"Questa istanza offre fino a %{quota} di spazio di archiviazione per ogni " -"utente." +msgstr "Questa istanza offre fino a %{quota} di spazio di archiviazione per ogni utente." + +#: front/src/components/auth/Settings.vue:300 +msgctxt "Popup/Settings/Paragraph" +msgid "This is irreversible and will permanently remove your data from our servers. You will we immediatly logged out." +msgstr "Questo è irreversibile e rimuoverà permanentemente i tuoi dati dai nostri server. Sarai immediatamente disconnesso." #: front/src/components/auth/Settings.vue:165 msgctxt "Content/Settings/Paragraph" -msgid "" -"This is the list of applications that have access to your account data." -msgstr "" -"Questa è la lista di applicazioni che hanno accesso ai dati del tuo account." +msgid "This is the list of applications that have access to your account data." +msgstr "Questa è la lista di applicazioni che hanno accesso ai dati del tuo account." #: front/src/components/auth/Settings.vue:218 msgctxt "Content/Settings/Paragraph" @@ -4402,29 +4765,20 @@ msgctxt "Content/Library/Input.Placeholder" msgid "This library contains my personal music, I hope you like it." msgstr "Questa libreria contiene la mia musica personale, spero vi piaccia." -#: front/src/views/content/remote/Card.vue:141 +#: front/src/views/content/remote/Card.vue:169 msgctxt "Content/Library/Card.Help text" -msgid "" -"This library is private and your approval from its owner is needed to access" -" its content" -msgstr "" -"Questa libreria è privata e la tua approvazione dal suo proprietario è " -"necessaria per accedere al suo contenuto" +msgid "This library is private and your approval from its owner is needed to access its content" +msgstr "Questa libreria è privata e la tua approvazione dal suo proprietario è necessaria per accedere al suo contenuto" -#: front/src/views/content/remote/Card.vue:142 +#: front/src/views/content/remote/Card.vue:170 msgctxt "Content/Library/Card.Help text" msgid "This library is public and you can access its content freely" -msgstr "" -"Questa libreria è pubblica e tu puoi accedere al suo contenuto liberamente" +msgstr "Questa libreria è pubblica e tu puoi accedere al suo contenuto liberamente" #: front/src/components/common/ActionTable.vue:47 msgctxt "Modal/*/Paragraph" -msgid "" -"This may affect a lot of elements or have irreversible consequences, please " -"double check this is really what you want." -msgstr "" -"Questo può coinvolgere molti elementi o avere conseguenze irreversibili, per" -" favore ricontrolla se è proprio quello che vuoi." +msgid "This may affect a lot of elements or have irreversible consequences, please double check this is really what you want." +msgstr "Questo può coinvolgere molti elementi o avere conseguenze irreversibili, per favore ricontrolla se è proprio quello che vuoi." #: front/src/components/library/AlbumEdit.vue:8 #: front/src/components/library/ArtistEdit.vue:8 @@ -4433,6 +4787,11 @@ msgctxt "Content/*/Message" msgid "This object is managed by another server, you cannot edit it." msgstr "Questo oggetto è gestito da un altro server, non puoi modificarlo." +#: front/src/components/Home.vue:87 +msgctxt "Content/Home/Paragraph" +msgid "This pod runs Funkwhale, a community-driven project that lets you listen and share music and audio within a decentralized, open network." +msgstr "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." + #: front/src/components/library/FileUpload.vue:51 msgctxt "Content/Library/Paragraph" msgid "This reference will be used to group imported files together." @@ -4440,19 +4799,16 @@ msgstr "Questo riferimento sarà utilizzato per raggruppare file importati." #: front/src/components/mixins/Translations.vue:33 #: front/src/components/mixins/Translations.vue:34 +#, fuzzy msgctxt "Content/Library/Help text" -msgid "This track could not be processed, please it is tagged correctly" -msgstr "" -"Non è stato possibile processare questa traccia, assicurati che sia " -"correttamente etichettata" +msgid "This track could not be processed, please make sure it is tagged correctly" +msgstr "Non è stato possibile processare questa traccia, assicurati che sia correttamente etichettata" #: front/src/components/mixins/Translations.vue:29 #: front/src/components/mixins/Translations.vue:30 msgctxt "Content/Library/Help text" -msgid "" -"This track has been uploaded, but hasn't been processed by the server yet" -msgstr "" -"Questa traccia è stata caricata, ma non è ancora stata processata dal server" +msgid "This track has been uploaded, but hasn't been processed by the server yet" +msgstr "Questa traccia è stata caricata, ma non è ancora stata processata dal server" #: front/src/components/mixins/Translations.vue:25 #: front/src/components/mixins/Translations.vue:26 @@ -4460,105 +4816,94 @@ msgctxt "Content/Library/Help text" msgid "This track is already present in one of your libraries" msgstr "Questa traccia è già presente in una delle tue librerie" -#: front/src/components/audio/PlayButton.vue:85 +#: front/src/components/audio/PlayButton.vue:103 msgctxt "*/Queue/Button/Title" msgid "This track is not available in any library you have access to" -msgstr "" -"Questa traccia non è disponibile in nessuna libreria alla quale hai accesso" +msgstr "Questa traccia non è disponibile in nessuna libreria alla quale hai accesso" #: front/src/components/library/TrackDetail.vue:82 msgctxt "Content/Track/Paragraph" msgid "This track is present in the following libraries:" msgstr "Questa traccia è presente nelle seguenti librerie:" -#: front/src/views/playlists/Detail.vue:38 +#: front/src/views/playlists/Detail.vue:46 msgctxt "Popup/Playlist/Paragraph" msgid "This will completely delete this playlist and cannot be undone." -msgstr "" -"Questo cancellerà questa lista di riproduzione e non può essere annullato." +msgstr "Questo cancellerà questa lista di riproduzione e non può essere annullato." #: front/src/views/radios/Detail.vue:27 msgctxt "Popup/Radio/Paragraph" msgid "This will completely delete this radio and cannot be undone." msgstr "Questo cancellerà questa radio e non può essere annullato." -#: front/src/components/auth/SubsonicTokenForm.vue:50 +#: front/src/components/auth/SubsonicTokenForm.vue:55 msgctxt "Popup/Settings/Paragraph" -msgid "" -"This will completely disable access to the Subsonic API using from account." -msgstr "" -"Questo disabiliterà completamente l'accesso alla API Subsonic dagli account." +msgid "This will completely disable access to the Subsonic API using from account." +msgstr "Questo disabiliterà completamente l'accesso alla API Subsonic dagli account." -#: front/src/components/auth/SubsonicTokenForm.vue:35 +#: front/src/components/manage/moderation/ReportCard.vue:359 +msgctxt "Content/Moderation/Popup,Paragraph" +msgid "This will delete the object associated with this report and mark the report as resolved. The deletion is irreversible." +msgstr "Questo eliminerà l'oggetto associato con questa segnalazione e la segnerà come risolta. La cancellazione è irreversibile." + +#: front/src/components/auth/SubsonicTokenForm.vue:40 msgctxt "Popup/Settings/Paragraph" -msgid "" -"This will log you out from existing devices that use the current password." -msgstr "" -"Questo ti disconnetterà dai dispositivi esistenti che utilizzano la password" -" attuale." +msgid "This will log you out from existing devices that use the current password." +msgstr "Questo ti disconnetterà dai dispositivi esistenti che utilizzano la password attuale." #: front/src/components/auth/Settings.vue:253 msgctxt "Popup/Settings/Paragraph" -msgid "" -"This will permanently delete the application and all the associated tokens." -msgstr "" -"Questo cancellerà permanentemente l'applicazione e tutti i token associati." +msgid "This will permanently delete the application and all the associated tokens." +msgstr "Questo cancellerà permanentemente l'applicazione e tutti i token associati." #: front/src/components/auth/Settings.vue:194 msgctxt "Popup/Settings/Paragraph" -msgid "" -"This will prevent this application from accessing the service on your " -"behalf." -msgstr "" -"Questo eviterà a questa applicazione di accedere al servizio a tuo nome." +msgid "This will prevent this application from accessing the service on your behalf." +msgstr "Questo eviterà a questa applicazione di accedere al servizio a tuo nome." #: front/src/components/playlists/Editor.vue:54 msgctxt "Popup/Playlist/Paragraph" msgid "This will remove all tracks from this playlist and cannot be undone." -msgstr "" -"Questo cancellerà tutte le tracce da questa lista di riproduzione e non può " -"essere annullato." - -#: front/src/views/admin/library/AlbumDetail.vue:99 -#: front/src/views/admin/library/TrackDetail.vue:98 src/edits.js:21 -#: src/edits.js:39 -msgctxt "*/*/*/Noun" -msgid "Title" -msgstr "Titolo" +msgstr "Questo cancellerà tutte le tracce da questa lista di riproduzione e non può essere annullato." #: front/src/components/audio/track/Table.vue:7 -#: front/src/views/content/libraries/FilesTable.vue:55 -msgctxt "Content/Track/*/Noun" -msgid "Title" -msgstr "Titolo" - #: front/src/components/manage/library/AlbumsTable.vue:39 #: front/src/components/manage/library/TracksTable.vue:39 -msgctxt "*/*/*" +#: front/src/views/admin/library/AlbumDetail.vue:105 +#: front/src/views/admin/library/TrackDetail.vue:104 +#: front/src/views/content/libraries/FilesTable.vue:55 src/edits.js:36 +#: front/src/edits.js:62 +msgctxt "*/*/*/Noun" msgid "Title" msgstr "Titolo" #: front/src/components/SetInstanceModal.vue:16 msgctxt "Popup/Instance/Paragraph" -msgid "" -"To continue, please select the Funkwhale instance you want to connect to. " -"Enter the address directly, or select one of the suggested choices." -msgstr "" -"Per continuare, per favore seleziona l'istanza Funkwhale alla quale vuoi " -"connetterti. Inserisci l'indirizzo direttamente, o selezionane uno dalla " -"lista di suggerimenti." +msgid "To continue, please select the Funkwhale instance you want to connect to. Enter the address directly, or select one of the suggested choices." +msgstr "Per continuare, per favore seleziona l'istanza Funkwhale alla quale vuoi connetterti. Inserisci l'indirizzo direttamente, o selezionane uno dalla lista di suggerimenti." -#: front/src/components/ShortcutsModal.vue:79 +#: front/src/components/ShortcutsModal.vue:148 +#, fuzzy +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Toggle favorite" +msgstr "1 mi piace" + +#: front/src/components/ShortcutsModal.vue:132 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Toggle mute" +msgstr "Cambia muto" + +#: front/src/components/ShortcutsModal.vue:136 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Toggle queue looping" msgstr "Cambia tipo di riproduzione della coda" -#: front/src/views/admin/library/AlbumDetail.vue:222 -#: front/src/views/admin/library/ArtistDetail.vue:211 -#: front/src/views/admin/library/LibraryDetail.vue:200 -#: front/src/views/admin/library/TrackDetail.vue:274 -#: front/src/views/admin/moderation/AccountsDetail.vue:317 -#: front/src/views/admin/moderation/DomainsDetail.vue:225 +#: front/src/views/admin/library/AlbumDetail.vue:238 +#: front/src/views/admin/library/ArtistDetail.vue:226 +#: front/src/views/admin/library/LibraryDetail.vue:219 +#: front/src/views/admin/library/TrackDetail.vue:290 +#: front/src/views/admin/moderation/AccountsDetail.vue:329 +#: front/src/views/admin/moderation/DomainsDetail.vue:262 msgctxt "Content/Moderation/Table.Label" msgid "Total size" msgstr "Dimensione totale" @@ -4568,20 +4913,18 @@ msgctxt "Content/Library/Card.Help text" msgid "Total size of the files in this library" msgstr "Dimensione totale dei files in questa libreria" -#: front/src/views/admin/moderation/DomainsDetail.vue:105 +#: front/src/views/admin/moderation/DomainsDetail.vue:142 msgctxt "Content/*/*" msgid "Total users" msgstr "Utenti totali" -#: front/src/views/admin/library/UploadDetail.vue:199 -msgctxt "*/*/*" -msgid "Track" -msgstr "Traccia" - -#: front/src/components/audio/SearchBar.vue:27 -#: front/src/components/library/TrackBase.vue:173 +#: front/src/components/audio/SearchBar.vue:34 +#: front/src/components/library/TrackBase.vue:188 #: front/src/components/library/TrackDetail.vue:128 #: front/src/components/metadata/Search.vue:138 +#: src/components/mixins/Report.vue:28 +#: front/src/views/admin/library/UploadDetail.vue:199 +#: front/src/components/mixins/Report.vue:29 msgctxt "*/*/*/Noun" msgid "Track" msgstr "Traccia" @@ -4591,7 +4934,7 @@ msgctxt "Content/Library/Card/Short" msgid "Track #%{ id } - %{ name }" msgstr "Traccia #%{ id } - %{ name }" -#: front/src/views/admin/library/TrackDetail.vue:91 +#: front/src/views/admin/library/TrackDetail.vue:97 msgctxt "Content/Moderation/Title" msgid "Track data" msgstr "Dati della traccia" @@ -4601,30 +4944,28 @@ msgctxt "Content/Track/Title/Noun" msgid "Track information" msgstr "Informazioni traccia" -#: front/src/components/mixins/Translations.vue:50 -#: front/src/components/mixins/Translations.vue:51 +#: front/src/components/mixins/Translations.vue:60 +#: front/src/components/mixins/Translations.vue:61 msgctxt "Content/*/Dropdown/Noun" msgid "Track name" msgstr "Nome traccia" -#: front/src/components/instance/Stats.vue:54 #: front/src/components/library/AlbumDetail.vue:19 -#: front/src/components/playlists/PlaylistModal.vue:47 -#: front/src/views/admin/moderation/AccountsDetail.vue:362 -#: front/src/views/admin/moderation/DomainsDetail.vue:274 -#: front/src/views/content/Base.vue:8 src/views/content/libraries/Detail.vue:8 -#: front/src/views/playlists/Detail.vue:51 src/views/radios/Detail.vue:34 -msgctxt "*/*/*/Noun" -msgid "Tracks" -msgstr "Tracce" - +#: front/src/components/library/TagDetail.vue:36 #: front/src/components/manage/library/AlbumsTable.vue:42 #: front/src/components/manage/library/ArtistsTable.vue:42 -#: front/src/views/admin/library/AlbumDetail.vue:252 -#: front/src/views/admin/library/ArtistDetail.vue:251 +#: front/src/components/manage/library/TagsTable.vue:44 +#: front/src/components/playlists/PlaylistModal.vue:47 +#: front/src/views/admin/library/AlbumDetail.vue:268 +#: front/src/views/admin/library/ArtistDetail.vue:266 #: front/src/views/admin/library/Base.vue:14 -#: front/src/views/admin/library/LibraryDetail.vue:229 +#: front/src/views/admin/library/LibraryDetail.vue:248 +#: front/src/views/admin/library/TagDetail.vue:143 #: front/src/views/admin/library/TracksList.vue:24 +#: front/src/views/admin/moderation/AccountsDetail.vue:374 +#: front/src/views/admin/moderation/DomainsDetail.vue:311 +#: front/src/views/content/Base.vue:8 src/views/content/libraries/Detail.vue:8 +#: front/src/views/playlists/Detail.vue:76 src/views/radios/Detail.vue:34 msgctxt "*/*/*" msgid "Tracks" msgstr "Tracce" @@ -4634,79 +4975,64 @@ msgctxt "Content/Artist/Title" msgid "Tracks by this artist" msgstr "Tracce di questo artista" -#: front/src/components/instance/Stats.vue:25 -msgctxt "Content/About/Paragraph/Unit" -msgid "Tracks favorited" -msgstr "Tracce preferite" - -#: front/src/components/instance/Stats.vue:19 -msgctxt "Content/About/Paragraph/Unit" -msgid "tracks listened" -msgstr "tracce ascoltate" - #: front/src/components/library/radios/Filter.vue:44 msgctxt "Popup/Radio/Title/Noun" msgid "Tracks matching filter" msgstr "Tracce che corrispondono al filtro" #: front/src/components/library/TrackDetail.vue:57 +#: front/src/components/manage/moderation/ReportCard.vue:134 #: front/src/views/admin/library/UploadDetail.vue:250 +#: front/src/views/admin/moderation/AccountsDetail.vue:181 msgctxt "Content/Track/Table.Label/Noun" msgid "Type" msgstr "Tipo" -#: front/src/views/admin/moderation/AccountsDetail.vue:180 -msgctxt "Content/Moderation/Table.Label/Noun" -msgid "Type" -msgstr "Tipo" - #: front/src/components/manage/moderation/AccountsTable.vue:44 -#: front/src/components/manage/moderation/DomainsTable.vue:42 +#: front/src/components/manage/moderation/DomainsTable.vue:50 msgctxt "Content/Moderation/Table.Label/Short" msgid "Under moderation rule" msgstr "Sotto regole di moderazione" -#: front/src/views/content/remote/Card.vue:109 -#: src/views/content/remote/Card.vue:114 +#: front/src/components/ShortcutsModal.vue:68 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Unfocus searchbar" +msgstr "Togli il primo piano dalla barra di ricerca" + +#: front/src/views/content/remote/Card.vue:122 +#: src/views/content/remote/Card.vue:127 msgctxt "*/Library/Button.Label/Verb" msgid "Unfollow" msgstr "Smetti di seguire" -#: front/src/views/content/remote/Card.vue:110 +#: front/src/views/content/remote/Card.vue:123 msgctxt "Popup/Library/Title" msgid "Unfollow this library?" msgstr "Smettere di seguire questa libreria?" -#: front/src/components/About.vue:17 -msgctxt "Content/About/Paragraph" -msgid "" -"Unfortunately, the owners of this instance did not yet take the time to " -"complete this page." -msgstr "" -"Sfortunatamente i proprietari di questa istanza non hanno ancora avuto tempo" -" di completare questa pagina." - #: front/src/components/federation/FetchButton.vue:54 #: front/src/components/federation/FetchButton.vue:55 -msgctxt "*/*/Error" -msgid "Unknowkn error" -msgstr "Errore sconosciuto" - #: front/src/components/library/ImportStatusModal.vue:144 -msgctxt "Popup/Import/Error.Label" -msgid "Unkwown error" +msgctxt "*/*/Error" +msgid "Unknown error" msgstr "Errore sconosciuto" -#: front/src/components/Home.vue:37 -msgctxt "Content/Home/Title" -msgid "Unlimited music" -msgstr "Musica illimitata" - -#: front/src/components/audio/Player.vue:630 +#: front/src/components/audio/Player.vue:656 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Unmute" msgstr "Non silenziare" +#: front/src/components/manage/moderation/ReportCard.vue:225 +msgctxt "Content/*/Button.Label" +msgid "Unresolve" +msgstr "Non risolto" + +#: front/src/components/manage/moderation/ReportCard.vue:67 +#: front/src/views/admin/moderation/ReportsList.vue:23 +msgctxt "Content/*/*/Short" +msgid "Unresolved" +msgstr "Non risolto" + #: front/src/components/manage/moderation/InstancePolicyForm.vue:57 msgctxt "Content/Moderation/Card.Button.Label/Verb" msgid "Update" @@ -4770,12 +5096,8 @@ msgstr "Data di caricamento" #: front/src/components/library/FileUpload.vue:258 msgctxt "Content/Library/Help text" -msgid "" -"Upload denied, ensure the file is not too big and that you have not reached " -"your quota" -msgstr "" -"Caricamento non riuscito, assicurati che il file non sia troppo grande e di " -"non aver esaurito la tua quota" +msgid "Upload denied, ensure the file is not too big and that you have not reached your quota" +msgstr "Caricamento non riuscito, assicurati che il file non sia troppo grande e di non aver esaurito la tua quota" #: front/src/components/library/ImportStatusModal.vue:8 msgctxt "Popup/Import/Message" @@ -4784,20 +5106,18 @@ msgstr "Il caricamento è ancora in corso e presto sarà processato dal server." #: front/src/views/content/Home.vue:7 msgctxt "Content/Library/Paragraph" -msgid "" -"Upload music files (MP3, OGG, FLAC, etc.) from your personal library " -"directly from your browser to enjoy them here." -msgstr "" -"Carica file musicali (mp3, ogg, flac, ecc.) dalla tua libreria personale " -"direttamente dal tuo browser per goderne qui." +msgid "Upload music files (MP3, OGG, FLAC, etc.) from your personal library directly from your browser to enjoy them here." +msgstr "Carica file musicali (mp3, ogg, flac, ecc.) dalla tua libreria personale direttamente dal tuo browser per goderne qui." #: front/src/components/library/FileUpload.vue:30 msgctxt "Content/Library/Title/Verb" msgid "Upload new tracks" msgstr "Carica nuove tracce" -#: front/src/views/admin/moderation/AccountsDetail.vue:298 -msgctxt "Content/Moderation/Table.Label/Noun" +#: front/src/components/About.vue:99 +#: front/src/views/admin/moderation/AccountsDetail.vue:309 +#, fuzzy +msgctxt "*/*/*" msgid "Upload quota" msgstr "Quota di caricamento" @@ -4808,12 +5128,8 @@ msgstr "Caricamento scaduto, per favore riprova" #: front/src/components/library/ImportStatusModal.vue:14 msgctxt "Popup/Import/Message" -msgid "" -"Upload was skipped because a similar one is already available in one of your" -" libraries." -msgstr "" -"Il caricamento è stato saltato perchè uno simile è già disponibile in una " -"delle tue librerie." +msgid "Upload was skipped because a similar one is already available in one of your libraries." +msgstr "Il caricamento è stato saltato perchè uno simile è già disponibile in una delle tue librerie." #: front/src/components/library/ImportStatusModal.vue:11 msgctxt "Popup/Import/Message" @@ -4835,76 +5151,83 @@ msgctxt "Content/Library/Table" msgid "Uploading…" msgstr "Caricamento…" +#: front/src/components/manage/library/LibrariesTable.vue:52 +#: front/src/components/manage/moderation/AccountsTable.vue:41 +#: front/src/components/mixins/Translations.vue:75 +#: front/src/views/admin/library/AlbumDetail.vue:258 +#: front/src/views/admin/library/ArtistDetail.vue:246 #: front/src/views/admin/library/Base.vue:20 +#: front/src/views/admin/library/LibraryDetail.vue:258 +#: front/src/views/admin/library/TrackDetail.vue:310 #: front/src/views/admin/library/UploadsList.vue:24 +#: front/src/views/admin/moderation/AccountsDetail.vue:349 +#: front/src/views/admin/moderation/DomainsDetail.vue:281 +#: front/src/components/mixins/Translations.vue:76 msgctxt "*/*/*" msgid "Uploads" msgstr "Caricamenti" -#: front/src/components/manage/moderation/AccountsTable.vue:41 -#: front/src/components/mixins/Translations.vue:63 -#: front/src/views/admin/library/AlbumDetail.vue:242 -#: front/src/views/admin/library/ArtistDetail.vue:231 -#: front/src/views/admin/library/LibraryDetail.vue:239 -#: front/src/views/admin/library/TrackDetail.vue:294 -#: front/src/views/admin/moderation/AccountsDetail.vue:337 -#: front/src/views/admin/moderation/DomainsDetail.vue:244 -#: front/src/components/mixins/Translations.vue:64 -msgctxt "Content/Moderation/Table.Label/Noun" -msgid "Uploads" -msgstr "Caricamenti" - -#: front/src/components/manage/library/LibrariesTable.vue:52 -msgctxt "Content/*/*/Noun" -msgid "Uploads" -msgstr "Caricamenti" - #: front/src/components/auth/ApplicationForm.vue:16 msgctxt "Content/Applications/Help Text" -msgid "" -"Use \"urn:ietf:wg:oauth:2.0:oob\" as a redirect URI if your application is " -"not served on the web." -msgstr "" -"Usa \"urn:ietf:wg:oauth:2.0:oob\" come URI di reindirizzamento se la tua " -"applicazione non è servita sul web." +msgid "Use \"urn:ietf:wg:oauth:2.0:oob\" as a redirect URI if your application is not served on the web." +msgstr "Usa \"urn:ietf:wg:oauth:2.0:oob\" come URI di reindirizzamento se la tua applicazione non è servita sul web." #: front/src/components/Footer.vue:16 msgctxt "Footer/*/List item.Link" msgid "Use another instance" msgstr "Usa un'altra istanza" +#: front/src/components/Home.vue:146 +msgctxt "Content/Home/Link" +msgid "Use Funkwhale on other devices with our apps" +msgstr "" + +#: front/src/components/moderation/ReportModal.vue:44 +msgctxt "*/*/Field,Help" +msgid "Use this field to provide additional context to the moderator that will handle your report." +msgstr "" + #: front/src/views/auth/PasswordReset.vue:12 msgctxt "Content/Signup/Paragraph" -msgid "" -"Use this form to request a password reset. We will send an email to the " -"given address with instructions to reset your password." +msgid "Use this form to request a password reset. We will send an email to the given address with instructions to reset your password." +msgstr "Usa questo modulo per richiedere un reset della password. Ti invieremo una email all'indirizzo fornito con le istruzioni per resettare la tua password." + +#: front/src/components/moderation/ReportModal.vue:18 +msgctxt "*/Moderation/Popup,Paragraph" +msgid "Use this form to submit a report to our moderation team." msgstr "" -"Usa questo modulo per richiedere un reset della password. Ti invieremo una " -"email all'indirizzo fornito con le istruzioni per resettare la tua password." #: front/src/components/manage/moderation/InstancePolicyForm.vue:111 msgctxt "Content/Moderation/Help text" -msgid "" -"Use this setting to temporarily enable/disable the policy without completely" -" removing it." -msgstr "" -"Usa questa impostazione per abilitare/disabilitare temporaneamente la regola" -" senza rimuoverla completamente." +msgid "Use this setting to temporarily enable/disable the policy without completely removing it." +msgstr "Usa questa impostazione per abilitare/disabilitare temporaneamente la regola senza rimuoverla completamente." #: front/src/components/manage/users/InvitationsTable.vue:49 msgctxt "Content/Admin/Table" msgid "Used" msgstr "Usati" +#: front/src/components/Home.vue:125 +msgctxt "Content/Home/Header" +msgid "Useful links" +msgstr "" + #: front/src/views/content/libraries/Detail.vue:26 msgctxt "Content/Library/Table.Label" msgid "User" msgstr "Utente" -#: front/src/components/instance/Stats.vue:5 -msgctxt "Content/About/Title/Noun" -msgid "User activity" -msgstr "Attività utente" +#: front/src/components/Home.vue:154 +#, fuzzy +msgctxt "Content/Home/Link" +msgid "User guides" +msgstr "Librerie dell'utente" + +#: front/src/views/admin/Settings.vue:88 +#, fuzzy +msgctxt "Content/Admin/Menu" +msgid "User Interface" +msgstr "Nome utente" #: front/src/components/library/AlbumDetail.vue:26 #: front/src/components/library/ArtistDetail.vue:39 @@ -4918,35 +5241,35 @@ msgctxt "Content/Radio/Title" msgid "User radios" msgstr "Radio dell'utente" -#: front/src/components/auth/Signup.vue:19 +#: front/src/components/auth/SignupForm.vue:15 #: front/src/components/manage/users/UsersTable.vue:37 -#: front/src/components/mixins/Translations.vue:59 +#: front/src/components/mixins/Translations.vue:71 #: front/src/views/admin/moderation/AccountsDetail.vue:114 -#: front/src/components/mixins/Translations.vue:60 +#: front/src/components/mixins/Translations.vue:72 msgctxt "Content/*/*" msgid "Username" msgstr "Nome utente" -#: front/src/components/auth/Login.vue:15 +#: front/src/components/auth/LoginForm.vue:11 msgctxt "Content/Login/Input.Label/Noun" msgid "Username or email" msgstr "Nome utente o email" -#: front/src/components/instance/Stats.vue:13 -msgctxt "Content/About/Paragraph/Unit" -msgid "users" -msgstr "utenti" - -#: front/src/components/Sidebar.vue:102 -#: front/src/components/manage/moderation/DomainsTable.vue:39 -#: front/src/components/mixins/Translations.vue:61 +#: front/src/components/Sidebar.vue:106 +#: front/src/components/manage/moderation/DomainsTable.vue:47 +#: front/src/components/mixins/Translations.vue:73 #: src/views/admin/Settings.vue:81 front/src/views/admin/users/Base.vue:5 #: src/views/admin/users/UsersList.vue:21 -#: front/src/components/mixins/Translations.vue:62 +#: front/src/components/mixins/Translations.vue:74 msgctxt "*/*/*/Noun" msgid "Users" msgstr "Utenti" +#: front/src/components/Home.vue:110 +msgctxt "Content/Home/Paragraph" +msgid "Users on this pod also get %{ quota } of free storage to upload their own content!" +msgstr "" + #: front/src/components/Footer.vue:29 msgctxt "Footer/*/Title" msgid "Using Funkwhale" @@ -4964,45 +5287,60 @@ msgctxt "Content/Library/Link/Verb" msgid "View files" msgstr "Vedi files" -#: front/src/components/library/AlbumBase.vue:81 -#: front/src/components/library/ArtistBase.vue:92 -#: front/src/components/library/TrackBase.vue:100 -#: front/src/views/admin/library/AlbumDetail.vue:42 -#: front/src/views/admin/library/ArtistDetail.vue:41 +#: front/src/components/library/AlbumBase.vue:95 +#: front/src/components/library/ArtistBase.vue:107 +#: front/src/components/library/TrackBase.vue:111 +#: front/src/views/admin/library/AlbumDetail.vue:48 +#: front/src/views/admin/library/ArtistDetail.vue:46 #: front/src/views/admin/library/LibraryDetail.vue:34 #: front/src/views/admin/library/LibraryDetail.vue:45 -#: front/src/views/admin/library/TrackDetail.vue:41 +#: front/src/views/admin/library/TagDetail.vue:32 +#: front/src/views/admin/library/TrackDetail.vue:47 #: front/src/views/admin/library/UploadDetail.vue:35 #: front/src/views/admin/library/UploadDetail.vue:46 #: front/src/views/admin/moderation/AccountsDetail.vue:37 #: front/src/views/admin/moderation/AccountsDetail.vue:45 +#: front/src/views/admin/moderation/DomainsDetail.vue:30 msgctxt "Content/Moderation/Link/Verb" msgid "View in Django's admin" msgstr "Vedi nell'amministrazione di Django" -#: front/src/components/library/AlbumBase.vue:61 -#: front/src/components/library/ArtistBase.vue:72 -#: front/src/components/library/TrackBase.vue:80 +#: front/src/components/Home.vue:169 +#, fuzzy +msgctxt "Content/Home/Link" +msgid "View more…" +msgstr "Carica di più…" + +#: front/src/components/library/AlbumBase.vue:62 +#: front/src/components/library/ArtistBase.vue:73 +#: front/src/components/library/TrackBase.vue:78 #: front/src/components/metadata/ArtistCard.vue:49 #: front/src/components/metadata/ReleaseCard.vue:53 msgctxt "Content/*/*/Clickable, Verb" msgid "View on MusicBrainz" msgstr "Vedi su MusicBrainz" +#: front/src/components/manage/moderation/ReportCard.vue:124 +msgctxt "Content/Moderation/Link" +msgid "View public page" +msgstr "" + #: front/src/components/manage/library/LibrariesTable.vue:11 #: front/src/components/manage/library/LibrariesTable.vue:51 #: front/src/components/manage/library/UploadsTable.vue:11 #: front/src/components/manage/library/UploadsTable.vue:63 #: front/src/views/admin/library/LibraryDetail.vue:94 #: front/src/views/admin/library/UploadDetail.vue:101 +#: front/src/views/content/libraries/Form.vue:18 msgctxt "*/*/*" msgid "Visibility" msgstr "Visibilità " -#: front/src/views/content/libraries/Form.vue:18 -msgctxt "Content/Library/Dropdown.Label" -msgid "Visibility" -msgstr "Visibilità " +#: front/src/components/Home.vue:91 +#, fuzzy +msgctxt "Content/Home/Link" +msgid "Visit funkwhale.audio" +msgstr "Utilizzando Funkwhale" #: front/src/components/library/AlbumDetail.vue:4 msgctxt "Content/Album/" @@ -5014,7 +5352,13 @@ msgctxt "Popup/*/Loading.Title" msgid "Waiting for result…" msgstr "Aspettando i risultati…" -#: front/src/components/auth/Login.vue:7 +#: front/src/components/auth/Settings.vue:285 +#, fuzzy +msgctxt "Content/Settings/Error message.Title" +msgid "We cannot delete your account" +msgstr "Non riusciamo a farti accedere" + +#: front/src/components/auth/LoginForm.vue:3 msgctxt "Content/Login/Error message.Title" msgid "We cannot log you in" msgstr "Non riusciamo a farti accedere" @@ -5024,42 +5368,37 @@ msgctxt "Content/*/Error message.Title" msgid "We cannot save your changes" msgstr "Non è stato possibile salvare le tue modifiche" -#: front/src/components/Home.vue:122 -msgctxt "Content/Home/List item" -msgid "We do not track you or bother you with ads" -msgstr "Noi non ti tracciamo o infastidiamo con pubblicità " +#: front/src/views/Notifications.vue:39 +msgctxt "Content/Notifications/Paragraph" +msgid "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!" +msgstr "" #: front/src/components/library/FileUpload.vue:39 msgctxt "Content/Library/Link" msgid "We recommend using Picard for that purpose." msgstr "Ti consigliamo di utilizzare Picard per quello scopo." -#: front/src/components/Home.vue:7 -msgctxt "Content/Home/Title" -msgid "We think listening to music should be simple." -msgstr "Noi pensiamo che ascoltare musica debba essere semplice." +#: front/src/components/moderation/ReportModal.vue:35 +msgctxt "*/*/Field,Help" +msgid "We'll use this email if we need to contact you regarding this report." +msgstr "" -#: front/src/components/Home.vue:148 +#: front/src/components/Home.vue:207 msgctxt "Head/Home/Title" msgid "Welcome" msgstr "Benvenuto" #: front/src/components/Home.vue:5 -msgctxt "Content/Home/Title/Verb" -msgid "Welcome on Funkwhale" -msgstr "Benvenuto su Funkwhale" - -#: front/src/components/Home.vue:24 -msgctxt "Content/Home/Title" -msgid "Why funkwhale?" -msgstr "Perchè Funkwhale?" +msgctxt "Content/Home/Header" +msgid "Welcome to %{ podName }!" +msgstr "" -#: front/src/components/audio/EmbedWizard.vue:13 +#: front/src/components/audio/EmbedWizard.vue:23 msgctxt "Popup/Embed/Input.Label" msgid "Widget height" msgstr "Altezza del widget" -#: front/src/components/audio/EmbedWizard.vue:6 +#: front/src/components/audio/EmbedWizard.vue:16 msgctxt "Popup/Embed/Input.Label" msgid "Widget width" msgstr "Larghezza del widget" @@ -5079,9 +5418,11 @@ msgctxt "Content/OAuth Scopes/Help Text" msgid "Write-only access to user data" msgstr "Accesso in sola-scrittura ai dati utente" -#: front/src/components/Sidebar.vue:129 +#: front/src/components/Sidebar.vue:133 #: front/src/components/manage/moderation/AccountsTable.vue:72 -#: front/src/components/manage/moderation/DomainsTable.vue:58 +#: front/src/components/manage/moderation/DomainsTable.vue:12 +#: front/src/components/manage/moderation/DomainsTable.vue:69 +#: front/src/views/admin/moderation/DomainsDetail.vue:109 msgctxt "*/*/*" msgid "Yes" msgstr "Si" @@ -5093,34 +5434,18 @@ msgstr "Si, disconnettimi!" #: front/src/views/content/libraries/Form.vue:19 msgctxt "Content/Library/Paragraph" -msgid "" -"You are able to share your library with other people, regardless of its " -"visibility." -msgstr "" -"Sarai in grado di condividere la tua libreria con altre persone, " -"indipendentemente dalla sua visibilità ." +msgid "You are able to share your library with other people, regardless of its visibility." +msgstr "Sarai in grado di condividere la tua libreria con altre persone, indipendentemente dalla sua visibilità ." #: front/src/components/library/FileUpload.vue:32 msgctxt "Content/Library/Paragraph" -msgid "" -"You are about to upload music to your library. Before proceeding, please " -"ensure that:" -msgstr "" -"Stai per caricare della musica nella tua libreria. Prima di procedere, per " -"favore assicurati che:" +msgid "You are about to upload music to your library. Before proceeding, please ensure that:" +msgstr "Stai per caricare della musica nella tua libreria. Prima di procedere, per favore assicurati che:" #: front/src/components/SetInstanceModal.vue:12 msgctxt "Popup/Login/Paragraph" -msgid "" -"You are currently connected to <a href=\"%{ url }\" target=\"_blank\">%{ " -"hostname } <i class=\"external icon\"/></a>. If you continue, you will " -"be disconnected from your current instance and all your local data will be " -"deleted." -msgstr "" -"Attualmente sei connesso a <a href=\"%{ url }\" target=\"_blank\">%{ " -"hostname } <i class=\"external icon\"/></a>. Se continui, sarai " -"disconnesso dalla tua istanza attuale ed i tuoi dati locali saranno " -"eliminati." +msgid "You are currently connected to <a href=\"%{ url }\" target=\"_blank\">%{ hostname } <i class=\"external icon\"/></a>. If you continue, you will be disconnected from your current instance and all your local data will be deleted." +msgstr "Attualmente sei connesso a <a href=\"%{ url }\" target=\"_blank\">%{ hostname } <i class=\"external icon\"/></a>. Se continui, sarai disconnesso dalla tua istanza attuale ed i tuoi dati locali saranno eliminati." #: front/src/components/library/ArtistDetail.vue:6 msgctxt "Content/Artist/Paragraph" @@ -5134,12 +5459,8 @@ msgstr "Sei attualmente connesso come %{ username }" #: front/src/components/library/FileUpload.vue:35 msgctxt "Content/Library/List item" -msgid "" -"You are not uploading copyrighted content in a public library, otherwise you" -" may be infringing the law" -msgstr "" -"Non stai caricando contenuti protetti da diritti d'autore in una libreria " -"pubblica, altrimenti potresti infrangere la legge" +msgid "You are not uploading copyrighted content in a public library, otherwise you may be infringing the law" +msgstr "Non stai caricando contenuti protetti da diritti d'autore in una libreria pubblica, altrimenti potresti infrangere la legge" #: front/src/components/SetInstanceModal.vue:98 msgctxt "*/Instance/Message" @@ -5147,55 +5468,36 @@ msgid "You are now using the Funkwhale instance at %{ url }" msgstr "Ora stai utilizzando l'istanza Funkwhale su %{ url }" #: front/src/views/content/Home.vue:17 +#, fuzzy msgctxt "Content/Library/Paragraph" -msgid "" -"You can follow libraries from other users to get access to new music. Public" -" libraries can be followed immediatly, while following a private library " -"requires approval from its owner." -msgstr "" -"Puoi seguire librerie di altri utenti per avere accesso a nuova musica. Le " -"librerie pubbliche possono essere seguite immediatamente, mentre seguire le " -"librerie private richiede l'approvazione del suo proprietario." - -#: front/src/components/Home.vue:128 -msgctxt "Content/Home/List item" -msgid "" -"You can invite friends and family to your instance so they can enjoy your " -"music" -msgstr "" -"Puoi invitare amici e familiari sulla tua istanza così possono fruire della " -"tua musica" +msgid "You can 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." +msgstr "Puoi seguire librerie di altri utenti per avere accesso a nuova musica. Le librerie pubbliche possono essere seguite immediatamente, mentre seguire le librerie private richiede l'approvazione del suo proprietario." #: front/src/components/moderation/FilterModal.vue:31 +#, fuzzy msgctxt "Popup/Moderation/Paragraph" -msgid "" -"You can manage and update your filters anytime from your account settings." -msgstr "" -"Puoi gestire ed aggiornare i tuoi filtri in qualsiasi momento dalle " -"impostazioni del tuo account." +msgid "You can manage and update your filters any time from your account settings." +msgstr "Puoi gestire ed aggiornare i tuoi filtri in qualsiasi momento dalle impostazioni del tuo account." #: front/src/views/auth/EmailConfirm.vue:24 msgctxt "Content/Signup/Paragraph" msgid "You can now use the service without limitations." msgstr "Ora puoi usare il servizio senza limitazioni." +#: front/src/components/auth/Settings.vue:278 +msgctxt "Content/Settings/Paragraph'" +msgid "You can permanently and irreversibly delete your account and all the associated data using the form below. You will be asked for confirmation." +msgstr "" + #: front/src/components/library/radios/Builder.vue:7 msgctxt "Content/Radio/Paragraph" -msgid "" -"You can use this interface to build your own custom radio, which will play " -"tracks according to your criteria." -msgstr "" -"Puoi usare questa interfaccia per creare la tua radio personalizzata, che " -"riprodurrà tracce in accordo con i tuoi criteri." +msgid "You can use this interface to build your own custom radio, which will play tracks according to your criteria." +msgstr "Puoi usare questa interfaccia per creare la tua radio personalizzata, che riprodurrà tracce in accordo con i tuoi criteri." #: front/src/components/auth/SubsonicTokenForm.vue:7 msgctxt "Content/Settings/Paragraph" -msgid "" -"You can use those to enjoy your playlist and music in offline mode, on your " -"smartphone or tablet, for instance." -msgstr "" -"Puoi usarli per godere delle tue liste di riproduzione e musica anche quando" -" non collegato, dal tuo cellulare o tablet, per esempio." +msgid "You can use those to enjoy your playlist and music in offline mode, on your smartphone or tablet, for instance." +msgstr "Puoi usarli per godere delle tue liste di riproduzione e musica anche quando non collegato, dal tuo cellulare o tablet, per esempio." #: front/src/components/auth/Settings.vue:202 msgctxt "Content/Applications/Paragraph" @@ -5212,22 +5514,17 @@ msgctxt "Content/Moderation/Card.Title" msgid "You don't have any rule in place for this account." msgstr "Non hai nessuna regola attiva per questo account." -#: front/src/views/admin/moderation/DomainsDetail.vue:39 +#: front/src/views/admin/moderation/DomainsDetail.vue:67 msgctxt "Content/Moderation/Card.Title" msgid "You don't have any rule in place for this domain." msgstr "Non hai nessuna regola attiva per questo dominio." #: front/src/components/library/EditForm.vue:52 msgctxt "Content/Library/Paragraph" -msgid "" -"You don't have the permission to edit this object, but you can suggest " -"changes. Once submitted, suggestions will be reviewed before approval." -msgstr "" -"Non hai i permessi per modificare questo oggetto, ma puoi suggerire " -"modifiche. Una volta inviati, i suggerimenti saranno revisionati prima " -"dell'approvazione." +msgid "You don't have the permission to edit this object, but you can suggest changes. Once submitted, suggestions will be reviewed before approval." +msgstr "Non hai i permessi per modificare questo oggetto, ma puoi suggerire modifiche. Una volta inviati, i suggerimenti saranno revisionati prima dell'approvazione." -#: front/src/components/Sidebar.vue:171 +#: front/src/components/Sidebar.vue:175 msgctxt "Sidebar/Player/Title" msgid "You have a radio playing" msgstr "Hai una radio in riproduzione" @@ -5239,8 +5536,7 @@ msgstr "Potresti avere un problema di connettività ." #: front/src/components/auth/Settings.vue:100 msgctxt "Popup/Settings/List item" -msgid "" -"You will be logged out from this session and have to log in with the new one" +msgid "You will be logged out from this session and have to log in with the new one" msgstr "Sarai disconnesso da questa sessione e dovrai accedere con una nuova" #: front/src/components/auth/Authorize.vue:51 @@ -5255,27 +5551,25 @@ msgstr "Ti sarà mostrato un codice da copiare-incollare nell'applicazione." #: front/src/components/auth/Settings.vue:71 msgctxt "Content/Settings/Paragraph" -msgid "" -"You will have to update your password on your clients that use this " -"password." -msgstr "" -"Dovrai aggiornare la tua password sui tuoi dispositivi che utilizzano questa" -" password." +msgid "You will have to update your password on your clients that use this password." +msgstr "Dovrai aggiornare la tua password sui tuoi dispositivi che utilizzano questa password." #: front/src/components/moderation/FilterModal.vue:20 +#, fuzzy msgctxt "Popup/Moderation/Paragraph" -msgid "" -"You will not see tracks, albums and user activity linked to this artist " -"anymore:" -msgstr "" -"Non vedrai tracce, album e attività utente collegate a questo artista in " -"futuro:" +msgid "You will not see tracks, albums and user activity linked to this artist any more:" +msgstr "Non vedrai tracce, album e attività utente collegate a questo artista in futuro:" -#: front/src/components/auth/Signup.vue:13 +#: front/src/components/auth/SignupForm.vue:9 msgctxt "Content/Signup/Form/Paragraph" msgid "Your account cannot be created." msgstr "Il tuo account non può essere creato." +#: front/src/components/auth/Settings.vue:281 +msgctxt "Content/Settings/Paragraph'" +msgid "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." +msgstr "" + #: front/src/components/auth/Settings.vue:215 msgctxt "Content/Settings/Title/Noun" msgid "Your applications" @@ -5286,6 +5580,11 @@ msgctxt "Content/Settings/Error message.Title" msgid "Your avatar cannot be saved" msgstr "La tua immagine di profilo non può essere salvata" +#: front/src/components/auth/Settings.vue:527 +msgctxt "*/Auth/Message" +msgid "Your deletion request was submitted, your account and content will be deleted shortly" +msgstr "" + #: front/src/components/library/EditForm.vue:3 msgctxt "Content/Library/Paragraph" msgid "Your edit was successfully submitted." @@ -5296,12 +5595,13 @@ msgctxt "Head/Favorites/Title" msgid "Your Favorites" msgstr "I Tuoi Preferiti" -#: front/src/components/Home.vue:109 -msgctxt "Content/Home/Title" -msgid "Your music, your way" -msgstr "La tua musica, il tuo modo di essere" +#: front/src/views/Notifications.vue:5 +#, fuzzy +msgctxt "Content/Notifications/Title" +msgid "Your messages" +msgstr "Messaggi emessi" -#: front/src/views/Notifications.vue:4 +#: front/src/views/Notifications.vue:69 msgctxt "Content/Notifications/Title" msgid "Your notifications" msgstr "Le tue notifiche" @@ -5317,46 +5617,40 @@ msgid "Your password has been updated successfully." msgstr "La tua password è stata aggiornata con successo." #: front/src/components/auth/Settings.vue:14 +#, fuzzy msgctxt "Content/Settings/Error message.Title" -msgid "Your settings can't be updateds" +msgid "Your settings can't be updated" msgstr "Le tue impostazioni non possono essere aggiornate" #: front/src/components/auth/Settings.vue:101 msgctxt "Popup/Settings/List item" -msgid "" -"Your Subsonic password will be changed to a new, random one, logging you out" -" from devices that used the old Subsonic password" -msgstr "" -"La tua password Subsonic sarà cambiata con una nuova e casuale, e sarai " -"disconnesso dai dispositivi che utilizzano ancora la vecchia password " -"Subsonic" +msgid "Your Subsonic password will be changed to a new, random one, logging you out from devices that used the old Subsonic password" +msgstr "La tua password Subsonic sarà cambiata con una nuova e casuale, e sarai disconnesso dai dispositivi che utilizzano ancora la vecchia password Subsonic" -#: front/src/edits.js:47 -msgctxt "*/*/*/Short, Noun" -msgid "Position" -msgstr "Posizione" +#: front/src/entities.js:126 +#, fuzzy +msgctxt "*/*/*/Noun" +msgid "MusicBrainz ID" +msgstr "Apri su MusicBrainz" -#: front/src/edits.js:54 -msgctxt "Content/Track/*/Noun" -msgid "Copyright" -msgstr "Diritti d'autore" +#: front/src/main.js:110 +msgctxt "*/Error/Paragraph" +msgid "You sent too many requests and have been rate limited, please try again in %{ delay }" +msgstr "" + +#: front/src/main.js:113 +msgctxt "*/Error/Paragraph" +msgid "You sent too many requests and have been rate limited, please try again later" +msgstr "" -#: front/src/components/library/AlbumBase.vue:183 +#: front/src/components/library/AlbumBase.vue:208 msgctxt "Content/Album/Header.Title" -msgid "" -"Album containing %{ count } track, by <a class=\"internal\" href=\"%{ " -"artistUrl }\">%{ artist }</a>" -msgid_plural "" -"Album containing %{ count } tracks, by <a class=\"internal\" href=\"%{ " -"artistUrl }\">%{ artist }</a>" -msgstr[0] "" -"Album contenente %{ count } traccia, di <a class=\"internal\" href=\"%{ " -"artistUrl }\">%{ artist }</a>" -msgstr[1] "" -"Album contenente %{ count } tracce, di <a class=\"internal\" href=\"%{ " -"artistUrl }\">%{ artist }</a>" - -#: front/src/components/audio/PlayButton.vue:220 +msgid "Album containing %{ count } track, by <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" +msgid_plural "Album containing %{ count } tracks, by <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" +msgstr[0] "Album contenente %{ count } traccia, di <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" +msgstr[1] "Album contenente %{ count } tracce, di <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" + +#: front/src/components/audio/PlayButton.vue:246 msgctxt "*/Queue/Message" msgid "%{ count } track was added to your queue" msgid_plural "%{ count } tracks were added to your queue" diff --git a/front/locales/nb_NO/LC_MESSAGES/app.po b/front/locales/nb_NO/LC_MESSAGES/app.po index b922f8408d6ce67abc8a052e7016f9b85821f7d3..cb94283b1f20b84a587a0ca1f301ca98459d1f9d 100644 --- a/front/locales/nb_NO/LC_MESSAGES/app.po +++ b/front/locales/nb_NO/LC_MESSAGES/app.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: front 0.1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-05-16 10:35+0200\n" +"POT-Creation-Date: 2019-10-01 15:15+0200\n" "PO-Revision-Date: 2019-01-17 08:33+0000\n" "Last-Translator: Allan Nordhøy <epost@anotheragency.no>\n" "Language-Team: none\n" @@ -39,6 +39,53 @@ msgctxt "Content/Auth/Title" msgid "%{ app } wants to access your Funkwhale account" msgstr "Logg inn pÃ¥ din Funkwhale-konto" +#: front/src/components/About.vue:173 src/components/Home.vue:56 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } active user" +msgid_plural "%{ count } active users" +msgstr[0] "%{ count } spor" +msgstr[1] "%{ count } spor" + +#: front/src/components/About.vue:182 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } albums" +msgid_plural "%{ count } albums" +msgstr[0] "%{ count } spor" +msgstr[1] "%{ count } spor" + +#: front/src/components/About.vue:152 +msgctxt "*/*/*" +msgid "%{ count } allowed domains" +msgid_plural "%{ count } allowed domains" +msgstr[0] "" +msgstr[1] "" + +#: front/src/components/About.vue:179 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } artists" +msgid_plural "%{ count } artists" +msgstr[0] "%{ count } spor" +msgstr[1] "%{ count } spor" + +#: front/src/components/About.vue:176 src/components/Home.vue:59 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } hour of music" +msgid_plural "%{ count } hours of music" +msgstr[0] "%{ count } spor" +msgstr[1] "%{ count } spor" + +#: front/src/components/About.vue:188 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } listenings" +msgid_plural "%{ count } listenings" +msgstr[0] "%{ count } spor" +msgstr[1] "%{ count } spor" + #: front/src/components/common/ActionTable.vue:68 #, fuzzy msgctxt "Content/*/Paragraph" @@ -47,9 +94,9 @@ msgid_plural "%{ count } on %{ total } selected" msgstr[0] "%{ count } pÃ¥ %{ total } valgt" msgstr[1] "%{ count } pÃ¥ %{ total } valgt" -#: front/src/components/Sidebar.vue:121 src/components/audio/album/Card.vue:52 +#: front/src/components/Sidebar.vue:125 src/components/audio/album/Card.vue:52 #: front/src/views/content/libraries/Card.vue:40 -#: src/views/content/remote/Card.vue:30 +#: src/views/content/remote/Card.vue:43 #, fuzzy msgctxt "*/*/*" msgid "%{ count } track" @@ -73,7 +120,15 @@ msgid_plural "%{ count } tracks matching combined filters" msgstr[0] "%{ count } spor samsvarer med kombinerte filter" msgstr[1] "%{ count } spor samsvarer med kombinerte filter" -#: front/src/components/playlists/Card.vue:18 +#: front/src/components/About.vue:185 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } tracks" +msgid_plural "%{ count } tracks" +msgstr[0] "%{ count } spor" +msgstr[1] "%{ count } spor" + +#: front/src/components/playlists/Card.vue:28 #, fuzzy msgctxt "Content/*/Card/List item" msgid "%{ count} track" @@ -118,11 +173,10 @@ msgstr "%{ username } sin profil" #: front/src/components/playlists/PlaylistModal.vue:21 msgctxt "Popup/Playlist/Paragraph" -msgid "" -"<strong>%{ track }</strong> is already in <strong>%{ playlist }</strong>." +msgid "<strong>%{ track }</strong> is already in <strong>%{ playlist }</strong>." msgstr "" -#: front/src/components/audio/artist/Card.vue:41 +#: front/src/components/audio/artist/Card.vue:11 #, fuzzy msgctxt "Content/Artist/Card" msgid "1 album" @@ -138,26 +192,45 @@ msgid_plural "%{ count } favorites" msgstr[0] "Én favoritt" msgstr[1] "%{ count } favoritter" -#: front/src/components/Home.vue:64 +#: front/src/components/audio/artist/Card.vue:15 #, fuzzy -msgctxt "Content/Home/Title" -msgid "A clean library" -msgstr "Tøm bibliotek" +msgctxt "Content/Artist/Card" +msgid "1 track" +msgid_plural "%{ count } tracks" +msgstr[0] "Legg til spor" +msgstr[1] "Legg til spor" + +#: front/src/views/Notifications.vue:21 src/views/Notifications.vue:55 +msgctxt "*/*/*" +msgid "30 days" +msgstr "" + +#: front/src/views/Notifications.vue:22 src/views/Notifications.vue:56 +msgctxt "*/*/*" +msgid "60 days" +msgstr "" + +#: front/src/views/Notifications.vue:23 src/views/Notifications.vue:57 +msgctxt "*/*/*" +msgid "90 days" +msgstr "" #: front/src/components/library/FileUpload.vue:264 +#, fuzzy msgctxt "Content/Library/Help text" -msgid "A network error occured while uploading this file" +msgid "A network error occurred while uploading this file" msgstr "Kunne ikke laste opp denne filen som følge av nettverksfeil" -#: front/src/components/library/EditForm.vue:145 +#: front/src/components/library/EditForm.vue:161 #, fuzzy msgctxt "*/*/Placeholder" msgid "A short summary describing your changes." msgstr "Kunne ikke lagre endringer" #: front/src/components/About.vue:5 -msgctxt "Content/About/Title/Short, Noun" -msgid "About %{ instance }" +#, fuzzy +msgctxt "Content/Home/Header" +msgid "About %{ podName }" msgstr "Om %{ instance }" #: front/src/components/Footer.vue:6 @@ -166,7 +239,7 @@ msgctxt "Footer/About/Title" msgid "About %{instanceName}" msgstr "Om %{ instance }" -#: front/src/components/Footer.vue:45 +#: front/src/components/Footer.vue:53 src/components/Home.vue:85 msgctxt "Footer/*/Title/Short" msgid "About Funkwhale" msgstr "Om Funkwhale" @@ -177,9 +250,16 @@ msgctxt "Footer/About/List item.Link" msgid "About page" msgstr "Albumside" -#: front/src/components/About.vue:8 src/components/About.vue:67 -msgctxt "Content/About/Title" -msgid "About this instance" +#: front/src/components/Home.vue:19 +#, fuzzy +msgctxt "Content/Home/Header" +msgid "About this Funkwhale pod" +msgstr "Om Funkwhale" + +#: front/src/components/About.vue:21 src/components/About.vue:51 +#, fuzzy +msgctxt "Content/About/Header" +msgid "About this pod" msgstr "Om denne instansen" #: front/src/views/content/libraries/Detail.vue:48 @@ -192,104 +272,93 @@ msgctxt "Content/Library/Table/Short" msgid "Accepted" msgstr "Godtatt" -#: front/src/components/auth/SubsonicTokenForm.vue:110 +#: front/src/components/auth/SubsonicTokenForm.vue:117 msgctxt "Content/Settings/Message" msgid "Access disabled" msgstr "Tilgang avskrudd" -#: front/src/components/mixins/Translations.vue:73 -#: front/src/components/mixins/Translations.vue:74 +#: front/src/components/mixins/Translations.vue:85 +#: front/src/components/mixins/Translations.vue:86 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to audio files, libraries, artists, albums and tracks" msgstr "" -#: front/src/components/mixins/Translations.vue:97 -#: front/src/components/mixins/Translations.vue:98 +#: front/src/components/mixins/Translations.vue:109 +#: front/src/components/mixins/Translations.vue:110 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to content filters" msgstr "" -#: front/src/components/mixins/Translations.vue:105 -#: front/src/components/mixins/Translations.vue:106 +#: front/src/components/mixins/Translations.vue:117 +#: front/src/components/mixins/Translations.vue:118 #, fuzzy msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to edits" msgstr "Tilgang avskrudd" -#: front/src/components/mixins/Translations.vue:69 -#: front/src/components/mixins/Translations.vue:70 +#: front/src/components/mixins/Translations.vue:81 +#: front/src/components/mixins/Translations.vue:82 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to email, username, and profile information" msgstr "" -#: front/src/components/mixins/Translations.vue:77 -#: front/src/components/mixins/Translations.vue:78 +#: front/src/components/mixins/Translations.vue:89 +#: front/src/components/mixins/Translations.vue:90 #, fuzzy msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to favorites" msgstr "Legg til i favoritter" -#: front/src/components/mixins/Translations.vue:85 -#: front/src/components/mixins/Translations.vue:86 +#: front/src/components/mixins/Translations.vue:97 +#: front/src/components/mixins/Translations.vue:98 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to follows" msgstr "" -#: front/src/components/mixins/Translations.vue:81 -#: front/src/components/mixins/Translations.vue:82 +#: front/src/components/mixins/Translations.vue:93 +#: front/src/components/mixins/Translations.vue:94 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to listening history" msgstr "" -#: front/src/components/mixins/Translations.vue:101 -#: front/src/components/mixins/Translations.vue:102 +#: front/src/components/mixins/Translations.vue:113 +#: front/src/components/mixins/Translations.vue:114 #, fuzzy msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to notifications" msgstr "Dine merknader" -#: front/src/components/mixins/Translations.vue:89 -#: front/src/components/mixins/Translations.vue:90 +#: front/src/components/mixins/Translations.vue:101 +#: front/src/components/mixins/Translations.vue:102 #, fuzzy msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to playlists" msgstr "Legg til i spilleliste…" -#: front/src/components/mixins/Translations.vue:93 -#: front/src/components/mixins/Translations.vue:94 +#: front/src/components/mixins/Translations.vue:105 +#: front/src/components/mixins/Translations.vue:106 #, fuzzy msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to radios" msgstr "Tilgang avskrudd" -#: front/src/components/Home.vue:101 -#, fuzzy -msgctxt "Content/Home/List item" -msgid "" -"Access your music from a clean interface that focuses on what really matters" -msgstr "" -"FÃ¥ tilgang til din musikk fra et rent grensesnitt som fokuserer pÃ¥ det som " -"virkelig betyr noe" - #: front/src/components/manage/library/UploadsTable.vue:67 -#: front/src/components/mixins/Translations.vue:45 +#: front/src/components/mixins/Translations.vue:55 #: front/src/views/admin/library/UploadDetail.vue:175 -#: front/src/components/mixins/Translations.vue:46 +#: front/src/components/mixins/Translations.vue:56 msgctxt "Content/*/*/Noun" msgid "Accessed date" msgstr "Tilgangsdato" -#: front/src/views/admin/library/LibraryDetail.vue:104 -#: front/src/views/admin/library/UploadDetail.vue:111 -#, fuzzy -msgctxt "*/*/*/Noun" -msgid "Account" -msgstr "Min konto" - #: front/src/components/manage/library/LibrariesTable.vue:49 #: front/src/components/manage/library/UploadsTable.vue:61 +#: front/src/components/manage/moderation/ReportCard.vue:156 +#: front/src/components/mixins/Report.vue:13 +#: front/src/views/admin/library/LibraryDetail.vue:113 +#: front/src/views/admin/library/UploadDetail.vue:111 +#: front/src/components/mixins/Report.vue:14 #, fuzzy -msgctxt "*/*/*" +msgctxt "*/*/*/Noun" msgid "Account" msgstr "Min konto" @@ -304,7 +373,7 @@ msgctxt "Content/Settings/Title" msgid "Account settings" msgstr "Kontoinnstillinger" -#: front/src/components/auth/Settings.vue:479 +#: front/src/components/auth/Settings.vue:544 msgctxt "Head/Settings/Title" msgid "Account Settings" msgstr "Kontoinnstillinger" @@ -321,7 +390,7 @@ msgstr "Kontoens e-post" #: front/src/views/admin/moderation/AccountsList.vue:3 #: front/src/views/admin/moderation/AccountsList.vue:24 -#: front/src/views/admin/moderation/Base.vue:8 +#: front/src/views/admin/moderation/Base.vue:11 #, fuzzy msgctxt "*/Moderation/Title" msgid "Accounts" @@ -336,29 +405,30 @@ msgstr "Handling" #, fuzzy msgctxt "Content/*/Paragraph" msgid "Action %{ action } was launched successfully on %{ count } element" -msgid_plural "" -"Action %{ action } was launched successfully on %{ count } elements" +msgid_plural "Action %{ action } was launched successfully on %{ count } elements" msgstr[0] "Handlingen %{ action } ble kjørt pÃ¥ %{ count } element" msgstr[1] "Handlingen %{ action } ble kjørt pÃ¥ %{ count } elementer" #: front/src/components/common/ActionTable.vue:22 #: front/src/components/library/radios/Builder.vue:65 +#: front/src/components/manage/moderation/ReportCard.vue:210 msgctxt "Content/*/*/Noun" msgid "Actions" msgstr "Handlinger" -#: front/src/components/manage/users/UsersTable.vue:53 +#: front/src/components/manage/users/UsersTable.vue:54 msgctxt "Content/Admin/Table" msgid "Active" msgstr "Aktiv" -#: front/src/views/admin/library/AlbumDetail.vue:134 -#: front/src/views/admin/library/ArtistDetail.vue:123 -#: front/src/views/admin/library/LibraryDetail.vue:138 -#: front/src/views/admin/library/TrackDetail.vue:186 +#: front/src/views/admin/library/AlbumDetail.vue:140 +#: front/src/views/admin/library/ArtistDetail.vue:128 +#: front/src/views/admin/library/LibraryDetail.vue:147 +#: front/src/views/admin/library/TagDetail.vue:83 +#: front/src/views/admin/library/TrackDetail.vue:192 #: front/src/views/admin/library/UploadDetail.vue:160 -#: front/src/views/admin/moderation/AccountsDetail.vue:220 -#: front/src/views/admin/moderation/DomainsDetail.vue:136 +#: front/src/views/admin/moderation/AccountsDetail.vue:221 +#: front/src/views/admin/moderation/DomainsDetail.vue:173 msgctxt "Content/Moderation/Title" msgid "Activity" msgstr "Aktivitet" @@ -369,7 +439,7 @@ msgctxt "Content/Settings/Dropdown.Label/Noun" msgid "Activity visibility" msgstr "Aktivitetssynlighet" -#: front/src/views/admin/moderation/DomainsList.vue:18 +#: front/src/views/admin/moderation/DomainsList.vue:22 msgctxt "Content/Moderation/Button/Verb" msgid "Add" msgstr "" @@ -415,7 +485,21 @@ msgctxt "Content/Radio/Paragraph" msgid "Add filters to customize your radio" msgstr "Legg til filter for Ã¥ tilpasse din radiostasjon" -#: front/src/components/audio/PlayButton.vue:75 +#: front/src/components/manage/moderation/NoteForm.vue:12 +#, fuzzy +msgctxt "Content/Moderation/Button.Label/Verb" +msgid "Add note" +msgstr "Legg til innhold" + +#: front/src/components/manage/moderation/DomainsTable.vue:191 +#: front/src/views/admin/moderation/DomainsDetail.vue:46 +#: front/src/views/admin/moderation/DomainsList.vue:18 +#, fuzzy +msgctxt "Content/Moderation/Action/Verb" +msgid "Add to allow-list" +msgstr "Legg til i spilleliste…" + +#: front/src/components/audio/PlayButton.vue:91 #, fuzzy msgctxt "*/Queue/Dropdown/Button/Title" msgid "Add to current queue" @@ -449,7 +533,7 @@ msgctxt "Popup/Playlist/Table.Button.Label/Verb" msgid "Add track" msgstr "Legg til spor" -#: front/src/components/manage/users/UsersTable.vue:69 +#: front/src/components/manage/users/UsersTable.vue:70 msgctxt "Content/Admin/Table.User role" msgid "Admin" msgstr "Administrator" @@ -459,51 +543,51 @@ msgctxt "Sidebar/Admin/Title/Noun" msgid "Administration" msgstr "Administrasjon" -#: front/src/views/admin/library/TrackDetail.vue:107 -msgctxt "*/*/*/Noun" -msgid "Album" -msgstr "Album" - -#: front/src/components/audio/SearchBar.vue:26 +#: front/src/components/audio/SearchBar.vue:33 #: src/components/audio/track/Table.vue:9 -#: front/src/components/library/AlbumBase.vue:152 -#: front/src/components/library/ArtistBase.vue:194 +#: front/src/components/library/AlbumBase.vue:170 +#: front/src/components/library/ArtistBase.vue:212 #: front/src/components/manage/library/TracksTable.vue:40 #: front/src/components/metadata/Search.vue:134 +#: src/components/mixins/Report.vue:41 +#: front/src/views/admin/library/TrackDetail.vue:113 #: front/src/views/content/libraries/FilesTable.vue:57 +#: front/src/components/mixins/Report.vue:42 msgctxt "*/*/*" msgid "Album" msgstr "Album" -#: front/src/views/admin/library/TrackDetail.vue:128 +#: front/src/views/admin/library/TrackDetail.vue:134 #, fuzzy msgctxt "*/*/*/Noun" msgid "Album artist" msgstr "Album fra denne artisten" -#: front/src/views/admin/library/AlbumDetail.vue:92 +#: front/src/views/admin/library/AlbumDetail.vue:98 #, fuzzy msgctxt "Content/Moderation/Title" msgid "Album data" msgstr "Albumside" -#: front/src/components/mixins/Translations.vue:51 -#: front/src/components/mixins/Translations.vue:52 +#: front/src/components/mixins/Translations.vue:61 +#: front/src/components/mixins/Translations.vue:62 msgctxt "Content/*/Dropdown/Noun" msgid "Album name" msgstr "Albumnavn" #: front/src/components/audio/Search.vue:19 -#: src/components/instance/Stats.vue:48 -#: front/src/components/library/Albums.vue:120 -#: src/components/library/Library.vue:7 +#: src/components/library/Albums.vue:129 +#: front/src/components/library/Library.vue:7 +#: src/components/library/TagDetail.vue:28 #: front/src/components/manage/library/ArtistsTable.vue:41 +#: front/src/components/manage/library/TagsTable.vue:43 #: front/src/views/admin/library/AlbumsList.vue:24 -#: front/src/views/admin/library/ArtistDetail.vue:241 +#: front/src/views/admin/library/ArtistDetail.vue:256 #: front/src/views/admin/library/Base.vue:11 -#: front/src/views/admin/library/LibraryDetail.vue:219 -#: front/src/views/admin/moderation/AccountsDetail.vue:354 -#: front/src/views/admin/moderation/DomainsDetail.vue:264 +#: front/src/views/admin/library/LibraryDetail.vue:238 +#: front/src/views/admin/library/TagDetail.vue:133 +#: front/src/views/admin/moderation/AccountsDetail.vue:366 +#: front/src/views/admin/moderation/DomainsDetail.vue:301 msgctxt "*/*/*" msgid "Albums" msgstr "Album" @@ -517,7 +601,10 @@ msgstr "Album fra denne artisten" #: front/src/components/manage/library/LibrariesTable.vue:13 #: front/src/components/manage/library/UploadsTable.vue:13 #: front/src/components/manage/library/UploadsTable.vue:22 +#: front/src/components/manage/moderation/DomainsTable.vue:11 #: front/src/components/manage/users/InvitationsTable.vue:19 +#: front/src/components/moderation/ReportCategoryDropdown.vue:32 +#: front/src/views/admin/moderation/ReportsList.vue:17 #: front/src/views/content/libraries/FilesTable.vue:13 msgctxt "Content/*/Dropdown" msgid "All" @@ -536,40 +623,52 @@ msgctxt "Head/Authorize/Title" msgid "Allow application" msgstr "" +#: front/src/components/About.vue:136 +msgctxt "*/*/*" +msgid "Allow-list" +msgstr "" + +#: front/src/components/About.vue:149 +msgctxt "*/*/*" +msgid "Allowed domains" +msgstr "" + #: front/src/components/library/ImportStatusModal.vue:17 msgctxt "Popup/Import/Message" -msgid "" -"An error occured during upload processing. You will find more information " -"below." +msgid "An error occurred during upload processing. You will find more information below." msgstr "" #: front/src/components/playlists/Editor.vue:13 +#, fuzzy msgctxt "Content/Playlist/Error message.Title" -msgid "An error occured while saving your changes" +msgid "An error occurred while saving your changes" msgstr "Kunne ikke lagre endringer" #: front/src/components/federation/FetchButton.vue:21 #, fuzzy msgctxt "Popup/*/Message.Content" -msgid "An error occured while trying to refresh data:" +msgid "An error occurred while trying to refresh data:" msgstr "Kunne ikke lagre endringer" #: front/src/components/federation/FetchButton.vue:41 #, fuzzy msgctxt "*/*/Error" -msgid "An HTTP error occured while contacting the remote server" +msgid "An HTTP error occurred while contacting the remote server" msgstr "Kunne ikke lagre endringer" -#: front/src/components/auth/Login.vue:10 -msgctxt "Content/Login/Error message/List item" -msgid "" -"An unknown error happend, this can mean the server is down or cannot be " -"reached" -msgstr "Ukjent feil, tjeneren er nede eller kunne ikke nÃ¥s" - #: front/src/components/library/ImportStatusModal.vue:145 msgctxt "Popup/Import/Error.Label" -msgid "An unkwown error occured" +msgid "An unknown error occurred" +msgstr "" + +#: front/src/components/About.vue:123 +msgctxt "*/*/*" +msgid "Anonymous access" +msgstr "" + +#: front/src/components/moderation/ReportModal.vue:54 +msgctxt "Popup/Moderation/Error message" +msgid "Anonymous reports are disabled, please sign-in to submit a report." msgstr "" #: front/src/components/auth/Settings.vue:175 @@ -592,9 +691,7 @@ msgstr "Handling" #: front/src/components/auth/ApplicationEdit.vue:16 msgctxt "Content/Application/Paragraph/" -msgid "" -"Application ID and secret are really sensitive values and must be treated " -"like passwords. Do not share those with anyone else." +msgid "Application ID and secret are really sensitive values and must be treated like passwords. Do not share those with anyone else." msgstr "" #: front/src/components/auth/ApplicationEdit.vue:25 @@ -624,30 +721,28 @@ msgctxt "Content/Login/Title" msgid "Are you sure you want to log out?" msgstr "Er du sikker pÃ¥ at du vil logge ut?" +#: front/src/components/audio/SearchBar.vue:32 +#: src/components/audio/track/Table.vue:8 #: front/src/components/manage/library/AlbumsTable.vue:40 #: front/src/components/manage/library/TracksTable.vue:41 -msgctxt "*/*/*" -msgid "Artist" -msgstr "Artist" - -#: front/src/components/audio/SearchBar.vue:25 -#: src/components/audio/track/Table.vue:8 #: front/src/components/metadata/Search.vue:130 -#: front/src/views/admin/library/AlbumDetail.vue:108 -#: front/src/views/admin/library/TrackDetail.vue:118 -#: front/src/views/content/libraries/FilesTable.vue:56 +#: src/components/mixins/Report.vue:55 +#: front/src/views/admin/library/AlbumDetail.vue:114 +#: front/src/views/admin/library/TrackDetail.vue:124 +#: front/src/views/content/libraries/FilesTable.vue:56 src/entities.js:12 +#: front/src/components/mixins/Report.vue:56 msgctxt "*/*/*/Noun" msgid "Artist" msgstr "Artist" -#: front/src/views/admin/library/ArtistDetail.vue:91 +#: front/src/views/admin/library/ArtistDetail.vue:96 #, fuzzy msgctxt "Content/Moderation/Title" msgid "Artist data" msgstr "Artistnavn" -#: front/src/components/mixins/Translations.vue:52 -#: front/src/components/mixins/Translations.vue:53 +#: front/src/components/mixins/Translations.vue:62 +#: front/src/components/mixins/Translations.vue:63 msgctxt "Content/*/Dropdown/Noun" msgid "Artist name" msgstr "Artistnavn" @@ -658,36 +753,36 @@ msgctxt "*/Search/Input.Placeholder" msgid "Artist, album, track…" msgstr "Artist, album, spor…" +#: front/src/components/audio/Search.vue:10 +#: src/components/library/Artists.vue:117 +#: front/src/components/library/Library.vue:10 +#: front/src/components/library/TagDetail.vue:19 +#: front/src/components/manage/library/TagsTable.vue:42 #: front/src/views/admin/library/ArtistsList.vue:24 #: front/src/views/admin/library/Base.vue:8 -#: front/src/views/admin/library/LibraryDetail.vue:209 -msgctxt "*/*/*" -msgid "Artists" -msgstr "Artister" - -#: front/src/components/audio/Search.vue:10 -#: src/components/instance/Stats.vue:42 -#: front/src/components/library/Artists.vue:117 -#: src/components/library/Library.vue:10 -#: front/src/views/admin/moderation/AccountsDetail.vue:346 -#: front/src/views/admin/moderation/DomainsDetail.vue:254 +#: front/src/views/admin/library/LibraryDetail.vue:228 +#: front/src/views/admin/library/TagDetail.vue:123 +#: front/src/views/admin/moderation/AccountsDetail.vue:358 +#: front/src/views/admin/moderation/DomainsDetail.vue:291 msgctxt "*/*/*/Noun" msgid "Artists" msgstr "Artister" #: front/src/components/favorites/List.vue:34 -#: src/components/library/Albums.vue:25 -#: front/src/components/library/Artists.vue:25 +#: src/components/library/Albums.vue:29 +#: front/src/components/library/Artists.vue:29 #: src/components/library/Radios.vue:44 #: front/src/components/manage/library/AlbumsTable.vue:21 #: front/src/components/manage/library/ArtistsTable.vue:21 #: front/src/components/manage/library/EditsCardList.vue:39 #: front/src/components/manage/library/LibrariesTable.vue:30 +#: front/src/components/manage/library/TagsTable.vue:21 #: front/src/components/manage/library/TracksTable.vue:21 #: front/src/components/manage/library/UploadsTable.vue:40 #: front/src/components/manage/moderation/AccountsTable.vue:21 -#: front/src/components/manage/moderation/DomainsTable.vue:19 +#: front/src/components/manage/moderation/DomainsTable.vue:27 #: front/src/components/manage/users/UsersTable.vue:19 +#: front/src/views/admin/moderation/ReportsList.vue:44 #: front/src/views/content/libraries/FilesTable.vue:31 #: front/src/views/playlists/List.vue:27 msgctxt "Content/Search/Dropdown" @@ -699,19 +794,25 @@ msgctxt "Content/Signup/Button.Label/Verb" msgid "Ask for a password reset" msgstr "Spør om tilbakestilling av passord" -#: front/src/views/admin/library/AlbumDetail.vue:198 -#: front/src/views/admin/library/ArtistDetail.vue:187 -#: front/src/views/admin/library/LibraryDetail.vue:176 -#: front/src/views/admin/library/TrackDetail.vue:250 +#: front/src/components/manage/moderation/ReportCard.vue:72 +msgctxt "Content/Moderation/*" +msgid "Assigned to" +msgstr "" + +#: front/src/views/admin/library/AlbumDetail.vue:214 +#: front/src/views/admin/library/ArtistDetail.vue:202 +#: front/src/views/admin/library/LibraryDetail.vue:195 +#: front/src/views/admin/library/TagDetail.vue:113 +#: front/src/views/admin/library/TrackDetail.vue:266 #: front/src/views/admin/library/UploadDetail.vue:191 -#: front/src/views/admin/moderation/AccountsDetail.vue:274 -#: front/src/views/admin/moderation/DomainsDetail.vue:202 +#: front/src/views/admin/moderation/AccountsDetail.vue:285 +#: front/src/views/admin/moderation/DomainsDetail.vue:239 #, fuzzy msgctxt "Content/Moderation/Title" msgid "Audio content" msgstr "Legg til innhold" -#: front/src/components/ShortcutsModal.vue:55 +#: front/src/components/ShortcutsModal.vue:92 msgctxt "Popup/Keyboard shortcuts/Title" msgid "Audio player shortcuts" msgstr "" @@ -755,9 +856,9 @@ msgid "Back to settings" msgstr "Oppdater innstillinger" #: front/src/components/library/TrackDetail.vue:48 -#: front/src/components/mixins/Translations.vue:55 +#: front/src/components/mixins/Translations.vue:67 #: front/src/views/admin/library/UploadDetail.vue:227 -#: front/src/components/mixins/Translations.vue:56 +#: front/src/components/mixins/Translations.vue:68 msgctxt "Content/Track/*/Noun" msgid "Bitrate" msgstr "Bitrate" @@ -770,10 +871,7 @@ msgstr "" #: front/src/components/manage/moderation/InstancePolicyForm.vue:112 msgctxt "Content/Moderation/Help text" -msgid "" -"Block everything from this account or domain. This will prevent any " -"interaction with the entity, and purge related content (uploads, libraries, " -"follows, etc.)" +msgid "Block everything from this account or domain. This will prevent any interaction with the entity, and purge related content (uploads, libraries, follows, etc.)" msgstr "" #: front/src/components/Sidebar.vue:18 src/components/library/Library.vue:4 @@ -786,6 +884,11 @@ msgctxt "Sidebar/Library/List item.Link/Verb" msgid "Browse library" msgstr "Utforsk bibliotek" +#: front/src/components/Home.vue:132 +msgctxt "Content/Home/Link" +msgid "Browse public content" +msgstr "" + #: front/src/components/library/Albums.vue:4 #, fuzzy msgctxt "Content/Album/Title" @@ -817,40 +920,41 @@ msgctxt "Content/Album/Card" msgid "By %{ artist }" msgstr "Av %{ artist }" -#: front/src/views/content/remote/Card.vue:112 +#: front/src/views/content/remote/Card.vue:125 #, fuzzy msgctxt "Popup/Library/Paragraph" msgid "By unfollowing this library, you loose access to its content." -msgstr "" -"Ved Ã¥ slutte Ã¥ følge dette biblioteket, mister du tilgang til dets innhold." +msgstr "Ved Ã¥ slutte Ã¥ følge dette biblioteket, mister du tilgang til dets innhold." -#: front/src/views/admin/library/AlbumDetail.vue:214 -#: front/src/views/admin/library/ArtistDetail.vue:203 -#: front/src/views/admin/library/LibraryDetail.vue:192 -#: front/src/views/admin/library/TrackDetail.vue:266 +#: front/src/views/admin/library/AlbumDetail.vue:230 +#: front/src/views/admin/library/ArtistDetail.vue:218 +#: front/src/views/admin/library/LibraryDetail.vue:211 +#: front/src/views/admin/library/TrackDetail.vue:282 #: front/src/views/admin/library/UploadDetail.vue:208 -#: front/src/views/admin/moderation/AccountsDetail.vue:290 -#: front/src/views/admin/moderation/DomainsDetail.vue:217 +#: front/src/views/admin/moderation/AccountsDetail.vue:301 +#: front/src/views/admin/moderation/DomainsDetail.vue:254 msgctxt "Content/Moderation/Table.Label/Noun" msgid "Cached size" msgstr "" #: front/src/components/SetInstanceModal.vue:37 #: front/src/components/common/DangerousButton.vue:17 -#: front/src/components/library/AlbumBase.vue:36 -#: front/src/components/library/ArtistBase.vue:47 -#: front/src/components/library/EditForm.vue:95 -#: front/src/components/library/TrackBase.vue:55 +#: front/src/components/library/AlbumBase.vue:37 +#: front/src/components/library/ArtistBase.vue:48 +#: front/src/components/library/EditForm.vue:107 +#: front/src/components/library/TrackBase.vue:53 #: front/src/components/library/radios/Filter.vue:53 #: front/src/components/manage/moderation/InstancePolicyForm.vue:54 #: front/src/components/moderation/FilterModal.vue:39 +#: front/src/components/moderation/ReportModal.vue:59 #: front/src/components/playlists/PlaylistModal.vue:26 #: front/src/components/playlists/PlaylistModal.vue:77 +#: front/src/views/playlists/Detail.vue:62 msgctxt "*/*/Button.Label/Verb" msgid "Cancel" msgstr "Avbryt" -#: front/src/views/content/remote/Card.vue:97 +#: front/src/views/content/remote/Card.vue:110 #, fuzzy msgctxt "Content/Library/Card.Paragraph" msgid "Cancel follow request" @@ -867,6 +971,14 @@ msgctxt "Content/Library/Help text" msgid "Cannot upload this file, ensure it is not too big" msgstr "Kunne ikke laste opp denne filen, sjekk at den ikke er for stor" +#: front/src/components/manage/moderation/ReportCard.vue:30 +#: front/src/components/mixins/Translations.vue:42 +#: front/src/components/moderation/ReportCategoryDropdown.vue:2 +#: front/src/components/mixins/Translations.vue:43 +msgctxt "*/*/*" +msgid "Category" +msgstr "" + #: front/src/components/Footer.vue:21 msgctxt "Footer/Settings/Dropdown.Label/Short, Verb" msgid "Change language" @@ -882,6 +994,11 @@ msgctxt "Content/Settings/Button.Label" msgid "Change password" msgstr "Endre passord" +#: front/src/components/Footer.vue:37 +msgctxt "Footer/Settings/Dropdown.Label/Short, Verb" +msgid "Change theme" +msgstr "" + #: front/src/views/auth/PasswordResetConfirm.vue:62 msgctxt "*/Signup/Title" msgid "Change your password" @@ -899,12 +1016,8 @@ msgstr "Endringer synkronisert med tjener" #: front/src/components/auth/Settings.vue:71 msgctxt "Content/Settings/Paragraph'" -msgid "" -"Changing your password will also change your Subsonic API password if you " -"have requested one." -msgstr "" -"Endring av ditt passord endrer ogsÃ¥ ditt Subsonic API-passord, hvis du har " -"skaffet deg det." +msgid "Changing your password will also change your Subsonic API password if you have requested one." +msgstr "Endring av ditt passord endrer ogsÃ¥ ditt Subsonic API-passord, hvis du har skaffet deg det." #: front/src/components/auth/Settings.vue:98 #, fuzzy @@ -912,16 +1025,14 @@ msgctxt "Popup/Settings/Paragraph" msgid "Changing your password will have the following consequences:" msgstr "Endring av passord har følgende konsekvenser:" -#: front/src/components/Footer.vue:40 +#: front/src/components/Footer.vue:48 msgctxt "Footer/*/List item.Link" msgid "Chat room" msgstr "" #: front/src/components/auth/ApplicationForm.vue:24 msgctxt "Content/Applications/Paragraph/" -msgid "" -"Checking the parent \"Read\" or \"Write\" scopes implies access to all the " -"corresponding children scopes." +msgid "Checking the parent \"Read\" or \"Write\" scopes implies access to all the corresponding children scopes." msgstr "" #: front/src/components/SetInstanceModal.vue:2 @@ -929,12 +1040,9 @@ msgctxt "Popup/Instance/Title" msgid "Choose your instance" msgstr "Velg din instans" -#: front/src/components/manage/users/InvitationForm.vue:37 -msgctxt "Content/Admin/Button.Label/Verb" -msgid "Clear" -msgstr "Tøm" - #: front/src/components/library/EditForm.vue:75 +#: front/src/components/library/EditForm.vue:88 +#: front/src/components/manage/users/InvitationForm.vue:37 msgctxt "Content/Library/Button.Label" msgid "Clear" msgstr "Tøm" @@ -945,45 +1053,46 @@ msgctxt "*/Playlist/Button.Label/Verb" msgid "Clear playlist" msgstr "Tøm spilleliste" -#: front/src/components/audio/Player.vue:642 +#: front/src/components/ShortcutsModal.vue:144 +#, fuzzy +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Clear queue" +msgstr "Tøm spillekøen" + +#: front/src/components/audio/Player.vue:668 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Clear your queue" msgstr "Tøm spillekøen" -#: front/src/components/Home.vue:44 -msgctxt "Content/Home/List item/Verb" -msgid "Click once, listen for hours using built-in radios" -msgstr "Klikk én gang, lytt i timevis ved bruk av innebygde radiostasjoner" - #: front/src/components/mixins/Translations.vue:21 #: front/src/components/mixins/Translations.vue:22 msgctxt "Content/Library/Link.Title" -msgid "" -"Click to display more information about the import process for this upload" +msgid "Click to display more information about the import process for this upload" msgstr "" #: front/src/components/library/FileUpload.vue:82 msgctxt "Content/Library/Paragraph/Call to action" msgid "Click to select files to upload or drag and drop files or directories" -msgstr "" -"Klikk for Ã¥ velge filer Ã¥ laste opp, eller dra og slipp filer eller mapper" +msgstr "Klikk for Ã¥ velge filer Ã¥ laste opp, eller dra og slipp filer eller mapper" +#: front/src/components/ShortcutsModal.vue:38 #: front/src/components/federation/FetchButton.vue:85 #: front/src/components/library/ImportStatusModal.vue:79 +#: front/src/components/manage/moderation/InstancePolicyModal.vue:34 msgctxt "*/*/Button.Label/Verb" msgid "Close" msgstr "" -#: front/src/components/ShortcutsModal.vue:20 -msgctxt "Popup/Keyboard shortcuts/Button.Label/Verb" -msgid "Close" -msgstr "" - #: front/src/components/federation/FetchButton.vue:88 msgctxt "*/*/Button.Label/Verb" msgid "Close and reload page" msgstr "" +#: front/src/components/About.vue:94 +msgctxt "*/*/*/State of registrations" +msgid "Closed" +msgstr "" + #: front/src/components/manage/users/InvitationForm.vue:26 #: front/src/components/manage/users/InvitationsTable.vue:42 msgctxt "Content/Admin/Table.Label/Noun" @@ -991,8 +1100,9 @@ msgid "Code" msgstr "Kode" #: front/src/components/audio/album/Card.vue:41 -#: front/src/components/audio/artist/Card.vue:33 -msgctxt "Content/*/Card.Link/Verb" +#: front/src/components/common/CollapseLink.vue:3 +#, fuzzy +msgctxt "*/*/Button,Label" msgid "Collapse" msgstr "Fold sammen" @@ -1017,20 +1127,20 @@ msgctxt "Content/Signup/Form.Label" msgid "Confirmation code" msgstr "Bekreftelseskode" +#: front/src/components/About.vue:67 src/components/Home.vue:65 +msgctxt "Content/Home/Header/Name" +msgid "Contact" +msgstr "" + #: front/src/components/moderation/FilterModal.vue:90 #, fuzzy msgctxt "*/Moderation/Message" msgid "Content filter successfully added" msgstr "Importert" -#: front/src/components/mixins/Translations.vue:96 -#: front/src/components/mixins/Translations.vue:97 -#, fuzzy -msgctxt "Content/OAuth Scopes/Label" -msgid "Content filters" -msgstr "Velg et filter" - #: front/src/components/auth/Settings.vue:116 +#: front/src/components/mixins/Translations.vue:108 +#: front/src/components/mixins/Translations.vue:109 #, fuzzy msgctxt "Content/Settings/Title/Noun" msgid "Content filters" @@ -1038,8 +1148,7 @@ msgstr "Velg et filter" #: front/src/components/auth/Settings.vue:119 msgctxt "Content/Settings/Paragraph" -msgid "" -"Content filters help you hide content you don't want to see on the service." +msgid "Content filters help you hide content you don't want to see on the service." msgstr "" #: front/src/components/common/ActionTable.vue:8 @@ -1047,13 +1156,20 @@ msgctxt "Content/*/Button.Help text.Paragraph" msgid "Content have been updated, click refresh to see up-to-date content" msgstr "" -#: front/src/components/Footer.vue:48 +#: front/src/components/About.vue:46 +#, fuzzy +msgctxt "Content/About/Header" +msgid "Contents" +msgstr "Velg et filter" + +#: front/src/components/Footer.vue:56 msgctxt "Footer/*/List item.Link" msgid "Contribute" msgstr "" -#: front/src/components/audio/EmbedWizard.vue:19 +#: front/src/components/audio/EmbedWizard.vue:29 #: front/src/components/common/CopyInput.vue:8 +#: front/src/components/forms/PasswordInput.vue:43 msgctxt "*/*/Button.Label/Short, Verb" msgid "Copy" msgstr "Kopier" @@ -1069,15 +1185,15 @@ msgctxt "Content/Auth/Paragraph" msgid "Copy-paste the following code in the application:" msgstr "" -#: front/src/components/audio/EmbedWizard.vue:21 +#: front/src/components/audio/EmbedWizard.vue:31 msgctxt "Popup/Embed/Paragraph" msgid "Copy/paste this code in your website HTML" msgstr "" #: front/src/components/library/TrackDetail.vue:10 -#: front/src/views/admin/library/TrackDetail.vue:153 +#: front/src/views/admin/library/TrackDetail.vue:159 src/edits.js:77 #, fuzzy -msgctxt "Content/Track/Table.Label/Noun" +msgctxt "Content/Track/*/Noun" msgid "Copyright" msgstr "Kopier" @@ -1093,32 +1209,22 @@ msgctxt "Content/Library/Error message.Title" msgid "Could not fetch remote library" msgstr "Klarte ikke Ã¥ hente bibliotek annensteds hen" -#: front/src/components/Home.vue:80 -msgctxt "Content/Home/List item" -msgid "Covers, lyrics, our goal is to have them all ;)" -msgstr "Omslag, sangtekster, vÃ¥rt mÃ¥l er Ã¥ ha alle ;)" - #: front/src/components/manage/moderation/InstancePolicyForm.vue:58 #, fuzzy msgctxt "Content/Moderation/Card.Button.Label/Verb" msgid "Create" msgstr "Opprett import" -#: front/src/components/auth/Signup.vue:4 +#: front/src/views/auth/Signup.vue:4 msgctxt "Content/Signup/Title" msgid "Create a funkwhale account" msgstr "Opprett en Funkwhale-konto" -#: front/src/components/auth/Settings.vue:220 -#, fuzzy -msgctxt "Content/Settings/Button.Label" -msgid "Create a new application" -msgstr "Opprett en ny spilleliste" - #: front/src/components/auth/ApplicationNew.vue:8 #: front/src/components/auth/ApplicationNew.vue:41 +#: front/src/components/auth/Settings.vue:220 #, fuzzy -msgctxt "Content/Applications/Title" +msgctxt "Content/Settings/Button.Label" msgid "Create a new application" msgstr "Opprett en ny spilleliste" @@ -1132,7 +1238,7 @@ msgctxt "Popup/Playlist/Title/Verb" msgid "Create a new playlist" msgstr "Opprett en ny spilleliste" -#: front/src/components/Sidebar.vue:57 src/components/auth/Login.vue:17 +#: front/src/components/Sidebar.vue:57 src/components/auth/LoginForm.vue:15 msgctxt "*/Signup/Link/Verb" msgid "Create an account" msgstr "Opprett en konto" @@ -1148,7 +1254,7 @@ msgctxt "Content/Library/Button.Label/Verb" msgid "Create library" msgstr "Opprett bibliotek" -#: front/src/components/auth/Signup.vue:53 +#: front/src/components/auth/SignupForm.vue:49 msgctxt "Content/Signup/Button.Label" msgid "Create my account" msgstr "Lag konto" @@ -1173,11 +1279,13 @@ msgstr "Opprett din egen radiostasjon" #: front/src/components/manage/library/AlbumsTable.vue:44 #: front/src/components/manage/library/ArtistsTable.vue:43 #: front/src/components/manage/library/LibrariesTable.vue:54 +#: front/src/components/manage/library/TagsTable.vue:45 #: front/src/components/manage/library/TracksTable.vue:44 #: front/src/components/manage/library/UploadsTable.vue:66 +#: front/src/components/manage/moderation/ReportCard.vue:43 #: front/src/components/manage/users/InvitationsTable.vue:40 -#: front/src/components/mixins/Translations.vue:43 -#: front/src/components/mixins/Translations.vue:44 +#: front/src/components/mixins/Translations.vue:53 +#: front/src/components/mixins/Translations.vue:54 msgctxt "Content/*/*/Noun" msgid "Creation date" msgstr "Opprettelsesdato" @@ -1187,6 +1295,12 @@ msgctxt "Content/Settings/Title/Noun" msgid "Current avatar" msgstr "Nåærende avatar" +#: front/src/components/admin/SettingsGroup.vue:67 +#, fuzzy +msgctxt "Content/Settings/Title/Noun" +msgid "Current image" +msgstr "NÃ¥værende bruk" + #: front/src/views/content/libraries/DetailArea.vue:4 msgctxt "Content/Library/Title" msgid "Current library" @@ -1202,6 +1316,11 @@ msgctxt "Content/Library/Title" msgid "Current usage" msgstr "NÃ¥værende bruk" +#: front/src/components/Footer.vue:94 +msgctxt "Footer/Settings/Dropdown.Label/Theme name" +msgid "Dark" +msgstr "" + #: front/src/components/federation/FetchButton.vue:53 msgctxt "*/*/Error" msgid "Data returned by the remote server had invalid or missing attributes" @@ -1223,7 +1342,7 @@ msgctxt "Popup/Import/Table.Label/Noun" msgid "Debug information" msgstr "Sporinfo" -#: front/src/components/ShortcutsModal.vue:75 +#: front/src/components/ShortcutsModal.vue:128 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Decrease volume" msgstr "" @@ -1235,23 +1354,29 @@ msgstr "" #: front/src/components/manage/library/AlbumsTable.vue:188 #: front/src/components/manage/library/ArtistsTable.vue:178 #: front/src/components/manage/library/LibrariesTable.vue:205 +#: front/src/components/manage/library/TagsTable.vue:179 #: front/src/components/manage/library/TracksTable.vue:188 #: front/src/components/manage/library/UploadsTable.vue:255 #: front/src/components/manage/moderation/InstancePolicyForm.vue:61 +#: front/src/components/manage/moderation/NotesThread.vue:24 +#: front/src/components/manage/moderation/NotesThread.vue:29 +#: front/src/components/manage/moderation/ReportCard.vue:360 #: front/src/components/manage/users/InvitationsTable.vue:167 -#: front/src/views/admin/library/AlbumDetail.vue:72 -#: front/src/views/admin/library/AlbumDetail.vue:77 -#: front/src/views/admin/library/ArtistDetail.vue:71 +#: front/src/views/admin/library/AlbumDetail.vue:78 +#: front/src/views/admin/library/AlbumDetail.vue:83 #: front/src/views/admin/library/ArtistDetail.vue:76 +#: front/src/views/admin/library/ArtistDetail.vue:81 #: front/src/views/admin/library/LibraryDetail.vue:58 #: front/src/views/admin/library/LibraryDetail.vue:63 -#: front/src/views/admin/library/TrackDetail.vue:71 -#: front/src/views/admin/library/TrackDetail.vue:76 +#: front/src/views/admin/library/TagDetail.vue:41 +#: front/src/views/admin/library/TagDetail.vue:46 +#: front/src/views/admin/library/TrackDetail.vue:77 +#: front/src/views/admin/library/TrackDetail.vue:82 #: front/src/views/admin/library/UploadDetail.vue:65 #: front/src/views/admin/library/UploadDetail.vue:70 #: front/src/views/content/libraries/FilesTable.vue:222 #: front/src/views/content/libraries/Form.vue:29 -#: src/views/playlists/Detail.vue:34 +#: src/views/playlists/Detail.vue:42 msgctxt "*/*/*/Verb" msgid "Delete" msgstr "Slett" @@ -1278,7 +1403,20 @@ msgctxt "Popup/Moderation/Button.Label/Verb" msgid "Delete moderation rule" msgstr "Slett radiostasjon" -#: front/src/views/playlists/Detail.vue:39 +#: front/src/components/auth/Settings.vue:274 +#: src/components/auth/Settings.vue:302 +#, fuzzy +msgctxt "*/*/Button.Label" +msgid "Delete my account" +msgstr "Lag konto" + +#: front/src/components/auth/Settings.vue:297 +#, fuzzy +msgctxt "*/*/Button.Label" +msgid "Delete my account…" +msgstr "Lag konto" + +#: front/src/views/playlists/Detail.vue:47 msgctxt "Popup/Playlist/Button.Label/Verb" msgid "Delete playlist" msgstr "Slett spilleliste" @@ -1288,14 +1426,24 @@ msgctxt "Popup/Radio/Button.Label/Verb" msgid "Delete radio" msgstr "Slett radiostasjon" -#: front/src/views/admin/library/AlbumDetail.vue:73 -#: front/src/views/admin/library/TrackDetail.vue:72 +#: front/src/components/manage/moderation/ReportCard.vue:357 +msgctxt "Content/Moderation/Button/Verb" +msgid "Delete reported object" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:358 +msgctxt "Content/Moderation/Popup/Header" +msgid "Delete reported object?" +msgstr "" + +#: front/src/views/admin/library/AlbumDetail.vue:79 +#: front/src/views/admin/library/TrackDetail.vue:78 #, fuzzy msgctxt "Popup/Library/Title" msgid "Delete this album?" msgstr "Slett dette biblioteket?" -#: front/src/views/admin/library/ArtistDetail.vue:72 +#: front/src/views/admin/library/ArtistDetail.vue:77 #, fuzzy msgctxt "Popup/Library/Title" msgid "Delete this artist?" @@ -1313,12 +1461,24 @@ msgctxt "Popup/Moderation/Title" msgid "Delete this moderation rule?" msgstr "Slett dette biblioteket?" +#: front/src/components/manage/moderation/NotesThread.vue:25 +#, fuzzy +msgctxt "Popup/Moderation/Title" +msgid "Delete this note?" +msgstr "Slett dette biblioteket?" + #: front/src/components/library/EditCard.vue:94 #, fuzzy msgctxt "Popup/Library/Title" msgid "Delete this suggestion?" msgstr "Slett dette biblioteket?" +#: front/src/views/admin/library/TagDetail.vue:42 +#, fuzzy +msgctxt "Popup/Library/Title" +msgid "Delete this tag?" +msgstr "Slett dette biblioteket?" + #: front/src/views/admin/library/UploadDetail.vue:66 #, fuzzy msgctxt "Popup/Library/Title" @@ -1326,49 +1486,48 @@ msgid "Delete this upload?" msgstr "Slett dette biblioteket?" #: front/src/components/favorites/List.vue:35 -#: src/components/library/Albums.vue:26 -#: front/src/components/library/Artists.vue:26 -#: src/components/library/Radios.vue:47 +#: src/components/library/Albums.vue:30 +#: front/src/components/library/Artists.vue:30 +#: src/components/library/Radios.vue:47 #: front/src/components/manage/library/AlbumsTable.vue:22 #: front/src/components/manage/library/ArtistsTable.vue:22 #: front/src/components/manage/library/EditsCardList.vue:40 #: front/src/components/manage/library/LibrariesTable.vue:31 +#: front/src/components/manage/library/TagsTable.vue:22 #: front/src/components/manage/library/TracksTable.vue:22 #: front/src/components/manage/library/UploadsTable.vue:41 #: front/src/components/manage/moderation/AccountsTable.vue:22 -#: front/src/components/manage/moderation/DomainsTable.vue:20 +#: front/src/components/manage/moderation/DomainsTable.vue:28 #: front/src/components/manage/users/UsersTable.vue:20 +#: front/src/views/admin/moderation/ReportsList.vue:45 #: front/src/views/content/libraries/FilesTable.vue:32 #: front/src/views/playlists/List.vue:28 msgctxt "Content/Search/Dropdown" msgid "Descending" msgstr "Synkende" -#: front/src/views/admin/library/LibraryDetail.vue:123 -msgctxt "*/*/*/Noun" -msgid "Description" -msgstr "Beskrivelse" +#: front/src/components/manage/moderation/NoteForm.vue:37 +msgctxt "Content/Moderation/Placeholder" +msgid "Describe what actions have been taken, or any other related updates…" +msgstr "" #: front/src/components/library/radios/Builder.vue:25 +#: front/src/views/admin/library/LibraryDetail.vue:132 #: front/src/views/content/libraries/Form.vue:14 -msgctxt "Content/*/Input.Label/Noun" +msgctxt "*/*/*/Noun" msgid "Description" msgstr "Beskrivelse" #: front/src/views/content/libraries/Card.vue:48 -#: src/views/content/remote/Card.vue:54 +#: src/views/content/remote/Card.vue:67 msgctxt "Content/Library/Card.Button.Label/Noun" msgid "Details" msgstr "Detaljer" -#: front/src/views/admin/moderation/AccountsDetail.vue:491 +#: front/src/views/admin/moderation/AccountsDetail.vue:511 msgctxt "Content/Moderation/Help text" -msgid "" -"Determine how much content the user can upload. Leave empty to use the " -"default value of the instance." -msgstr "" -"Bestem hvor mye innhold brukeren kan late opp. La stÃ¥ tomt for Ã¥ bruke " -"forvalgt verdi pÃ¥ instansen." +msgid "Determine how much content the user can upload. Leave empty to use the default value of the instance." +msgstr "Bestem hvor mye innhold brukeren kan late opp. La stÃ¥ tomt for Ã¥ bruke forvalgt verdi pÃ¥ instansen." #: front/src/components/mixins/Translations.vue:8 #: front/src/components/mixins/Translations.vue:9 @@ -1377,39 +1536,51 @@ msgid "Determine the visibility level of your activity" msgstr "Bestem synlighetsnivÃ¥et for din aktivitet" #: front/src/components/auth/Settings.vue:104 -#: front/src/components/auth/SubsonicTokenForm.vue:51 +#: front/src/components/auth/SubsonicTokenForm.vue:56 msgctxt "Popup/Settings/Button.Label" msgid "Disable access" msgstr "Skru av tilgang" -#: front/src/components/auth/SubsonicTokenForm.vue:48 +#: front/src/components/auth/SubsonicTokenForm.vue:53 msgctxt "Content/Settings/Button.Label/Verb" msgid "Disable Subsonic access" msgstr "Skru av Subsonic-tilgang" -#: front/src/components/auth/SubsonicTokenForm.vue:49 +#: front/src/components/auth/SubsonicTokenForm.vue:54 msgctxt "Popup/Settings/Title" msgid "Disable Subsonic API access?" msgstr "Skru av Subsonic API-tilgang?" +#: front/src/components/About.vue:118 src/components/About.vue:131 +#: front/src/components/About.vue:144 #: front/src/components/manage/moderation/InstancePolicyForm.vue:18 #: front/src/views/admin/moderation/AccountsDetail.vue:157 #: front/src/views/admin/moderation/AccountsDetail.vue:161 #, fuzzy -msgctxt "*/*/*" +msgctxt "*/*/*/State of feature" msgid "Disabled" msgstr "Skru av tilgang" -#: front/src/views/admin/library/TrackDetail.vue:145 +#: front/src/views/admin/library/TrackDetail.vue:151 msgctxt "*/*/*/Noun" msgid "Disc number" msgstr "" +#: front/src/components/Home.vue:157 +msgctxt "Content/Home/Link" +msgid "Discover everything you need to know about Funkwhale and its features" +msgstr "" + #: front/src/components/auth/SubsonicTokenForm.vue:13 msgctxt "Content/Settings/Link" msgid "Discover how to use Funkwhale from other apps" msgstr "Oppdag hvordan du bruker Funkwhale fra andre programmer" +#: front/src/views/Notifications.vue:45 +msgctxt "Content/Notifications/Button.Label/Verb" +msgid "Discover other ways to help" +msgstr "" + #: front/src/views/admin/moderation/AccountsDetail.vue:132 #, fuzzy msgctxt "'Content/*/*/Noun'" @@ -1423,11 +1594,15 @@ msgstr "Vis offentlig" #: front/src/components/manage/moderation/InstancePolicyForm.vue:122 msgctxt "Content/Moderation/Help text" -msgid "" -"Do not download any media file (audio, album cover, account avatar…) from " -"this account or domain. This will purge existing content as well." +msgid "Do not download any media file (audio, album cover, account avatar…) from this account or domain. This will purge existing content as well." msgstr "" +#: front/src/views/Notifications.vue:36 +#, fuzzy +msgctxt "Content/Notifications/Header" +msgid "Do you like Funkwhale?" +msgstr "Om Funkwhale" + #: front/src/components/playlists/Editor.vue:51 msgctxt "Popup/Playlist/Title" msgid "Do you want to clear the playlist \"%{ playlist }\"?" @@ -1438,7 +1613,7 @@ msgctxt "Modal/*/Title" msgid "Do you want to confirm this action?" msgstr "Ønsker du Ã¥ bekrefte denne handlingen?" -#: front/src/views/playlists/Detail.vue:35 +#: front/src/views/playlists/Detail.vue:43 msgctxt "Popup/Playlist/Title/Call to action" msgid "Do you want to delete the playlist \"%{ playlist }\"?" msgstr "Ønsker du Ã¥ slette spillelisten \"%{ playlist }\"?" @@ -1448,6 +1623,12 @@ msgctxt "Popup/Radio/Title" msgid "Do you want to delete the radio \"%{ radio }\"?" msgstr "Ønsker du Ã¥ slette radiostasjonen \"%{ radio }\"?" +#: front/src/components/auth/Settings.vue:298 +#, fuzzy +msgctxt "Popup/Settings/Title" +msgid "Do you want to delete your account?" +msgstr "Ønsker du Ã¥ gjenopprette din tidligere spillekø?" + #: front/src/components/moderation/FilterModal.vue:3 #, fuzzy msgctxt "Popup/Moderation/Title/Verb" @@ -1462,7 +1643,13 @@ msgid_plural "Do you want to launch %{ action } on %{ count } elements?" msgstr[0] "Ønsker du Ã¥ utføre %{ action } pÃ¥ %{ count } element?" msgstr[1] "Ønsker du Ã¥ utføre %{ action } pÃ¥ %{ count } elementer?" -#: front/src/components/Sidebar.vue:118 +#: front/src/components/moderation/ReportModal.vue:3 +#, fuzzy +msgctxt "Popup/Moderation/Title/Verb" +msgid "Do you want to report this object?" +msgstr "Ønsker du Ã¥ bekrefte denne handlingen?" + +#: front/src/components/Sidebar.vue:122 msgctxt "Sidebar/Queue/Message" msgid "Do you want to restore your previous queue?" msgstr "Ønsker du Ã¥ gjenopprette din tidligere spillekø?" @@ -1478,26 +1665,33 @@ msgstr "Dokumentasjon" #: front/src/components/manage/library/TracksTable.vue:42 #: front/src/components/manage/library/UploadsTable.vue:62 #: front/src/components/manage/moderation/AccountsTable.vue:40 -#: front/src/components/mixins/Translations.vue:60 -#: front/src/views/admin/library/AlbumDetail.vue:118 -#: front/src/views/admin/library/ArtistDetail.vue:107 -#: front/src/views/admin/library/LibraryDetail.vue:114 -#: front/src/views/admin/library/TrackDetail.vue:170 +#: front/src/components/manage/moderation/ReportCard.vue:169 +#: front/src/components/manage/moderation/ReportCard.vue:179 +#: front/src/components/mixins/Translations.vue:72 +#: front/src/views/admin/library/AlbumDetail.vue:124 +#: front/src/views/admin/library/ArtistDetail.vue:112 +#: front/src/views/admin/library/LibraryDetail.vue:123 +#: front/src/views/admin/library/TrackDetail.vue:176 #: front/src/views/admin/library/UploadDetail.vue:121 #: front/src/views/admin/moderation/AccountsDetail.vue:123 -#: front/src/components/mixins/Translations.vue:61 +#: front/src/components/mixins/Translations.vue:73 msgctxt "Content/Moderation/*/Noun" msgid "Domain" msgstr "" -#: front/src/views/admin/moderation/Base.vue:5 +#: front/src/views/admin/moderation/Base.vue:8 #: front/src/views/admin/moderation/DomainsList.vue:3 -#: front/src/views/admin/moderation/DomainsList.vue:48 +#: front/src/views/admin/moderation/DomainsList.vue:54 msgctxt "*/Moderation/*/Noun" msgid "Domains" msgstr "" -#: front/src/components/library/TrackBase.vue:39 +#: front/src/views/Notifications.vue:42 +msgctxt "Content/Notifications/Button.Label/Verb" +msgid "Donate" +msgstr "" + +#: front/src/components/library/TrackBase.vue:37 #: front/src/views/admin/library/UploadDetail.vue:58 msgctxt "Content/Track/Link/Verb" msgid "Download" @@ -1510,10 +1704,10 @@ msgstr "Dra og slipp rader for Ã¥ endre sporrekkefølge i spillelisten" #: front/src/components/audio/track/Table.vue:10 #: front/src/components/library/TrackDetail.vue:30 -#: front/src/components/mixins/Translations.vue:56 +#: front/src/components/mixins/Translations.vue:68 #: front/src/views/admin/library/UploadDetail.vue:238 #: front/src/views/content/libraries/FilesTable.vue:60 -#: front/src/components/mixins/Translations.vue:57 +#: front/src/components/mixins/Translations.vue:69 msgctxt "Content/*/*" msgid "Duration" msgstr "Varighet" @@ -1524,30 +1718,21 @@ msgctxt "Content/Signup/Message" msgid "E-mail address confirmed" msgstr "E-postadresse bekreftet" -#: front/src/components/Home.vue:88 -msgctxt "Content/Home/Title" -msgid "Easy to use" -msgstr "Enkelt Ã¥ bruke" - -#: front/src/components/library/AlbumBase.vue:68 -#: front/src/components/library/ArtistBase.vue:79 -#: front/src/components/library/TrackBase.vue:87 +#: front/src/components/auth/Settings.vue:246 +#: src/components/library/AlbumBase.vue:73 +#: front/src/components/library/ArtistBase.vue:84 +#: front/src/components/library/TrackBase.vue:89 #: front/src/components/manage/moderation/InstancePolicyCard.vue:45 #: front/src/components/radios/Card.vue:23 -#: src/views/admin/library/AlbumDetail.vue:65 -#: front/src/views/admin/library/ArtistDetail.vue:64 -#: front/src/views/admin/library/TrackDetail.vue:64 +#: src/views/admin/library/AlbumDetail.vue:71 +#: front/src/views/admin/library/ArtistDetail.vue:69 +#: front/src/views/admin/library/TrackDetail.vue:70 #: front/src/views/content/libraries/Detail.vue:9 #: src/views/playlists/Detail.vue:31 msgctxt "Content/*/Button.Label/Verb" msgid "Edit" msgstr "Rediger" -#: front/src/components/auth/Settings.vue:246 -msgctxt "Content/Settings/Button.Label" -msgid "Edit" -msgstr "Rediger" - #: front/src/components/auth/ApplicationEdit.vue:30 #: front/src/components/auth/ApplicationEdit.vue:75 #, fuzzy @@ -1555,11 +1740,6 @@ msgctxt "Content/Applications/Title" msgid "Edit application" msgstr "Kunne ikke legge til handling" -#: front/src/components/About.vue:22 -msgctxt "Content/Settings/Button.Label/Verb" -msgid "Edit instance info" -msgstr "Rediger instans-info" - #: front/src/components/manage/moderation/InstancePolicyForm.vue:3 msgctxt "Content/Moderation/Card.Title/Verb" msgid "Edit moderation rule" @@ -1582,25 +1762,21 @@ msgctxt "Content/*/Title" msgid "Edit this track" msgstr "Rediger instans-info" -#: front/src/views/admin/library/AlbumDetail.vue:182 -#: front/src/views/admin/library/ArtistDetail.vue:171 +#: front/src/components/mixins/Translations.vue:116 +#: front/src/views/admin/library/AlbumDetail.vue:198 +#: front/src/views/admin/library/ArtistDetail.vue:186 #: front/src/views/admin/library/Base.vue:5 #: src/views/admin/library/EditsList.vue:24 -#: front/src/views/admin/library/TrackDetail.vue:234 +#: front/src/views/admin/library/TrackDetail.vue:250 +#: front/src/components/mixins/Translations.vue:117 #, fuzzy msgctxt "*/Admin/*/Noun" msgid "Edits" msgstr "Rediger" -#: front/src/components/mixins/Translations.vue:104 -#: front/src/components/mixins/Translations.vue:105 -#, fuzzy -msgctxt "Content/OAuth Scopes/Label" -msgid "Edits" -msgstr "Rediger" - -#: front/src/components/auth/Signup.vue:30 +#: front/src/components/auth/SignupForm.vue:26 #: front/src/components/manage/users/UsersTable.vue:38 +#: front/src/components/moderation/ReportModal.vue:31 msgctxt "Content/*/*/Noun" msgid "Email" msgstr "E-postadresse" @@ -1610,53 +1786,62 @@ msgctxt "Content/*/*" msgid "Email address" msgstr "E-postadresse" -#: front/src/components/library/AlbumBase.vue:53 -#: front/src/components/library/ArtistBase.vue:64 -#: front/src/components/library/TrackBase.vue:72 +#: front/src/components/library/AlbumBase.vue:54 +#: front/src/components/library/ArtistBase.vue:65 +#: front/src/components/library/TrackBase.vue:70 +#: src/views/playlists/Detail.vue:38 msgctxt "Content/*/Button.Label/Verb" msgid "Embed" msgstr "" -#: front/src/components/audio/EmbedWizard.vue:20 +#: front/src/components/audio/EmbedWizard.vue:30 msgctxt "Popup/Embed/Input.Label/Noun" msgid "Embed code" msgstr "" -#: front/src/components/library/AlbumBase.vue:26 +#: front/src/components/library/AlbumBase.vue:27 msgctxt "Popup/Album/Title/Verb" msgid "Embed this album on your website" msgstr "" -#: front/src/components/library/ArtistBase.vue:37 +#: front/src/components/library/ArtistBase.vue:38 msgctxt "Popup/Artist/Title/Verb" msgid "Embed this artist work on your website" msgstr "" -#: front/src/components/library/TrackBase.vue:45 +#: front/src/views/playlists/Detail.vue:52 +msgctxt "Popup/Album/Title/Verb" +msgid "Embed this playlist on your website" +msgstr "" + +#: front/src/components/library/TrackBase.vue:43 msgctxt "Popup/Track/Title" msgid "Embed this track on your website" msgstr "" -#: front/src/views/admin/moderation/AccountsDetail.vue:259 -#: front/src/views/admin/moderation/DomainsDetail.vue:187 +#: front/src/views/admin/moderation/AccountsDetail.vue:260 +#: front/src/views/admin/moderation/DomainsDetail.vue:224 #, fuzzy msgctxt "Content/Moderation/Table.Label/Noun" msgid "Emitted library follows" msgstr "Skriv inn biblioteksnettadresse" -#: front/src/views/admin/moderation/AccountsDetail.vue:243 -#: front/src/views/admin/moderation/DomainsDetail.vue:171 +#: front/src/views/admin/moderation/AccountsDetail.vue:244 +#: front/src/views/admin/moderation/DomainsDetail.vue:208 msgctxt "Content/Moderation/Table.Label/Noun" msgid "Emitted messages" msgstr "" +#: front/src/components/About.vue:114 src/components/About.vue:127 +#: front/src/components/About.vue:140 #: front/src/components/manage/moderation/InstancePolicyCard.vue:8 #: front/src/components/manage/moderation/InstancePolicyForm.vue:17 #: front/src/views/admin/moderation/AccountsDetail.vue:156 #: front/src/views/admin/moderation/AccountsDetail.vue:160 -msgctxt "*/*/*" +#, fuzzy +msgctxt "*/*/*/State of feature" msgid "Enabled" -msgstr "" +msgstr "Skru av tilgang" #: front/src/views/playlists/Detail.vue:30 msgctxt "Content/Playlist/Button.Label/Verb" @@ -1675,10 +1860,10 @@ msgctxt "Content/Search/Input.Placeholder" msgid "Enter a radio name…" msgstr "Skriv inn et radiostasjonsnavn…" -#: front/src/components/library/Albums.vue:119 +#: front/src/components/library/Albums.vue:128 #, fuzzy msgctxt "Content/Search/Input.Placeholder" -msgid "Enter album title..." +msgid "Enter album title…" msgstr "Skriv inn artistnavn…" #: front/src/components/library/Artists.vue:116 @@ -1695,15 +1880,16 @@ msgstr "Skriv inn spillelistenavn…" #: front/src/views/auth/PasswordReset.vue:54 msgctxt "Content/Signup/Input.Placeholder" -msgid "Enter the email address binded to your account" +msgid "Enter the email address linked to your account" msgstr "" -#: front/src/components/auth/Signup.vue:103 +#: front/src/components/auth/SignupForm.vue:96 msgctxt "Content/Signup/Form/Placeholder" msgid "Enter your email" msgstr "Skriv inn e-postadressen din" -#: front/src/components/auth/Signup.vue:98 src/components/auth/Signup.vue:100 +#: front/src/components/auth/SignupForm.vue:91 +#: src/components/auth/SignupForm.vue:93 msgctxt "Content/Signup/Form/Placeholder" msgid "Enter your invitation code (case insensitive)" msgstr "Skriv inn din invitasjonskode (versalsensitiv)" @@ -1714,12 +1900,12 @@ msgctxt "Content/Library/Input.Placeholder/Verb" msgid "Enter your search query…" msgstr "Skriv inn din søkespørring…" -#: front/src/components/auth/Signup.vue:102 +#: front/src/components/auth/SignupForm.vue:95 msgctxt "Content/Signup/Form/Placeholder" msgid "Enter your username" msgstr "Skriv inn brukernavnet ditt" -#: front/src/components/auth/Login.vue:83 +#: front/src/components/auth/LoginForm.vue:81 msgctxt "Content/Login/Input.Placeholder" msgid "Enter your username or email" msgstr "Skriv inn brukernavnet eller e-postadressen din" @@ -1737,7 +1923,7 @@ msgctxt "Popup/Import/Table.Label/Noun" msgid "Error detail" msgstr "Feilrapportering" -#: front/src/views/admin/Settings.vue:87 +#: front/src/views/admin/Settings.vue:89 msgctxt "Content/Admin/Menu" msgid "Error reporting" msgstr "Feilrapportering" @@ -1799,17 +1985,13 @@ msgctxt "Popup/Moderation/Error message" msgid "Error while fetching application data" msgstr "Kunne ikke opprette invitasjon" -#: front/src/views/admin/moderation/DomainsDetail.vue:118 +#: front/src/views/admin/moderation/DomainsDetail.vue:155 #, fuzzy msgctxt "Content/Moderation/Table" msgid "Error while fetching node info" msgstr "Klarte ikke Ã¥ hente bibliotek annensteds hen" #: front/src/components/admin/SettingsGroup.vue:5 -msgctxt "Content/Settings/Error message.Title" -msgid "Error while saving settings" -msgstr "Kunne ikke lagre innstillinger" - #: front/src/components/federation/FetchButton.vue:73 msgctxt "Content/*/Error message.Title" msgid "Error while saving settings" @@ -1821,6 +2003,18 @@ msgctxt "Content/Library/Error message.Title" msgid "Error while submitting edit" msgstr "Kunne ikke lagre innstillinger" +#: front/src/components/manage/moderation/NoteForm.vue:3 +#, fuzzy +msgctxt "Content/Moderation/Error message.Title" +msgid "Error while submitting note" +msgstr "Kunne ikke lagre innstillinger" + +#: front/src/components/moderation/ReportModal.vue:11 +#, fuzzy +msgctxt "Popup/Moderation/Error message" +msgid "Error while submitting report" +msgstr "Kunne ikke lagre innstillinger" + #: front/src/components/mixins/Translations.vue:32 #: front/src/components/mixins/Translations.vue:33 msgctxt "Content/Library/Table/Short" @@ -1856,9 +2050,14 @@ msgctxt "Content/Radio/Table.Label/Verb" msgid "Exclude" msgstr "Ekskluder" +#: front/src/components/common/CollapseLink.vue:2 +msgctxt "*/*/Button,Label" +msgid "Expand" +msgstr "" + #: front/src/components/manage/users/InvitationsTable.vue:41 -#: front/src/components/mixins/Translations.vue:49 -#: front/src/components/mixins/Translations.vue:50 +#: front/src/components/mixins/Translations.vue:59 +#: front/src/components/mixins/Translations.vue:60 msgctxt "Content/Admin/Table.Label/Noun" msgid "Expiration date" msgstr "Utløpsdato" @@ -1875,11 +2074,7 @@ msgstr "Utløpt/brukt" #: front/src/components/manage/moderation/InstancePolicyForm.vue:110 msgctxt "Content/Moderation/Help text" -msgid "" -"Explain why you're applying this policy. Depending on your instance " -"configuration, this will help you remember why you acted on this account or " -"domain, and may be displayed publicly to help users understand what " -"moderation rules are in place." +msgid "Explain why you're applying this policy. Depending on your instance configuration, this will help you remember why you acted on this account or domain, and may be displayed publicly to help users understand what moderation rules are in place." msgstr "" #: front/src/components/manage/library/UploadsTable.vue:25 @@ -1888,33 +2083,30 @@ msgctxt "Content/Library/Dropdown" msgid "Failed" msgstr "" -#: front/src/views/content/remote/Card.vue:62 +#: front/src/views/content/remote/Card.vue:75 #, fuzzy msgctxt "Content/Library/Card.List item/Noun" msgid "Failed tracks:" msgstr "Feilaktige spor:" -#: front/src/views/admin/library/AlbumDetail.vue:165 -#: front/src/views/admin/library/ArtistDetail.vue:154 -#: front/src/views/admin/library/TrackDetail.vue:217 +#: front/src/views/admin/library/AlbumDetail.vue:171 +#: front/src/views/admin/library/ArtistDetail.vue:159 +#: front/src/views/admin/library/TrackDetail.vue:223 #, fuzzy msgctxt "*/*/*" msgid "Favorited tracks" msgstr "Favoritter" #: front/src/components/Sidebar.vue:66 +#: src/components/mixins/Translations.vue:88 +#: front/src/components/mixins/Translations.vue:89 msgctxt "Sidebar/Favorites/List item.Link/Noun" msgid "Favorites" msgstr "Favoritter" -#: front/src/components/mixins/Translations.vue:76 -#: front/src/components/mixins/Translations.vue:77 -msgctxt "Content/OAuth Scopes/Label" -msgid "Favorites" -msgstr "Favoritter" - -#: front/src/views/admin/Settings.vue:84 -msgctxt "Content/Admin/Menu" +#: front/src/components/About.vue:110 src/views/admin/Settings.vue:84 +#, fuzzy +msgctxt "*/*/*" msgid "Federation" msgstr "Føderasjon" @@ -1940,6 +2132,12 @@ msgctxt "Content/Radio/Table.Label/Noun" msgid "Filter name" msgstr "Filternavn" +#: front/src/components/Home.vue:118 +#, fuzzy +msgctxt "Content/Home/Link" +msgid "Find another pod" +msgstr "Send inn en annen forespørsel" + #: front/src/components/manage/library/UploadsTable.vue:26 #: front/src/components/mixins/Translations.vue:36 #: front/src/views/content/libraries/FilesTable.vue:17 @@ -1949,26 +2147,32 @@ msgid "Finished" msgstr "Fullført" #: front/src/components/manage/moderation/AccountsTable.vue:42 -#: front/src/components/manage/moderation/DomainsTable.vue:41 -#: front/src/views/admin/library/AlbumDetail.vue:149 -#: front/src/views/admin/library/ArtistDetail.vue:138 -#: front/src/views/admin/library/LibraryDetail.vue:153 -#: front/src/views/admin/library/TrackDetail.vue:201 +#: front/src/components/manage/moderation/DomainsTable.vue:49 +#: front/src/views/admin/library/AlbumDetail.vue:155 +#: front/src/views/admin/library/ArtistDetail.vue:143 +#: front/src/views/admin/library/LibraryDetail.vue:162 +#: front/src/views/admin/library/TagDetail.vue:98 +#: front/src/views/admin/library/TrackDetail.vue:207 #: front/src/views/admin/library/UploadDetail.vue:167 -#: front/src/views/admin/moderation/AccountsDetail.vue:235 -#: front/src/views/admin/moderation/DomainsDetail.vue:151 +#: front/src/views/admin/moderation/AccountsDetail.vue:236 +#: front/src/views/admin/moderation/DomainsDetail.vue:188 msgctxt "Content/Moderation/Table.Label/Short (Value is a date)" msgid "First seen" msgstr "" -#: front/src/components/mixins/Translations.vue:46 -#: front/src/components/mixins/Translations.vue:47 +#: front/src/components/mixins/Translations.vue:56 +#: front/src/components/mixins/Translations.vue:57 #, fuzzy msgctxt "Content/Moderation/Dropdown/Noun" msgid "First seen date" msgstr "Utløpsdato" -#: front/src/views/content/remote/Card.vue:87 +#: front/src/components/ShortcutsModal.vue:64 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Focus searchbar" +msgstr "" + +#: front/src/views/content/remote/Card.vue:100 msgctxt "Content/Library/Card.Button.Label/Verb" msgid "Follow" msgstr "Følg" @@ -1978,42 +2182,36 @@ msgctxt "Content/Library/Title/Verb" msgid "Follow remote libraries" msgstr "Følg bibliotek annensteds hen" -#: front/src/views/content/remote/Card.vue:92 +#: front/src/views/content/remote/Card.vue:105 #, fuzzy msgctxt "Content/Library/Card.Paragraph" msgid "Follow request pending approval" msgstr "Følging avventer samtykke" -#: front/src/components/mixins/Translations.vue:64 -#: front/src/views/admin/library/LibraryDetail.vue:161 +#: front/src/components/manage/library/LibrariesTable.vue:53 +#: front/src/components/mixins/Translations.vue:76 +#: front/src/views/admin/library/LibraryDetail.vue:170 #: front/src/views/content/libraries/Detail.vue:7 -#: front/src/components/mixins/Translations.vue:65 +#: front/src/components/mixins/Translations.vue:77 msgctxt "Content/Federation/*/Noun" msgid "Followers" msgstr "Følgere" -#: front/src/components/manage/library/LibrariesTable.vue:53 -msgctxt "Content/*/*/Noun" -msgid "Followers" -msgstr "Følgere" - -#: front/src/views/content/remote/Card.vue:103 +#: front/src/views/content/remote/Card.vue:116 msgctxt "Content/Library/Card.Paragraph" msgid "Following" msgstr "Følger" -#: front/src/components/mixins/Translations.vue:84 -#: front/src/components/mixins/Translations.vue:85 +#: front/src/components/mixins/Translations.vue:96 +#: front/src/components/mixins/Translations.vue:97 #, fuzzy msgctxt "Content/OAuth Scopes/Label" msgid "Follows" msgstr "Følg" -#: front/src/components/library/TrackBase.vue:17 +#: front/src/components/library/TrackBase.vue:245 msgctxt "Content/Track/Paragraph" -msgid "" -"From album <a class=\"internal\" href=\"%{ albumUrl }\">%{ album }</a> by <a" -" class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" +msgid "From album <a class=\"internal\" href=\"%{ albumUrl }\">%{ album }</a> by <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" msgstr "" #: front/src/components/auth/Authorize.vue:28 @@ -2024,38 +2222,21 @@ msgstr "Skru av tilgang" #: front/src/components/auth/SubsonicTokenForm.vue:7 msgctxt "Content/Settings/Paragraph'" -msgid "" -"Funkwhale is compatible with other music players that support the Subsonic " -"API." -msgstr "" -"Funkwhale er kompatibelt med andre musikkspillere som støtter Subsonic API-" -"et." +msgid "Funkwhale is compatible with other music players that support the Subsonic API." +msgstr "Funkwhale er kompatibelt med andre musikkspillere som støtter Subsonic API-et." -#: front/src/components/Home.vue:90 -msgctxt "Content/Home/Paragraph" -msgid "Funkwhale is dead simple to use." -msgstr "Funkwhale er dødsenkelt Ã¥ bruke." - -#: front/src/components/Home.vue:39 -msgctxt "Content/Home/Paragraph" -msgid "" -"Funkwhale is designed to make it easy to listen to music you like, or to " -"discover new artists." -msgstr "" -"Funkwhale er designet for Ã¥ gjøre det enkelt Ã¥ lytte til musikk dun liker, " -"eller Ã¥ oppdage nye artister." - -#: front/src/components/Home.vue:111 +#: front/src/components/Home.vue:88 +#, fuzzy msgctxt "Content/Home/Paragraph" -msgid "Funkwhale is free and gives you control on your music." +msgid "Funkwhale is free and developped by a friendly community of volunteers." msgstr "Funkwhale er fritt og gir deg kontroll over din musikk." -#: front/src/components/Home.vue:66 -msgctxt "Content/Home/Paragraph" -msgid "Funkwhale takes care of handling your music" -msgstr "Funkwhale pÃ¥tar seg hÃ¥ndtering av din musikk" +#: front/src/components/About.vue:78 +msgctxt "*/*/*" +msgid "Funkwhale version" +msgstr "" -#: front/src/components/ShortcutsModal.vue:38 +#: front/src/components/ShortcutsModal.vue:56 msgctxt "Popup/Keyboard shortcuts/Title" msgid "General shortcuts" msgstr "" @@ -2065,37 +2246,18 @@ msgctxt "Content/Admin/Button.Label/Verb" msgid "Get a new invitation" msgstr "FÃ¥ en invitasjon" -#: front/src/components/Home.vue:13 -msgctxt "Content/Home/Button.Label/Verb" -msgid "Get me to the library" -msgstr "Send meg til biblioteket" - -#: front/src/components/Home.vue:70 -msgctxt "Content/Home/List item/Verb" -msgid "" -"Get quality metadata about your music thanks to <a href=\"%{ url }\" " -"target=\"_blank\">MusicBrainz</a>" -msgstr "" -"Hent kvalitetsmetadata om din musikk takket være <a href=\"%{ url }\" " -"target=\"_blank\">MusicBrainz</a>" - #: front/src/views/content/Home.vue:12 src/views/content/Home.vue:19 msgctxt "Content/Library/Button.Label/Verb" msgid "Get started" msgstr "Kom igang" -#: front/src/components/Footer.vue:37 +#: front/src/components/Footer.vue:45 +#: src/components/library/ImportStatusModal.vue:45 #, fuzzy msgctxt "Footer/*/Link" msgid "Getting help" msgstr "Innstillinger" -#: front/src/components/library/ImportStatusModal.vue:45 -#, fuzzy -msgctxt "Popup/Import/Table.Label/Noun" -msgid "Getting help" -msgstr "Innstillinger" - #: front/src/components/common/ActionTable.vue:35 #: front/src/components/common/ActionTable.vue:56 msgctxt "Content/*/Button.Label/Short, Verb" @@ -2107,12 +2269,22 @@ msgctxt "Content/*/Button.Label/Verb" msgid "Go to home page" msgstr "GÃ¥ til hjemmesiden" +#: front/src/views/Notifications.vue:27 src/views/Notifications.vue:61 +msgctxt "Content/Notifications/Button.Label" +msgid "Got it!" +msgstr "" + #: front/src/components/auth/Settings.vue:128 #, fuzzy msgctxt "Content/Settings/Title" msgid "Hidden artists" msgstr "Utforsker artister" +#: front/src/components/About.vue:155 +msgctxt "*/*/*/Verb" +msgid "Hide" +msgstr "" + #: front/src/components/manage/moderation/InstancePolicyForm.vue:114 msgctxt "Content/Moderation/Help text" msgid "Hide account or domain content, except from followers." @@ -2124,12 +2296,12 @@ msgctxt "Popup/*/Button.Label" msgid "Hide content" msgstr "Legg til innhold" -#: front/src/components/audio/PlayButton.vue:26 +#: front/src/components/audio/PlayButton.vue:31 msgctxt "*/Queue/Dropdown/Button/Label/Short" msgid "Hide content from this artist" msgstr "" -#: front/src/components/audio/Player.vue:643 +#: front/src/components/audio/Player.vue:669 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Hide content from this artist…" msgstr "" @@ -2139,38 +2311,29 @@ msgctxt "Head/Home/Title" msgid "Home" msgstr "Hjem" -#: front/src/components/instance/Stats.vue:36 -msgctxt "Content/About/Paragraph/Unit" -msgid "Hours of music" -msgstr "Timevis med musikk" - #: front/src/components/auth/SubsonicTokenForm.vue:10 msgctxt "Content/Settings/Paragraph" -msgid "" -"However, accessing Funkwhale from those clients require a separate password " -"you can set below." -msgstr "" -"Dog vil tilgang til Funkwhale fra disse klientene kreve et eget passord du " -"kan sette nedenfor." +msgid "However, accessing Funkwhale from those clients require a separate password you can set below." +msgstr "Dog vil tilgang til Funkwhale fra disse klientene kreve et eget passord du kan sette nedenfor." #: front/src/views/auth/PasswordResetConfirm.vue:24 +#, fuzzy msgctxt "Content/Signup/Paragraph" -msgid "" -"If the email address provided in the previous step is valid and binded to a " -"user account, you should receive an email with reset instructions in the " -"next couple of minutes." -msgstr "" -"Hvis e-postadressen oppgitt i forrige steg er gyldig og bundet til en " -"brukerkonto, bør du motta en e-post med tilbakestillingsinstruksjoner i " -"løpet av et par minutter." +msgid "If the email address provided in the previous step is valid and linked to a user account, you should receive an email with reset instructions in the next couple of minutes." +msgstr "Hvis e-postadressen oppgitt i forrige steg er gyldig og bundet til en brukerkonto, bør du motta en e-post med tilbakestillingsinstruksjoner i løpet av et par minutter." #: front/src/components/auth/Settings.vue:205 msgctxt "Content/Applications/Paragraph" -msgid "" -"If you authorize third-party applications to access your data, those " -"applications will be listed here." +msgid "If you authorize third-party applications to access your data, those applications will be listed here." msgstr "" +#: front/src/components/mixins/Translations.vue:46 +#: front/src/components/mixins/Translations.vue:47 +#, fuzzy +msgctxt "Content/Moderation/Dropdown" +msgid "Illegal content" +msgstr "Legg til innhold" + #: front/src/components/library/ImportStatusModal.vue:3 #, fuzzy msgctxt "Popup/Import/Title" @@ -2183,14 +2346,10 @@ msgid "Import reference" msgstr "Importer referanse" #: front/src/components/manage/library/UploadsTable.vue:20 -#: front/src/views/content/libraries/FilesTable.vue:11 -#: front/src/views/content/libraries/FilesTable.vue:59 -msgctxt "Content/Library/*/Noun" -msgid "Import status" -msgstr "Importer status" - #: front/src/components/manage/library/UploadsTable.vue:64 #: front/src/views/admin/library/UploadDetail.vue:131 +#: front/src/views/content/libraries/FilesTable.vue:11 +#: front/src/views/content/libraries/FilesTable.vue:59 msgctxt "Content/*/*/Noun" msgid "Import status" msgstr "Importer status" @@ -2233,12 +2392,12 @@ msgctxt "Popup/Moderation/List item" msgid "In radio suggestions" msgstr "" -#: front/src/components/manage/users/UsersTable.vue:54 +#: front/src/components/manage/users/UsersTable.vue:55 msgctxt "Content/Admin/Table" msgid "Inactive" msgstr "Inaktiv" -#: front/src/components/ShortcutsModal.vue:71 +#: front/src/components/ShortcutsModal.vue:124 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Increase volume" msgstr "" @@ -2258,7 +2417,7 @@ msgctxt "Content/Settings/Dropdown/Short" msgid "Instance" msgstr "Instansradiostasjoner" -#: front/src/views/admin/moderation/DomainsDetail.vue:71 +#: front/src/views/admin/moderation/DomainsDetail.vue:99 #, fuzzy msgctxt "Content/Moderation/Title" msgid "Instance data" @@ -2285,19 +2444,25 @@ msgctxt "Popup/Instance/Input.Label/Noun" msgid "Instance URL" msgstr "Instansradiostasjoner" +#: front/src/components/manage/moderation/ReportCard.vue:92 +#: front/src/components/manage/moderation/ReportCard.vue:203 +msgctxt "Content/*/*/Noun" +msgid "Internal notes" +msgstr "" + #: front/src/components/library/FileUpload.vue:268 msgctxt "Content/Library/Help text" -msgid "" -"Invalid file type, ensure you are uploading an audio file. Supported file " -"extensions are %{ extensions }" +msgid "Invalid file type, ensure you are uploading an audio file. Supported file extensions are %{ extensions }" msgstr "" #: front/src/components/library/ImportStatusModal.vue:139 +#: front/src/components/mixins/Translations.vue:45 +#: front/src/components/mixins/Translations.vue:46 msgctxt "Popup/Import/Error.Label" msgid "Invalid metadata" msgstr "" -#: front/src/components/auth/Signup.vue:44 +#: front/src/components/auth/SignupForm.vue:40 #: front/src/components/manage/users/InvitationForm.vue:11 msgctxt "Content/*/Input.Label" msgid "Invitation code" @@ -2309,7 +2474,13 @@ msgctxt "*/Admin/*/Noun" msgid "Invitations" msgstr "Invitasjoner" -#: front/src/components/Footer.vue:41 +#: front/src/components/manage/moderation/DomainsTable.vue:9 +#: front/src/views/admin/moderation/DomainsDetail.vue:106 +msgctxt "Content/Moderation/*/Adjective" +msgid "Is present on allow-list" +msgstr "" + +#: front/src/components/Footer.vue:49 msgctxt "Footer/*/List item.Link" msgid "Issue tracker" msgstr "Feilsporer" @@ -2319,17 +2490,18 @@ msgctxt "Popup/Instance/Error message.Title" msgid "It is not possible to connect to the given URL" msgstr "" -#: front/src/components/Home.vue:50 -msgctxt "Content/Home/List item/Verb" -msgid "Keep a track of your favorite songs" -msgstr "Behold et spor av dine favorittsanger" +#: front/src/components/mixins/Translations.vue:65 +#: front/src/components/mixins/Translations.vue:66 +msgctxt "*/*/*/Noun" +msgid "Items" +msgstr "" #: front/src/components/Footer.vue:33 src/components/ShortcutsModal.vue:3 msgctxt "*/*/*/Noun" msgid "Keyboard shortcuts" msgstr "" -#: front/src/views/admin/moderation/DomainsDetail.vue:161 +#: front/src/views/admin/moderation/DomainsDetail.vue:198 #, fuzzy msgctxt "Content/Moderation/Table.Label.Link" msgid "Known accounts" @@ -2341,15 +2513,15 @@ msgid "Known libraries" msgstr "Kjente bibliotek" #: front/src/components/manage/users/UsersTable.vue:41 -#: front/src/components/mixins/Translations.vue:58 -#: front/src/views/admin/moderation/AccountsDetail.vue:205 -#: front/src/components/mixins/Translations.vue:59 +#: front/src/components/mixins/Translations.vue:70 +#: front/src/views/admin/moderation/AccountsDetail.vue:206 +#: front/src/components/mixins/Translations.vue:71 msgctxt "Content/Profile/Table.Label/Short, Noun (Value is a date)" msgid "Last activity" msgstr "Siste aktivitet" -#: front/src/views/admin/moderation/AccountsDetail.vue:188 -#: front/src/views/admin/moderation/DomainsDetail.vue:78 +#: front/src/views/admin/moderation/AccountsDetail.vue:189 +#: front/src/views/admin/moderation/DomainsDetail.vue:115 msgctxt "Content/*/Table.Label" msgid "Last checked" msgstr "" @@ -2364,14 +2536,14 @@ msgctxt "Content/Moderation/Table.Label/Noun" msgid "Last seen" msgstr "" -#: front/src/components/mixins/Translations.vue:47 -#: front/src/components/mixins/Translations.vue:48 +#: front/src/components/mixins/Translations.vue:57 +#: front/src/components/mixins/Translations.vue:58 #, fuzzy msgctxt "Content/Moderation/Dropdown/Noun" msgid "Last seen date" msgstr "Siste oppdatering:" -#: front/src/views/content/remote/Card.vue:60 +#: front/src/views/content/remote/Card.vue:73 msgctxt "Content/Library/Card.List item/Noun" msgid "Last update:" msgstr "Siste oppdatering:" @@ -2381,40 +2553,42 @@ msgctxt "Modal/*/Button.Label/Short, Verb" msgid "Launch" msgstr "Kjør" -#: front/src/components/Home.vue:10 -msgctxt "Content/Home/Button.Label/Verb" -msgid "Learn more about this instance" -msgstr "Lær mer om denne instansen" +#: front/src/components/Home.vue:35 +msgctxt "Content/Home/Link" +msgid "Learn more" +msgstr "" #: front/src/components/manage/users/InvitationForm.vue:58 msgctxt "Content/Admin/Input.Placeholder" msgid "Leave empty for a random code" msgstr "La stÃ¥ tom for tilfeldig kode" -#: front/src/components/audio/EmbedWizard.vue:7 +#: front/src/components/audio/EmbedWizard.vue:17 #, fuzzy msgctxt "Popup/Embed/Paragraph" msgid "Leave empty for a responsive widget" msgstr "La stÃ¥ tom for tilfeldig kode" -#: front/src/views/admin/library/AlbumDetail.vue:232 -#: front/src/views/admin/library/ArtistDetail.vue:221 -#: front/src/views/admin/library/TrackDetail.vue:284 -#: front/src/views/admin/moderation/AccountsDetail.vue:327 -#: front/src/views/admin/moderation/DomainsDetail.vue:234 -#: front/src/views/content/Base.vue:5 +#: front/src/components/mixins/Translations.vue:64 +#: front/src/components/mixins/Translations.vue:65 msgctxt "*/*/*/Noun" -msgid "Libraries" -msgstr "Bibliotek" +msgid "Length" +msgstr "" +#: front/src/views/admin/library/AlbumDetail.vue:248 +#: front/src/views/admin/library/ArtistDetail.vue:236 #: front/src/views/admin/library/Base.vue:17 #: front/src/views/admin/library/LibrariesList.vue:24 -msgctxt "*/*/*" +#: front/src/views/admin/library/TrackDetail.vue:300 +#: front/src/views/admin/moderation/AccountsDetail.vue:339 +#: front/src/views/admin/moderation/DomainsDetail.vue:271 +#: front/src/views/content/Base.vue:5 +msgctxt "*/*/*/Noun" msgid "Libraries" msgstr "Bibliotek" -#: front/src/components/mixins/Translations.vue:72 -#: front/src/components/mixins/Translations.vue:73 +#: front/src/components/mixins/Translations.vue:84 +#: front/src/components/mixins/Translations.vue:85 #, fuzzy msgctxt "Content/OAuth Scopes/Label" msgid "Libraries and uploads" @@ -2422,20 +2596,18 @@ msgstr "Bibliotek oppdatert" #: front/src/views/content/libraries/Form.vue:2 msgctxt "Content/Library/Paragraph" -msgid "" -"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." -msgstr "" -"Bibliotek lar deg organisere og dele dine musikksamlinger. DU kan laste opp " -"din egen musikksamling til Funkwhale og dele den med dine venner og familie." +msgid "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." +msgstr "Bibliotek lar deg organisere og dele dine musikksamlinger. DU kan laste opp din egen musikksamling til Funkwhale og dele den med dine venner og familie." -#: front/src/components/Sidebar.vue:85 src/components/instance/Stats.vue:30 +#: front/src/components/Sidebar.vue:85 #: front/src/components/manage/library/UploadsTable.vue:60 -#: front/src/components/manage/users/UsersTable.vue:173 +#: front/src/components/manage/users/UsersTable.vue:174 +#: front/src/components/mixins/Report.vue:77 #: front/src/views/admin/library/UploadDetail.vue:144 -#: front/src/views/admin/moderation/AccountsDetail.vue:498 -msgctxt "*/*/*" +#: front/src/views/admin/moderation/AccountsDetail.vue:518 src/entities.js:132 +#: front/src/components/mixins/Report.vue:78 +#, fuzzy +msgctxt "*/*/*/Noun" msgid "Library" msgstr "Bibliotek" @@ -2469,21 +2641,37 @@ msgstr "Bibliotek oppdatert" #: front/src/components/library/TrackDetail.vue:19 #: front/src/components/manage/library/TracksTable.vue:43 -#: front/src/views/admin/library/TrackDetail.vue:159 src/edits.js:61 +#: front/src/views/admin/library/TrackDetail.vue:165 src/edits.js:84 +#: front/src/entities.js:115 msgctxt "Content/*/*/Noun" msgid "License" msgstr "" -#: front/src/views/admin/library/AlbumDetail.vue:157 -#: front/src/views/admin/library/ArtistDetail.vue:146 -#: front/src/views/admin/library/TrackDetail.vue:209 -msgctxt "*/*/*/Noun" -msgid "Listenings" +#: front/src/components/Footer.vue:90 +msgctxt "Footer/Settings/Dropdown.Label/Theme name" +msgid "Light" msgstr "" -#: front/src/components/mixins/Translations.vue:80 -#: front/src/components/mixins/Translations.vue:81 -msgctxt "Content/OAuth Scopes/Label" +#: front/src/views/admin/library/AlbumDetail.vue:188 +#: front/src/views/admin/library/ArtistDetail.vue:176 +#: front/src/views/admin/library/LibraryDetail.vue:179 +#: front/src/views/admin/library/TrackDetail.vue:240 +#: front/src/views/admin/moderation/AccountsDetail.vue:269 +msgctxt "Content/Moderation/Table.Label/Noun" +msgid "Linked reports" +msgstr "" + +#: front/src/components/Home.vue:135 +msgctxt "Content/Home/Link" +msgid "Listen to public albums and playlists shared on this pod" +msgstr "" + +#: front/src/components/mixins/Translations.vue:92 +#: front/src/views/admin/library/AlbumDetail.vue:163 +#: front/src/views/admin/library/ArtistDetail.vue:151 +#: front/src/views/admin/library/TrackDetail.vue:215 +#: front/src/components/mixins/Translations.vue:93 +msgctxt "*/*/*/Noun" msgid "Listenings" msgstr "" @@ -2512,7 +2700,7 @@ msgctxt "Content/Library/Paragraph" msgid "Loading library data…" msgstr "Laster biblioteksdata…" -#: front/src/views/Notifications.vue:19 +#: front/src/views/Notifications.vue:84 #, fuzzy msgctxt "Content/Notifications/Paragraph" msgid "Loading notifications…" @@ -2541,6 +2729,7 @@ msgstr "Laster dine favoritter…" #: front/src/components/manage/library/LibrariesTable.vue:75 #: front/src/components/manage/library/TracksTable.vue:71 #: front/src/components/manage/library/UploadsTable.vue:99 +#: front/src/components/manage/moderation/ReportCard.vue:173 #: front/src/views/admin/library/AlbumDetail.vue:19 #: front/src/views/admin/library/ArtistDetail.vue:18 #: front/src/views/admin/library/LibraryDetail.vue:18 @@ -2557,12 +2746,12 @@ msgctxt "Content/Moderation/*/Short, Noun" msgid "Local account" msgstr "Min konto" -#: front/src/components/auth/Login.vue:84 +#: front/src/components/Home.vue:96 src/views/auth/Login.vue:29 msgctxt "Head/Login/Title" msgid "Log In" msgstr "Logg inn" -#: front/src/components/auth/Login.vue:4 +#: front/src/views/auth/Login.vue:4 msgctxt "Content/Login/Title/Verb" msgid "Log in to your Funkwhale account" msgstr "Logg inn pÃ¥ din Funkwhale-konto" @@ -2577,7 +2766,7 @@ msgctxt "Sidebar/Profile/List item.Link" msgid "Logged in as %{ username }" msgstr "Innlogget som % { username }" -#: front/src/components/Sidebar.vue:54 src/components/auth/Login.vue:42 +#: front/src/components/Sidebar.vue:54 src/components/auth/LoginForm.vue:41 msgctxt "*/Login/*/Verb" msgid "Login" msgstr "Logg inn" @@ -2599,35 +2788,39 @@ msgctxt "Content/Library/Paragraph" msgid "Looks like you don't have a library, it's time to create one." msgstr "Det ser ut til at du ikke har et bibliotek enda, pÃ¥ tide Ã¥ laget et." -#: front/src/components/audio/Player.vue:632 -#: src/components/audio/Player.vue:633 +#: front/src/components/audio/Player.vue:658 +#: src/components/audio/Player.vue:659 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Looping disabled. Click to switch to single-track looping." msgstr "Gjentagelse avskrudd. Klikk for Ã¥ bytte til enkeltsporsgjentagelse." -#: front/src/components/audio/Player.vue:635 -#: src/components/audio/Player.vue:636 +#: front/src/components/audio/Player.vue:661 +#: src/components/audio/Player.vue:662 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Looping on a single track. Click to switch to whole queue looping." -msgstr "" -"Gjentar enkelt spor. Klikk for Ã¥ bytte til gjentagelse av hele spillekøen." +msgstr "Gjentar enkelt spor. Klikk for Ã¥ bytte til gjentagelse av hele spillekøen." -#: front/src/components/audio/Player.vue:638 -#: src/components/audio/Player.vue:639 +#: front/src/components/audio/Player.vue:664 +#: src/components/audio/Player.vue:665 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Looping on whole queue. Click to disable looping." msgstr "Gjentar hele spillekøen. Klikk for Ã¥ skru av gjentagelse." -#: front/src/components/Sidebar.vue:223 +#: front/src/components/Sidebar.vue:230 msgctxt "Sidebar/*/Hidden text" msgid "Main menu" msgstr "" -#: front/src/views/admin/library/Base.vue:31 +#: front/src/views/admin/library/Base.vue:34 msgctxt "Head/Admin/Title" msgid "Manage library" msgstr "Behandle bibliotek" +#: front/src/components/manage/moderation/InstancePolicyModal.vue:8 +msgctxt "Popup/Moderation/Title/Verb" +msgid "Manage moderation rules for %{ obj }" +msgstr "" + #: front/src/components/playlists/PlaylistModal.vue:3 msgctxt "Popup/Playlist/Title/Verb" msgid "Manage playlists" @@ -2643,7 +2836,7 @@ msgctxt "Content/Playlist/Button.Label/Verb" msgid "Manage your playlists" msgstr "Behandle dine spillelister" -#: front/src/views/Notifications.vue:14 +#: front/src/views/Notifications.vue:79 msgctxt "Content/Notifications/Button.Label/Verb" msgid "Mark all as read" msgstr "Marker alle som lest" @@ -2660,12 +2853,12 @@ msgctxt "Content/Notifications/Button.Tooltip/Verb" msgid "Mark as unread" msgstr "Marker alle som lest" -#: front/src/views/admin/moderation/AccountsDetail.vue:310 +#: front/src/views/admin/moderation/AccountsDetail.vue:321 msgctxt "Content/*/*/Unit" msgid "MB" msgstr "MB" -#: front/src/components/audio/Player.vue:625 +#: front/src/components/audio/Player.vue:651 msgctxt "Sidebar/Player/Hidden text" msgid "Media player" msgstr "" @@ -2676,43 +2869,60 @@ msgctxt "Content/Profile/Paragraph" msgid "Member since %{ date }" msgstr "Registrert siden %{ date }" +#: front/src/components/manage/moderation/ReportCard.vue:109 +#: front/src/components/moderation/ReportModal.vue:41 +msgctxt "*/*/Field.Label/Noun" +msgid "Message" +msgstr "" + #: front/src/components/Footer.vue:32 msgctxt "Footer/*/List item.Link" msgid "Mobile and desktop apps" msgstr "" +#: front/src/components/Home.vue:143 +msgctxt "Content/Home/Link" +msgid "Mobile apps" +msgstr "" + #: front/src/components/Sidebar.vue:96 -#: src/components/manage/users/UsersTable.vue:177 -#: front/src/views/admin/moderation/AccountsDetail.vue:502 -#: front/src/views/admin/moderation/Base.vue:21 +#: src/components/manage/users/UsersTable.vue:178 +#: front/src/views/admin/Settings.vue:85 +#: front/src/views/admin/moderation/AccountsDetail.vue:522 +#: front/src/views/admin/moderation/Base.vue:43 #, fuzzy msgctxt "*/Moderation/*" msgid "Moderation" msgstr "Føderasjon" #: front/src/views/admin/moderation/AccountsDetail.vue:78 -#: front/src/views/admin/moderation/DomainsDetail.vue:42 +#: front/src/views/admin/moderation/DomainsDetail.vue:70 msgctxt "Content/Moderation/Card.Paragraph" -msgid "" -"Moderation policies help you control how your instance interact with a given" -" domain or account." +msgid "Moderation policies help you control how your instance interact with a given domain or account." msgstr "" +#: front/src/components/manage/moderation/InstancePolicyModal.vue:4 +#, fuzzy +msgctxt "Content/Moderation/Button.Label" +msgid "Moderation rules…" +msgstr "Føderasjon" + #: front/src/components/library/EditCard.vue:5 #, fuzzy msgctxt "Content/Library/Card/Short" msgid "Modification %{ id }" msgstr "Endringsdato" -#: front/src/components/mixins/Translations.vue:48 -#: front/src/components/mixins/Translations.vue:49 +#: front/src/components/mixins/Translations.vue:58 +#: front/src/components/mixins/Translations.vue:59 msgctxt "Content/Playlist/Dropdown/Noun" msgid "Modification date" msgstr "Endringsdato" -#: front/src/components/library/AlbumBase.vue:42 -#: front/src/components/library/ArtistBase.vue:53 -#: front/src/components/library/TrackBase.vue:61 +#: front/src/components/audio/PlayButton.vue:100 +#: front/src/components/library/AlbumBase.vue:43 +#: front/src/components/library/ArtistBase.vue:54 +#: front/src/components/library/TrackBase.vue:59 msgctxt "*/*/Button.Label/Noun" msgid "More…" msgstr "" @@ -2722,7 +2932,7 @@ msgctxt "*/*/*/Noun" msgid "Music" msgstr "Musikk" -#: front/src/components/audio/Player.vue:631 +#: front/src/components/audio/Player.vue:657 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Mute" msgstr "Forstum" @@ -2771,8 +2981,8 @@ msgctxt "Content/Library/Title" msgid "My libraries" msgstr "Mine bibliotek" -#: front/src/components/audio/track/Row.vue:40 -#: src/components/library/EditCard.vue:60 +#: front/src/components/About.vue:105 src/components/audio/track/Row.vue:40 +#: front/src/components/library/EditCard.vue:60 #: front/src/components/library/EditForm.vue:70 #: front/src/components/library/TrackDetail.vue:34 #: front/src/components/library/TrackDetail.vue:43 @@ -2782,54 +2992,56 @@ msgstr "Mine bibliotek" #: front/src/components/manage/library/TracksTable.vue:76 #: front/src/components/manage/library/UploadsTable.vue:121 #: front/src/components/manage/library/UploadsTable.vue:128 -#: front/src/components/manage/users/UsersTable.vue:61 +#: front/src/components/manage/moderation/ReportCard.vue:78 +#: front/src/components/manage/moderation/ReportCard.vue:87 +#: front/src/components/manage/moderation/ReportCard.vue:193 +#: front/src/components/manage/users/UsersTable.vue:62 #: front/src/views/admin/library/UploadDetail.vue:179 #: front/src/views/admin/library/UploadDetail.vue:214 #: front/src/views/admin/library/UploadDetail.vue:233 #: front/src/views/admin/library/UploadDetail.vue:244 #: front/src/views/admin/library/UploadDetail.vue:257 -#: front/src/views/admin/moderation/AccountsDetail.vue:192 -#: front/src/views/admin/moderation/DomainsDetail.vue:82 +#: front/src/views/admin/moderation/AccountsDetail.vue:193 +#: front/src/views/admin/moderation/DomainsDetail.vue:119 #: front/src/views/content/libraries/FilesTable.vue:95 #: front/src/views/content/libraries/FilesTable.vue:101 msgctxt "*/*/*" msgid "N/A" msgstr "I/T" +#: front/src/components/auth/ApplicationForm.vue:9 +#: front/src/components/auth/Settings.vue:133 +#: front/src/components/manage/library/ArtistsTable.vue:39 #: front/src/components/manage/library/LibrariesTable.vue:48 +#: front/src/components/manage/library/TagsTable.vue:41 #: front/src/components/manage/library/UploadsTable.vue:59 -msgctxt "*/*/*" -msgid "Name" -msgstr "Navn" - -#: front/src/components/auth/ApplicationForm.vue:9 -msgctxt "Content/Applications/Input.Label/Noun" -msgid "Name" -msgstr "Navn" - -#: front/src/components/auth/Settings.vue:133 -#: front/src/components/manage/library/ArtistsTable.vue:39 #: front/src/components/manage/moderation/AccountsTable.vue:39 -#: front/src/components/manage/moderation/DomainsTable.vue:38 -#: front/src/components/mixins/Translations.vue:53 +#: front/src/components/manage/moderation/DomainsTable.vue:46 +#: front/src/components/mixins/Translations.vue:63 #: front/src/components/playlists/PlaylistModal.vue:45 -#: front/src/views/admin/library/ArtistDetail.vue:98 +#: front/src/views/admin/library/ArtistDetail.vue:103 #: front/src/views/admin/library/LibraryDetail.vue:85 +#: front/src/views/admin/library/TagDetail.vue:68 #: front/src/views/admin/library/UploadDetail.vue:92 -#: front/src/views/admin/moderation/DomainsDetail.vue:97 -#: front/src/views/content/libraries/Form.vue:10 src/edits.js:10 -#: front/src/components/mixins/Translations.vue:54 +#: front/src/views/admin/moderation/DomainsDetail.vue:134 +#: front/src/views/content/libraries/Form.vue:10 src/edits.js:17 +#: front/src/components/mixins/Translations.vue:64 msgctxt "*/*/*/Noun" msgid "Name" msgstr "Navn" +#: front/src/views/Notifications.vue:24 src/views/Notifications.vue:58 +msgctxt "*/*/*" +msgid "Never" +msgstr "" + #: front/src/components/auth/Settings.vue:88 #: front/src/views/auth/PasswordResetConfirm.vue:14 msgctxt "Content/Settings/Input.Label" msgid "New password" msgstr "Nytt passord" -#: front/src/components/Sidebar.vue:173 +#: front/src/components/Sidebar.vue:177 msgctxt "Sidebar/Player/Paragraph" msgid "New tracks will be appended here automatically." msgstr "Nye spor vil bli lagt til her automatisk." @@ -2839,21 +3051,18 @@ msgctxt "Content/Library/Card.Table.Header/Short" msgid "New value" msgstr "" -#: front/src/components/audio/Player.vue:629 +#: front/src/components/audio/Player.vue:655 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Next track" msgstr "Neste spor" -#: front/src/components/Sidebar.vue:130 +#: front/src/components/Sidebar.vue:134 +#: front/src/components/manage/moderation/DomainsTable.vue:13 +#: front/src/views/admin/moderation/DomainsDetail.vue:110 msgctxt "*/*/*" msgid "No" msgstr "Nei" -#: front/src/components/Home.vue:95 -msgctxt "Content/Home/List item" -msgid "No add-ons, no plugins : you only need a web library" -msgstr "Ingen tillegg, ingen programtillegg: Du trenger kun et nettbibliotek." - #: front/src/components/audio/Search.vue:25 #, fuzzy msgctxt "Content/Search/Paragraph" @@ -2872,6 +3081,11 @@ msgctxt "Content/Track/Table.Paragraph" msgid "No copyright information available for this track" msgstr "Ingen sangtekster tilgjengelig for dette sporet." +#: front/src/components/About.vue:25 src/components/Home.vue:25 +msgctxt "Content/Home/Paragraph" +msgid "No description available." +msgstr "" + #: front/src/components/library/TrackDetail.vue:25 #, fuzzy msgctxt "Content/Track/Table.Paragraph" @@ -2883,7 +3097,7 @@ msgctxt "Content/Federation/Paragraph" msgid "No matching library." msgstr "Inget samsvarende bibliotek." -#: front/src/views/Notifications.vue:28 +#: front/src/views/Notifications.vue:93 #, fuzzy msgctxt "Content/Notifications/Paragraph" msgid "No notification to show." @@ -2894,6 +3108,16 @@ msgctxt "Content/*/Paragraph" msgid "No results were found." msgstr "" +#: front/src/components/About.vue:32 +msgctxt "Content/Home/Paragraph" +msgid "No rules available." +msgstr "" + +#: front/src/components/About.vue:39 +msgctxt "Content/Home/Paragraph" +msgid "No terms available." +msgstr "" + #: front/src/components/mixins/Translations.vue:10 #: front/src/components/mixins/Translations.vue:11 msgctxt "Content/Settings/Dropdown" @@ -2910,18 +3134,22 @@ msgctxt "Content/Admin/Table" msgid "Not used" msgstr "Ikke brukt" -#: front/src/components/mixins/Translations.vue:100 -#: front/src/components/mixins/Translations.vue:101 -msgctxt "Content/OAuth Scopes/Label" -msgid "Notifications" -msgstr "Merknader" - -#: front/src/components/Sidebar.vue:46 src/views/Notifications.vue:76 +#: front/src/components/Sidebar.vue:46 +#: src/components/mixins/Translations.vue:112 +#: front/src/views/Notifications.vue:151 +#: src/components/mixins/Translations.vue:113 msgctxt "*/Notifications/*" msgid "Notifications" msgstr "Merknader" -#: front/src/components/Footer.vue:47 +#: front/src/components/mixins/Translations.vue:47 +#: front/src/components/mixins/Translations.vue:48 +#, fuzzy +msgctxt "Content/Moderation/Dropdown" +msgid "Offensive content" +msgstr "Legg til innhold" + +#: front/src/components/Footer.vue:55 msgctxt "Footer/*/List item.Link" msgid "Official website" msgstr "Offisiell nettside" @@ -2936,6 +3164,12 @@ msgctxt "Content/Library/Card.Table.Header/Short" msgid "Old value" msgstr "" +#: front/src/components/About.vue:90 +#, fuzzy +msgctxt "*/*/*/State of registrations" +msgid "Open" +msgstr "Ã…pen" + #: front/src/components/manage/users/InvitationsTable.vue:20 msgctxt "Content/Admin/Dropdown/Adjective" msgid "Open" @@ -2943,27 +3177,29 @@ msgstr "Ã…pen" #: front/src/components/library/ImportStatusModal.vue:56 msgctxt "Popup/Import/Table.Label/Value" -msgid "" -"Open a support thread (include the debug information below in your message)" +msgid "Open a support thread (include the debug information below in your message)" msgstr "" -#: front/src/components/library/AlbumBase.vue:73 -#: front/src/components/library/ArtistBase.vue:84 -#: front/src/components/library/TrackBase.vue:92 +#: front/src/components/library/AlbumBase.vue:87 +#: front/src/components/library/ArtistBase.vue:99 +#: front/src/components/library/TagDetail.vue:11 +#: front/src/components/library/TrackBase.vue:103 +#: front/src/components/manage/moderation/ReportCard.vue:128 msgctxt "Content/Moderation/Link" msgid "Open in moderation interface" msgstr "" -#: front/src/views/admin/library/AlbumDetail.vue:31 -#: front/src/views/admin/library/ArtistDetail.vue:30 -#: front/src/views/admin/library/TrackDetail.vue:30 +#: front/src/views/admin/library/AlbumDetail.vue:37 +#: front/src/views/admin/library/ArtistDetail.vue:35 +#: front/src/views/admin/library/TagDetail.vue:21 +#: front/src/views/admin/library/TrackDetail.vue:36 msgctxt "Content/Moderation/Link/Verb" msgid "Open local profile" msgstr "" -#: front/src/views/admin/library/AlbumDetail.vue:46 -#: front/src/views/admin/library/ArtistDetail.vue:45 -#: front/src/views/admin/library/TrackDetail.vue:45 +#: front/src/views/admin/library/AlbumDetail.vue:52 +#: front/src/views/admin/library/ArtistDetail.vue:50 +#: front/src/views/admin/library/TrackDetail.vue:51 #, fuzzy msgctxt "Content/Moderation/Link/Verb" msgid "Open on MusicBrainz" @@ -2974,10 +3210,10 @@ msgctxt "Content/Moderation/Link/Verb" msgid "Open profile" msgstr "" -#: front/src/views/admin/library/AlbumDetail.vue:54 -#: front/src/views/admin/library/ArtistDetail.vue:53 +#: front/src/views/admin/library/AlbumDetail.vue:60 +#: front/src/views/admin/library/ArtistDetail.vue:58 #: front/src/views/admin/library/LibraryDetail.vue:49 -#: front/src/views/admin/library/TrackDetail.vue:53 +#: front/src/views/admin/library/TrackDetail.vue:59 #: front/src/views/admin/library/UploadDetail.vue:50 #: front/src/views/admin/moderation/AccountsDetail.vue:52 msgctxt "Content/Moderation/Link/Verb" @@ -3000,6 +3236,7 @@ msgstr "Legg til filter for Ã¥ tilpasse din radiostasjon" #: src/components/library/Radios.vue:41 #: front/src/components/manage/library/EditsCardList.vue:37 #: front/src/components/manage/users/UsersTable.vue:17 +#: front/src/views/admin/moderation/ReportsList.vue:42 #: front/src/views/playlists/List.vue:25 #, fuzzy msgctxt "Content/Search/Dropdown.Label/Noun" @@ -3008,40 +3245,51 @@ msgstr "Rekkefølge" #: front/src/components/favorites/List.vue:24 #: src/components/library/Albums.vue:15 -#: front/src/components/library/Artists.vue:15 +#: front/src/components/library/Artists.vue:19 #: src/components/library/Radios.vue:33 #: front/src/components/manage/library/AlbumsTable.vue:11 #: front/src/components/manage/library/ArtistsTable.vue:11 #: front/src/components/manage/library/EditsCardList.vue:29 #: front/src/components/manage/library/LibrariesTable.vue:20 +#: front/src/components/manage/library/TagsTable.vue:11 #: front/src/components/manage/library/TracksTable.vue:11 #: front/src/components/manage/library/UploadsTable.vue:30 #: front/src/components/manage/moderation/AccountsTable.vue:11 -#: front/src/components/manage/moderation/DomainsTable.vue:9 +#: front/src/components/manage/moderation/DomainsTable.vue:17 #: front/src/components/manage/users/InvitationsTable.vue:9 #: front/src/components/manage/users/UsersTable.vue:9 +#: front/src/views/admin/moderation/ReportsList.vue:34 #: front/src/views/content/libraries/FilesTable.vue:21 #: front/src/views/playlists/List.vue:17 msgctxt "Content/Search/Dropdown.Label/Noun" msgid "Ordering" msgstr "Rekkefølge" -#: front/src/components/library/Albums.vue:23 -#: src/components/library/Artists.vue:23 +#: front/src/components/library/Albums.vue:27 +#: src/components/library/Artists.vue:27 #: front/src/components/manage/library/AlbumsTable.vue:19 #: front/src/components/manage/library/ArtistsTable.vue:19 #: front/src/components/manage/library/LibrariesTable.vue:28 +#: front/src/components/manage/library/TagsTable.vue:19 #: front/src/components/manage/library/TracksTable.vue:19 #: front/src/components/manage/library/UploadsTable.vue:38 #: front/src/components/manage/moderation/AccountsTable.vue:19 -#: front/src/components/manage/moderation/DomainsTable.vue:17 +#: front/src/components/manage/moderation/DomainsTable.vue:25 #: front/src/views/content/libraries/FilesTable.vue:29 msgctxt "Content/Search/Dropdown.Label/Noun" msgid "Ordering direction" msgstr "Rekkefølge" +#: front/src/components/mixins/Translations.vue:48 +#: front/src/components/mixins/Translations.vue:49 +msgctxt "Content/Moderation/Dropdown" +msgid "Other" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:143 #: front/src/components/manage/users/InvitationsTable.vue:38 -msgctxt "Content/Admin/Table.Label" +#, fuzzy +msgctxt "*/*/*" msgid "Owner" msgstr "Eier" @@ -3061,12 +3309,15 @@ msgctxt "Content/*/Hidden text/Noun" msgid "Pagination" msgstr "" -#: front/src/components/auth/Login.vue:33 src/components/auth/Signup.vue:40 -msgctxt "Content/*/Input.Label" +#: front/src/components/auth/LoginForm.vue:32 +#: src/components/auth/Settings.vue:291 +#: front/src/components/auth/SignupForm.vue:36 +#, fuzzy +msgctxt "*/*/*" msgid "Password" msgstr "Passord" -#: front/src/components/auth/SubsonicTokenForm.vue:94 +#: front/src/components/auth/SubsonicTokenForm.vue:100 msgctxt "Content/Settings/Message" msgid "Password updated" msgstr "Passord oppdatert" @@ -3076,12 +3327,12 @@ msgctxt "Content/Signup/Card.Title" msgid "Password updated successfully" msgstr "Passord oppdatert" -#: front/src/components/audio/Player.vue:628 +#: front/src/components/audio/Player.vue:654 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Pause track" msgstr "Sett spor pÃ¥ pause" -#: front/src/components/ShortcutsModal.vue:59 +#: front/src/components/ShortcutsModal.vue:96 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Pause/play the current track" msgstr "" @@ -3110,7 +3361,7 @@ msgctxt "Content/Library/Label" msgid "Pending files" msgstr "Ventende filer" -#: front/src/components/Sidebar.vue:225 +#: front/src/components/Sidebar.vue:232 msgctxt "Sidebar/Notifications/Hidden text" msgid "Pending follow requests" msgstr "Ventende følgingsforespørsler" @@ -3122,89 +3373,80 @@ msgctxt "Content/Admin/*/Noun" msgid "Pending review" msgstr "Ventende filer" -#: front/src/components/Sidebar.vue:226 +#: front/src/components/Sidebar.vue:233 #, fuzzy msgctxt "Sidebar/Moderation/Hidden text" msgid "Pending review edits" msgstr "Ventende forespørsler" +#: front/src/components/auth/Settings.vue:176 #: front/src/components/manage/users/UsersTable.vue:42 #: front/src/views/admin/moderation/AccountsDetail.vue:166 -msgctxt "Content/Admin/Table.Label/Noun" -msgid "Permissions" -msgstr "Tilganger" - -#: front/src/components/auth/Settings.vue:176 msgctxt "Content/*/*/Noun" msgid "Permissions" msgstr "Tilganger" #: front/src/components/audio/PlayButton.vue:9 -#: front/src/components/library/TrackBase.vue:26 +#: front/src/components/library/TrackBase.vue:24 msgctxt "*/Queue/Button.Label/Short, Verb" msgid "Play" msgstr "Spill av" #: front/src/components/audio/album/Card.vue:48 -#: front/src/components/audio/artist/Card.vue:44 -#: front/src/components/library/AlbumBase.vue:20 +#: front/src/components/library/AlbumBase.vue:21 #: front/src/components/library/AlbumDetail.vue:11 #: src/views/playlists/Detail.vue:24 msgctxt "Content/Queue/Button.Label/Short, Verb" msgid "Play all" msgstr "Spill av alle" -#: front/src/components/library/ArtistBase.vue:31 +#: front/src/components/library/ArtistBase.vue:32 msgctxt "Content/Artist/Button.Label/Verb" msgid "Play all albums" msgstr "Spill av alle album" -#: front/src/components/audio/PlayButton.vue:76 +#: front/src/components/audio/PlayButton.vue:92 msgctxt "*/Queue/Dropdown/Button/Title" msgid "Play next" msgstr "Spill neste" -#: front/src/components/ShortcutsModal.vue:67 +#: front/src/components/ShortcutsModal.vue:120 #, fuzzy msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Play next track" msgstr "Spill spor" -#: front/src/components/audio/PlayButton.vue:74 +#: front/src/components/audio/PlayButton.vue:90 msgctxt "*/Queue/Dropdown/Button/Title" msgid "Play now" msgstr "Spill nÃ¥" -#: front/src/components/ShortcutsModal.vue:63 +#: front/src/components/ShortcutsModal.vue:116 #, fuzzy msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Play previous track" msgstr "Forrige spor" -#: front/src/components/audio/PlayButton.vue:77 +#: front/src/components/audio/PlayButton.vue:93 msgctxt "*/Queue/Dropdown/Button/Title" msgid "Play similar songs" msgstr "" -#: front/src/components/Sidebar.vue:224 +#: front/src/components/Sidebar.vue:231 #, fuzzy msgctxt "Sidebar/Player/Hidden text" msgid "Play this track" msgstr "Spill spor" -#: front/src/components/audio/Player.vue:627 +#: front/src/components/audio/Player.vue:653 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Play track" msgstr "Spill spor" -#: front/src/components/audio/PlayButton.vue:82 +#: front/src/components/mixins/Report.vue:66 src/views/playlists/Detail.vue:121 +#: front/src/components/mixins/Report.vue:67 #, fuzzy -msgctxt "*/Queue/Button/Title" -msgid "Play..." -msgstr "Spill av" - -#: front/src/views/playlists/Detail.vue:91 -msgctxt "Head/Playlist/Title" +msgctxt "*/*/*" msgid "Playlist" msgstr "Spilleliste" @@ -3241,33 +3483,30 @@ msgctxt "Content/Playlist/Dropdown.Label" msgid "Playlist visibility" msgstr "Spillelistesynlighet" -#: front/src/components/mixins/Translations.vue:88 -#: front/src/components/mixins/Translations.vue:89 -msgctxt "Content/OAuth Scopes/Label" -msgid "Playlists" -msgstr "Spillelister" - #: front/src/components/Sidebar.vue:71 src/components/library/Home.vue:16 -#: front/src/components/library/Library.vue:16 src/views/admin/Settings.vue:83 -#: front/src/views/admin/library/AlbumDetail.vue:173 -#: front/src/views/admin/library/ArtistDetail.vue:162 -#: front/src/views/admin/library/TrackDetail.vue:225 +#: front/src/components/library/Library.vue:16 +#: front/src/components/mixins/Translations.vue:100 +#: src/views/admin/Settings.vue:83 +#: front/src/views/admin/library/AlbumDetail.vue:179 +#: front/src/views/admin/library/ArtistDetail.vue:167 +#: front/src/views/admin/library/TrackDetail.vue:231 #: src/views/playlists/List.vue:106 +#: front/src/components/mixins/Translations.vue:101 msgctxt "*/*/*" msgid "Playlists" msgstr "Spillelister" -#: front/src/components/Home.vue:56 -msgctxt "Content/Home/List item" -msgid "Playlists? We got them" -msgstr "Spillelister? Vi har dem" +#: front/src/components/audio/EmbedWizard.vue:9 +msgctxt "Content/Embed/Message" +msgid "Please contact your admins and ask them to update the corresponding setting." +msgstr "" #: front/src/components/auth/Settings.vue:79 msgctxt "Content/Settings/Error message.List item/Call to action" msgid "Please double-check your password is correct" msgstr "Dobbeltsjekk at passordet ditt stemmer" -#: front/src/components/auth/Login.vue:9 +#: front/src/components/auth/LoginForm.vue:5 msgctxt "Content/Login/Error message.List item/Call to action" msgid "Please double-check your username/password couple is correct" msgstr "Dobbeltsjekk at brukernavnet/passordet ditt stemmer" @@ -3277,25 +3516,28 @@ msgctxt "Content/Settings/Paragraph" msgid "PNG, GIF or JPG. At most 2MB. Will be downscaled to 400x400px." msgstr "PNG, GIF eller JPG. Høyst 2MB. Vil bli nedskalert til 400x400px." -#: front/src/views/admin/library/TrackDetail.vue:137 +#: front/src/components/About.vue:72 +msgctxt "Content/About/Header/Name" +msgid "Pod configuration" +msgstr "" + +#: front/src/views/admin/library/TrackDetail.vue:143 src/edits.js:70 #, fuzzy -msgctxt "*/*/*/Noun" +msgctxt "*/*/*/Short, Noun" msgid "Position" msgstr "Beskrivelse" #: front/src/components/manage/moderation/InstancePolicyForm.vue:118 msgctxt "Content/Moderation/Help text" -msgid "" -"Prevent account or domain from triggering notifications, except from " -"followers." +msgid "Prevent account or domain from triggering notifications, except from followers." msgstr "" -#: front/src/components/audio/EmbedWizard.vue:33 +#: front/src/components/audio/EmbedWizard.vue:43 msgctxt "Popup/Embed/Title/Noun" msgid "Preview" msgstr "" -#: front/src/components/audio/Player.vue:626 +#: front/src/components/audio/Player.vue:652 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Previous track" msgstr "Forrige spor" @@ -3306,7 +3548,7 @@ msgctxt "Content/Settings/Dropdown/Short" msgid "Private" msgstr "" -#: front/src/views/content/remote/Card.vue:43 +#: front/src/views/content/remote/Card.vue:56 #, fuzzy msgctxt "Content/Library/Card.List item" msgid "Problem during scanning" @@ -3328,15 +3570,21 @@ msgctxt "Content/Library/Tab.Title/Short" msgid "Processing" msgstr "Behandler" -#: front/src/components/mixins/Translations.vue:68 -#: front/src/components/mixins/Translations.vue:69 +#: front/src/components/mixins/Translations.vue:80 +#: front/src/components/mixins/Translations.vue:81 #, fuzzy msgctxt "Content/OAuth Scopes/Label" msgid "Profile" msgstr "Feilaktige filer" +#: front/src/components/auth/SignupForm.vue:5 +#, fuzzy +msgctxt "Content/Signup/Form/Paragraph" +msgid "Public registrations are not possible on this instance. You will need an invitation code to sign up." +msgstr "Registreringer er lukket pÃ¥ denne instansen, du trenger en invitasjonskode for Ã¥ registrere deg." + #: front/src/components/manage/moderation/AccountsTable.vue:188 -#: front/src/components/manage/moderation/DomainsTable.vue:168 +#: front/src/components/manage/moderation/DomainsTable.vue:186 #: front/src/views/content/libraries/Quota.vue:36 #: front/src/views/content/libraries/Quota.vue:39 #: front/src/views/content/libraries/Quota.vue:62 @@ -3367,7 +3615,7 @@ msgctxt "Sidebar/Queue/Tab.Title/Noun" msgid "Queue" msgstr "Kø" -#: front/src/components/audio/Player.vue:322 +#: front/src/components/audio/Player.vue:329 msgctxt "Content/Queue/Message" msgid "Queue shuffled!" msgstr "Spillekø omstokket." @@ -3399,16 +3647,12 @@ msgstr "Radiostasjon oppdatert" #: front/src/components/library/Library.vue:13 #: src/components/library/Radios.vue:142 +#: front/src/components/mixins/Translations.vue:104 +#: front/src/components/mixins/Translations.vue:105 msgctxt "*/*/*" msgid "Radios" msgstr "Radiostasjoner" -#: front/src/components/mixins/Translations.vue:92 -#: front/src/components/mixins/Translations.vue:93 -msgctxt "Content/OAuth Scopes/Label" -msgid "Radios" -msgstr "Radiostasjoner" - #: front/src/components/auth/ApplicationForm.vue:151 msgctxt "Content/OAuth Scopes/Label/Verb" msgid "Read" @@ -3435,15 +3679,15 @@ msgctxt "Content/Moderation/*/Noun" msgid "Reason" msgstr "" -#: front/src/views/admin/moderation/AccountsDetail.vue:251 -#: front/src/views/admin/moderation/DomainsDetail.vue:179 +#: front/src/views/admin/moderation/AccountsDetail.vue:252 +#: front/src/views/admin/moderation/DomainsDetail.vue:216 msgctxt "Content/Moderation/Table.Label/Noun" msgid "Received library follows" msgstr "" -#: front/src/components/manage/moderation/DomainsTable.vue:40 -#: front/src/components/mixins/Translations.vue:62 -#: front/src/components/mixins/Translations.vue:63 +#: front/src/components/manage/moderation/DomainsTable.vue:48 +#: front/src/components/mixins/Translations.vue:74 +#: front/src/components/mixins/Translations.vue:75 msgctxt "Content/Moderation/*/Noun" msgid "Received messages" msgstr "" @@ -3464,6 +3708,12 @@ msgctxt "Content/Home/Title" msgid "Recently added" msgstr "Nylig lagt til" +#: front/src/components/Home.vue:167 +#, fuzzy +msgctxt "Content/Home/Title" +msgid "Recently added albums" +msgstr "Nylig lagt til" + #: front/src/components/library/Home.vue:11 msgctxt "Content/Home/Title" msgid "Recently favorited" @@ -3493,14 +3743,14 @@ msgctxt "Popup/*/Message.Title" msgid "Refresh error" msgstr "Gjenoppfrisk" -#: front/src/views/admin/library/AlbumDetail.vue:50 -#: front/src/views/admin/library/ArtistDetail.vue:49 -#: front/src/views/admin/library/TrackDetail.vue:49 +#: front/src/views/admin/library/AlbumDetail.vue:56 +#: front/src/views/admin/library/ArtistDetail.vue:54 +#: front/src/views/admin/library/TrackDetail.vue:55 msgctxt "Content/Moderation/Button/Verb" msgid "Refresh from remote server" msgstr "" -#: front/src/views/admin/moderation/DomainsDetail.vue:127 +#: front/src/views/admin/moderation/DomainsDetail.vue:164 msgctxt "Content/Moderation/Button.Label/Verb" msgid "Refresh node info" msgstr "" @@ -3513,9 +3763,7 @@ msgstr "Synkende" #: front/src/components/federation/FetchButton.vue:80 msgctxt "Popup/*/Message.Content" -msgid "" -"Refresh request wasn't proceed in time by our server. It will be processed " -"later." +msgid "Refresh request wasn't proceed in time by our server. It will be processed later." msgstr "" #: front/src/components/federation/FetchButton.vue:16 @@ -3539,16 +3787,13 @@ msgctxt "Popup/*/Title" msgid "Refreshing object from remote…" msgstr "" -#: front/src/components/auth/Signup.vue:9 -msgctxt "Content/Signup/Form/Paragraph" -msgid "" -"Registration are closed on this instance, you will need an invitation code " -"to signup." -msgstr "" -"Registreringer er lukket pÃ¥ denne instansen, du trenger en invitasjonskode " -"for Ã¥ registrere deg." +#: front/src/components/About.vue:86 +#, fuzzy +msgctxt "*/*/*" +msgid "Registrations" +msgstr "Administrasjon" -#: front/src/components/manage/users/UsersTable.vue:71 +#: front/src/components/manage/users/UsersTable.vue:72 #, fuzzy msgctxt "Content/Admin/Table, User role" msgid "Regular user" @@ -3575,8 +3820,8 @@ msgid "Rejected" msgstr "AvslÃ¥tt" #: front/src/components/manage/library/AlbumsTable.vue:43 -#: front/src/components/mixins/Translations.vue:44 src/edits.js:28 -#: front/src/components/mixins/Translations.vue:45 +#: front/src/components/mixins/Translations.vue:54 src/edits.js:43 +#: front/src/components/mixins/Translations.vue:55 #, fuzzy msgctxt "Content/*/*/Noun" msgid "Release date" @@ -3587,6 +3832,11 @@ msgctxt "Content/Library/Paragraph" msgid "Remaining storage space" msgstr "" +#: front/src/views/Notifications.vue:18 src/views/Notifications.vue:52 +msgctxt "Content/Notifications/Label" +msgid "Remind me in:" +msgstr "" + #: front/src/views/content/remote/Home.vue:6 msgctxt "Content/Library/Title/Noun" msgid "Remote libraries" @@ -3594,12 +3844,8 @@ msgstr "Bibliotek annensteds hen" #: front/src/views/content/remote/Home.vue:7 msgctxt "Content/Library/Paragraph" -msgid "" -"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." -msgstr "" -"Bibliotek annensteds hen eies av andre brukere pÃ¥ nettverket. Du kan fÃ¥ " -"tilgang til dem sÃ¥ lenge de er offentlige eller du innvilges tilgang." +msgid "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." +msgstr "Bibliotek annensteds hen eies av andre brukere pÃ¥ nettverket. Du kan fÃ¥ tilgang til dem sÃ¥ lenge de er offentlige eller du innvilges tilgang." #: front/src/components/library/radios/Filter.vue:59 msgctxt "Content/Radio/Button.Label/Verb" @@ -3617,6 +3863,13 @@ msgctxt "Content/Moderation/Button.Label" msgid "Remove filter" msgstr "Fjern avatar" +#: front/src/components/manage/moderation/DomainsTable.vue:198 +#: front/src/views/admin/moderation/DomainsDetail.vue:39 +#, fuzzy +msgctxt "Content/Moderation/Action/Verb" +msgid "Remove from allow-list" +msgstr "Fjern fra favoritter" + #: front/src/components/favorites/TrackFavoriteIcon.vue:26 msgctxt "Content/Track/Icon.Tooltip/Verb" msgid "Remove from favorites" @@ -3624,43 +3877,106 @@ msgstr "Fjern fra favoritter" #: front/src/views/content/libraries/Quota.vue:38 msgctxt "Popup/Library/Paragraph" -msgid "" -"Removes uploaded but yet to be processed tracks completely, adding the " -"corresponding data to your quota." +msgid "Removes uploaded but yet to be processed tracks completely, adding the corresponding data to your quota." msgstr "" #: front/src/views/content/libraries/Quota.vue:64 #, fuzzy msgctxt "Popup/Library/Paragraph" -msgid "" -"Removes uploaded tracks skipped during the import processes completely, " -"adding the corresponding data to your quota." -msgstr "" -"Dette vil fjerne spor som har blitt opplastet men ignorert under " -"importprosessen permanent, og du vil fÃ¥ tilbake tilsvarende kvote." +msgid "Removes uploaded tracks skipped during the import processes completely, adding the corresponding data to your quota." +msgstr "Dette vil fjerne spor som har blitt opplastet men ignorert under importprosessen permanent, og du vil fÃ¥ tilbake tilsvarende kvote." #: front/src/views/content/libraries/Quota.vue:90 #, fuzzy msgctxt "Popup/Library/Paragraph" -msgid "" -"Removes uploaded tracks that could not be processed by the server " -"completely, adding the corresponding data to your quota." +msgid "Removes uploaded tracks that could not be processed by the server completely, adding the corresponding data to your quota." +msgstr "Dette vil fjerne spor som har blitt opplastet men ikke har blitt behandlet av tjeneren permanent, og du vil fÃ¥ tilbake tilsvarende kvote." + +#: front/src/components/audio/PlayButton.vue:94 +#, fuzzy +msgctxt "*/Queue/Dropdown/Button/Title" +msgid "Replace current queue" +msgstr "Legg til i kø" + +#: front/src/components/mixins/Report.vue:6 src/components/mixins/Report.vue:7 +msgctxt "*/Moderation/*/Verb" +msgid "Report @%{ username }…" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:5 +msgctxt "Content/Moderation/Card/Short" +msgid "Report %{ id }" +msgstr "" + +#: front/src/components/moderation/ReportModal.vue:139 +msgctxt "*/Moderation/Message" +msgid "Report successfully submitted, thank you" +msgstr "" + +#: front/src/components/mixins/Report.vue:36 +#: src/components/mixins/Report.vue:37 +#, fuzzy +msgctxt "*/Moderation/*/Verb" +msgid "Report this album…" +msgstr "Slett dette biblioteket?" + +#: front/src/components/mixins/Report.vue:50 +#: src/components/mixins/Report.vue:51 +#, fuzzy +msgctxt "*/Moderation/*/Verb" +msgid "Report this artist…" +msgstr "Legg til i denne spillelisten" + +#: front/src/components/mixins/Report.vue:72 +#: src/components/mixins/Report.vue:73 +#, fuzzy +msgctxt "*/Moderation/*/Verb" +msgid "Report this library…" +msgstr "Slett dette biblioteket?" + +#: front/src/components/mixins/Report.vue:61 +#: src/components/mixins/Report.vue:62 +#, fuzzy +msgctxt "*/Moderation/*/Verb" +msgid "Report this playlist…" +msgstr "Legg til i denne spillelisten" + +#: front/src/components/mixins/Report.vue:23 +#: src/components/mixins/Report.vue:24 +#, fuzzy +msgctxt "*/Moderation/*/Verb" +msgid "Report this track…" +msgstr "Rediger instans-info" + +#: front/src/components/audio/PlayButton.vue:95 +msgctxt "*/Moderation/*/Button/Label,Verb" +msgid "Report…" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:117 +msgctxt "Content/*/*/Short" +msgid "Reported object" msgstr "" -"Dette vil fjerne spor som har blitt opplastet men ikke har blitt behandlet " -"av tjeneren permanent, og du vil fÃ¥ tilbake tilsvarende kvote." -#: front/src/components/auth/SubsonicTokenForm.vue:33 -#: front/src/components/auth/SubsonicTokenForm.vue:36 +#: front/src/views/admin/moderation/Base.vue:5 +#: front/src/views/admin/moderation/ReportsList.vue:3 +#: front/src/views/admin/moderation/ReportsList.vue:208 +msgctxt "*/Moderation/*/Noun" +msgid "Reports" +msgstr "" + +#: front/src/components/auth/SubsonicTokenForm.vue:38 +#: front/src/components/auth/SubsonicTokenForm.vue:41 msgctxt "*/Settings/Button.Label/Verb" msgid "Request a new password" msgstr "Forespør nytt passord" -#: front/src/components/auth/SubsonicTokenForm.vue:34 +#: front/src/components/auth/SubsonicTokenForm.vue:39 msgctxt "Popup/Settings/Title" msgid "Request a new Subsonic API password?" msgstr "Forespør et nytt Subsonic API-passord?" -#: front/src/components/auth/SubsonicTokenForm.vue:42 +#: front/src/components/auth/SubsonicTokenForm.vue:47 msgctxt "Content/Settings/Button.Label/Verb" msgid "Request a password" msgstr "Forespør et passord" @@ -3670,36 +3986,53 @@ msgctxt "Popup/*/Loading.Title" msgid "Requesting a fetch…" msgstr "" -#: front/src/components/library/EditForm.vue:82 +#: front/src/components/library/EditForm.vue:94 msgctxt "Content/Library/Button.Label" -msgid "Reset to initial value: %{ value }" +msgid "Reset to initial value" msgstr "" -#: front/src/components/auth/Login.vue:35 src/views/auth/PasswordReset.vue:4 -#: front/src/views/auth/PasswordReset.vue:53 +#: front/src/components/auth/LoginForm.vue:34 +#: src/views/auth/PasswordReset.vue:4 front/src/views/auth/PasswordReset.vue:53 msgctxt "*/Login/*/Verb" msgid "Reset your password" msgstr "Tilbakestill passordet ditt" +#: front/src/components/manage/moderation/ReportCard.vue:83 +#, fuzzy +msgctxt "Content/*/*/Noun" +msgid "Resolution date" +msgstr "Opprettelsesdato" + +#: front/src/components/manage/moderation/ReportCard.vue:218 +msgctxt "Content/*/Button.Label/Verb" +msgid "Resolve" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:62 +#: front/src/views/admin/moderation/ReportsList.vue:20 +msgctxt "Content/*/*/Short" +msgid "Resolved" +msgstr "" + #: front/src/views/content/libraries/FilesTable.vue:223 #, fuzzy msgctxt "Content/Library/Dropdown/Verb" msgid "Restart import" msgstr "Opprett import" +#: front/src/components/library/EditForm.vue:31 +msgctxt "Content/Library/Button.Label" +msgid "Restrict to unreviewed edits" +msgstr "" + #: front/src/components/favorites/List.vue:39 -#: src/components/library/Albums.vue:30 -#: front/src/components/library/Artists.vue:30 +#: src/components/library/Albums.vue:34 +#: front/src/components/library/Artists.vue:34 #: src/components/library/Radios.vue:52 front/src/views/playlists/List.vue:32 msgctxt "Content/Search/Dropdown.Label/Noun" msgid "Results per page" msgstr "Resultater per side" -#: front/src/components/library/EditForm.vue:31 -msgctxt "Content/Library/Button.Label" -msgid "Retrict to unreviewed edits" -msgstr "" - #: front/src/views/auth/EmailConfirm.vue:17 #, fuzzy msgctxt "Content/Signup/Link/Verb" @@ -3732,55 +4065,56 @@ msgctxt "Content/Moderation/Card.Title/Noun" msgid "Rule" msgstr "" -#: front/src/components/admin/SettingsGroup.vue:67 +#: front/src/components/About.vue:28 src/components/About.vue:56 +msgctxt "Content/About/Header" +msgid "Rules" +msgstr "" + +#: front/src/components/admin/SettingsGroup.vue:75 #: front/src/components/library/radios/Builder.vue:34 msgctxt "Content/*/Button.Label/Verb" msgid "Save" msgstr "Lagre" -#: front/src/views/content/remote/Card.vue:175 +#: front/src/views/content/remote/Card.vue:203 msgctxt "Content/Library/Message" msgid "Scan launched" msgstr "Skanning igangsatt" -#: front/src/views/content/remote/Card.vue:67 +#: front/src/views/content/remote/Card.vue:80 #, fuzzy msgctxt "Content/Library/Card.Button.Label/Verb" msgid "Scan now" msgstr "Spill nÃ¥" -#: front/src/views/content/remote/Card.vue:35 +#: front/src/views/content/remote/Card.vue:48 msgctxt "Content/Library/Card.List item" msgid "Scan pending" msgstr "Skanning venter" -#: front/src/views/content/remote/Card.vue:176 +#: front/src/views/content/remote/Card.vue:204 msgctxt "Content/Library/Message" msgid "Scan skipped (previous scan is too recent)" msgstr "Skanning hoppet over (forrige skanning er for fersk)" -#: front/src/views/content/remote/Card.vue:47 +#: front/src/views/content/remote/Card.vue:60 #, fuzzy msgctxt "Content/Library/Card.List item" msgid "Scanned" msgstr "Skanning igangsatt" -#: front/src/views/content/remote/Card.vue:51 +#: front/src/views/content/remote/Card.vue:64 msgctxt "Content/Library/Card.List item" msgid "Scanned with errors" msgstr "Skannet med feil" -#: front/src/views/content/remote/Card.vue:39 +#: front/src/views/content/remote/Card.vue:52 #, fuzzy msgctxt "Content/Library/Card.List item" msgid "Scanning… (%{ progress }%)" msgstr "Skanner… (%{ progress }%)" #: front/src/components/auth/ApplicationForm.vue:22 -msgctxt "Content/Applications/Input.Label/Noun" -msgid "Scopes" -msgstr "" - #: front/src/components/auth/Settings.vue:226 msgctxt "Content/*/*/Noun" msgid "Scopes" @@ -3793,12 +4127,14 @@ msgstr "" #: front/src/components/manage/library/ArtistsTable.vue:5 #: front/src/components/manage/library/EditsCardList.vue:6 #: front/src/components/manage/library/LibrariesTable.vue:5 +#: front/src/components/manage/library/TagsTable.vue:5 #: front/src/components/manage/library/TracksTable.vue:5 #: front/src/components/manage/library/UploadsTable.vue:5 #: front/src/components/manage/moderation/AccountsTable.vue:5 #: front/src/components/manage/moderation/DomainsTable.vue:5 #: front/src/components/manage/users/InvitationsTable.vue:5 #: front/src/components/manage/users/UsersTable.vue:5 +#: front/src/views/admin/moderation/ReportsList.vue:8 #: front/src/views/content/libraries/FilesTable.vue:5 #: src/views/playlists/List.vue:13 msgctxt "Content/Search/Input.Label/Noun" @@ -3811,6 +4147,7 @@ msgid "Search a remote library" msgstr "Søk i et bibliotek annensteds hen" #: front/src/components/manage/library/EditsCardList.vue:211 +#: front/src/views/admin/moderation/ReportsList.vue:207 #, fuzzy msgctxt "Content/Search/Input.Placeholder" msgid "Search by account, summary, domain…" @@ -3849,7 +4186,12 @@ msgctxt "Content/Search/Input.Placeholder" msgid "Search by domain, username, bio…" msgstr "Søk etter brukernavn, e-postadresse, kode…" -#: front/src/components/manage/moderation/DomainsTable.vue:151 +#: front/src/components/manage/library/TagsTable.vue:165 +msgctxt "Content/Search/Input.Placeholder" +msgid "Search by name" +msgstr "" + +#: front/src/components/manage/moderation/DomainsTable.vue:168 msgctxt "Content/Search/Input.Placeholder" msgid "Search by name…" msgstr "" @@ -3866,13 +4208,13 @@ msgctxt "Content/Admin/Input.Placeholder/Verb" msgid "Search by username, e-mail address, code…" msgstr "Søk etter brukernavn, e-postadresse, kode…" -#: front/src/components/manage/users/UsersTable.vue:163 +#: front/src/components/manage/users/UsersTable.vue:164 #, fuzzy msgctxt "Content/Search/Input.Placeholder" msgid "Search by username, e-mail address, name…" msgstr "Søk etter brukernavn, e-post, navn…" -#: front/src/components/audio/SearchBar.vue:20 +#: front/src/components/audio/SearchBar.vue:27 #, fuzzy msgctxt "Sidebar/Search/Input.Placeholder" msgid "Search for artists, albums, tracks…" @@ -3883,16 +4225,30 @@ msgctxt "Content/Search/Title" msgid "Search for some music" msgstr "Søk etter noe musikk" -#: front/src/components/library/AlbumBase.vue:57 -#: front/src/components/library/ArtistBase.vue:68 -#: front/src/components/library/TrackBase.vue:76 +#: front/src/components/library/TagsSelector.vue:6 +#, fuzzy +msgctxt "*/Dropdown/Placeholder/Verb" +msgid "Search for tags…" +msgstr "Søk etter artister, album, spor…" + +#: front/src/components/library/AlbumBase.vue:66 +#: front/src/components/library/ArtistBase.vue:77 +#: front/src/components/library/TrackBase.vue:82 +#, fuzzy +msgctxt "Content/*/Button.Label/Verb" +msgid "Search on Discogs" +msgstr "Søk etter noe musikk" + +#: front/src/components/library/AlbumBase.vue:58 +#: front/src/components/library/ArtistBase.vue:69 +#: front/src/components/library/TrackBase.vue:74 msgctxt "Content/*/Button.Label/Verb" msgid "Search on Wikipedia" msgstr "Søk pÃ¥ Wikipedia" #: front/src/components/library/Library.vue:35 -#: src/views/admin/library/Base.vue:32 -#: front/src/views/admin/moderation/Base.vue:22 +#: src/views/admin/library/Base.vue:35 +#: front/src/views/admin/moderation/Base.vue:44 #: src/views/admin/users/Base.vue:21 front/src/views/content/Base.vue:19 msgctxt "Menu/*/Hidden text" msgid "Secondary menu" @@ -3903,6 +4259,26 @@ msgctxt "Content/Admin/Menu.Title" msgid "Sections" msgstr "Seksjoner" +#: front/src/components/ShortcutsModal.vue:108 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek backwards 30s" +msgstr "" + +#: front/src/components/ShortcutsModal.vue:100 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek backwards 5s" +msgstr "" + +#: front/src/components/ShortcutsModal.vue:112 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek forwards 30s" +msgstr "" + +#: front/src/components/ShortcutsModal.vue:104 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek forwards 5s" +msgstr "" + #: front/src/components/library/radios/Builder.vue:46 msgctxt "Content/Radio/Dropdown.Placeholder/Verb" msgid "Select a filter" @@ -3921,9 +4297,14 @@ msgctxt "Content/*/Link/Verb" msgid "Select only current page" msgstr "Velg kun gjeldende side" -#: front/src/components/Sidebar.vue:43 src/components/Sidebar.vue:108 -#: front/src/components/manage/users/UsersTable.vue:181 -#: front/src/views/admin/moderation/AccountsDetail.vue:506 +#: front/src/components/Home.vue:43 +msgctxt "Content/Home/Link" +msgid "Server rules" +msgstr "" + +#: front/src/components/Sidebar.vue:43 src/components/Sidebar.vue:112 +#: front/src/components/manage/users/UsersTable.vue:182 +#: front/src/views/admin/moderation/AccountsDetail.vue:526 msgctxt "*/*/*/Noun" msgid "Settings" msgstr "Innstillinger" @@ -3946,18 +4327,25 @@ msgstr "Del en lenke" #: front/src/views/content/libraries/Detail.vue:15 #, fuzzy msgctxt "Content/Library/Paragraph" -msgid "" -"Share this link with other users so they can request access to your library." -msgstr "" -"Del denne lenken med andre brukere slik at de kan forespørre tilgang til " -"ditt bibliotek." +msgid "Share this link with other users so they can request access to your library." +msgstr "Del denne lenken med andre brukere slik at de kan forespørre tilgang til ditt bibliotek." #: front/src/views/content/libraries/Detail.vue:14 -#: front/src/views/content/remote/Card.vue:77 +#: front/src/views/content/remote/Card.vue:90 msgctxt "Content/Library/Title" msgid "Sharing link" msgstr "Delingslenke" +#: front/src/components/audio/EmbedWizard.vue:5 +msgctxt "Content/Embed/Message" +msgid "Sharing will not work because this pod doesn't allow anonymous users to access content." +msgstr "" + +#: front/src/components/About.vue:156 +msgctxt "*/*/*/Verb" +msgid "Show" +msgstr "" + #: front/src/components/audio/album/Card.vue:38 #, fuzzy msgctxt "Content/Album/Card.Link/Verb" @@ -3966,11 +4354,11 @@ msgid_plural "Show %{ count } more tracks" msgstr[0] "Vis %{ count } spor til" msgstr[1] "Vis %{ count } flere spor" -#: front/src/components/audio/artist/Card.vue:30 +#: front/src/components/tags/List.vue:11 #, fuzzy -msgctxt "Content/Artist/Card.Link" -msgid "Show 1 more album" -msgid_plural "Show %{ count } more albums" +msgctxt "Content/*/Button/Label/Verb" +msgid "Show 1 more tag" +msgid_plural "Show %{ count } more tags" msgstr[0] "Vis ett album til" msgstr[1] "Vis % { count } flere album" @@ -3979,17 +4367,28 @@ msgctxt "Content/Library/Button.Label" msgid "Show all edits" msgstr "" -#: front/src/components/ShortcutsModal.vue:42 +#: front/src/components/ShortcutsModal.vue:60 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Show available keyboard shortcuts" msgstr "" -#: front/src/views/Notifications.vue:7 +#: front/src/components/common/ExpandableDiv.vue:7 +msgctxt "*/*/Button,Label" +msgid "Show less" +msgstr "" + +#: front/src/components/common/ExpandableDiv.vue:8 +#, fuzzy +msgctxt "*/*/Button,Label" +msgid "Show more" +msgstr "Vis ett album til" + +#: front/src/views/Notifications.vue:72 msgctxt "Content/Notifications/Form.Label/Verb" msgid "Show read notifications" msgstr "Vis lesningsmerkander" -#: front/src/components/forms/PasswordInput.vue:26 +#: front/src/components/forms/PasswordInput.vue:42 msgctxt "Content/Settings/Button.Tooltip/Verb" msgid "Show/hide password" msgstr "Vis/skjul passord" @@ -3998,57 +4397,65 @@ msgstr "Vis/skjul passord" #: front/src/components/manage/library/ArtistsTable.vue:84 #: front/src/components/manage/library/EditsCardList.vue:72 #: front/src/components/manage/library/LibrariesTable.vue:110 +#: front/src/components/manage/library/TagsTable.vue:79 #: front/src/components/manage/library/TracksTable.vue:95 #: front/src/components/manage/library/UploadsTable.vue:144 #: front/src/components/manage/moderation/AccountsTable.vue:88 -#: front/src/components/manage/moderation/DomainsTable.vue:74 +#: front/src/components/manage/moderation/DomainsTable.vue:85 #: front/src/components/manage/users/InvitationsTable.vue:76 -#: front/src/components/manage/users/UsersTable.vue:87 +#: front/src/components/manage/users/UsersTable.vue:88 #: front/src/views/content/libraries/FilesTable.vue:117 msgctxt "Content/*/Paragraph" msgid "Showing results %{ start }-%{ end } on %{ total }" msgstr "Viser resultater %{ start }-%{ end } pÃ¥ %{ total }" -#: front/src/components/ShortcutsModal.vue:83 +#: front/src/components/ShortcutsModal.vue:140 #, fuzzy msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Shuffle queue" msgstr "Omstokk spillekøen" -#: front/src/components/audio/Player.vue:641 +#: front/src/components/audio/Player.vue:667 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Shuffle your queue" msgstr "Omstokk spillekøen" -#: front/src/components/auth/Signup.vue:97 +#: front/src/components/Home.vue:103 +#, fuzzy +msgctxt "*/Signup/Title" +msgid "Sign up" +msgstr "Registrering" + +#: front/src/views/auth/Signup.vue:37 msgctxt "*/Signup/Title" msgid "Sign Up" msgstr "Registrering" +#: front/src/components/Home.vue:107 +msgctxt "Content/Home/Paragraph" +msgid "Sign up now to keep a track of your favorites, create playlists, discover new content and much more!" +msgstr "" + #: front/src/components/manage/users/UsersTable.vue:40 msgctxt "Content/Admin/Table.Label/Short, Noun (Value is a date)" msgid "Sign-up" msgstr "Registrering" -#: front/src/components/mixins/Translations.vue:57 -#: front/src/views/admin/moderation/AccountsDetail.vue:197 -#: front/src/components/mixins/Translations.vue:58 +#: front/src/components/mixins/Translations.vue:69 +#: front/src/views/admin/moderation/AccountsDetail.vue:198 +#: front/src/components/mixins/Translations.vue:70 msgctxt "Content/Admin/Table.Label/Noun" msgid "Sign-up date" msgstr "Registreringsdato" -#: front/src/components/manage/library/UploadsTable.vue:65 -#: front/src/views/admin/library/UploadDetail.vue:219 -msgctxt "Content/*/*/Noun" -msgid "Size" -msgstr "Størrelse" - #: front/src/components/library/FileUpload.vue:94 #: front/src/components/library/TrackDetail.vue:39 -#: front/src/components/mixins/Translations.vue:54 +#: front/src/components/manage/library/UploadsTable.vue:65 +#: front/src/components/mixins/Translations.vue:66 +#: front/src/views/admin/library/UploadDetail.vue:219 #: front/src/views/content/libraries/FilesTable.vue:61 -#: front/src/components/mixins/Translations.vue:55 -msgctxt "Content/Library/*/in MB" +#: front/src/components/mixins/Translations.vue:67 +msgctxt "Content/*/*/Noun" msgid "Size" msgstr "Størrelse" @@ -4065,7 +4472,7 @@ msgctxt "Content/Library/Label" msgid "Skipped files" msgstr "Ignorerte filer" -#: front/src/views/admin/moderation/DomainsDetail.vue:89 +#: front/src/views/admin/moderation/DomainsDetail.vue:126 msgctxt "Content/Moderation/Table.Label" msgid "Software" msgstr "" @@ -4081,88 +4488,66 @@ msgctxt "Content/*/Paragraph" msgid "Sorry, the page you asked for does not exist:" msgstr "Siden du forespurte finnes ikke:" -#: front/src/components/Footer.vue:49 +#: front/src/components/Footer.vue:57 msgctxt "Footer/*/List item.Link" msgid "Source code" msgstr "Kildekode" #: front/src/components/auth/Profile.vue:23 -#: front/src/components/manage/users/UsersTable.vue:70 +#: front/src/components/manage/users/UsersTable.vue:71 msgctxt "Content/Profile/User role" msgid "Staff member" msgstr "Ansatt medlem" -#: front/src/components/audio/PlayButton.vue:23 +#: front/src/components/audio/PlayButton.vue:27 #: src/components/radios/Button.vue:4 #, fuzzy msgctxt "*/Queue/Button.Label/Short, Verb" msgid "Start radio" msgstr "Stopp radiostasjon" -#: front/src/views/admin/Settings.vue:86 -msgctxt "Content/Admin/Menu" +#: front/src/components/About.vue:170 src/components/Home.vue:53 +#: front/src/views/admin/Settings.vue:87 +#, fuzzy +msgctxt "Content/Home/Header" msgid "Statistics" msgstr "Statistikk" -#: front/src/views/admin/moderation/AccountsDetail.vue:490 +#: front/src/views/admin/moderation/AccountsDetail.vue:510 msgctxt "Content/Moderation/Help text" -msgid "" -"Statistics are computed from known activity and content on your instance, " -"and do not reflect general activity for this account" +msgid "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this account" msgstr "" -#: front/src/views/admin/moderation/DomainsDetail.vue:371 +#: front/src/views/admin/moderation/DomainsDetail.vue:418 msgctxt "Content/Moderation/Help text" -msgid "" -"Statistics are computed from known activity and content on your instance, " -"and do not reflect general activity for this domain" +msgid "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this domain" msgstr "" -#: front/src/views/admin/library/AlbumDetail.vue:329 -#: front/src/views/admin/library/ArtistDetail.vue:328 -#: front/src/views/admin/library/LibraryDetail.vue:316 -#: front/src/views/admin/library/TrackDetail.vue:371 +#: front/src/views/admin/library/AlbumDetail.vue:346 +#: front/src/views/admin/library/ArtistDetail.vue:345 +#: front/src/views/admin/library/LibraryDetail.vue:356 +#: front/src/views/admin/library/TagDetail.vue:210 +#: front/src/views/admin/library/TrackDetail.vue:389 #: front/src/views/admin/library/UploadDetail.vue:335 msgctxt "Content/Moderation/Help text" -msgid "" -"Statistics are computed from known activity and content on your instance, " -"and do not reflect general activity for this object" +msgid "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" msgstr "" -#: front/src/views/admin/moderation/DomainsDetail.vue:115 -msgctxt "Content/Moderation/Table.Label (Value is Error message)" -msgid "Status" -msgstr "Status" - #: front/src/components/library/FileUpload.vue:95 -msgctxt "Content/Library/Table.Label (Value is Uploading/Uploaded/Error)" -msgid "Status" -msgstr "Status" - -#: front/src/views/content/libraries/Detail.vue:28 -msgctxt "Content/Library.Federation/Table.Label (Value is Approved/Rejected)" -msgid "Status" -msgstr "Status" - +#: front/src/components/manage/library/EditsCardList.vue:12 +#: front/src/components/manage/moderation/ReportCard.vue:57 #: front/src/components/manage/users/InvitationsTable.vue:17 #: front/src/components/manage/users/InvitationsTable.vue:39 -msgctxt "Content/Admin/*/Noun (Value is Used/Not used)" -msgid "Status" -msgstr "Status" - #: front/src/components/manage/users/UsersTable.vue:43 -msgctxt "Content/Admin/Table.Label/Noun (Value is Regular user/Admin)" -msgid "Status" -msgstr "Status" - -#: front/src/components/manage/library/EditsCardList.vue:12 -msgctxt "" -"Content/Search/Dropdown.Label (Value is All/Pending " -"review/Approved/Rejected)" +#: front/src/views/admin/moderation/DomainsDetail.vue:152 +#: front/src/views/admin/moderation/ReportsList.vue:14 +#: front/src/views/content/libraries/Detail.vue:28 +#, fuzzy +msgctxt "*/*/*" msgid "Status" msgstr "Status" -#: front/src/components/Sidebar.vue:174 src/components/radios/Button.vue:3 +#: front/src/components/Sidebar.vue:178 src/components/radios/Button.vue:3 msgctxt "*/Player/Button.Label/Short, Verb" msgid "Stop radio" msgstr "Stopp radiostasjon" @@ -4172,7 +4557,7 @@ msgctxt "*/*/Button.Label/Verb" msgid "Submit" msgstr "Send inn" -#: front/src/components/library/EditForm.vue:98 +#: front/src/components/library/EditForm.vue:110 msgctxt "Content/Library/Button.Label/Verb" msgid "Submit and apply edit" msgstr "" @@ -4183,12 +4568,24 @@ msgctxt "Content/Library/Button.Label" msgid "Submit another edit" msgstr "Send inn en annen forespørsel" -#: front/src/components/library/EditForm.vue:99 +#: front/src/components/moderation/ReportModal.vue:64 +#, fuzzy +msgctxt "Popup/*/Button.Label" +msgid "Submit report" +msgstr "Send inn" + +#: front/src/components/library/EditForm.vue:111 msgctxt "Content/Library/Button.Label/Verb" msgid "Submit suggestion" msgstr "" -#: front/src/views/admin/Settings.vue:85 +#: front/src/components/manage/moderation/ReportCard.vue:17 +#, fuzzy +msgctxt "Content/Moderation/*" +msgid "Submitted by" +msgstr "Send inn" + +#: front/src/views/admin/Settings.vue:86 msgctxt "Content/Admin/Menu" msgid "Subsonic" msgstr "Subsonic" @@ -4228,16 +4625,21 @@ msgctxt "Content/Library/Tab.Title/Short" msgid "Summary" msgstr "Sammendrag" -#: front/src/components/library/EditForm.vue:87 +#: front/src/components/library/EditForm.vue:99 msgctxt "*/*/*" msgid "Summary (optional)" msgstr "" -#: front/src/components/Footer.vue:39 +#: front/src/components/Footer.vue:47 msgctxt "Footer/*/Listitem.Link" msgid "Support forum" msgstr "" +#: front/src/views/Notifications.vue:10 +msgctxt "Content/Notifications/Header" +msgid "Support this Funkwhale pod" +msgstr "" + #: front/src/components/library/FileUpload.vue:85 msgctxt "Content/Library/Paragraph" msgid "Supported extensions: %{ extensions }" @@ -4249,26 +4651,48 @@ msgctxt "Content/Playlist/Paragraph" msgid "Syncing changes to server…" msgstr "Synkroniserer endringer til tjener…" -#: front/src/components/audio/EmbedWizard.vue:25 +#: front/src/components/audio/SearchBar.vue:35 +msgctxt "*/*/*/Noun" +msgid "Tag" +msgstr "" + +#: front/src/views/admin/library/TagDetail.vue:61 +#, fuzzy +msgctxt "Content/Moderation/Title" +msgid "Tag data" +msgstr "Spornavn" + +#: front/src/components/library/Albums.vue:23 +#: src/components/library/Artists.vue:15 +#: front/src/views/admin/library/Base.vue:23 +#: src/views/admin/library/TagsList.vue:24 front/src/edits.js:24 +#: src/edits.js:50 src/edits.js:91 src/entities.js:120 +msgctxt "*/*/*/Noun" +msgid "Tags" +msgstr "" + +#: front/src/components/mixins/Translations.vue:44 +#: front/src/components/mixins/Translations.vue:45 +#, fuzzy +msgctxt "Content/Moderation/Dropdown" +msgid "Takedown request" +msgstr "Ventende følgingsforespørsler" + +#: front/src/components/About.vue:35 src/components/About.vue:61 +msgctxt "Content/About/Header" +msgid "Terms and privacy policy" +msgstr "" + +#: front/src/components/audio/EmbedWizard.vue:35 #: front/src/components/common/CopyInput.vue:3 msgctxt "Content/*/Paragraph" msgid "Text copied to clipboard!" msgstr "Tekst kopiert til utklippstavle." -#: front/src/components/Home.vue:26 -msgctxt "Content/Home/Paragraph" -msgid "" -"That's simple: we loved Grooveshark and we want to build something even " -"better." -msgstr "" -"Det er enkelt. Vi elsket Grooveshark og vi ønsket Ã¥ bygge noe enda bedre." - -#: front/src/views/admin/library/AlbumDetail.vue:75 +#: front/src/views/admin/library/AlbumDetail.vue:81 #, fuzzy msgctxt "Content/Moderation/Paragraph" -msgid "" -"The album will be removed, as well as associated uploads, tracks, favorites " -"and listening history. This action is irreversible." +msgid "The album will be removed, as well as associated uploads, tracks, favorites and listening history. This action is irreversible." msgstr "Biblioteket og alle dets spor vil bli slettet. Dette kan ikke angres." #: front/src/components/auth/Authorize.vue:39 @@ -4276,18 +4700,15 @@ msgctxt "Content/Auth/Paragraph" msgid "The application is also requesting the following unknown permissions:" msgstr "" -#: front/src/views/admin/library/ArtistDetail.vue:74 +#: front/src/views/admin/library/ArtistDetail.vue:79 msgctxt "Content/Moderation/Paragraph" -msgid "" -"The artist will be removed, as well as associated uploads, tracks, albums, " -"favorites and listening history. This action is irreversible." +msgid "The artist will be removed, as well as associated uploads, tracks, albums, favorites and listening history. This action is irreversible." msgstr "" -#: front/src/components/Footer.vue:53 +#: front/src/components/Footer.vue:61 msgctxt "Footer/*/List item.Link" msgid "The funkwhale logo was kindly designed and provided by Francis Gading." -msgstr "" -"Funkwhale-logoen ble pÃ¥ vennlig designet og tilbudt av Francis Gading." +msgstr "Funkwhale-logoen ble pÃ¥ vennlig designet og tilbudt av Francis Gading." #: front/src/components/SetInstanceModal.vue:8 msgctxt "Popup/Instance/Error message.List item" @@ -4297,23 +4718,18 @@ msgstr "" #: front/src/views/content/libraries/Form.vue:34 #, fuzzy msgctxt "Popup/Library/Paragraph" -msgid "" -"The library and all its tracks will be deleted. This can not be undone." +msgid "The library and all its tracks will be deleted. This can not be undone." msgstr "Biblioteket og alle dets spor vil bli slettet. Dette kan ikke angres." #: front/src/views/admin/library/LibraryDetail.vue:61 #, fuzzy msgctxt "Content/Moderation/Paragraph" -msgid "" -"The library will be removed, as well as associated uploads, and follows. " -"This action is irreversible." +msgid "The library will be removed, as well as associated uploads, and follows. This action is irreversible." msgstr "Biblioteket og alle dets spor vil bli slettet. Dette kan ikke angres." #: front/src/components/library/ImportStatusModal.vue:140 msgctxt "Popup/Import/Error.Label" -msgid "" -"The metadata included in the file is invalid or some mandatory fields are " -"missing." +msgid "The metadata included in the file is invalid or some mandatory fields are missing." msgstr "" #: front/src/components/library/FileUpload.vue:38 @@ -4327,12 +4743,16 @@ msgctxt "Sidebar/Player/Error message.Paragraph" msgid "The next track will play automatically in a few seconds…" msgstr "" -#: front/src/components/Home.vue:116 -msgctxt "Content/Home/List item" -msgid "" -"The plaform is free and open-source, you can install it and modify it " -"without worries" -msgstr "Plattformen er fri, du kan installere og endre den uten bekymringer" +#: front/src/components/manage/moderation/NotesThread.vue:27 +#, fuzzy +msgctxt "Content/Moderation/Paragraph" +msgid "The note will be removed. This action is irreversible." +msgstr "Biblioteket og alle dets spor vil bli slettet. Dette kan ikke angres." + +#: front/src/components/manage/moderation/ReportCard.vue:120 +msgctxt "Content/Moderation/Message" +msgid "The object associated with this report was deleted." +msgstr "" #: front/src/components/playlists/Form.vue:14 #, fuzzy @@ -4347,47 +4767,44 @@ msgstr "" #: front/src/components/federation/FetchButton.vue:13 msgctxt "Popup/*/Message.Content" -msgid "" -"The remote server answered, but returned data was unsupported by Funkwhale." +msgid "The remote server answered, but returned data was unsupported by Funkwhale." msgstr "" #: front/src/components/federation/FetchButton.vue:44 msgctxt "*/*/Error" -msgid "The remote server didn't answered fast enough" +msgid "The remote server didn't respond quickly enough" msgstr "" #: front/src/components/federation/FetchButton.vue:50 msgctxt "*/*/Error" -msgid "The return server returned invalid JSON or JSON-LD data" +msgid "The remote server returned invalid JSON or JSON-LD data" msgstr "" #: front/src/components/manage/library/AlbumsTable.vue:189 msgctxt "Popup/*/Paragraph" -msgid "" -"The selected albums will be removed, as well as associated tracks, uploads, " -"favorites and listening history. This action is irreversible." +msgid "The selected albums will be removed, as well as associated tracks, uploads, favorites and listening history. This action is irreversible." msgstr "" #: front/src/components/manage/library/ArtistsTable.vue:179 msgctxt "Popup/*/Paragraph" -msgid "" -"The selected artist will be removed, as well as associated uploads, tracks, " -"albums, favorites and listening history. This action is irreversible." +msgid "The selected artist will be removed, as well as associated uploads, tracks, albums, favorites and listening history. This action is irreversible." msgstr "" #: front/src/components/manage/library/LibrariesTable.vue:206 #, fuzzy msgctxt "Popup/*/Paragraph" -msgid "" -"The selected library will be removed, as well as associated uploads and " -"follows. This action is irreversible." +msgid "The selected library will be removed, as well as associated uploads and follows. This action is irreversible." +msgstr "Biblioteket og alle dets spor vil bli slettet. Dette kan ikke angres." + +#: front/src/components/manage/library/TagsTable.vue:180 +#, fuzzy +msgctxt "Popup/*/Paragraph" +msgid "The selected tag will be removed and unlinked with existing content, if any. This action is irreversible." msgstr "Biblioteket og alle dets spor vil bli slettet. Dette kan ikke angres." #: front/src/components/manage/library/TracksTable.vue:189 msgctxt "Popup/*/Paragraph" -msgid "" -"The selected tracks will be removed, as well as associated uploads, " -"favorites and listening history. This action is irreversible." +msgid "The selected tracks will be removed, as well as associated uploads, favorites and listening history. This action is irreversible." msgstr "" #: front/src/components/manage/library/UploadsTable.vue:256 @@ -4409,8 +4826,13 @@ msgstr "Subsonic API-et er ikke tilgjengelig pÃ¥ denne Funkwhale-instansen." #: front/src/components/library/EditCard.vue:96 #, fuzzy msgctxt "Popup/Library/Paragraph" -msgid "" -"The suggestion will be completely removed, this action is irreversible." +msgid "The suggestion will be completely removed, this action is irreversible." +msgstr "Biblioteket og alle dets spor vil bli slettet. Dette kan ikke angres." + +#: front/src/views/admin/library/TagDetail.vue:44 +#, fuzzy +msgctxt "Content/Moderation/Paragraph" +msgid "The tag will be removed and unlinked from any existing entity. This action is irreversible." msgstr "Biblioteket og alle dets spor vil bli slettet. Dette kan ikke angres." #: front/src/components/playlists/PlaylistModal.vue:34 @@ -4424,11 +4846,9 @@ msgctxt "Sidebar/Player/Error message.Title" msgid "The track cannot be loaded" msgstr "" -#: front/src/views/admin/library/TrackDetail.vue:74 +#: front/src/views/admin/library/TrackDetail.vue:80 msgctxt "Content/Moderation/Paragraph" -msgid "" -"The track will be removed, as well as associated uploads, favorites and " -"listening history. This action is irreversible." +msgid "The track will be removed, as well as associated uploads, favorites and listening history. This action is irreversible." msgstr "" #: front/src/views/admin/library/UploadDetail.vue:68 @@ -4463,22 +4883,37 @@ msgctxt "Content/Artist/Paragraph" msgid "This artist is present in the following libraries:" msgstr "Denne artisten er Ã¥ finne i følgende bibliotek:" +#: front/src/components/manage/moderation/DomainsTable.vue:169 +#, fuzzy +msgctxt "Content/Moderation/Popup" +msgid "This domain is present in your allow-list" +msgstr "Denne artisten er Ã¥ finne i følgende bibliotek:" + #: front/src/views/admin/moderation/AccountsDetail.vue:84 -#: front/src/views/admin/moderation/DomainsDetail.vue:48 +#: front/src/views/admin/moderation/DomainsDetail.vue:76 msgctxt "Content/Moderation/Card.Title" msgid "This domain is subject to specific moderation rules" msgstr "" +#: front/src/components/manage/moderation/InstancePolicyModal.vue:16 +msgctxt "Content/Moderation/Card.Title" +msgid "This entity is subject to specific moderation rules" +msgstr "" + #: front/src/views/content/Home.vue:9 #, fuzzy msgctxt "Content/Library/Paragraph" msgid "This instance offers up to %{quota} of storage space for every user." msgstr "Denne instansen tilbyr opptil %{quota} lagringsplass til hver bruker." +#: front/src/components/auth/Settings.vue:300 +msgctxt "Popup/Settings/Paragraph" +msgid "This is irreversible and will permanently remove your data from our servers. You will we immediatly logged out." +msgstr "" + #: front/src/components/auth/Settings.vue:165 msgctxt "Content/Settings/Paragraph" -msgid "" -"This is the list of applications that have access to your account data." +msgid "This is the list of applications that have access to your account data." msgstr "" #: front/src/components/auth/Settings.vue:218 @@ -4497,14 +4932,12 @@ msgctxt "Content/Library/Input.Placeholder" msgid "This library contains my personal music, I hope you like it." msgstr "Dette biblioteket inneholder personlig musikk, hÃ¥per du liker det." -#: front/src/views/content/remote/Card.vue:141 +#: front/src/views/content/remote/Card.vue:169 msgctxt "Content/Library/Card.Help text" -msgid "" -"This library is private and your approval from its owner is needed to access" -" its content" +msgid "This library is private and your approval from its owner is needed to access its content" msgstr "" -#: front/src/views/content/remote/Card.vue:142 +#: front/src/views/content/remote/Card.vue:170 msgctxt "Content/Library/Card.Help text" msgid "This library is public and you can access its content freely" msgstr "" @@ -4512,12 +4945,8 @@ msgstr "" #: front/src/components/common/ActionTable.vue:47 #, fuzzy msgctxt "Modal/*/Paragraph" -msgid "" -"This may affect a lot of elements or have irreversible consequences, please " -"double check this is really what you want." -msgstr "" -"Dette kan ha innvirkning pÃ¥ mange elementer, dobbeltsjekk at dette er det du" -" faktisk ønsker." +msgid "This may affect a lot of elements or have irreversible consequences, please double check this is really what you want." +msgstr "Dette kan ha innvirkning pÃ¥ mange elementer, dobbeltsjekk at dette er det du faktisk ønsker." #: front/src/components/library/AlbumEdit.vue:8 #: front/src/components/library/ArtistEdit.vue:8 @@ -4526,6 +4955,11 @@ msgctxt "Content/*/Message" msgid "This object is managed by another server, you cannot edit it." msgstr "" +#: front/src/components/Home.vue:87 +msgctxt "Content/Home/Paragraph" +msgid "This pod runs Funkwhale, a community-driven project that lets you listen and share music and audio within a decentralized, open network." +msgstr "" + #: front/src/components/library/FileUpload.vue:51 msgctxt "Content/Library/Paragraph" msgid "This reference will be used to group imported files together." @@ -4534,15 +4968,14 @@ msgstr "Denne referansen brukes til Ã¥ gruppere importerte filer sammen." #: front/src/components/mixins/Translations.vue:33 #: front/src/components/mixins/Translations.vue:34 msgctxt "Content/Library/Help text" -msgid "This track could not be processed, please it is tagged correctly" +msgid "This track could not be processed, please make sure it is tagged correctly" msgstr "" #: front/src/components/mixins/Translations.vue:29 #: front/src/components/mixins/Translations.vue:30 #, fuzzy msgctxt "Content/Library/Help text" -msgid "" -"This track has been uploaded, but hasn't been processed by the server yet" +msgid "This track has been uploaded, but hasn't been processed by the server yet" msgstr "Sporet er lastet opp, men ikke behandlet av tjeneren enda" #: front/src/components/mixins/Translations.vue:25 @@ -4552,7 +4985,7 @@ msgctxt "Content/Library/Help text" msgid "This track is already present in one of your libraries" msgstr "Sporet finnes allerede i ett av bibliotekene dine" -#: front/src/components/audio/PlayButton.vue:85 +#: front/src/components/audio/PlayButton.vue:103 msgctxt "*/Queue/Button/Title" msgid "This track is not available in any library you have access to" msgstr "" @@ -4562,7 +4995,7 @@ msgctxt "Content/Track/Paragraph" msgid "This track is present in the following libraries:" msgstr "Dette sporet finnes i følgende bibliotek:" -#: front/src/views/playlists/Detail.vue:38 +#: front/src/views/playlists/Detail.vue:46 msgctxt "Popup/Playlist/Paragraph" msgid "This will completely delete this playlist and cannot be undone." msgstr "Dette vil slette denne spillelisten for godt, og kan ikke angres." @@ -4572,31 +5005,30 @@ msgctxt "Popup/Radio/Paragraph" msgid "This will completely delete this radio and cannot be undone." msgstr "Dette vil slette denne radiostasjonen for godt, og kan ikke angres." -#: front/src/components/auth/SubsonicTokenForm.vue:50 +#: front/src/components/auth/SubsonicTokenForm.vue:55 msgctxt "Popup/Settings/Paragraph" -msgid "" -"This will completely disable access to the Subsonic API using from account." +msgid "This will completely disable access to the Subsonic API using from account." msgstr "Dette vil skru av tilgang til Subsonic API-et for denne kontoen." -#: front/src/components/auth/SubsonicTokenForm.vue:35 -msgctxt "Popup/Settings/Paragraph" -msgid "" -"This will log you out from existing devices that use the current password." +#: front/src/components/manage/moderation/ReportCard.vue:359 +msgctxt "Content/Moderation/Popup,Paragraph" +msgid "This will delete the object associated with this report and mark the report as resolved. The deletion is irreversible." msgstr "" -"Dette vil logge deg ut av eksisterende enheter som bruker nÃ¥værende passord." + +#: front/src/components/auth/SubsonicTokenForm.vue:40 +msgctxt "Popup/Settings/Paragraph" +msgid "This will log you out from existing devices that use the current password." +msgstr "Dette vil logge deg ut av eksisterende enheter som bruker nÃ¥værende passord." #: front/src/components/auth/Settings.vue:253 #, fuzzy msgctxt "Popup/Settings/Paragraph" -msgid "" -"This will permanently delete the application and all the associated tokens." +msgid "This will permanently delete the application and all the associated tokens." msgstr "Dette vil slette denne spillelisten for godt, og kan ikke angres." #: front/src/components/auth/Settings.vue:194 msgctxt "Popup/Settings/Paragraph" -msgid "" -"This will prevent this application from accessing the service on your " -"behalf." +msgid "This will prevent this application from accessing the service on your behalf." msgstr "" #: front/src/components/playlists/Editor.vue:54 @@ -4604,43 +5036,44 @@ msgctxt "Popup/Playlist/Paragraph" msgid "This will remove all tracks from this playlist and cannot be undone." msgstr "Dette vil fjerne alle spor fra denne spillelisten og kan ikke angres." -#: front/src/views/admin/library/AlbumDetail.vue:99 -#: front/src/views/admin/library/TrackDetail.vue:98 src/edits.js:21 -#: src/edits.js:39 -msgctxt "*/*/*/Noun" -msgid "Title" -msgstr "Tittel" - #: front/src/components/audio/track/Table.vue:7 -#: front/src/views/content/libraries/FilesTable.vue:55 -msgctxt "Content/Track/*/Noun" -msgid "Title" -msgstr "Tittel" - #: front/src/components/manage/library/AlbumsTable.vue:39 #: front/src/components/manage/library/TracksTable.vue:39 -msgctxt "*/*/*" +#: front/src/views/admin/library/AlbumDetail.vue:105 +#: front/src/views/admin/library/TrackDetail.vue:104 +#: front/src/views/content/libraries/FilesTable.vue:55 src/edits.js:36 +#: front/src/edits.js:62 +msgctxt "*/*/*/Noun" msgid "Title" msgstr "Tittel" #: front/src/components/SetInstanceModal.vue:16 msgctxt "Popup/Instance/Paragraph" -msgid "" -"To continue, please select the Funkwhale instance you want to connect to. " -"Enter the address directly, or select one of the suggested choices." +msgid "To continue, please select the Funkwhale instance you want to connect to. Enter the address directly, or select one of the suggested choices." +msgstr "" + +#: front/src/components/ShortcutsModal.vue:148 +#, fuzzy +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Toggle favorite" +msgstr "Én favoritt" + +#: front/src/components/ShortcutsModal.vue:132 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Toggle mute" msgstr "" -#: front/src/components/ShortcutsModal.vue:79 +#: front/src/components/ShortcutsModal.vue:136 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Toggle queue looping" msgstr "" -#: front/src/views/admin/library/AlbumDetail.vue:222 -#: front/src/views/admin/library/ArtistDetail.vue:211 -#: front/src/views/admin/library/LibraryDetail.vue:200 -#: front/src/views/admin/library/TrackDetail.vue:274 -#: front/src/views/admin/moderation/AccountsDetail.vue:317 -#: front/src/views/admin/moderation/DomainsDetail.vue:225 +#: front/src/views/admin/library/AlbumDetail.vue:238 +#: front/src/views/admin/library/ArtistDetail.vue:226 +#: front/src/views/admin/library/LibraryDetail.vue:219 +#: front/src/views/admin/library/TrackDetail.vue:290 +#: front/src/views/admin/moderation/AccountsDetail.vue:329 +#: front/src/views/admin/moderation/DomainsDetail.vue:262 msgctxt "Content/Moderation/Table.Label" msgid "Total size" msgstr "" @@ -4650,21 +5083,19 @@ msgctxt "Content/Library/Card.Help text" msgid "Total size of the files in this library" msgstr "Total størrelse pÃ¥ filene i dette biblioteket" -#: front/src/views/admin/moderation/DomainsDetail.vue:105 +#: front/src/views/admin/moderation/DomainsDetail.vue:142 #, fuzzy msgctxt "Content/*/*" msgid "Total users" msgstr "Ikke brukt" -#: front/src/views/admin/library/UploadDetail.vue:199 -msgctxt "*/*/*" -msgid "Track" -msgstr "Spor" - -#: front/src/components/audio/SearchBar.vue:27 -#: front/src/components/library/TrackBase.vue:173 +#: front/src/components/audio/SearchBar.vue:34 +#: front/src/components/library/TrackBase.vue:188 #: front/src/components/library/TrackDetail.vue:128 #: front/src/components/metadata/Search.vue:138 +#: src/components/mixins/Report.vue:28 +#: front/src/views/admin/library/UploadDetail.vue:199 +#: front/src/components/mixins/Report.vue:29 msgctxt "*/*/*/Noun" msgid "Track" msgstr "Spor" @@ -4674,7 +5105,7 @@ msgctxt "Content/Library/Card/Short" msgid "Track #%{ id } - %{ name }" msgstr "" -#: front/src/views/admin/library/TrackDetail.vue:91 +#: front/src/views/admin/library/TrackDetail.vue:97 #, fuzzy msgctxt "Content/Moderation/Title" msgid "Track data" @@ -4685,30 +5116,28 @@ msgctxt "Content/Track/Title/Noun" msgid "Track information" msgstr "Sporinfo" -#: front/src/components/mixins/Translations.vue:50 -#: front/src/components/mixins/Translations.vue:51 +#: front/src/components/mixins/Translations.vue:60 +#: front/src/components/mixins/Translations.vue:61 msgctxt "Content/*/Dropdown/Noun" msgid "Track name" msgstr "Spornavn" -#: front/src/components/instance/Stats.vue:54 #: front/src/components/library/AlbumDetail.vue:19 -#: front/src/components/playlists/PlaylistModal.vue:47 -#: front/src/views/admin/moderation/AccountsDetail.vue:362 -#: front/src/views/admin/moderation/DomainsDetail.vue:274 -#: front/src/views/content/Base.vue:8 src/views/content/libraries/Detail.vue:8 -#: front/src/views/playlists/Detail.vue:51 src/views/radios/Detail.vue:34 -msgctxt "*/*/*/Noun" -msgid "Tracks" -msgstr "Spor" - +#: front/src/components/library/TagDetail.vue:36 #: front/src/components/manage/library/AlbumsTable.vue:42 #: front/src/components/manage/library/ArtistsTable.vue:42 -#: front/src/views/admin/library/AlbumDetail.vue:252 -#: front/src/views/admin/library/ArtistDetail.vue:251 +#: front/src/components/manage/library/TagsTable.vue:44 +#: front/src/components/playlists/PlaylistModal.vue:47 +#: front/src/views/admin/library/AlbumDetail.vue:268 +#: front/src/views/admin/library/ArtistDetail.vue:266 #: front/src/views/admin/library/Base.vue:14 -#: front/src/views/admin/library/LibraryDetail.vue:229 +#: front/src/views/admin/library/LibraryDetail.vue:248 +#: front/src/views/admin/library/TagDetail.vue:143 #: front/src/views/admin/library/TracksList.vue:24 +#: front/src/views/admin/moderation/AccountsDetail.vue:374 +#: front/src/views/admin/moderation/DomainsDetail.vue:311 +#: front/src/views/content/Base.vue:8 src/views/content/libraries/Detail.vue:8 +#: front/src/views/playlists/Detail.vue:76 src/views/radios/Detail.vue:34 msgctxt "*/*/*" msgid "Tracks" msgstr "Spor" @@ -4718,16 +5147,6 @@ msgctxt "Content/Artist/Title" msgid "Tracks by this artist" msgstr "Spor av denne artisten" -#: front/src/components/instance/Stats.vue:25 -msgctxt "Content/About/Paragraph/Unit" -msgid "Tracks favorited" -msgstr "Spor favorisert" - -#: front/src/components/instance/Stats.vue:19 -msgctxt "Content/About/Paragraph/Unit" -msgid "tracks listened" -msgstr "Spor lyttet til" - #: front/src/components/library/radios/Filter.vue:44 #, fuzzy msgctxt "Popup/Radio/Title/Noun" @@ -4735,63 +5154,58 @@ msgid "Tracks matching filter" msgstr "Sporsamsvarsfilter" #: front/src/components/library/TrackDetail.vue:57 +#: front/src/components/manage/moderation/ReportCard.vue:134 #: front/src/views/admin/library/UploadDetail.vue:250 +#: front/src/views/admin/moderation/AccountsDetail.vue:181 msgctxt "Content/Track/Table.Label/Noun" msgid "Type" msgstr "Type" -#: front/src/views/admin/moderation/AccountsDetail.vue:180 -msgctxt "Content/Moderation/Table.Label/Noun" -msgid "Type" -msgstr "Type" - #: front/src/components/manage/moderation/AccountsTable.vue:44 -#: front/src/components/manage/moderation/DomainsTable.vue:42 +#: front/src/components/manage/moderation/DomainsTable.vue:50 msgctxt "Content/Moderation/Table.Label/Short" msgid "Under moderation rule" msgstr "" -#: front/src/views/content/remote/Card.vue:109 -#: src/views/content/remote/Card.vue:114 +#: front/src/components/ShortcutsModal.vue:68 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Unfocus searchbar" +msgstr "" + +#: front/src/views/content/remote/Card.vue:122 +#: src/views/content/remote/Card.vue:127 msgctxt "*/Library/Button.Label/Verb" msgid "Unfollow" msgstr "Opphev følging" -#: front/src/views/content/remote/Card.vue:110 +#: front/src/views/content/remote/Card.vue:123 msgctxt "Popup/Library/Title" msgid "Unfollow this library?" msgstr "Opphev følging av dette biblioteket?" -#: front/src/components/About.vue:17 -#, fuzzy -msgctxt "Content/About/Paragraph" -msgid "" -"Unfortunately, the owners of this instance did not yet take the time to " -"complete this page." -msgstr "" -"Eierne av denne instansen har ikke tatt seg tid til Ã¥ fullføre denne siden." - #: front/src/components/federation/FetchButton.vue:54 #: front/src/components/federation/FetchButton.vue:55 -msgctxt "*/*/Error" -msgid "Unknowkn error" -msgstr "" - #: front/src/components/library/ImportStatusModal.vue:144 -msgctxt "Popup/Import/Error.Label" -msgid "Unkwown error" +msgctxt "*/*/Error" +msgid "Unknown error" msgstr "" -#: front/src/components/Home.vue:37 -msgctxt "Content/Home/Title" -msgid "Unlimited music" -msgstr "Ubegrenset musikk" - -#: front/src/components/audio/Player.vue:630 +#: front/src/components/audio/Player.vue:656 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Unmute" msgstr "Opphev forstumming" +#: front/src/components/manage/moderation/ReportCard.vue:225 +msgctxt "Content/*/Button.Label" +msgid "Unresolve" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:67 +#: front/src/views/admin/moderation/ReportsList.vue:23 +msgctxt "Content/*/*/Short" +msgid "Unresolved" +msgstr "" + #: front/src/components/manage/moderation/InstancePolicyForm.vue:57 #, fuzzy msgctxt "Content/Moderation/Card.Button.Label/Verb" @@ -4859,12 +5273,8 @@ msgstr "Opplastingsdato" #: front/src/components/library/FileUpload.vue:258 #, fuzzy msgctxt "Content/Library/Help text" -msgid "" -"Upload denied, ensure the file is not too big and that you have not reached " -"your quota" -msgstr "" -"Opplasting nektet, forsikre deg om at filen ikke er for stor, og at du ikke " -"har brukt opp kvoten din." +msgid "Upload denied, ensure the file is not too big and that you have not reached your quota" +msgstr "Opplasting nektet, forsikre deg om at filen ikke er for stor, og at du ikke har brukt opp kvoten din." #: front/src/components/library/ImportStatusModal.vue:8 msgctxt "Popup/Import/Message" @@ -4874,20 +5284,18 @@ msgstr "" #: front/src/views/content/Home.vue:7 #, fuzzy msgctxt "Content/Library/Paragraph" -msgid "" -"Upload music files (MP3, OGG, FLAC, etc.) from your personal library " -"directly from your browser to enjoy them here." -msgstr "" -"Last opp musikkfiler (MP3, OGG, Flac, osv.) fra ditt personlige bibiotek " -"direkte fra din nettleser for Ã¥ nyte dem her." +msgid "Upload music files (MP3, OGG, FLAC, etc.) from your personal library directly from your browser to enjoy them here." +msgstr "Last opp musikkfiler (MP3, OGG, Flac, osv.) fra ditt personlige bibiotek direkte fra din nettleser for Ã¥ nyte dem her." #: front/src/components/library/FileUpload.vue:30 msgctxt "Content/Library/Title/Verb" msgid "Upload new tracks" msgstr "Last opp nye spor" -#: front/src/views/admin/moderation/AccountsDetail.vue:298 -msgctxt "Content/Moderation/Table.Label/Noun" +#: front/src/components/About.vue:99 +#: front/src/views/admin/moderation/AccountsDetail.vue:309 +#, fuzzy +msgctxt "*/*/*" msgid "Upload quota" msgstr "Opplastingskvote" @@ -4898,9 +5306,7 @@ msgstr "Tidsavbrudd for opplasting, prøv igjen" #: front/src/components/library/ImportStatusModal.vue:14 msgctxt "Popup/Import/Message" -msgid "" -"Upload was skipped because a similar one is already available in one of your" -" libraries." +msgid "Upload was skipped because a similar one is already available in one of your libraries." msgstr "" #: front/src/components/library/ImportStatusModal.vue:11 @@ -4925,38 +5331,26 @@ msgctxt "Content/Library/Table" msgid "Uploading…" msgstr "Laster opp" +#: front/src/components/manage/library/LibrariesTable.vue:52 +#: front/src/components/manage/moderation/AccountsTable.vue:41 +#: front/src/components/mixins/Translations.vue:75 +#: front/src/views/admin/library/AlbumDetail.vue:258 +#: front/src/views/admin/library/ArtistDetail.vue:246 #: front/src/views/admin/library/Base.vue:20 +#: front/src/views/admin/library/LibraryDetail.vue:258 +#: front/src/views/admin/library/TrackDetail.vue:310 #: front/src/views/admin/library/UploadsList.vue:24 +#: front/src/views/admin/moderation/AccountsDetail.vue:349 +#: front/src/views/admin/moderation/DomainsDetail.vue:281 +#: front/src/components/mixins/Translations.vue:76 #, fuzzy msgctxt "*/*/*" msgid "Uploads" msgstr "Last opp" -#: front/src/components/manage/moderation/AccountsTable.vue:41 -#: front/src/components/mixins/Translations.vue:63 -#: front/src/views/admin/library/AlbumDetail.vue:242 -#: front/src/views/admin/library/ArtistDetail.vue:231 -#: front/src/views/admin/library/LibraryDetail.vue:239 -#: front/src/views/admin/library/TrackDetail.vue:294 -#: front/src/views/admin/moderation/AccountsDetail.vue:337 -#: front/src/views/admin/moderation/DomainsDetail.vue:244 -#: front/src/components/mixins/Translations.vue:64 -#, fuzzy -msgctxt "Content/Moderation/Table.Label/Noun" -msgid "Uploads" -msgstr "Last opp" - -#: front/src/components/manage/library/LibrariesTable.vue:52 -#, fuzzy -msgctxt "Content/*/*/Noun" -msgid "Uploads" -msgstr "Last opp" - #: front/src/components/auth/ApplicationForm.vue:16 msgctxt "Content/Applications/Help Text" -msgid "" -"Use \"urn:ietf:wg:oauth:2.0:oob\" as a redirect URI if your application is " -"not served on the web." +msgid "Use \"urn:ietf:wg:oauth:2.0:oob\" as a redirect URI if your application is not served on the web." msgstr "" #: front/src/components/Footer.vue:16 @@ -4964,20 +5358,29 @@ msgctxt "Footer/*/List item.Link" msgid "Use another instance" msgstr "Bruk en annen instans" +#: front/src/components/Home.vue:146 +msgctxt "Content/Home/Link" +msgid "Use Funkwhale on other devices with our apps" +msgstr "" + +#: front/src/components/moderation/ReportModal.vue:44 +msgctxt "*/*/Field,Help" +msgid "Use this field to provide additional context to the moderator that will handle your report." +msgstr "" + #: front/src/views/auth/PasswordReset.vue:12 msgctxt "Content/Signup/Paragraph" -msgid "" -"Use this form to request a password reset. We will send an email to the " -"given address with instructions to reset your password." +msgid "Use this form to request a password reset. We will send an email to the given address with instructions to reset your password." +msgstr "Bruk dette skjemaet til Ã¥ forespørre tilbakestilling av passord. En e-post vil bli sendt til oppgitt adresse med instruksjoner." + +#: front/src/components/moderation/ReportModal.vue:18 +msgctxt "*/Moderation/Popup,Paragraph" +msgid "Use this form to submit a report to our moderation team." msgstr "" -"Bruk dette skjemaet til Ã¥ forespørre tilbakestilling av passord. En e-post " -"vil bli sendt til oppgitt adresse med instruksjoner." #: front/src/components/manage/moderation/InstancePolicyForm.vue:111 msgctxt "Content/Moderation/Help text" -msgid "" -"Use this setting to temporarily enable/disable the policy without completely" -" removing it." +msgid "Use this setting to temporarily enable/disable the policy without completely removing it." msgstr "" #: front/src/components/manage/users/InvitationsTable.vue:49 @@ -4985,15 +5388,27 @@ msgctxt "Content/Admin/Table" msgid "Used" msgstr "Brukt" +#: front/src/components/Home.vue:125 +msgctxt "Content/Home/Header" +msgid "Useful links" +msgstr "" + #: front/src/views/content/libraries/Detail.vue:26 msgctxt "Content/Library/Table.Label" msgid "User" msgstr "Bruker" -#: front/src/components/instance/Stats.vue:5 -msgctxt "Content/About/Title/Noun" -msgid "User activity" -msgstr "Brukeraktivitet" +#: front/src/components/Home.vue:154 +#, fuzzy +msgctxt "Content/Home/Link" +msgid "User guides" +msgstr "Brukerbibliotek" + +#: front/src/views/admin/Settings.vue:88 +#, fuzzy +msgctxt "Content/Admin/Menu" +msgid "User Interface" +msgstr "Brukernavn" #: front/src/components/library/AlbumDetail.vue:26 #: front/src/components/library/ArtistDetail.vue:39 @@ -5007,35 +5422,35 @@ msgctxt "Content/Radio/Title" msgid "User radios" msgstr "Brukerradiostasjoner" -#: front/src/components/auth/Signup.vue:19 +#: front/src/components/auth/SignupForm.vue:15 #: front/src/components/manage/users/UsersTable.vue:37 -#: front/src/components/mixins/Translations.vue:59 +#: front/src/components/mixins/Translations.vue:71 #: front/src/views/admin/moderation/AccountsDetail.vue:114 -#: front/src/components/mixins/Translations.vue:60 +#: front/src/components/mixins/Translations.vue:72 msgctxt "Content/*/*" msgid "Username" msgstr "Brukernavn" -#: front/src/components/auth/Login.vue:15 +#: front/src/components/auth/LoginForm.vue:11 msgctxt "Content/Login/Input.Label/Noun" msgid "Username or email" msgstr "Brukernavn eller e-post" -#: front/src/components/instance/Stats.vue:13 -msgctxt "Content/About/Paragraph/Unit" -msgid "users" -msgstr "brukere" - -#: front/src/components/Sidebar.vue:102 -#: front/src/components/manage/moderation/DomainsTable.vue:39 -#: front/src/components/mixins/Translations.vue:61 +#: front/src/components/Sidebar.vue:106 +#: front/src/components/manage/moderation/DomainsTable.vue:47 +#: front/src/components/mixins/Translations.vue:73 #: src/views/admin/Settings.vue:81 front/src/views/admin/users/Base.vue:5 #: src/views/admin/users/UsersList.vue:21 -#: front/src/components/mixins/Translations.vue:62 +#: front/src/components/mixins/Translations.vue:74 msgctxt "*/*/*/Noun" msgid "Users" msgstr "Brukere" +#: front/src/components/Home.vue:110 +msgctxt "Content/Home/Paragraph" +msgid "Users on this pod also get %{ quota } of free storage to upload their own content!" +msgstr "" + #: front/src/components/Footer.vue:29 #, fuzzy msgctxt "Footer/*/Title" @@ -5055,45 +5470,59 @@ msgctxt "Content/Library/Link/Verb" msgid "View files" msgstr "Vis filer" -#: front/src/components/library/AlbumBase.vue:81 -#: front/src/components/library/ArtistBase.vue:92 -#: front/src/components/library/TrackBase.vue:100 -#: front/src/views/admin/library/AlbumDetail.vue:42 -#: front/src/views/admin/library/ArtistDetail.vue:41 +#: front/src/components/library/AlbumBase.vue:95 +#: front/src/components/library/ArtistBase.vue:107 +#: front/src/components/library/TrackBase.vue:111 +#: front/src/views/admin/library/AlbumDetail.vue:48 +#: front/src/views/admin/library/ArtistDetail.vue:46 #: front/src/views/admin/library/LibraryDetail.vue:34 #: front/src/views/admin/library/LibraryDetail.vue:45 -#: front/src/views/admin/library/TrackDetail.vue:41 +#: front/src/views/admin/library/TagDetail.vue:32 +#: front/src/views/admin/library/TrackDetail.vue:47 #: front/src/views/admin/library/UploadDetail.vue:35 #: front/src/views/admin/library/UploadDetail.vue:46 #: front/src/views/admin/moderation/AccountsDetail.vue:37 #: front/src/views/admin/moderation/AccountsDetail.vue:45 +#: front/src/views/admin/moderation/DomainsDetail.vue:30 msgctxt "Content/Moderation/Link/Verb" msgid "View in Django's admin" msgstr "" -#: front/src/components/library/AlbumBase.vue:61 -#: front/src/components/library/ArtistBase.vue:72 -#: front/src/components/library/TrackBase.vue:80 +#: front/src/components/Home.vue:169 +msgctxt "Content/Home/Link" +msgid "View more…" +msgstr "" + +#: front/src/components/library/AlbumBase.vue:62 +#: front/src/components/library/ArtistBase.vue:73 +#: front/src/components/library/TrackBase.vue:78 #: front/src/components/metadata/ArtistCard.vue:49 #: front/src/components/metadata/ReleaseCard.vue:53 msgctxt "Content/*/*/Clickable, Verb" msgid "View on MusicBrainz" msgstr "Vis pÃ¥ MusicBrainz" +#: front/src/components/manage/moderation/ReportCard.vue:124 +msgctxt "Content/Moderation/Link" +msgid "View public page" +msgstr "" + #: front/src/components/manage/library/LibrariesTable.vue:11 #: front/src/components/manage/library/LibrariesTable.vue:51 #: front/src/components/manage/library/UploadsTable.vue:11 #: front/src/components/manage/library/UploadsTable.vue:63 #: front/src/views/admin/library/LibraryDetail.vue:94 #: front/src/views/admin/library/UploadDetail.vue:101 +#: front/src/views/content/libraries/Form.vue:18 msgctxt "*/*/*" msgid "Visibility" msgstr "Synlighet" -#: front/src/views/content/libraries/Form.vue:18 -msgctxt "Content/Library/Dropdown.Label" -msgid "Visibility" -msgstr "Synlighet" +#: front/src/components/Home.vue:91 +#, fuzzy +msgctxt "Content/Home/Link" +msgid "Visit funkwhale.audio" +msgstr "Om Funkwhale" #: front/src/components/library/AlbumDetail.vue:4 msgctxt "Content/Album/" @@ -5105,7 +5534,13 @@ msgctxt "Popup/*/Loading.Title" msgid "Waiting for result…" msgstr "" -#: front/src/components/auth/Login.vue:7 +#: front/src/components/auth/Settings.vue:285 +#, fuzzy +msgctxt "Content/Settings/Error message.Title" +msgid "We cannot delete your account" +msgstr "Kan ikke logge inn" + +#: front/src/components/auth/LoginForm.vue:3 msgctxt "Content/Login/Error message.Title" msgid "We cannot log you in" msgstr "Kan ikke logge inn" @@ -5116,10 +5551,10 @@ msgctxt "Content/*/Error message.Title" msgid "We cannot save your changes" msgstr "Kan ikke lagre innstillingene" -#: front/src/components/Home.vue:122 -msgctxt "Content/Home/List item" -msgid "We do not track you or bother you with ads" -msgstr "Ingen sporing eller reklame" +#: front/src/views/Notifications.vue:39 +msgctxt "Content/Notifications/Paragraph" +msgid "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!" +msgstr "" #: front/src/components/library/FileUpload.vue:39 #, fuzzy @@ -5127,32 +5562,27 @@ msgctxt "Content/Library/Link" msgid "We recommend using Picard for that purpose." msgstr "Til dette formÃ¥let anbefales Picard" -#: front/src/components/Home.vue:7 -msgctxt "Content/Home/Title" -msgid "We think listening to music should be simple." -msgstr "Lytting til musikk skal være enkelt." +#: front/src/components/moderation/ReportModal.vue:35 +msgctxt "*/*/Field,Help" +msgid "We'll use this email if we need to contact you regarding this report." +msgstr "" -#: front/src/components/Home.vue:148 +#: front/src/components/Home.vue:207 msgctxt "Head/Home/Title" msgid "Welcome" msgstr "Velkommen" #: front/src/components/Home.vue:5 -msgctxt "Content/Home/Title/Verb" -msgid "Welcome on Funkwhale" -msgstr "Velkommen pÃ¥ Funkwhale" - -#: front/src/components/Home.vue:24 -msgctxt "Content/Home/Title" -msgid "Why funkwhale?" -msgstr "Hvorfor Funkwhale?" +msgctxt "Content/Home/Header" +msgid "Welcome to %{ podName }!" +msgstr "" -#: front/src/components/audio/EmbedWizard.vue:13 +#: front/src/components/audio/EmbedWizard.vue:23 msgctxt "Popup/Embed/Input.Label" msgid "Widget height" msgstr "" -#: front/src/components/audio/EmbedWizard.vue:6 +#: front/src/components/audio/EmbedWizard.vue:16 msgctxt "Popup/Embed/Input.Label" msgid "Widget width" msgstr "" @@ -5172,9 +5602,11 @@ msgctxt "Content/OAuth Scopes/Help Text" msgid "Write-only access to user data" msgstr "" -#: front/src/components/Sidebar.vue:129 +#: front/src/components/Sidebar.vue:133 #: front/src/components/manage/moderation/AccountsTable.vue:72 -#: front/src/components/manage/moderation/DomainsTable.vue:58 +#: front/src/components/manage/moderation/DomainsTable.vue:12 +#: front/src/components/manage/moderation/DomainsTable.vue:69 +#: front/src/views/admin/moderation/DomainsDetail.vue:109 msgctxt "*/*/*" msgid "Yes" msgstr "Ja" @@ -5187,27 +5619,17 @@ msgstr "Ja, logg meg ut." #: front/src/views/content/libraries/Form.vue:19 #, fuzzy msgctxt "Content/Library/Paragraph" -msgid "" -"You are able to share your library with other people, regardless of its " -"visibility." +msgid "You are able to share your library with other people, regardless of its visibility." msgstr "Du vil kunne dele biblioteket med andre, uavhengig av dets synlighet." #: front/src/components/library/FileUpload.vue:32 msgctxt "Content/Library/Paragraph" -msgid "" -"You are about to upload music to your library. Before proceeding, please " -"ensure that:" -msgstr "" -"Du er i ferd med Ã¥ laste opp musikk til ditt bibliotek. Før du fortsetter, " -"forsikre deg om at:" +msgid "You are about to upload music to your library. Before proceeding, please ensure that:" +msgstr "Du er i ferd med Ã¥ laste opp musikk til ditt bibliotek. Før du fortsetter, forsikre deg om at:" #: front/src/components/SetInstanceModal.vue:12 msgctxt "Popup/Login/Paragraph" -msgid "" -"You are currently connected to <a href=\"%{ url }\" target=\"_blank\">%{ " -"hostname } <i class=\"external icon\"/></a>. If you continue, you will " -"be disconnected from your current instance and all your local data will be " -"deleted." +msgid "You are currently connected to <a href=\"%{ url }\" target=\"_blank\">%{ hostname } <i class=\"external icon\"/></a>. If you continue, you will be disconnected from your current instance and all your local data will be deleted." msgstr "" #: front/src/components/library/ArtistDetail.vue:6 @@ -5222,9 +5644,7 @@ msgstr "Du er innlogget som %{ username }" #: front/src/components/library/FileUpload.vue:35 msgctxt "Content/Library/List item" -msgid "" -"You are not uploading copyrighted content in a public library, otherwise you" -" may be infringing the law" +msgid "You are not uploading copyrighted content in a public library, otherwise you may be infringing the law" msgstr "" #: front/src/components/SetInstanceModal.vue:98 @@ -5233,55 +5653,36 @@ msgid "You are now using the Funkwhale instance at %{ url }" msgstr "" #: front/src/views/content/Home.vue:17 +#, fuzzy msgctxt "Content/Library/Paragraph" -msgid "" -"You can follow libraries from other users to get access to new music. Public" -" libraries can be followed immediatly, while following a private library " -"requires approval from its owner." -msgstr "" -"Følg bibliotek fra andre brukere for Ã¥ fÃ¥ tilgang til ny musikk. Offentlige " -"bibliotek kan følges umiddelbart, mens Ã¥ følge et privat bibliotek krever " -"samtykke fra dets eier." - -#: front/src/components/Home.vue:128 -msgctxt "Content/Home/List item" -msgid "" -"You can invite friends and family to your instance so they can enjoy your " -"music" -msgstr "" -"Du kan invitere venner og familie til din instans slik at de kan nyte " -"musikken din" +msgid "You can 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." +msgstr "Følg bibliotek fra andre brukere for Ã¥ fÃ¥ tilgang til ny musikk. Offentlige bibliotek kan følges umiddelbart, mens Ã¥ følge et privat bibliotek krever samtykke fra dets eier." #: front/src/components/moderation/FilterModal.vue:31 msgctxt "Popup/Moderation/Paragraph" -msgid "" -"You can manage and update your filters anytime from your account settings." +msgid "You can manage and update your filters any time from your account settings." msgstr "" #: front/src/views/auth/EmailConfirm.vue:24 #, fuzzy msgctxt "Content/Signup/Paragraph" msgid "You can now use the service without limitations." +msgstr "E-postadresse bekreftet, du kan nÃ¥ bruke tjenesten uten begrensninger." + +#: front/src/components/auth/Settings.vue:278 +msgctxt "Content/Settings/Paragraph'" +msgid "You can permanently and irreversibly delete your account and all the associated data using the form below. You will be asked for confirmation." msgstr "" -"E-postadresse bekreftet, du kan nÃ¥ bruke tjenesten uten begrensninger." #: front/src/components/library/radios/Builder.vue:7 msgctxt "Content/Radio/Paragraph" -msgid "" -"You can use this interface to build your own custom radio, which will play " -"tracks according to your criteria." -msgstr "" -"Du kan bruke dette grensesnittet til Ã¥ bygge din egen tilpassede " -"radiostasjon, som spiller spor i henhold til dine valg." +msgid "You can use this interface to build your own custom radio, which will play tracks according to your criteria." +msgstr "Du kan bruke dette grensesnittet til Ã¥ bygge din egen tilpassede radiostasjon, som spiller spor i henhold til dine valg." #: front/src/components/auth/SubsonicTokenForm.vue:7 msgctxt "Content/Settings/Paragraph" -msgid "" -"You can use those to enjoy your playlist and music in offline mode, on your " -"smartphone or tablet, for instance." -msgstr "" -"Du kan bruke dem til Ã¥ nyte din spilleliste og musikk i frakoblet modus, pÃ¥ " -"din telefon eller nettbrett for eksempel." +msgid "You can use those to enjoy your playlist and music in offline mode, on your smartphone or tablet, for instance." +msgstr "Du kan bruke dem til Ã¥ nyte din spilleliste og musikk i frakoblet modus, pÃ¥ din telefon eller nettbrett for eksempel." #: front/src/components/auth/Settings.vue:202 msgctxt "Content/Applications/Paragraph" @@ -5299,19 +5700,17 @@ msgctxt "Content/Moderation/Card.Title" msgid "You don't have any rule in place for this account." msgstr "" -#: front/src/views/admin/moderation/DomainsDetail.vue:39 +#: front/src/views/admin/moderation/DomainsDetail.vue:67 msgctxt "Content/Moderation/Card.Title" msgid "You don't have any rule in place for this domain." msgstr "" #: front/src/components/library/EditForm.vue:52 msgctxt "Content/Library/Paragraph" -msgid "" -"You don't have the permission to edit this object, but you can suggest " -"changes. Once submitted, suggestions will be reviewed before approval." +msgid "You don't have the permission to edit this object, but you can suggest changes. Once submitted, suggestions will be reviewed before approval." msgstr "" -#: front/src/components/Sidebar.vue:171 +#: front/src/components/Sidebar.vue:175 msgctxt "Sidebar/Player/Title" msgid "You have a radio playing" msgstr "Du har en spillende radiostasjon" @@ -5323,8 +5722,7 @@ msgstr "" #: front/src/components/auth/Settings.vue:100 msgctxt "Popup/Settings/List item" -msgid "" -"You will be logged out from this session and have to log in with the new one" +msgid "You will be logged out from this session and have to log in with the new one" msgstr "Du vil bli logget ut av denne økta, og mÃ¥ logge inn i den nye" #: front/src/components/auth/Authorize.vue:51 @@ -5339,24 +5737,24 @@ msgstr "" #: front/src/components/auth/Settings.vue:71 msgctxt "Content/Settings/Paragraph" -msgid "" -"You will have to update your password on your clients that use this " -"password." -msgstr "" -"Du vil mÃ¥tte oppdatere ditt passord pÃ¥ klienter som bruker dette passordet." +msgid "You will have to update your password on your clients that use this password." +msgstr "Du vil mÃ¥tte oppdatere ditt passord pÃ¥ klienter som bruker dette passordet." #: front/src/components/moderation/FilterModal.vue:20 msgctxt "Popup/Moderation/Paragraph" -msgid "" -"You will not see tracks, albums and user activity linked to this artist " -"anymore:" +msgid "You will not see tracks, albums and user activity linked to this artist any more:" msgstr "" -#: front/src/components/auth/Signup.vue:13 +#: front/src/components/auth/SignupForm.vue:9 msgctxt "Content/Signup/Form/Paragraph" msgid "Your account cannot be created." msgstr "" +#: front/src/components/auth/Settings.vue:281 +msgctxt "Content/Settings/Paragraph'" +msgid "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." +msgstr "" + #: front/src/components/auth/Settings.vue:215 #, fuzzy msgctxt "Content/Settings/Title/Noun" @@ -5368,6 +5766,11 @@ msgctxt "Content/Settings/Error message.Title" msgid "Your avatar cannot be saved" msgstr "" +#: front/src/components/auth/Settings.vue:527 +msgctxt "*/Auth/Message" +msgid "Your deletion request was submitted, your account and content will be deleted shortly" +msgstr "" + #: front/src/components/library/EditForm.vue:3 msgctxt "Content/Library/Paragraph" msgid "Your edit was successfully submitted." @@ -5378,12 +5781,12 @@ msgctxt "Head/Favorites/Title" msgid "Your Favorites" msgstr "Dine favoritter" -#: front/src/components/Home.vue:109 -msgctxt "Content/Home/Title" -msgid "Your music, your way" -msgstr "Din musikk, pÃ¥ din mÃ¥te" +#: front/src/views/Notifications.vue:5 +msgctxt "Content/Notifications/Title" +msgid "Your messages" +msgstr "" -#: front/src/views/Notifications.vue:4 +#: front/src/views/Notifications.vue:69 msgctxt "Content/Notifications/Title" msgid "Your notifications" msgstr "Dine merknader" @@ -5401,43 +5804,39 @@ msgstr "Passordet ditt har blitt oppdatert." #: front/src/components/auth/Settings.vue:14 #, fuzzy msgctxt "Content/Settings/Error message.Title" -msgid "Your settings can't be updateds" +msgid "Your settings can't be updated" msgstr "Innstillinger oppdatert" #: front/src/components/auth/Settings.vue:101 msgctxt "Popup/Settings/List item" -msgid "" -"Your Subsonic password will be changed to a new, random one, logging you out" -" from devices that used the old Subsonic password" -msgstr "" -"Ditt Subsonic-passord vil bli endret til noe nytt og tilfeldig, noe som " -"logger deg ut fra enheter som bruker ditt gamle Subsonic-passord." +msgid "Your Subsonic password will be changed to a new, random one, logging you out from devices that used the old Subsonic password" +msgstr "Ditt Subsonic-passord vil bli endret til noe nytt og tilfeldig, noe som logger deg ut fra enheter som bruker ditt gamle Subsonic-passord." -#: front/src/edits.js:47 +#: front/src/entities.js:126 #, fuzzy -msgctxt "*/*/*/Short, Noun" -msgid "Position" -msgstr "Beskrivelse" +msgctxt "*/*/*/Noun" +msgid "MusicBrainz ID" +msgstr "Vis pÃ¥ MusicBrainz" -#: front/src/edits.js:54 -#, fuzzy -msgctxt "Content/Track/*/Noun" -msgid "Copyright" -msgstr "Kopier" +#: front/src/main.js:110 +msgctxt "*/Error/Paragraph" +msgid "You sent too many requests and have been rate limited, please try again in %{ delay }" +msgstr "" + +#: front/src/main.js:113 +msgctxt "*/Error/Paragraph" +msgid "You sent too many requests and have been rate limited, please try again later" +msgstr "" -#: front/src/components/library/AlbumBase.vue:183 +#: front/src/components/library/AlbumBase.vue:208 #, fuzzy msgctxt "Content/Album/Header.Title" -msgid "" -"Album containing %{ count } track, by <a class=\"internal\" href=\"%{ " -"artistUrl }\">%{ artist }</a>" -msgid_plural "" -"Album containing %{ count } tracks, by <a class=\"internal\" href=\"%{ " -"artistUrl }\">%{ artist }</a>" +msgid "Album containing %{ count } track, by <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" +msgid_plural "Album containing %{ count } tracks, by <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" msgstr[0] "Album inneholdende %{ count } spor, av %{ artist }" msgstr[1] "Album inneholdende %{ count } spor, av %{ artist }" -#: front/src/components/audio/PlayButton.vue:220 +#: front/src/components/audio/PlayButton.vue:246 #, fuzzy msgctxt "*/Queue/Message" msgid "%{ count } track was added to your queue" diff --git a/front/locales/nl/LC_MESSAGES/app.po b/front/locales/nl/LC_MESSAGES/app.po index 6626a85908123f1198cfd9b5e75f3ea5ebd660a4..e7d3ac3549a80d44f0a1b81e6ac108f28c769c50 100644 --- a/front/locales/nl/LC_MESSAGES/app.po +++ b/front/locales/nl/LC_MESSAGES/app.po @@ -7,16 +7,16 @@ msgid "" msgstr "" "Project-Id-Version: front 0.1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-05-16 10:35+0200\n" -"PO-Revision-Date: 2019-04-08 08:01+0000\n" -"Last-Translator: Koen <koen.glotzbach@gmail.com>\n" +"POT-Creation-Date: 2019-10-01 15:15+0200\n" +"PO-Revision-Date: 2019-08-26 11:30+0000\n" +"Last-Translator: Keunes <keunes@mailbox.org>\n" "Language-Team: none\n" "Language: nl\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 3.2.2\n" +"X-Generator: Weblate 3.7\n" #: front/src/components/playlists/PlaylistModal.vue:9 msgctxt "Popup/Playlist/Paragraph" @@ -34,23 +34,67 @@ msgid "(empty)" msgstr "(leeg)" #: front/src/components/auth/Authorize.vue:16 -#, fuzzy msgctxt "Content/Auth/Title" msgid "%{ app } wants to access your Funkwhale account" -msgstr "Log in op je Funkwhale-account" +msgstr "%{ app } wil toegang tot je Funkwhale account" -#: front/src/components/common/ActionTable.vue:68 +#: front/src/components/About.vue:173 src/components/Home.vue:56 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } active user" +msgid_plural "%{ count } active users" +msgstr[0] "%{ count } nummer" +msgstr[1] "%{ count } nummers" + +#: front/src/components/About.vue:182 #, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } albums" +msgid_plural "%{ count } albums" +msgstr[0] "%{ count } nummer" +msgstr[1] "%{ count } nummers" + +#: front/src/components/About.vue:152 +msgctxt "*/*/*" +msgid "%{ count } allowed domains" +msgid_plural "%{ count } allowed domains" +msgstr[0] "" +msgstr[1] "" + +#: front/src/components/About.vue:179 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } artists" +msgid_plural "%{ count } artists" +msgstr[0] "%{ count } nummer" +msgstr[1] "%{ count } nummers" + +#: front/src/components/About.vue:176 src/components/Home.vue:59 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } hour of music" +msgid_plural "%{ count } hours of music" +msgstr[0] "%{ count } nummer" +msgstr[1] "%{ count } nummers" + +#: front/src/components/About.vue:188 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } listenings" +msgid_plural "%{ count } listenings" +msgstr[0] "%{ count } nummer" +msgstr[1] "%{ count } nummers" + +#: front/src/components/common/ActionTable.vue:68 msgctxt "Content/*/Paragraph" msgid "%{ count } on %{ total } selected" msgid_plural "%{ count } on %{ total } selected" -msgstr[0] "%{ count } van %{ total } element geselecteerd" -msgstr[1] "%{ count } van %{ total } elementen geselecteerd" +msgstr[0] "%{ count } van %{ total } geselecteerd" +msgstr[1] "%{ count } van %{ total } geselecteerd" -#: front/src/components/Sidebar.vue:121 src/components/audio/album/Card.vue:52 +#: front/src/components/Sidebar.vue:125 src/components/audio/album/Card.vue:52 #: front/src/views/content/libraries/Card.vue:40 -#: src/views/content/remote/Card.vue:30 -#, fuzzy +#: src/views/content/remote/Card.vue:43 msgctxt "*/*/*" msgid "%{ count } track" msgid_plural "%{ count } tracks" @@ -66,15 +110,21 @@ msgstr[0] "% { count } nummer in %{ albumsCount } albums" msgstr[1] "% { count } nummers in %{ albumsCount } albums" #: front/src/components/library/radios/Builder.vue:81 -#, fuzzy msgctxt "Content/Radio/Table.Paragraph/Short" msgid "%{ count } track matching combined filters" msgid_plural "%{ count } tracks matching combined filters" msgstr[0] "% { count } nummer komt overeen met de gecombineerde filters" msgstr[1] "% { count } nummers komen overeen met de gecombineerde filters" -#: front/src/components/playlists/Card.vue:18 +#: front/src/components/About.vue:185 #, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } tracks" +msgid_plural "%{ count } tracks" +msgstr[0] "%{ count } nummer" +msgstr[1] "%{ count } nummers" + +#: front/src/components/playlists/Card.vue:28 msgctxt "Content/*/Card/List item" msgid "%{ count} track" msgid_plural "%{ count } tracks" @@ -99,17 +149,17 @@ msgstr "%{ minutes } min" #: front/src/components/notifications/NotificationRow.vue:40 msgctxt "Content/Notifications/Paragraph" msgid "%{ username } accepted your follow on library \"%{ library }\"" -msgstr "" +msgstr "%{ username } heeft je volgverzoek voor de bibliotheek \"%{ library }\" geaccepteerd" #: front/src/components/notifications/NotificationRow.vue:39 msgctxt "Content/Notifications/Paragraph" msgid "%{ username } followed your library \"%{ library }\"" -msgstr "" +msgstr "%{ username } volgt nu je bibliotheek \"%{ library }\"" #: front/src/components/notifications/NotificationRow.vue:41 msgctxt "Content/Notifications/Paragraph" msgid "%{ username } wants to follow your library \"%{ library }\"" -msgstr "" +msgstr "%{ username } wil je bibliotheek \"%{ library }\" volgen" #: front/src/components/auth/Profile.vue:46 msgctxt "Head/Profile/Title" @@ -118,12 +168,10 @@ msgstr "%{ username }'s profiel" #: front/src/components/playlists/PlaylistModal.vue:21 msgctxt "Popup/Playlist/Paragraph" -msgid "" -"<strong>%{ track }</strong> is already in <strong>%{ playlist }</strong>." -msgstr "" +msgid "<strong>%{ track }</strong> is already in <strong>%{ playlist }</strong>." +msgstr "<strong>%{ track }</strong> staat al in <strong>%{ playlist }</strong>." -#: front/src/components/audio/artist/Card.vue:41 -#, fuzzy +#: front/src/components/audio/artist/Card.vue:11 msgctxt "Content/Artist/Card" msgid "1 album" msgid_plural "%{ count } albums" @@ -131,56 +179,78 @@ msgstr[0] "1 album" msgstr[1] "%{ count } albums" #: front/src/components/favorites/List.vue:10 -#, fuzzy msgctxt "Content/Favorites/Title" msgid "1 favorite" msgid_plural "%{ count } favorites" -msgstr[0] "%{ count } favoriet" +msgstr[0] "1 favoriet" msgstr[1] "%{ count } favorieten" -#: front/src/components/Home.vue:64 +#: front/src/components/audio/artist/Card.vue:15 #, fuzzy -msgctxt "Content/Home/Title" -msgid "A clean library" -msgstr "Een nette verzameling" +msgctxt "Content/Artist/Card" +msgid "1 track" +msgid_plural "%{ count } tracks" +msgstr[0] "Nummer toevoegen" +msgstr[1] "Nummer toevoegen" + +#: front/src/views/Notifications.vue:21 src/views/Notifications.vue:55 +msgctxt "*/*/*" +msgid "30 days" +msgstr "" + +#: front/src/views/Notifications.vue:22 src/views/Notifications.vue:56 +msgctxt "*/*/*" +msgid "60 days" +msgstr "" + +#: front/src/views/Notifications.vue:23 src/views/Notifications.vue:57 +msgctxt "*/*/*" +msgid "90 days" +msgstr "" #: front/src/components/library/FileUpload.vue:264 +#, fuzzy msgctxt "Content/Library/Help text" -msgid "A network error occured while uploading this file" +msgid "A network error occurred while uploading this file" msgstr "Er is een netwerkfout opgetreden tijdens het uploaden van dit bestand" -#: front/src/components/library/EditForm.vue:145 -#, fuzzy +#: front/src/components/library/EditForm.vue:161 msgctxt "*/*/Placeholder" msgid "A short summary describing your changes." -msgstr "Er is een fout opgetreden tijdens het opslaan van de wijzigingen" +msgstr "Een korte samenvatting van je aanpassingen." #: front/src/components/About.vue:5 -msgctxt "Content/About/Title/Short, Noun" -msgid "About %{ instance }" +#, fuzzy +msgctxt "Content/Home/Header" +msgid "About %{ podName }" msgstr "Over %{ instance }" #: front/src/components/Footer.vue:6 -#, fuzzy msgctxt "Footer/About/Title" msgid "About %{instanceName}" -msgstr "Over %{ instance }" +msgstr "Over %{instanceName}" -#: front/src/components/Footer.vue:45 +#: front/src/components/Footer.vue:53 src/components/Home.vue:85 msgctxt "Footer/*/Title/Short" msgid "About Funkwhale" msgstr "Over Funkwhale" #: front/src/components/Footer.vue:10 -#, fuzzy msgctxt "Footer/About/List item.Link" msgid "About page" -msgstr "Albumpagina" +msgstr "Over" + +#: front/src/components/Home.vue:19 +#, fuzzy +msgctxt "Content/Home/Header" +msgid "About this Funkwhale pod" +msgstr "Over Funkwhale" -#: front/src/components/About.vue:8 src/components/About.vue:67 -msgctxt "Content/About/Title" -msgid "About this instance" -msgstr "Over deze instantie" +#: front/src/components/About.vue:21 src/components/About.vue:51 +#, fuzzy +msgctxt "Content/About/Header" +msgid "About this pod" +msgstr "Over deze server" #: front/src/views/content/libraries/Detail.vue:48 msgctxt "Content/Library/Button.Label" @@ -192,119 +262,101 @@ msgctxt "Content/Library/Table/Short" msgid "Accepted" msgstr "Geaccepteerd" -#: front/src/components/auth/SubsonicTokenForm.vue:110 +#: front/src/components/auth/SubsonicTokenForm.vue:117 msgctxt "Content/Settings/Message" msgid "Access disabled" msgstr "Toegang uitgeschakeld" -#: front/src/components/mixins/Translations.vue:73 -#: front/src/components/mixins/Translations.vue:74 +#: front/src/components/mixins/Translations.vue:85 +#: front/src/components/mixins/Translations.vue:86 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to audio files, libraries, artists, albums and tracks" -msgstr "" +msgstr "Toegang tot audiobestanden, bibliotheken, artiesten, albums, en nummers" -#: front/src/components/mixins/Translations.vue:97 -#: front/src/components/mixins/Translations.vue:98 +#: front/src/components/mixins/Translations.vue:109 +#: front/src/components/mixins/Translations.vue:110 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to content filters" msgstr "" -#: front/src/components/mixins/Translations.vue:105 -#: front/src/components/mixins/Translations.vue:106 -#, fuzzy +#: front/src/components/mixins/Translations.vue:117 +#: front/src/components/mixins/Translations.vue:118 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to edits" -msgstr "Toegang uitgeschakeld" +msgstr "Toegang tot bewerkingen" -#: front/src/components/mixins/Translations.vue:69 -#: front/src/components/mixins/Translations.vue:70 +#: front/src/components/mixins/Translations.vue:81 +#: front/src/components/mixins/Translations.vue:82 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to email, username, and profile information" -msgstr "" +msgstr "Toegang tot je emailadres, gebruikersnaam en profiel" -#: front/src/components/mixins/Translations.vue:77 -#: front/src/components/mixins/Translations.vue:78 -#, fuzzy +#: front/src/components/mixins/Translations.vue:89 +#: front/src/components/mixins/Translations.vue:90 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to favorites" -msgstr "Toevoegen aan favorieten" +msgstr "Toegang tot favorieten" -#: front/src/components/mixins/Translations.vue:85 -#: front/src/components/mixins/Translations.vue:86 +#: front/src/components/mixins/Translations.vue:97 +#: front/src/components/mixins/Translations.vue:98 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to follows" -msgstr "" +msgstr "Toegang tot je volg-lijst" -#: front/src/components/mixins/Translations.vue:81 -#: front/src/components/mixins/Translations.vue:82 +#: front/src/components/mixins/Translations.vue:93 +#: front/src/components/mixins/Translations.vue:94 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to listening history" -msgstr "" +msgstr "Toegang tot je luistergeschiedenis" -#: front/src/components/mixins/Translations.vue:101 -#: front/src/components/mixins/Translations.vue:102 -#, fuzzy +#: front/src/components/mixins/Translations.vue:113 +#: front/src/components/mixins/Translations.vue:114 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to notifications" -msgstr "Je meldingen" +msgstr "Toegang tot notificaties" -#: front/src/components/mixins/Translations.vue:89 -#: front/src/components/mixins/Translations.vue:90 -#, fuzzy +#: front/src/components/mixins/Translations.vue:101 +#: front/src/components/mixins/Translations.vue:102 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to playlists" -msgstr "Toevoegen aan afspeellijst…" +msgstr "Toegang tot afspeellijsten" -#: front/src/components/mixins/Translations.vue:93 -#: front/src/components/mixins/Translations.vue:94 -#, fuzzy +#: front/src/components/mixins/Translations.vue:105 +#: front/src/components/mixins/Translations.vue:106 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to radios" -msgstr "Toegang uitgeschakeld" - -#: front/src/components/Home.vue:101 -#, fuzzy -msgctxt "Content/Home/List item" -msgid "" -"Access your music from a clean interface that focuses on what really matters" -msgstr "" -"Toegang tot je muziek, met een nette gebruikersomgeving die de nadruk legt " -"op wat écht belangrijk is" +msgstr "Toegang tot radio's" #: front/src/components/manage/library/UploadsTable.vue:67 -#: front/src/components/mixins/Translations.vue:45 +#: front/src/components/mixins/Translations.vue:55 #: front/src/views/admin/library/UploadDetail.vue:175 -#: front/src/components/mixins/Translations.vue:46 +#: front/src/components/mixins/Translations.vue:56 msgctxt "Content/*/*/Noun" msgid "Accessed date" msgstr "Benaderd op" -#: front/src/views/admin/library/LibraryDetail.vue:104 -#: front/src/views/admin/library/UploadDetail.vue:111 -#, fuzzy -msgctxt "*/*/*/Noun" -msgid "Account" -msgstr "Mijn account" - #: front/src/components/manage/library/LibrariesTable.vue:49 #: front/src/components/manage/library/UploadsTable.vue:61 -#, fuzzy -msgctxt "*/*/*" +#: front/src/components/manage/moderation/ReportCard.vue:156 +#: front/src/components/mixins/Report.vue:13 +#: front/src/views/admin/library/LibraryDetail.vue:113 +#: front/src/views/admin/library/UploadDetail.vue:111 +#: front/src/components/mixins/Report.vue:14 +msgctxt "*/*/*/Noun" msgid "Account" -msgstr "Mijn account" +msgstr "Account" #: front/src/views/admin/moderation/AccountsDetail.vue:107 -#, fuzzy msgctxt "Content/Moderation/Title" msgid "Account data" -msgstr "Actief account" +msgstr "Accountgegevens" #: front/src/components/auth/Settings.vue:5 msgctxt "Content/Settings/Title" msgid "Account settings" msgstr "Accountinstellingen" -#: front/src/components/auth/Settings.vue:479 +#: front/src/components/auth/Settings.vue:544 msgctxt "Head/Settings/Title" msgid "Account Settings" msgstr "Accountinstellingen" @@ -321,11 +373,10 @@ msgstr "E-mailadres van account" #: front/src/views/admin/moderation/AccountsList.vue:3 #: front/src/views/admin/moderation/AccountsList.vue:24 -#: front/src/views/admin/moderation/Base.vue:8 -#, fuzzy +#: front/src/views/admin/moderation/Base.vue:11 msgctxt "*/Moderation/Title" msgid "Accounts" -msgstr "Accountstatus" +msgstr "Accounts" #: front/src/views/content/libraries/Detail.vue:29 msgctxt "Content/Library/Table.Label" @@ -333,32 +384,32 @@ msgid "Action" msgstr "Actie" #: front/src/components/common/ActionTable.vue:101 -#, fuzzy msgctxt "Content/*/Paragraph" msgid "Action %{ action } was launched successfully on %{ count } element" -msgid_plural "" -"Action %{ action } was launched successfully on %{ count } elements" +msgid_plural "Action %{ action } was launched successfully on %{ count } elements" msgstr[0] "Actie %{ action } is begonnen voor %{ count } element" msgstr[1] "Actie %{ action } is begonnen voor %{ count } elementen" #: front/src/components/common/ActionTable.vue:22 #: front/src/components/library/radios/Builder.vue:65 +#: front/src/components/manage/moderation/ReportCard.vue:210 msgctxt "Content/*/*/Noun" msgid "Actions" msgstr "Acties" -#: front/src/components/manage/users/UsersTable.vue:53 +#: front/src/components/manage/users/UsersTable.vue:54 msgctxt "Content/Admin/Table" msgid "Active" msgstr "Actief" -#: front/src/views/admin/library/AlbumDetail.vue:134 -#: front/src/views/admin/library/ArtistDetail.vue:123 -#: front/src/views/admin/library/LibraryDetail.vue:138 -#: front/src/views/admin/library/TrackDetail.vue:186 +#: front/src/views/admin/library/AlbumDetail.vue:140 +#: front/src/views/admin/library/ArtistDetail.vue:128 +#: front/src/views/admin/library/LibraryDetail.vue:147 +#: front/src/views/admin/library/TagDetail.vue:83 +#: front/src/views/admin/library/TrackDetail.vue:192 #: front/src/views/admin/library/UploadDetail.vue:160 -#: front/src/views/admin/moderation/AccountsDetail.vue:220 -#: front/src/views/admin/moderation/DomainsDetail.vue:136 +#: front/src/views/admin/moderation/AccountsDetail.vue:221 +#: front/src/views/admin/moderation/DomainsDetail.vue:173 msgctxt "Content/Moderation/Title" msgid "Activity" msgstr "Activiteit" @@ -369,15 +420,15 @@ msgctxt "Content/Settings/Dropdown.Label/Noun" msgid "Activity visibility" msgstr "Zichtbaarheid van activiteit" -#: front/src/views/admin/moderation/DomainsList.vue:18 +#: front/src/views/admin/moderation/DomainsList.vue:22 msgctxt "Content/Moderation/Button/Verb" msgid "Add" -msgstr "" +msgstr "Toevoegen" #: front/src/views/admin/moderation/DomainsList.vue:13 msgctxt "Content/Moderation/Form.Label/Verb" msgid "Add a domain" -msgstr "" +msgstr "Domein toevoegen" #: front/src/views/admin/moderation/AccountsDetail.vue:79 msgctxt "Content/Moderation/Button/Verb" @@ -387,7 +438,7 @@ msgstr "" #: front/src/components/manage/moderation/InstancePolicyForm.vue:4 msgctxt "Content/Moderation/Card.Button.Label/Verb" msgid "Add a new moderation rule" -msgstr "" +msgstr "Nieuwe moderatieregel toevoegen" #: front/src/views/content/Home.vue:35 msgctxt "Content/Library/Title/Verb" @@ -398,12 +449,12 @@ msgstr "Inhoud toevoegen en beheren" #: front/src/components/playlists/PlaylistModal.vue:31 msgctxt "*/Playlist/Button.Label/Verb" msgid "Add anyways" -msgstr "" +msgstr "Toch toevoegen" #: front/src/components/Sidebar.vue:75 src/views/content/Base.vue:18 msgctxt "*/Library/*/Verb" msgid "Add content" -msgstr "Inhoud toevoegen" +msgstr "Content toevoegen" #: front/src/components/library/radios/Builder.vue:51 msgctxt "Content/Radio/Button.Label/Verb" @@ -415,11 +466,24 @@ msgctxt "Content/Radio/Paragraph" msgid "Add filters to customize your radio" msgstr "Voeg filters toe om je radio te personaliseren" -#: front/src/components/audio/PlayButton.vue:75 +#: front/src/components/manage/moderation/NoteForm.vue:12 #, fuzzy +msgctxt "Content/Moderation/Button.Label/Verb" +msgid "Add note" +msgstr "Content toevoegen" + +#: front/src/components/manage/moderation/DomainsTable.vue:191 +#: front/src/views/admin/moderation/DomainsDetail.vue:46 +#: front/src/views/admin/moderation/DomainsList.vue:18 +#, fuzzy +msgctxt "Content/Moderation/Action/Verb" +msgid "Add to allow-list" +msgstr "Aan afspeellijst toevoegen…" + +#: front/src/components/audio/PlayButton.vue:91 msgctxt "*/Queue/Dropdown/Button/Title" msgid "Add to current queue" -msgstr "Toevoegen aan wachtrij" +msgstr "Aan huidige wachtrij toevoegen" #: front/src/components/favorites/TrackFavoriteIcon.vue:4 #: front/src/components/favorites/TrackFavoriteIcon.vue:28 @@ -429,10 +493,9 @@ msgstr "Toevoegen aan favorieten" #: front/src/components/playlists/TrackPlaylistIcon.vue:6 #: front/src/components/playlists/TrackPlaylistIcon.vue:34 -#, fuzzy msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Add to playlist…" -msgstr "Toevoegen aan afspeellijst…" +msgstr "Aan afspeellijst toevoegen…" #: front/src/components/audio/PlayButton.vue:15 msgctxt "*/Queue/Dropdown/Button/Label/Short" @@ -449,7 +512,7 @@ msgctxt "Popup/Playlist/Table.Button.Label/Verb" msgid "Add track" msgstr "Nummer toevoegen" -#: front/src/components/manage/users/UsersTable.vue:69 +#: front/src/components/manage/users/UsersTable.vue:70 msgctxt "Content/Admin/Table.User role" msgid "Admin" msgstr "Beheerder" @@ -459,51 +522,49 @@ msgctxt "Sidebar/Admin/Title/Noun" msgid "Administration" msgstr "Administratie" -#: front/src/views/admin/library/TrackDetail.vue:107 -msgctxt "*/*/*/Noun" -msgid "Album" -msgstr "Album" - -#: front/src/components/audio/SearchBar.vue:26 +#: front/src/components/audio/SearchBar.vue:33 #: src/components/audio/track/Table.vue:9 -#: front/src/components/library/AlbumBase.vue:152 -#: front/src/components/library/ArtistBase.vue:194 +#: front/src/components/library/AlbumBase.vue:170 +#: front/src/components/library/ArtistBase.vue:212 #: front/src/components/manage/library/TracksTable.vue:40 #: front/src/components/metadata/Search.vue:134 +#: src/components/mixins/Report.vue:41 +#: front/src/views/admin/library/TrackDetail.vue:113 #: front/src/views/content/libraries/FilesTable.vue:57 +#: front/src/components/mixins/Report.vue:42 msgctxt "*/*/*" msgid "Album" msgstr "Album" -#: front/src/views/admin/library/TrackDetail.vue:128 -#, fuzzy +#: front/src/views/admin/library/TrackDetail.vue:134 msgctxt "*/*/*/Noun" msgid "Album artist" -msgstr "Albums van deze artiest" +msgstr "Albumartiest" -#: front/src/views/admin/library/AlbumDetail.vue:92 -#, fuzzy +#: front/src/views/admin/library/AlbumDetail.vue:98 msgctxt "Content/Moderation/Title" msgid "Album data" -msgstr "Albumpagina" +msgstr "Albumgegevens" -#: front/src/components/mixins/Translations.vue:51 -#: front/src/components/mixins/Translations.vue:52 +#: front/src/components/mixins/Translations.vue:61 +#: front/src/components/mixins/Translations.vue:62 msgctxt "Content/*/Dropdown/Noun" msgid "Album name" msgstr "Albumnaam" #: front/src/components/audio/Search.vue:19 -#: src/components/instance/Stats.vue:48 -#: front/src/components/library/Albums.vue:120 -#: src/components/library/Library.vue:7 +#: src/components/library/Albums.vue:129 +#: front/src/components/library/Library.vue:7 +#: src/components/library/TagDetail.vue:28 #: front/src/components/manage/library/ArtistsTable.vue:41 +#: front/src/components/manage/library/TagsTable.vue:43 #: front/src/views/admin/library/AlbumsList.vue:24 -#: front/src/views/admin/library/ArtistDetail.vue:241 +#: front/src/views/admin/library/ArtistDetail.vue:256 #: front/src/views/admin/library/Base.vue:11 -#: front/src/views/admin/library/LibraryDetail.vue:219 -#: front/src/views/admin/moderation/AccountsDetail.vue:354 -#: front/src/views/admin/moderation/DomainsDetail.vue:264 +#: front/src/views/admin/library/LibraryDetail.vue:238 +#: front/src/views/admin/library/TagDetail.vue:133 +#: front/src/views/admin/moderation/AccountsDetail.vue:366 +#: front/src/views/admin/moderation/DomainsDetail.vue:301 msgctxt "*/*/*" msgid "Albums" msgstr "Albums" @@ -517,92 +578,103 @@ msgstr "Albums van deze artiest" #: front/src/components/manage/library/LibrariesTable.vue:13 #: front/src/components/manage/library/UploadsTable.vue:13 #: front/src/components/manage/library/UploadsTable.vue:22 +#: front/src/components/manage/moderation/DomainsTable.vue:11 #: front/src/components/manage/users/InvitationsTable.vue:19 +#: front/src/components/moderation/ReportCategoryDropdown.vue:32 +#: front/src/views/admin/moderation/ReportsList.vue:17 #: front/src/views/content/libraries/FilesTable.vue:13 msgctxt "Content/*/Dropdown" msgid "All" msgstr "Alles" #: front/src/components/common/ActionTable.vue:59 -#, fuzzy msgctxt "Content/*/Paragraph" msgid "All %{ count } element selected" msgid_plural "All %{ count } elements selected" -msgstr[0] "%{ count } van %{ total } element geselecteerd" -msgstr[1] "%{ count } van %{ total } elementen geselecteerd" +msgstr[0] "Één element geselecteerd" +msgstr[1] "Alle %{ count } elementen geselecteerd" #: front/src/components/auth/Authorize.vue:107 msgctxt "Head/Authorize/Title" msgid "Allow application" +msgstr "Deze applicatie toestaan" + +#: front/src/components/About.vue:136 +msgctxt "*/*/*" +msgid "Allow-list" msgstr "" +#: front/src/components/About.vue:149 +#, fuzzy +msgctxt "*/*/*" +msgid "Allowed domains" +msgstr "Domein toevoegen" + #: front/src/components/library/ImportStatusModal.vue:17 +#, fuzzy msgctxt "Popup/Import/Message" -msgid "" -"An error occured during upload processing. You will find more information " -"below." -msgstr "" +msgid "An error occurred during upload processing. You will find more information below." +msgstr "Er ging iets fout bij het verwerken van je upload. Meer informatie hieronder." #: front/src/components/playlists/Editor.vue:13 +#, fuzzy msgctxt "Content/Playlist/Error message.Title" -msgid "An error occured while saving your changes" +msgid "An error occurred while saving your changes" msgstr "Er is een fout opgetreden tijdens het opslaan van de wijzigingen" #: front/src/components/federation/FetchButton.vue:21 #, fuzzy msgctxt "Popup/*/Message.Content" -msgid "An error occured while trying to refresh data:" -msgstr "Er is een fout opgetreden tijdens het opslaan van de wijzigingen" +msgid "An error occurred while trying to refresh data:" +msgstr "Er ging iets fout tijdens het vernieuwen van de gegevens:" #: front/src/components/federation/FetchButton.vue:41 #, fuzzy msgctxt "*/*/Error" -msgid "An HTTP error occured while contacting the remote server" -msgstr "Er is een fout opgetreden tijdens het opslaan van de wijzigingen" - -#: front/src/components/auth/Login.vue:10 -msgctxt "Content/Login/Error message/List item" -msgid "" -"An unknown error happend, this can mean the server is down or cannot be " -"reached" -msgstr "" -"Er is een onbekende fout opgetreden: mogelijk staat de server uit of is " -"onbereikbaar" +msgid "An HTTP error occurred while contacting the remote server" +msgstr "Er ging iets fout bij het contact maken met de externe server" #: front/src/components/library/ImportStatusModal.vue:145 +#, fuzzy msgctxt "Popup/Import/Error.Label" -msgid "An unkwown error occured" +msgid "An unknown error occurred" +msgstr "Er is een onbekende fout opgetreden" + +#: front/src/components/About.vue:123 +msgctxt "*/*/*" +msgid "Anonymous access" +msgstr "" + +#: front/src/components/moderation/ReportModal.vue:54 +msgctxt "Popup/Moderation/Error message" +msgid "Anonymous reports are disabled, please sign-in to submit a report." msgstr "" #: front/src/components/auth/Settings.vue:175 #: src/components/auth/Settings.vue:225 -#, fuzzy msgctxt "*/*/*/Noun" msgid "Application" -msgstr "Actie" +msgstr "Applicatie" #: front/src/components/auth/ApplicationEdit.vue:12 msgctxt "Content/Applications/Title" msgid "Application details" -msgstr "" +msgstr "Applicatie-details" #: front/src/components/auth/ApplicationEdit.vue:21 -#, fuzzy msgctxt "Content/Applications/Label" msgid "Application ID" -msgstr "Actie" +msgstr "Applicatie-ID" #: front/src/components/auth/ApplicationEdit.vue:16 msgctxt "Content/Application/Paragraph/" -msgid "" -"Application ID and secret are really sensitive values and must be treated " -"like passwords. Do not share those with anyone else." -msgstr "" +msgid "Application ID and secret are really sensitive values and must be treated like passwords. Do not share those with anyone else." +msgstr "De applicatie-ID en sleutel zijn gevoelige gegevens en moet je als wachtwoord beschouwen. Deel ze niet met anderen." #: front/src/components/auth/ApplicationEdit.vue:25 msgctxt "Content/Applications/Label" msgid "Application secret" -msgstr "" +msgstr "Applicatie-sleutel" #: front/src/components/library/EditCard.vue:81 #: front/src/components/notifications/NotificationRow.vue:66 @@ -626,70 +698,66 @@ msgctxt "Content/Login/Title" msgid "Are you sure you want to log out?" msgstr "Weet je zeker dat je wilt uitloggen?" +#: front/src/components/audio/SearchBar.vue:32 +#: src/components/audio/track/Table.vue:8 #: front/src/components/manage/library/AlbumsTable.vue:40 #: front/src/components/manage/library/TracksTable.vue:41 -msgctxt "*/*/*" -msgid "Artist" -msgstr "Artiest" - -#: front/src/components/audio/SearchBar.vue:25 -#: src/components/audio/track/Table.vue:8 #: front/src/components/metadata/Search.vue:130 -#: front/src/views/admin/library/AlbumDetail.vue:108 -#: front/src/views/admin/library/TrackDetail.vue:118 -#: front/src/views/content/libraries/FilesTable.vue:56 +#: src/components/mixins/Report.vue:55 +#: front/src/views/admin/library/AlbumDetail.vue:114 +#: front/src/views/admin/library/TrackDetail.vue:124 +#: front/src/views/content/libraries/FilesTable.vue:56 src/entities.js:12 +#: front/src/components/mixins/Report.vue:56 msgctxt "*/*/*/Noun" msgid "Artist" msgstr "Artiest" -#: front/src/views/admin/library/ArtistDetail.vue:91 -#, fuzzy +#: front/src/views/admin/library/ArtistDetail.vue:96 msgctxt "Content/Moderation/Title" msgid "Artist data" -msgstr "Artiestnaam" +msgstr "Artiestgegevens" -#: front/src/components/mixins/Translations.vue:52 -#: front/src/components/mixins/Translations.vue:53 +#: front/src/components/mixins/Translations.vue:62 +#: front/src/components/mixins/Translations.vue:63 msgctxt "Content/*/Dropdown/Noun" msgid "Artist name" msgstr "Artiestnaam" #: front/src/components/audio/Search.vue:65 -#, fuzzy msgctxt "*/Search/Input.Placeholder" msgid "Artist, album, track…" -msgstr "Artiest, album, nummer..." +msgstr "Artiest, album, nummer…" +#: front/src/components/audio/Search.vue:10 +#: src/components/library/Artists.vue:117 +#: front/src/components/library/Library.vue:10 +#: front/src/components/library/TagDetail.vue:19 +#: front/src/components/manage/library/TagsTable.vue:42 #: front/src/views/admin/library/ArtistsList.vue:24 #: front/src/views/admin/library/Base.vue:8 -#: front/src/views/admin/library/LibraryDetail.vue:209 -msgctxt "*/*/*" -msgid "Artists" -msgstr "Artiesten" - -#: front/src/components/audio/Search.vue:10 -#: src/components/instance/Stats.vue:42 -#: front/src/components/library/Artists.vue:117 -#: src/components/library/Library.vue:10 -#: front/src/views/admin/moderation/AccountsDetail.vue:346 -#: front/src/views/admin/moderation/DomainsDetail.vue:254 +#: front/src/views/admin/library/LibraryDetail.vue:228 +#: front/src/views/admin/library/TagDetail.vue:123 +#: front/src/views/admin/moderation/AccountsDetail.vue:358 +#: front/src/views/admin/moderation/DomainsDetail.vue:291 msgctxt "*/*/*/Noun" msgid "Artists" msgstr "Artiesten" #: front/src/components/favorites/List.vue:34 -#: src/components/library/Albums.vue:25 -#: front/src/components/library/Artists.vue:25 +#: src/components/library/Albums.vue:29 +#: front/src/components/library/Artists.vue:29 #: src/components/library/Radios.vue:44 #: front/src/components/manage/library/AlbumsTable.vue:21 #: front/src/components/manage/library/ArtistsTable.vue:21 #: front/src/components/manage/library/EditsCardList.vue:39 #: front/src/components/manage/library/LibrariesTable.vue:30 +#: front/src/components/manage/library/TagsTable.vue:21 #: front/src/components/manage/library/TracksTable.vue:21 #: front/src/components/manage/library/UploadsTable.vue:40 #: front/src/components/manage/moderation/AccountsTable.vue:21 -#: front/src/components/manage/moderation/DomainsTable.vue:19 +#: front/src/components/manage/moderation/DomainsTable.vue:27 #: front/src/components/manage/users/UsersTable.vue:19 +#: front/src/views/admin/moderation/ReportsList.vue:44 #: front/src/views/content/libraries/FilesTable.vue:31 #: front/src/views/playlists/List.vue:27 msgctxt "Content/Search/Dropdown" @@ -701,22 +769,27 @@ msgctxt "Content/Signup/Button.Label/Verb" msgid "Ask for a password reset" msgstr "Wachtwoordherstel aanvragen" -#: front/src/views/admin/library/AlbumDetail.vue:198 -#: front/src/views/admin/library/ArtistDetail.vue:187 -#: front/src/views/admin/library/LibraryDetail.vue:176 -#: front/src/views/admin/library/TrackDetail.vue:250 +#: front/src/components/manage/moderation/ReportCard.vue:72 +msgctxt "Content/Moderation/*" +msgid "Assigned to" +msgstr "" + +#: front/src/views/admin/library/AlbumDetail.vue:214 +#: front/src/views/admin/library/ArtistDetail.vue:202 +#: front/src/views/admin/library/LibraryDetail.vue:195 +#: front/src/views/admin/library/TagDetail.vue:113 +#: front/src/views/admin/library/TrackDetail.vue:266 #: front/src/views/admin/library/UploadDetail.vue:191 -#: front/src/views/admin/moderation/AccountsDetail.vue:274 -#: front/src/views/admin/moderation/DomainsDetail.vue:202 -#, fuzzy +#: front/src/views/admin/moderation/AccountsDetail.vue:285 +#: front/src/views/admin/moderation/DomainsDetail.vue:239 msgctxt "Content/Moderation/Title" msgid "Audio content" -msgstr "Inhoud toevoegen" +msgstr "Audio-inhoud" -#: front/src/components/ShortcutsModal.vue:55 +#: front/src/components/ShortcutsModal.vue:92 msgctxt "Popup/Keyboard shortcuts/Title" msgid "Audio player shortcuts" -msgstr "" +msgstr "Sneltoetsen audio-player" #: front/src/components/auth/Authorize.vue:47 msgctxt "Content/Signup/Button.Label/Verb" @@ -751,15 +824,14 @@ msgstr "Terug naar inlogpagina" #: front/src/components/auth/ApplicationEdit.vue:9 #: front/src/components/auth/ApplicationNew.vue:5 -#, fuzzy msgctxt "Content/Applications/Link" msgid "Back to settings" -msgstr "Instellingen bijwerken" +msgstr "Terug naar instellingen" #: front/src/components/library/TrackDetail.vue:48 -#: front/src/components/mixins/Translations.vue:55 +#: front/src/components/mixins/Translations.vue:67 #: front/src/views/admin/library/UploadDetail.vue:227 -#: front/src/components/mixins/Translations.vue:56 +#: front/src/components/mixins/Translations.vue:68 msgctxt "Content/Track/*/Noun" msgid "Bitrate" msgstr "Bitsnelheid" @@ -768,15 +840,12 @@ msgstr "Bitsnelheid" #: front/src/components/manage/moderation/InstancePolicyForm.vue:34 msgctxt "Content/Moderation/*/Verb" msgid "Block everything" -msgstr "" +msgstr "Alles blokkeren" #: front/src/components/manage/moderation/InstancePolicyForm.vue:112 msgctxt "Content/Moderation/Help text" -msgid "" -"Block everything from this account or domain. This will prevent any " -"interaction with the entity, and purge related content (uploads, libraries, " -"follows, etc.)" -msgstr "" +msgid "Block everything from this account or domain. This will prevent any interaction with the entity, and purge related content (uploads, libraries, follows, etc.)" +msgstr "Alles van dit account of deze domeinnaam blokkeren. Dit voorkomt elke interactie en verwijdert alle gerelateerde gegevens (uploads, bibliotheken, gevolgde accounts, enz.)" #: front/src/components/Sidebar.vue:18 src/components/library/Library.vue:4 msgctxt "*/Library/*/Verb" @@ -786,13 +855,17 @@ msgstr "Bladeren" #: front/src/components/Sidebar.vue:65 msgctxt "Sidebar/Library/List item.Link/Verb" msgid "Browse library" -msgstr "Verzameling doorbladeren" +msgstr "Bibliotheek doorbladeren" + +#: front/src/components/Home.vue:132 +msgctxt "Content/Home/Link" +msgid "Browse public content" +msgstr "" #: front/src/components/library/Albums.vue:4 -#, fuzzy msgctxt "Content/Album/Title" msgid "Browsing albums" -msgstr "Radio's doorbladeren" +msgstr "Albums doorbladeren" #: front/src/components/library/Artists.vue:4 msgctxt "Content/Artist/Title" @@ -819,44 +892,43 @@ msgctxt "Content/Album/Card" msgid "By %{ artist }" msgstr "Van %{ artist }" -#: front/src/views/content/remote/Card.vue:112 -#, fuzzy +#: front/src/views/content/remote/Card.vue:125 msgctxt "Popup/Library/Paragraph" msgid "By unfollowing this library, you loose access to its content." -msgstr "" -"Als je deze verzameling ontvolgt, dan verlies je toegang tot alle inhoud." +msgstr "Als je deze bibliotheek ontvolgt, verlies je toegang tot haar inhoud." -#: front/src/views/admin/library/AlbumDetail.vue:214 -#: front/src/views/admin/library/ArtistDetail.vue:203 -#: front/src/views/admin/library/LibraryDetail.vue:192 -#: front/src/views/admin/library/TrackDetail.vue:266 +#: front/src/views/admin/library/AlbumDetail.vue:230 +#: front/src/views/admin/library/ArtistDetail.vue:218 +#: front/src/views/admin/library/LibraryDetail.vue:211 +#: front/src/views/admin/library/TrackDetail.vue:282 #: front/src/views/admin/library/UploadDetail.vue:208 -#: front/src/views/admin/moderation/AccountsDetail.vue:290 -#: front/src/views/admin/moderation/DomainsDetail.vue:217 +#: front/src/views/admin/moderation/AccountsDetail.vue:301 +#: front/src/views/admin/moderation/DomainsDetail.vue:254 msgctxt "Content/Moderation/Table.Label/Noun" msgid "Cached size" msgstr "" #: front/src/components/SetInstanceModal.vue:37 #: front/src/components/common/DangerousButton.vue:17 -#: front/src/components/library/AlbumBase.vue:36 -#: front/src/components/library/ArtistBase.vue:47 -#: front/src/components/library/EditForm.vue:95 -#: front/src/components/library/TrackBase.vue:55 +#: front/src/components/library/AlbumBase.vue:37 +#: front/src/components/library/ArtistBase.vue:48 +#: front/src/components/library/EditForm.vue:107 +#: front/src/components/library/TrackBase.vue:53 #: front/src/components/library/radios/Filter.vue:53 #: front/src/components/manage/moderation/InstancePolicyForm.vue:54 #: front/src/components/moderation/FilterModal.vue:39 +#: front/src/components/moderation/ReportModal.vue:59 #: front/src/components/playlists/PlaylistModal.vue:26 #: front/src/components/playlists/PlaylistModal.vue:77 +#: front/src/views/playlists/Detail.vue:62 msgctxt "*/*/Button.Label/Verb" msgid "Cancel" msgstr "Annuleren" -#: front/src/views/content/remote/Card.vue:97 -#, fuzzy +#: front/src/views/content/remote/Card.vue:110 msgctxt "Content/Library/Card.Paragraph" msgid "Cancel follow request" -msgstr "In behandeling zijnde volgverzoeken" +msgstr "Volgverzoek intrekken" #: front/src/components/library/radios/Builder.vue:64 msgctxt "Content/Radio/Table.Label/Noun (Value is a number of Tracks)" @@ -864,11 +936,18 @@ msgid "Candidates" msgstr "Mogelijkheden" #: front/src/components/library/FileUpload.vue:261 -#, fuzzy msgctxt "Content/Library/Help text" msgid "Cannot upload this file, ensure it is not too big" msgstr "Kan dit bestand niet uploaden; zorg ervoor dat het niet te groot is" +#: front/src/components/manage/moderation/ReportCard.vue:30 +#: front/src/components/mixins/Translations.vue:42 +#: front/src/components/moderation/ReportCategoryDropdown.vue:2 +#: front/src/components/mixins/Translations.vue:43 +msgctxt "*/*/*" +msgid "Category" +msgstr "" + #: front/src/components/Footer.vue:21 msgctxt "Footer/Settings/Dropdown.Label/Short, Verb" msgid "Change language" @@ -884,6 +963,11 @@ msgctxt "Content/Settings/Button.Label" msgid "Change password" msgstr "Wachtwoord wijzigen" +#: front/src/components/Footer.vue:37 +msgctxt "Footer/Settings/Dropdown.Label/Short, Verb" +msgid "Change theme" +msgstr "" + #: front/src/views/auth/PasswordResetConfirm.vue:62 msgctxt "*/Signup/Title" msgid "Change your password" @@ -901,42 +985,32 @@ msgstr "Wijzigingen opgeslagen op server" #: front/src/components/auth/Settings.vue:71 msgctxt "Content/Settings/Paragraph'" -msgid "" -"Changing your password will also change your Subsonic API password if you " -"have requested one." -msgstr "" -"Als je je wachtwoord wijzigt, dan wordt ook het wachtwoord voor de Subsonic-" -"API gewijzigd als je deze had ingesteld." +msgid "Changing your password will also change your Subsonic API password if you have requested one." +msgstr "Als je je wachtwoord wijzigt, dan wordt ook het wachtwoord voor de Subsonic-API gewijzigd als je deze had ingesteld." #: front/src/components/auth/Settings.vue:98 -#, fuzzy msgctxt "Popup/Settings/Paragraph" msgid "Changing your password will have the following consequences:" -msgstr "Het aanpassen van je wachtwoord heeft gevolgen" +msgstr "Het aanpassen van je wachtwoord heeft de volgende gevolgen:" -#: front/src/components/Footer.vue:40 +#: front/src/components/Footer.vue:48 msgctxt "Footer/*/List item.Link" msgid "Chat room" -msgstr "" +msgstr "Chat-ruimte" #: front/src/components/auth/ApplicationForm.vue:24 msgctxt "Content/Applications/Paragraph/" -msgid "" -"Checking the parent \"Read\" or \"Write\" scopes implies access to all the " -"corresponding children scopes." +msgid "Checking the parent \"Read\" or \"Write\" scopes implies access to all the corresponding children scopes." msgstr "" #: front/src/components/SetInstanceModal.vue:2 msgctxt "Popup/Instance/Title" msgid "Choose your instance" -msgstr "Kies je instantie" - -#: front/src/components/manage/users/InvitationForm.vue:37 -msgctxt "Content/Admin/Button.Label/Verb" -msgid "Clear" -msgstr "Wissen" +msgstr "Kies je server" #: front/src/components/library/EditForm.vue:75 +#: front/src/components/library/EditForm.vue:88 +#: front/src/components/manage/users/InvitationForm.vue:37 msgctxt "Content/Library/Button.Label" msgid "Clear" msgstr "Wissen" @@ -947,44 +1021,46 @@ msgctxt "*/Playlist/Button.Label/Verb" msgid "Clear playlist" msgstr "Afspeellijst wissen" -#: front/src/components/audio/Player.vue:642 +#: front/src/components/ShortcutsModal.vue:144 +#, fuzzy +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Clear queue" +msgstr "Wachtrij wissen" + +#: front/src/components/audio/Player.vue:668 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Clear your queue" msgstr "Wachtrij wissen" -#: front/src/components/Home.vue:44 -msgctxt "Content/Home/List item/Verb" -msgid "Click once, listen for hours using built-in radios" -msgstr "Met één druk op de knop urenlang muziek uit ingebouwde radiostations" - #: front/src/components/mixins/Translations.vue:21 #: front/src/components/mixins/Translations.vue:22 msgctxt "Content/Library/Link.Title" -msgid "" -"Click to display more information about the import process for this upload" -msgstr "" +msgid "Click to display more information about the import process for this upload" +msgstr "Klik voor meer informatie over het importeerproces van deze upload" #: front/src/components/library/FileUpload.vue:82 msgctxt "Content/Library/Paragraph/Call to action" msgid "Click to select files to upload or drag and drop files or directories" -msgstr "" -"Klik om bestanden te selecteren, of sleep bestanden of mappen hierheen" +msgstr "Klik om bestanden te selecteren, of sleep bestanden of mappen hierheen" +#: front/src/components/ShortcutsModal.vue:38 #: front/src/components/federation/FetchButton.vue:85 #: front/src/components/library/ImportStatusModal.vue:79 +#: front/src/components/manage/moderation/InstancePolicyModal.vue:34 msgctxt "*/*/Button.Label/Verb" msgid "Close" -msgstr "" - -#: front/src/components/ShortcutsModal.vue:20 -msgctxt "Popup/Keyboard shortcuts/Button.Label/Verb" -msgid "Close" -msgstr "" +msgstr "Sluiten" #: front/src/components/federation/FetchButton.vue:88 msgctxt "*/*/Button.Label/Verb" msgid "Close and reload page" -msgstr "" +msgstr "Sluiten en pagina vernieuwen" + +#: front/src/components/About.vue:94 +#, fuzzy +msgctxt "*/*/*/State of registrations" +msgid "Closed" +msgstr "Sluiten" #: front/src/components/manage/users/InvitationForm.vue:26 #: front/src/components/manage/users/InvitationsTable.vue:42 @@ -993,8 +1069,9 @@ msgid "Code" msgstr "Code" #: front/src/components/audio/album/Card.vue:41 -#: front/src/components/audio/artist/Card.vue:33 -msgctxt "Content/*/Card.Link/Verb" +#: front/src/components/common/CollapseLink.vue:3 +#, fuzzy +msgctxt "*/*/Button,Label" msgid "Collapse" msgstr "Inklappen" @@ -1009,7 +1086,6 @@ msgid "Confirm" msgstr "Bevestigen" #: front/src/views/auth/EmailConfirm.vue:51 -#, fuzzy msgctxt "Head/Signup/Title" msgid "Confirm your e-mail address" msgstr "Bevestig je e-mailadres" @@ -1019,86 +1095,82 @@ msgctxt "Content/Signup/Form.Label" msgid "Confirmation code" msgstr "Bevestigingscode" +#: front/src/components/About.vue:67 src/components/Home.vue:65 +msgctxt "Content/Home/Header/Name" +msgid "Contact" +msgstr "" + #: front/src/components/moderation/FilterModal.vue:90 -#, fuzzy msgctxt "*/Moderation/Message" msgid "Content filter successfully added" -msgstr "Import voltooid" - -#: front/src/components/mixins/Translations.vue:96 -#: front/src/components/mixins/Translations.vue:97 -#, fuzzy -msgctxt "Content/OAuth Scopes/Label" -msgid "Content filters" -msgstr "Filter kiezen" +msgstr "Inhoudsfilter succesvol toegevoegd" #: front/src/components/auth/Settings.vue:116 -#, fuzzy +#: front/src/components/mixins/Translations.vue:108 +#: front/src/components/mixins/Translations.vue:109 msgctxt "Content/Settings/Title/Noun" msgid "Content filters" -msgstr "Filter kiezen" +msgstr "Inhoudsfilters" #: front/src/components/auth/Settings.vue:119 msgctxt "Content/Settings/Paragraph" -msgid "" -"Content filters help you hide content you don't want to see on the service." -msgstr "" +msgid "Content filters help you hide content you don't want to see on the service." +msgstr "Inhoudsfilters helpen je inhoud te verbergen die je niet wilt tegenkomen." #: front/src/components/common/ActionTable.vue:8 msgctxt "Content/*/Button.Help text.Paragraph" msgid "Content have been updated, click refresh to see up-to-date content" -msgstr "" +msgstr "Inhoud is geüpdatet, klik vernieuwen om actuele inhoud te zien" -#: front/src/components/Footer.vue:48 +#: front/src/components/About.vue:46 +#, fuzzy +msgctxt "Content/About/Header" +msgid "Contents" +msgstr "Inhoudsfilters" + +#: front/src/components/Footer.vue:56 msgctxt "Footer/*/List item.Link" msgid "Contribute" -msgstr "" +msgstr "Bijdragen" -#: front/src/components/audio/EmbedWizard.vue:19 +#: front/src/components/audio/EmbedWizard.vue:29 #: front/src/components/common/CopyInput.vue:8 +#: front/src/components/forms/PasswordInput.vue:43 msgctxt "*/*/Button.Label/Short, Verb" msgid "Copy" msgstr "Kopiëren" #: front/src/components/playlists/Editor.vue:194 -#, fuzzy msgctxt "Content/Playlist/Button.Tooltip/Verb" msgid "Copy queued tracks to playlist" -msgstr "Nummers kopiëren van huidige wachtrij naar afspeellijst" +msgstr "Kopieer nummers van de wachtrij naar de afspeellijst" #: front/src/components/auth/Authorize.vue:55 msgctxt "Content/Auth/Paragraph" msgid "Copy-paste the following code in the application:" msgstr "" -#: front/src/components/audio/EmbedWizard.vue:21 +#: front/src/components/audio/EmbedWizard.vue:31 msgctxt "Popup/Embed/Paragraph" msgid "Copy/paste this code in your website HTML" -msgstr "" +msgstr "Kopieer/plak deze HTML-code in je website" #: front/src/components/library/TrackDetail.vue:10 -#: front/src/views/admin/library/TrackDetail.vue:153 +#: front/src/views/admin/library/TrackDetail.vue:159 src/edits.js:77 #, fuzzy -msgctxt "Content/Track/Table.Label/Noun" +msgctxt "Content/Track/*/Noun" msgid "Copyright" msgstr "Kopiëren" #: front/src/views/auth/EmailConfirm.vue:7 -#, fuzzy msgctxt "Content/Signup/Paragraph" msgid "Could not confirm your e-mail address" -msgstr "Bevestig je e-mailadres" +msgstr "We konden je e-mailadres niet bevestigen" #: front/src/views/content/remote/ScanForm.vue:3 -#, fuzzy msgctxt "Content/Library/Error message.Title" msgid "Could not fetch remote library" -msgstr "Fout tijdens ophalen van externe verzameling" - -#: front/src/components/Home.vue:80 -msgctxt "Content/Home/List item" -msgid "Covers, lyrics, our goal is to have them all ;)" -msgstr "Hoezen, songteksten - ons doel is om ze allemaal te hebben ;)" +msgstr "Externe bibliotheek kon niet opgehaald worden" #: front/src/components/manage/moderation/InstancePolicyForm.vue:58 #, fuzzy @@ -1106,35 +1178,30 @@ msgctxt "Content/Moderation/Card.Button.Label/Verb" msgid "Create" msgstr "Importeren" -#: front/src/components/auth/Signup.vue:4 +#: front/src/views/auth/Signup.vue:4 msgctxt "Content/Signup/Title" msgid "Create a funkwhale account" msgstr "Creëer een Funkwhale-account" -#: front/src/components/auth/Settings.vue:220 -#, fuzzy -msgctxt "Content/Settings/Button.Label" -msgid "Create a new application" -msgstr "Creëer een nieuwe afspeellijst" - #: front/src/components/auth/ApplicationNew.vue:8 #: front/src/components/auth/ApplicationNew.vue:41 +#: front/src/components/auth/Settings.vue:220 #, fuzzy -msgctxt "Content/Applications/Title" +msgctxt "Content/Settings/Button.Label" msgid "Create a new application" msgstr "Creëer een nieuwe afspeellijst" #: front/src/views/content/libraries/Home.vue:14 msgctxt "Content/Library/Link/Verb" msgid "Create a new library" -msgstr "Creëer een nieuwe verzameling" +msgstr "Maak een nieuwe bibliotheek" #: front/src/components/playlists/Form.vue:2 msgctxt "Popup/Playlist/Title/Verb" msgid "Create a new playlist" msgstr "Creëer een nieuwe afspeellijst" -#: front/src/components/Sidebar.vue:57 src/components/auth/Login.vue:17 +#: front/src/components/Sidebar.vue:57 src/components/auth/LoginForm.vue:15 msgctxt "*/Signup/Link/Verb" msgid "Create an account" msgstr "Creëer een account" @@ -1148,9 +1215,9 @@ msgstr "Afspeellijst creëren" #: front/src/views/content/libraries/Form.vue:26 msgctxt "Content/Library/Button.Label/Verb" msgid "Create library" -msgstr "Verzameling creëren" +msgstr "Bibliotheek maken" -#: front/src/components/auth/Signup.vue:53 +#: front/src/components/auth/SignupForm.vue:49 msgctxt "Content/Signup/Button.Label" msgid "Create my account" msgstr "Account creëren" @@ -1175,24 +1242,32 @@ msgstr "Creëer je eigen radiostation" #: front/src/components/manage/library/AlbumsTable.vue:44 #: front/src/components/manage/library/ArtistsTable.vue:43 #: front/src/components/manage/library/LibrariesTable.vue:54 +#: front/src/components/manage/library/TagsTable.vue:45 #: front/src/components/manage/library/TracksTable.vue:44 #: front/src/components/manage/library/UploadsTable.vue:66 +#: front/src/components/manage/moderation/ReportCard.vue:43 #: front/src/components/manage/users/InvitationsTable.vue:40 -#: front/src/components/mixins/Translations.vue:43 -#: front/src/components/mixins/Translations.vue:44 +#: front/src/components/mixins/Translations.vue:53 +#: front/src/components/mixins/Translations.vue:54 msgctxt "Content/*/*/Noun" msgid "Creation date" -msgstr "Gecreëerd op" +msgstr "Toegevoegd" #: front/src/components/auth/Settings.vue:54 msgctxt "Content/Settings/Title/Noun" msgid "Current avatar" msgstr "Huidige gebruikersafbeelding" +#: front/src/components/admin/SettingsGroup.vue:67 +#, fuzzy +msgctxt "Content/Settings/Title/Noun" +msgid "Current image" +msgstr "Huidig verbruik" + #: front/src/views/content/libraries/DetailArea.vue:4 msgctxt "Content/Library/Title" msgid "Current library" -msgstr "Huidige verzameling" +msgstr "Huidige bibliotheek" #: front/src/components/playlists/PlaylistModal.vue:8 msgctxt "Popup/Playlist/Title" @@ -1204,15 +1279,20 @@ msgctxt "Content/Library/Title" msgid "Current usage" msgstr "Huidig verbruik" +#: front/src/components/Footer.vue:94 +msgctxt "Footer/Settings/Dropdown.Label/Theme name" +msgid "Dark" +msgstr "" + #: front/src/components/federation/FetchButton.vue:53 msgctxt "*/*/Error" msgid "Data returned by the remote server had invalid or missing attributes" -msgstr "" +msgstr "Gegevens verkregen van de externe server waren onvolledig of incorrect" #: front/src/components/federation/FetchButton.vue:17 msgctxt "Popup/*/Message.Content" msgid "Data was refreshed successfully from remote server." -msgstr "" +msgstr "Gegevens van externe server succesvol vernieuwd." #: front/src/views/content/libraries/Detail.vue:27 msgctxt "Content/Library/Table.Label" @@ -1220,15 +1300,14 @@ msgid "Date" msgstr "Datum" #: front/src/components/library/ImportStatusModal.vue:64 -#, fuzzy msgctxt "Popup/Import/Table.Label/Noun" msgid "Debug information" -msgstr "Nummerinformatie" +msgstr "Foutgegevens" -#: front/src/components/ShortcutsModal.vue:75 +#: front/src/components/ShortcutsModal.vue:128 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Decrease volume" -msgstr "" +msgstr "Volume verlagen" #: front/src/components/auth/Settings.vue:150 #: src/components/auth/Settings.vue:251 @@ -1237,23 +1316,29 @@ msgstr "" #: front/src/components/manage/library/AlbumsTable.vue:188 #: front/src/components/manage/library/ArtistsTable.vue:178 #: front/src/components/manage/library/LibrariesTable.vue:205 +#: front/src/components/manage/library/TagsTable.vue:179 #: front/src/components/manage/library/TracksTable.vue:188 #: front/src/components/manage/library/UploadsTable.vue:255 #: front/src/components/manage/moderation/InstancePolicyForm.vue:61 +#: front/src/components/manage/moderation/NotesThread.vue:24 +#: front/src/components/manage/moderation/NotesThread.vue:29 +#: front/src/components/manage/moderation/ReportCard.vue:360 #: front/src/components/manage/users/InvitationsTable.vue:167 -#: front/src/views/admin/library/AlbumDetail.vue:72 -#: front/src/views/admin/library/AlbumDetail.vue:77 -#: front/src/views/admin/library/ArtistDetail.vue:71 +#: front/src/views/admin/library/AlbumDetail.vue:78 +#: front/src/views/admin/library/AlbumDetail.vue:83 #: front/src/views/admin/library/ArtistDetail.vue:76 +#: front/src/views/admin/library/ArtistDetail.vue:81 #: front/src/views/admin/library/LibraryDetail.vue:58 #: front/src/views/admin/library/LibraryDetail.vue:63 -#: front/src/views/admin/library/TrackDetail.vue:71 -#: front/src/views/admin/library/TrackDetail.vue:76 +#: front/src/views/admin/library/TagDetail.vue:41 +#: front/src/views/admin/library/TagDetail.vue:46 +#: front/src/views/admin/library/TrackDetail.vue:77 +#: front/src/views/admin/library/TrackDetail.vue:82 #: front/src/views/admin/library/UploadDetail.vue:65 #: front/src/views/admin/library/UploadDetail.vue:70 #: front/src/views/content/libraries/FilesTable.vue:222 #: front/src/views/content/libraries/Form.vue:29 -#: src/views/playlists/Detail.vue:34 +#: src/views/playlists/Detail.vue:42 msgctxt "*/*/*/Verb" msgid "Delete" msgstr "Verwijderen" @@ -1272,15 +1357,27 @@ msgstr "" #: front/src/views/content/libraries/Form.vue:39 msgctxt "Popup/Library/Button.Label/Verb" msgid "Delete library" -msgstr "Verzameling verwijderen" +msgstr "Bibliotheek verwijderen" #: front/src/components/manage/moderation/InstancePolicyForm.vue:69 -#, fuzzy msgctxt "Popup/Moderation/Button.Label/Verb" msgid "Delete moderation rule" -msgstr "Radiostation verwijderen" +msgstr "Moderatie-regel verwijderen" -#: front/src/views/playlists/Detail.vue:39 +#: front/src/components/auth/Settings.vue:274 +#: src/components/auth/Settings.vue:302 +#, fuzzy +msgctxt "*/*/Button.Label" +msgid "Delete my account" +msgstr "Account creëren" + +#: front/src/components/auth/Settings.vue:297 +#, fuzzy +msgctxt "*/*/Button.Label" +msgid "Delete my account…" +msgstr "Account creëren" + +#: front/src/views/playlists/Detail.vue:47 msgctxt "Popup/Playlist/Button.Label/Verb" msgid "Delete playlist" msgstr "Afspeellijst verwijderen" @@ -1290,87 +1387,103 @@ msgctxt "Popup/Radio/Button.Label/Verb" msgid "Delete radio" msgstr "Radiostation verwijderen" -#: front/src/views/admin/library/AlbumDetail.vue:73 -#: front/src/views/admin/library/TrackDetail.vue:72 -#, fuzzy +#: front/src/components/manage/moderation/ReportCard.vue:357 +msgctxt "Content/Moderation/Button/Verb" +msgid "Delete reported object" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:358 +msgctxt "Content/Moderation/Popup/Header" +msgid "Delete reported object?" +msgstr "" + +#: front/src/views/admin/library/AlbumDetail.vue:79 +#: front/src/views/admin/library/TrackDetail.vue:78 msgctxt "Popup/Library/Title" msgid "Delete this album?" -msgstr "Wil je deze verzameling verwijderen?" +msgstr "Album verwijderen?" -#: front/src/views/admin/library/ArtistDetail.vue:72 -#, fuzzy +#: front/src/views/admin/library/ArtistDetail.vue:77 msgctxt "Popup/Library/Title" msgid "Delete this artist?" -msgstr "Wil je deze verzameling verwijderen?" +msgstr "Artiest verwijderen?" #: front/src/views/admin/library/LibraryDetail.vue:59 #: front/src/views/content/libraries/Form.vue:31 msgctxt "Popup/Library/Title" msgid "Delete this library?" -msgstr "Wil je deze verzameling verwijderen?" +msgstr "Deze bibliotheek verwijderen?" #: front/src/components/manage/moderation/InstancePolicyForm.vue:63 -#, fuzzy msgctxt "Popup/Moderation/Title" msgid "Delete this moderation rule?" -msgstr "Wil je deze verzameling verwijderen?" +msgstr "Deze moderatie-regel verwijderen?" -#: front/src/components/library/EditCard.vue:94 +#: front/src/components/manage/moderation/NotesThread.vue:25 #, fuzzy +msgctxt "Popup/Moderation/Title" +msgid "Delete this note?" +msgstr "Artiest verwijderen?" + +#: front/src/components/library/EditCard.vue:94 msgctxt "Popup/Library/Title" msgid "Delete this suggestion?" -msgstr "Wil je deze verzameling verwijderen?" +msgstr "Deze suggestie verwijderen?" -#: front/src/views/admin/library/UploadDetail.vue:66 +#: front/src/views/admin/library/TagDetail.vue:42 #, fuzzy msgctxt "Popup/Library/Title" +msgid "Delete this tag?" +msgstr "Album verwijderen?" + +#: front/src/views/admin/library/UploadDetail.vue:66 +msgctxt "Popup/Library/Title" msgid "Delete this upload?" -msgstr "Wil je deze verzameling verwijderen?" +msgstr "Deze upload verwijderen?" #: front/src/components/favorites/List.vue:35 -#: src/components/library/Albums.vue:26 -#: front/src/components/library/Artists.vue:26 +#: src/components/library/Albums.vue:30 +#: front/src/components/library/Artists.vue:30 #: src/components/library/Radios.vue:47 #: front/src/components/manage/library/AlbumsTable.vue:22 #: front/src/components/manage/library/ArtistsTable.vue:22 #: front/src/components/manage/library/EditsCardList.vue:40 #: front/src/components/manage/library/LibrariesTable.vue:31 +#: front/src/components/manage/library/TagsTable.vue:22 #: front/src/components/manage/library/TracksTable.vue:22 #: front/src/components/manage/library/UploadsTable.vue:41 #: front/src/components/manage/moderation/AccountsTable.vue:22 -#: front/src/components/manage/moderation/DomainsTable.vue:20 +#: front/src/components/manage/moderation/DomainsTable.vue:28 #: front/src/components/manage/users/UsersTable.vue:20 +#: front/src/views/admin/moderation/ReportsList.vue:45 #: front/src/views/content/libraries/FilesTable.vue:32 #: front/src/views/playlists/List.vue:28 msgctxt "Content/Search/Dropdown" msgid "Descending" msgstr "Aflopend" -#: front/src/views/admin/library/LibraryDetail.vue:123 -msgctxt "*/*/*/Noun" -msgid "Description" -msgstr "Omschrijving" +#: front/src/components/manage/moderation/NoteForm.vue:37 +msgctxt "Content/Moderation/Placeholder" +msgid "Describe what actions have been taken, or any other related updates…" +msgstr "" #: front/src/components/library/radios/Builder.vue:25 +#: front/src/views/admin/library/LibraryDetail.vue:132 #: front/src/views/content/libraries/Form.vue:14 -msgctxt "Content/*/Input.Label/Noun" +msgctxt "*/*/*/Noun" msgid "Description" msgstr "Omschrijving" #: front/src/views/content/libraries/Card.vue:48 -#: src/views/content/remote/Card.vue:54 +#: src/views/content/remote/Card.vue:67 msgctxt "Content/Library/Card.Button.Label/Noun" msgid "Details" msgstr "Details" -#: front/src/views/admin/moderation/AccountsDetail.vue:491 +#: front/src/views/admin/moderation/AccountsDetail.vue:511 msgctxt "Content/Moderation/Help text" -msgid "" -"Determine how much content the user can upload. Leave empty to use the " -"default value of the instance." -msgstr "" -"Bepaald hoeveel een gebruiker kan uploaden. Laat leeg om de standaardwaarde " -"te gebruiken van deze instantie." +msgid "Determine how much content the user can upload. Leave empty to use the default value of the instance." +msgstr "Bepaald hoeveel content de gebruiker kan uploaden. Laat leeg om de standaardwaarde van deze server te gebruiken." #: front/src/components/mixins/Translations.vue:8 #: front/src/components/mixins/Translations.vue:9 @@ -1379,32 +1492,39 @@ msgid "Determine the visibility level of your activity" msgstr "Bepaal de zichtbaarheid van je activiteit" #: front/src/components/auth/Settings.vue:104 -#: front/src/components/auth/SubsonicTokenForm.vue:51 +#: front/src/components/auth/SubsonicTokenForm.vue:56 msgctxt "Popup/Settings/Button.Label" msgid "Disable access" msgstr "Toegang uitschakelen" -#: front/src/components/auth/SubsonicTokenForm.vue:48 +#: front/src/components/auth/SubsonicTokenForm.vue:53 msgctxt "Content/Settings/Button.Label/Verb" msgid "Disable Subsonic access" msgstr "Subsonic-toegang uitschakelen" -#: front/src/components/auth/SubsonicTokenForm.vue:49 +#: front/src/components/auth/SubsonicTokenForm.vue:54 msgctxt "Popup/Settings/Title" msgid "Disable Subsonic API access?" msgstr "Subsonic-API-toegang uitschakelen?" +#: front/src/components/About.vue:118 src/components/About.vue:131 +#: front/src/components/About.vue:144 #: front/src/components/manage/moderation/InstancePolicyForm.vue:18 #: front/src/views/admin/moderation/AccountsDetail.vue:157 #: front/src/views/admin/moderation/AccountsDetail.vue:161 #, fuzzy -msgctxt "*/*/*" +msgctxt "*/*/*/State of feature" msgid "Disabled" -msgstr "Toegang uitschakelen" +msgstr "Uitgeschakeld" -#: front/src/views/admin/library/TrackDetail.vue:145 +#: front/src/views/admin/library/TrackDetail.vue:151 msgctxt "*/*/*/Noun" msgid "Disc number" +msgstr "CD-nummer" + +#: front/src/components/Home.vue:157 +msgctxt "Content/Home/Link" +msgid "Discover everything you need to know about Funkwhale and its features" msgstr "" #: front/src/components/auth/SubsonicTokenForm.vue:13 @@ -1412,11 +1532,15 @@ msgctxt "Content/Settings/Link" msgid "Discover how to use Funkwhale from other apps" msgstr "Ontdek hoe je Funkwhale met andere apps kunt gebruiken" +#: front/src/views/Notifications.vue:45 +msgctxt "Content/Notifications/Button.Label/Verb" +msgid "Discover other ways to help" +msgstr "" + #: front/src/views/admin/moderation/AccountsDetail.vue:132 -#, fuzzy msgctxt "'Content/*/*/Noun'" msgid "Display name" -msgstr "Bestandsnaam" +msgstr "Weergavenaam" #: front/src/components/library/radios/Builder.vue:30 msgctxt "Content/Radio/Checkbox.Label/Verb" @@ -1425,10 +1549,14 @@ msgstr "Openbaren" #: front/src/components/manage/moderation/InstancePolicyForm.vue:122 msgctxt "Content/Moderation/Help text" -msgid "" -"Do not download any media file (audio, album cover, account avatar…) from " -"this account or domain. This will purge existing content as well." -msgstr "" +msgid "Do not download any media file (audio, album cover, account avatar…) from this account or domain. This will purge existing content as well." +msgstr "Geen mediabestanden (audio, albumhoes, profielfoto…) downloaden van dit account of domein. Hiermee wordt ook bestaande content verwijderd." + +#: front/src/views/Notifications.vue:36 +#, fuzzy +msgctxt "Content/Notifications/Header" +msgid "Do you like Funkwhale?" +msgstr "Over Funkwhale" #: front/src/components/playlists/Editor.vue:51 msgctxt "Popup/Playlist/Title" @@ -1440,7 +1568,7 @@ msgctxt "Modal/*/Title" msgid "Do you want to confirm this action?" msgstr "Wil je de actie bevestigen?" -#: front/src/views/playlists/Detail.vue:35 +#: front/src/views/playlists/Detail.vue:43 msgctxt "Popup/Playlist/Title/Call to action" msgid "Do you want to delete the playlist \"%{ playlist }\"?" msgstr "Weet je zeker dat je de afspeellijst \"%{ playlist }\" wilt verwijderen?" @@ -1450,21 +1578,31 @@ msgctxt "Popup/Radio/Title" msgid "Do you want to delete the radio \"%{ radio }\"?" msgstr "Weet je zeker dat je het radiostation \"%{ radio }\" wilt verwijderen?" -#: front/src/components/moderation/FilterModal.vue:3 +#: front/src/components/auth/Settings.vue:298 #, fuzzy +msgctxt "Popup/Settings/Title" +msgid "Do you want to delete your account?" +msgstr "Wil je de vorige wachtrij herstellen?" + +#: front/src/components/moderation/FilterModal.vue:3 msgctxt "Popup/Moderation/Title/Verb" msgid "Do you want to hide content from artist \"%{ name }\"?" -msgstr "Weet je zeker dat je het radiostation \"%{ radio }\" wilt verwijderen?" +msgstr "Wil je content van de artiest \"%{ name }\" verbergen?" #: front/src/components/common/ActionTable.vue:37 -#, fuzzy msgctxt "Modal/*/Title" msgid "Do you want to launch %{ action } on %{ count } element?" msgid_plural "Do you want to launch %{ action } on %{ count } elements?" msgstr[0] "Wil je %{ action } toepassen op %{ count } element?" msgstr[1] "Wil je %{ action } toepassen op %{ count } elementen?" -#: front/src/components/Sidebar.vue:118 +#: front/src/components/moderation/ReportModal.vue:3 +#, fuzzy +msgctxt "Popup/Moderation/Title/Verb" +msgid "Do you want to report this object?" +msgstr "Wil je de actie bevestigen?" + +#: front/src/components/Sidebar.vue:122 msgctxt "Sidebar/Queue/Message" msgid "Do you want to restore your previous queue?" msgstr "Wil je de vorige wachtrij herstellen?" @@ -1480,26 +1618,33 @@ msgstr "Documentatie" #: front/src/components/manage/library/TracksTable.vue:42 #: front/src/components/manage/library/UploadsTable.vue:62 #: front/src/components/manage/moderation/AccountsTable.vue:40 -#: front/src/components/mixins/Translations.vue:60 -#: front/src/views/admin/library/AlbumDetail.vue:118 -#: front/src/views/admin/library/ArtistDetail.vue:107 -#: front/src/views/admin/library/LibraryDetail.vue:114 -#: front/src/views/admin/library/TrackDetail.vue:170 +#: front/src/components/manage/moderation/ReportCard.vue:169 +#: front/src/components/manage/moderation/ReportCard.vue:179 +#: front/src/components/mixins/Translations.vue:72 +#: front/src/views/admin/library/AlbumDetail.vue:124 +#: front/src/views/admin/library/ArtistDetail.vue:112 +#: front/src/views/admin/library/LibraryDetail.vue:123 +#: front/src/views/admin/library/TrackDetail.vue:176 #: front/src/views/admin/library/UploadDetail.vue:121 #: front/src/views/admin/moderation/AccountsDetail.vue:123 -#: front/src/components/mixins/Translations.vue:61 +#: front/src/components/mixins/Translations.vue:73 msgctxt "Content/Moderation/*/Noun" msgid "Domain" -msgstr "" +msgstr "Domein" -#: front/src/views/admin/moderation/Base.vue:5 +#: front/src/views/admin/moderation/Base.vue:8 #: front/src/views/admin/moderation/DomainsList.vue:3 -#: front/src/views/admin/moderation/DomainsList.vue:48 +#: front/src/views/admin/moderation/DomainsList.vue:54 msgctxt "*/Moderation/*/Noun" msgid "Domains" +msgstr "Domeinen" + +#: front/src/views/Notifications.vue:42 +msgctxt "Content/Notifications/Button.Label/Verb" +msgid "Donate" msgstr "" -#: front/src/components/library/TrackBase.vue:39 +#: front/src/components/library/TrackBase.vue:37 #: front/src/views/admin/library/UploadDetail.vue:58 msgctxt "Content/Track/Link/Verb" msgid "Download" @@ -1512,44 +1657,34 @@ msgstr "Versleep de rijen om nummers op de afspeellijst te herordenen" #: front/src/components/audio/track/Table.vue:10 #: front/src/components/library/TrackDetail.vue:30 -#: front/src/components/mixins/Translations.vue:56 +#: front/src/components/mixins/Translations.vue:68 #: front/src/views/admin/library/UploadDetail.vue:238 #: front/src/views/content/libraries/FilesTable.vue:60 -#: front/src/components/mixins/Translations.vue:57 +#: front/src/components/mixins/Translations.vue:69 msgctxt "Content/*/*" msgid "Duration" msgstr "Duur" #: front/src/views/auth/EmailConfirm.vue:23 -#, fuzzy msgctxt "Content/Signup/Message" msgid "E-mail address confirmed" msgstr "E-mailadres bevestigd" -#: front/src/components/Home.vue:88 -msgctxt "Content/Home/Title" -msgid "Easy to use" -msgstr "Makkelijk te gebruiken" - -#: front/src/components/library/AlbumBase.vue:68 -#: front/src/components/library/ArtistBase.vue:79 -#: front/src/components/library/TrackBase.vue:87 +#: front/src/components/auth/Settings.vue:246 +#: src/components/library/AlbumBase.vue:73 +#: front/src/components/library/ArtistBase.vue:84 +#: front/src/components/library/TrackBase.vue:89 #: front/src/components/manage/moderation/InstancePolicyCard.vue:45 #: front/src/components/radios/Card.vue:23 -#: src/views/admin/library/AlbumDetail.vue:65 -#: front/src/views/admin/library/ArtistDetail.vue:64 -#: front/src/views/admin/library/TrackDetail.vue:64 +#: src/views/admin/library/AlbumDetail.vue:71 +#: front/src/views/admin/library/ArtistDetail.vue:69 +#: front/src/views/admin/library/TrackDetail.vue:70 #: front/src/views/content/libraries/Detail.vue:9 #: src/views/playlists/Detail.vue:31 msgctxt "Content/*/Button.Label/Verb" msgid "Edit" msgstr "Bewerken" -#: front/src/components/auth/Settings.vue:246 -msgctxt "Content/Settings/Button.Label" -msgid "Edit" -msgstr "Bewerken" - #: front/src/components/auth/ApplicationEdit.vue:30 #: front/src/components/auth/ApplicationEdit.vue:75 #, fuzzy @@ -1557,20 +1692,15 @@ msgctxt "Content/Applications/Title" msgid "Edit application" msgstr "Fout tijdens toepassen van actie" -#: front/src/components/About.vue:22 -msgctxt "Content/Settings/Button.Label/Verb" -msgid "Edit instance info" -msgstr "Instantie-informatie bewerken" - #: front/src/components/manage/moderation/InstancePolicyForm.vue:3 msgctxt "Content/Moderation/Card.Title/Verb" msgid "Edit moderation rule" -msgstr "" +msgstr "Moderatie-regel aanpassen" #: front/src/components/library/AlbumEdit.vue:4 msgctxt "Content/*/Title" msgid "Edit this album" -msgstr "" +msgstr "Dit album bewerken" #: front/src/components/library/ArtistEdit.vue:4 #, fuzzy @@ -1584,25 +1714,20 @@ msgctxt "Content/*/Title" msgid "Edit this track" msgstr "Instantie-informatie bewerken" -#: front/src/views/admin/library/AlbumDetail.vue:182 -#: front/src/views/admin/library/ArtistDetail.vue:171 +#: front/src/components/mixins/Translations.vue:116 +#: front/src/views/admin/library/AlbumDetail.vue:198 +#: front/src/views/admin/library/ArtistDetail.vue:186 #: front/src/views/admin/library/Base.vue:5 #: src/views/admin/library/EditsList.vue:24 -#: front/src/views/admin/library/TrackDetail.vue:234 -#, fuzzy +#: front/src/views/admin/library/TrackDetail.vue:250 +#: front/src/components/mixins/Translations.vue:117 msgctxt "*/Admin/*/Noun" msgid "Edits" -msgstr "Bewerken" +msgstr "Wijzigingen" -#: front/src/components/mixins/Translations.vue:104 -#: front/src/components/mixins/Translations.vue:105 -#, fuzzy -msgctxt "Content/OAuth Scopes/Label" -msgid "Edits" -msgstr "Bewerken" - -#: front/src/components/auth/Signup.vue:30 +#: front/src/components/auth/SignupForm.vue:26 #: front/src/components/manage/users/UsersTable.vue:38 +#: front/src/components/moderation/ReportModal.vue:31 msgctxt "Content/*/*/Noun" msgid "Email" msgstr "E-mailadres" @@ -1612,53 +1737,62 @@ msgctxt "Content/*/*" msgid "Email address" msgstr "E-mailadres" -#: front/src/components/library/AlbumBase.vue:53 -#: front/src/components/library/ArtistBase.vue:64 -#: front/src/components/library/TrackBase.vue:72 +#: front/src/components/library/AlbumBase.vue:54 +#: front/src/components/library/ArtistBase.vue:65 +#: front/src/components/library/TrackBase.vue:70 +#: src/views/playlists/Detail.vue:38 msgctxt "Content/*/Button.Label/Verb" msgid "Embed" -msgstr "" +msgstr "Embedden" -#: front/src/components/audio/EmbedWizard.vue:20 +#: front/src/components/audio/EmbedWizard.vue:30 msgctxt "Popup/Embed/Input.Label/Noun" msgid "Embed code" -msgstr "" +msgstr "Embed-code" -#: front/src/components/library/AlbumBase.vue:26 +#: front/src/components/library/AlbumBase.vue:27 msgctxt "Popup/Album/Title/Verb" msgid "Embed this album on your website" -msgstr "" +msgstr "Embed dit album op je website" -#: front/src/components/library/ArtistBase.vue:37 +#: front/src/components/library/ArtistBase.vue:38 msgctxt "Popup/Artist/Title/Verb" msgid "Embed this artist work on your website" -msgstr "" +msgstr "Embed deze artiest op je website" -#: front/src/components/library/TrackBase.vue:45 +#: front/src/views/playlists/Detail.vue:52 +#, fuzzy +msgctxt "Popup/Album/Title/Verb" +msgid "Embed this playlist on your website" +msgstr "Embed dit album op je website" + +#: front/src/components/library/TrackBase.vue:43 msgctxt "Popup/Track/Title" msgid "Embed this track on your website" -msgstr "" +msgstr "Embed dit nummer op je website" -#: front/src/views/admin/moderation/AccountsDetail.vue:259 -#: front/src/views/admin/moderation/DomainsDetail.vue:187 -#, fuzzy +#: front/src/views/admin/moderation/AccountsDetail.vue:260 +#: front/src/views/admin/moderation/DomainsDetail.vue:224 msgctxt "Content/Moderation/Table.Label/Noun" msgid "Emitted library follows" -msgstr "Voer de url in van een verzameling" +msgstr "" -#: front/src/views/admin/moderation/AccountsDetail.vue:243 -#: front/src/views/admin/moderation/DomainsDetail.vue:171 +#: front/src/views/admin/moderation/AccountsDetail.vue:244 +#: front/src/views/admin/moderation/DomainsDetail.vue:208 msgctxt "Content/Moderation/Table.Label/Noun" msgid "Emitted messages" msgstr "" +#: front/src/components/About.vue:114 src/components/About.vue:127 +#: front/src/components/About.vue:140 #: front/src/components/manage/moderation/InstancePolicyCard.vue:8 #: front/src/components/manage/moderation/InstancePolicyForm.vue:17 #: front/src/views/admin/moderation/AccountsDetail.vue:156 #: front/src/views/admin/moderation/AccountsDetail.vue:160 -msgctxt "*/*/*" +#, fuzzy +msgctxt "*/*/*/State of feature" msgid "Enabled" -msgstr "" +msgstr "Ingeschakeld" #: front/src/views/playlists/Detail.vue:30 msgctxt "Content/Playlist/Button.Label/Verb" @@ -1666,46 +1800,43 @@ msgid "End edition" msgstr "Bewerken afronden" #: front/src/views/content/remote/ScanForm.vue:50 -#, fuzzy msgctxt "Content/Library/Input.Placeholder" msgid "Enter a library URL" -msgstr "Voer de url in van een verzameling" +msgstr "Voer de URL van een bibliotheek in" #: front/src/components/library/Radios.vue:141 #, fuzzy msgctxt "Content/Search/Input.Placeholder" msgid "Enter a radio name…" -msgstr "Voer een naam in voor de radio..." +msgstr "Geef je radio een naam…" -#: front/src/components/library/Albums.vue:119 -#, fuzzy +#: front/src/components/library/Albums.vue:128 msgctxt "Content/Search/Input.Placeholder" -msgid "Enter album title..." -msgstr "Voer een artiestnaam in..." +msgid "Enter album title…" +msgstr "Voer albumtitel in…" #: front/src/components/library/Artists.vue:116 -#, fuzzy msgctxt "Content/Search/Input.Placeholder" msgid "Enter artist name…" -msgstr "Voer een artiestnaam in..." +msgstr "Voer artiestnaam in…" #: front/src/views/playlists/List.vue:107 -#, fuzzy msgctxt "Content/Playlist/Placeholder/Call to action" msgid "Enter playlist name…" -msgstr "Voer een naam in voor de afspeellijst..." +msgstr "Voer een afspeellijst-titel in…" #: front/src/views/auth/PasswordReset.vue:54 msgctxt "Content/Signup/Input.Placeholder" -msgid "Enter the email address binded to your account" +msgid "Enter the email address linked to your account" msgstr "" -#: front/src/components/auth/Signup.vue:103 +#: front/src/components/auth/SignupForm.vue:96 msgctxt "Content/Signup/Form/Placeholder" msgid "Enter your email" msgstr "Voer je e-mailadres in" -#: front/src/components/auth/Signup.vue:98 src/components/auth/Signup.vue:100 +#: front/src/components/auth/SignupForm.vue:91 +#: src/components/auth/SignupForm.vue:93 msgctxt "Content/Signup/Form/Placeholder" msgid "Enter your invitation code (case insensitive)" msgstr "Voer je uitnodigingscode in (hoofdletterongevoelig)" @@ -1714,14 +1845,14 @@ msgstr "Voer je uitnodigingscode in (hoofdletterongevoelig)" #, fuzzy msgctxt "Content/Library/Input.Placeholder/Verb" msgid "Enter your search query…" -msgstr "Voer een zoekopdracht in..." +msgstr "Voer een zoekopdracht in…" -#: front/src/components/auth/Signup.vue:102 +#: front/src/components/auth/SignupForm.vue:95 msgctxt "Content/Signup/Form/Placeholder" msgid "Enter your username" msgstr "Voer je gebruikersnaam in" -#: front/src/components/auth/Login.vue:83 +#: front/src/components/auth/LoginForm.vue:81 msgctxt "Content/Login/Input.Placeholder" msgid "Enter your username or email" msgstr "Voer je gebruikersnaam of e-mailadres in" @@ -1739,7 +1870,7 @@ msgctxt "Popup/Import/Table.Label/Noun" msgid "Error detail" msgstr "Foutrapportage" -#: front/src/views/admin/Settings.vue:87 +#: front/src/views/admin/Settings.vue:89 msgctxt "Content/Admin/Menu" msgid "Error reporting" msgstr "Foutrapportage" @@ -1801,17 +1932,12 @@ msgctxt "Popup/Moderation/Error message" msgid "Error while fetching application data" msgstr "Fout tijdens creëren van uitnodiging" -#: front/src/views/admin/moderation/DomainsDetail.vue:118 -#, fuzzy +#: front/src/views/admin/moderation/DomainsDetail.vue:155 msgctxt "Content/Moderation/Table" msgid "Error while fetching node info" -msgstr "Fout tijdens ophalen van externe verzameling" +msgstr "Fout bij het ophalen van serverinformatie" #: front/src/components/admin/SettingsGroup.vue:5 -msgctxt "Content/Settings/Error message.Title" -msgid "Error while saving settings" -msgstr "Fout tijdens opslaan van instellingen" - #: front/src/components/federation/FetchButton.vue:73 msgctxt "Content/*/Error message.Title" msgid "Error while saving settings" @@ -1823,6 +1949,18 @@ msgctxt "Content/Library/Error message.Title" msgid "Error while submitting edit" msgstr "Fout tijdens opslaan van instellingen" +#: front/src/components/manage/moderation/NoteForm.vue:3 +#, fuzzy +msgctxt "Content/Moderation/Error message.Title" +msgid "Error while submitting note" +msgstr "Fout tijdens opslaan van instellingen" + +#: front/src/components/moderation/ReportModal.vue:11 +#, fuzzy +msgctxt "Popup/Moderation/Error message" +msgid "Error while submitting report" +msgstr "Fout tijdens opslaan van instellingen" + #: front/src/components/mixins/Translations.vue:32 #: front/src/components/mixins/Translations.vue:33 msgctxt "Content/Library/Table/Short" @@ -1844,7 +1982,7 @@ msgstr "Iedereen" #: front/src/components/mixins/Translations.vue:12 msgctxt "Content/Settings/Dropdown" msgid "Everyone on this instance" -msgstr "Iedereen op deze instantie" +msgstr "Iedereen op deze server" #: front/src/components/mixins/Translations.vue:12 #: front/src/components/mixins/Translations.vue:13 @@ -1858,9 +1996,14 @@ msgctxt "Content/Radio/Table.Label/Verb" msgid "Exclude" msgstr "Uitsluiten" +#: front/src/components/common/CollapseLink.vue:2 +msgctxt "*/*/Button,Label" +msgid "Expand" +msgstr "" + #: front/src/components/manage/users/InvitationsTable.vue:41 -#: front/src/components/mixins/Translations.vue:49 -#: front/src/components/mixins/Translations.vue:50 +#: front/src/components/mixins/Translations.vue:59 +#: front/src/components/mixins/Translations.vue:60 msgctxt "Content/Admin/Table.Label/Noun" msgid "Expiration date" msgstr "Vervaldatum" @@ -1877,12 +2020,8 @@ msgstr "Vervallen/gebruikt" #: front/src/components/manage/moderation/InstancePolicyForm.vue:110 msgctxt "Content/Moderation/Help text" -msgid "" -"Explain why you're applying this policy. Depending on your instance " -"configuration, this will help you remember why you acted on this account or " -"domain, and may be displayed publicly to help users understand what " -"moderation rules are in place." -msgstr "" +msgid "Explain why you're applying this policy. Depending on your instance configuration, this will help you remember why you acted on this account or domain, and may be displayed publicly to help users understand what moderation rules are in place." +msgstr "Leg uit waarom je dit beleid toepast. Zo kun je later nog achterhalen waarom je actie hebt ondernomen op dit account of dit domein. Afhankelijk van de instellingen op je server, wordt dit ook aan gebruikers getoond zodat ze kunnen begrijpen welke regels er gelden." #: front/src/components/manage/library/UploadsTable.vue:25 #: front/src/views/content/libraries/FilesTable.vue:16 @@ -1890,33 +2029,30 @@ msgctxt "Content/Library/Dropdown" msgid "Failed" msgstr "" -#: front/src/views/content/remote/Card.vue:62 +#: front/src/views/content/remote/Card.vue:75 #, fuzzy msgctxt "Content/Library/Card.List item/Noun" msgid "Failed tracks:" msgstr "Mislukte nummers:" -#: front/src/views/admin/library/AlbumDetail.vue:165 -#: front/src/views/admin/library/ArtistDetail.vue:154 -#: front/src/views/admin/library/TrackDetail.vue:217 +#: front/src/views/admin/library/AlbumDetail.vue:171 +#: front/src/views/admin/library/ArtistDetail.vue:159 +#: front/src/views/admin/library/TrackDetail.vue:223 #, fuzzy msgctxt "*/*/*" msgid "Favorited tracks" msgstr "Favorieten" #: front/src/components/Sidebar.vue:66 +#: src/components/mixins/Translations.vue:88 +#: front/src/components/mixins/Translations.vue:89 msgctxt "Sidebar/Favorites/List item.Link/Noun" msgid "Favorites" msgstr "Favorieten" -#: front/src/components/mixins/Translations.vue:76 -#: front/src/components/mixins/Translations.vue:77 -msgctxt "Content/OAuth Scopes/Label" -msgid "Favorites" -msgstr "Favorieten" - -#: front/src/views/admin/Settings.vue:84 -msgctxt "Content/Admin/Menu" +#: front/src/components/About.vue:110 src/views/admin/Settings.vue:84 +#, fuzzy +msgctxt "*/*/*" msgid "Federation" msgstr "Federatie" @@ -1942,6 +2078,12 @@ msgctxt "Content/Radio/Table.Label/Noun" msgid "Filter name" msgstr "Filternaam" +#: front/src/components/Home.vue:118 +#, fuzzy +msgctxt "Content/Home/Link" +msgid "Find another pod" +msgstr "Nóg een verzoek indienen" + #: front/src/components/manage/library/UploadsTable.vue:26 #: front/src/components/mixins/Translations.vue:36 #: front/src/views/content/libraries/FilesTable.vue:17 @@ -1951,26 +2093,31 @@ msgid "Finished" msgstr "Afgerond" #: front/src/components/manage/moderation/AccountsTable.vue:42 -#: front/src/components/manage/moderation/DomainsTable.vue:41 -#: front/src/views/admin/library/AlbumDetail.vue:149 -#: front/src/views/admin/library/ArtistDetail.vue:138 -#: front/src/views/admin/library/LibraryDetail.vue:153 -#: front/src/views/admin/library/TrackDetail.vue:201 +#: front/src/components/manage/moderation/DomainsTable.vue:49 +#: front/src/views/admin/library/AlbumDetail.vue:155 +#: front/src/views/admin/library/ArtistDetail.vue:143 +#: front/src/views/admin/library/LibraryDetail.vue:162 +#: front/src/views/admin/library/TagDetail.vue:98 +#: front/src/views/admin/library/TrackDetail.vue:207 #: front/src/views/admin/library/UploadDetail.vue:167 -#: front/src/views/admin/moderation/AccountsDetail.vue:235 -#: front/src/views/admin/moderation/DomainsDetail.vue:151 +#: front/src/views/admin/moderation/AccountsDetail.vue:236 +#: front/src/views/admin/moderation/DomainsDetail.vue:188 msgctxt "Content/Moderation/Table.Label/Short (Value is a date)" msgid "First seen" -msgstr "" +msgstr "Eerst gezien" -#: front/src/components/mixins/Translations.vue:46 -#: front/src/components/mixins/Translations.vue:47 -#, fuzzy +#: front/src/components/mixins/Translations.vue:56 +#: front/src/components/mixins/Translations.vue:57 msgctxt "Content/Moderation/Dropdown/Noun" msgid "First seen date" -msgstr "Vervaldatum" +msgstr "Eerst gezien-datum" -#: front/src/views/content/remote/Card.vue:87 +#: front/src/components/ShortcutsModal.vue:64 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Focus searchbar" +msgstr "" + +#: front/src/views/content/remote/Card.vue:100 msgctxt "Content/Library/Card.Button.Label/Verb" msgid "Follow" msgstr "Volgen" @@ -1980,43 +2127,36 @@ msgctxt "Content/Library/Title/Verb" msgid "Follow remote libraries" msgstr "Externe verzamelingen volgen" -#: front/src/views/content/remote/Card.vue:92 -#, fuzzy +#: front/src/views/content/remote/Card.vue:105 msgctxt "Content/Library/Card.Paragraph" msgid "Follow request pending approval" -msgstr "Wachten op toestemming" +msgstr "Openstaande volgverzoeken" -#: front/src/components/mixins/Translations.vue:64 -#: front/src/views/admin/library/LibraryDetail.vue:161 +#: front/src/components/manage/library/LibrariesTable.vue:53 +#: front/src/components/mixins/Translations.vue:76 +#: front/src/views/admin/library/LibraryDetail.vue:170 #: front/src/views/content/libraries/Detail.vue:7 -#: front/src/components/mixins/Translations.vue:65 +#: front/src/components/mixins/Translations.vue:77 msgctxt "Content/Federation/*/Noun" msgid "Followers" msgstr "Volgers" -#: front/src/components/manage/library/LibrariesTable.vue:53 -msgctxt "Content/*/*/Noun" -msgid "Followers" -msgstr "Volgers" - -#: front/src/views/content/remote/Card.vue:103 +#: front/src/views/content/remote/Card.vue:116 msgctxt "Content/Library/Card.Paragraph" msgid "Following" msgstr "Volgend" -#: front/src/components/mixins/Translations.vue:84 -#: front/src/components/mixins/Translations.vue:85 +#: front/src/components/mixins/Translations.vue:96 +#: front/src/components/mixins/Translations.vue:97 #, fuzzy msgctxt "Content/OAuth Scopes/Label" msgid "Follows" msgstr "Volgen" -#: front/src/components/library/TrackBase.vue:17 +#: front/src/components/library/TrackBase.vue:245 msgctxt "Content/Track/Paragraph" -msgid "" -"From album <a class=\"internal\" href=\"%{ albumUrl }\">%{ album }</a> by <a" -" class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" -msgstr "" +msgid "From album <a class=\"internal\" href=\"%{ albumUrl }\">%{ album }</a> by <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" +msgstr "Van het album <a class=\"internal\" href=\"%{ albumUrl }\">%{ album }</a> van <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" #: front/src/components/auth/Authorize.vue:28 #, fuzzy @@ -2026,76 +2166,40 @@ msgstr "Toegang uitschakelen" #: front/src/components/auth/SubsonicTokenForm.vue:7 msgctxt "Content/Settings/Paragraph'" -msgid "" -"Funkwhale is compatible with other music players that support the Subsonic " -"API." -msgstr "" -"Funkwhale werkt met andere muziekspelers die de Subsonic-API ondersteunen." - -#: front/src/components/Home.vue:90 -msgctxt "Content/Home/Paragraph" -msgid "Funkwhale is dead simple to use." -msgstr "Funkwhale is zeer eenvoudig te gebruiken." - -#: front/src/components/Home.vue:39 -msgctxt "Content/Home/Paragraph" -msgid "" -"Funkwhale is designed to make it easy to listen to music you like, or to " -"discover new artists." -msgstr "" -"Funkwhale is ontworpen om het je makkelijk te maken je favoriete muziek te " -"beluisteren of nieuwe artiesten te ontdekken." +msgid "Funkwhale is compatible with other music players that support the Subsonic API." +msgstr "Funkwhale werkt met andere muziekspelers die de Subsonic-API ondersteunen." -#: front/src/components/Home.vue:111 +#: front/src/components/Home.vue:88 +#, fuzzy msgctxt "Content/Home/Paragraph" -msgid "Funkwhale is free and gives you control on your music." +msgid "Funkwhale is free and developped by a friendly community of volunteers." msgstr "Funkwhale is gratis en geeft je het beheer over je muziek." -#: front/src/components/Home.vue:66 -msgctxt "Content/Home/Paragraph" -msgid "Funkwhale takes care of handling your music" -msgstr "Funkwhale zorgt voor je muziek" +#: front/src/components/About.vue:78 +msgctxt "*/*/*" +msgid "Funkwhale version" +msgstr "" -#: front/src/components/ShortcutsModal.vue:38 +#: front/src/components/ShortcutsModal.vue:56 msgctxt "Popup/Keyboard shortcuts/Title" msgid "General shortcuts" -msgstr "" +msgstr "Algemene sneltoetsen" #: front/src/components/manage/users/InvitationForm.vue:16 msgctxt "Content/Admin/Button.Label/Verb" msgid "Get a new invitation" msgstr "Nieuwe uitnodiging aanvragen" -#: front/src/components/Home.vue:13 -msgctxt "Content/Home/Button.Label/Verb" -msgid "Get me to the library" -msgstr "Breng me naar de verzameling" - -#: front/src/components/Home.vue:70 -msgctxt "Content/Home/List item/Verb" -msgid "" -"Get quality metadata about your music thanks to <a href=\"%{ url }\" " -"target=\"_blank\">MusicBrainz</a>" -msgstr "" -"Verkrijg hoogwaardige metagegevens over je muziek met behulp van <a " -"href=\"%{ url }\" target=\"_blank\">MusicBrainz</a>" - #: front/src/views/content/Home.vue:12 src/views/content/Home.vue:19 msgctxt "Content/Library/Button.Label/Verb" msgid "Get started" msgstr "Aan de slag" -#: front/src/components/Footer.vue:37 -#, fuzzy +#: front/src/components/Footer.vue:45 +#: src/components/library/ImportStatusModal.vue:45 msgctxt "Footer/*/Link" msgid "Getting help" -msgstr "Instellingen" - -#: front/src/components/library/ImportStatusModal.vue:45 -#, fuzzy -msgctxt "Popup/Import/Table.Label/Noun" -msgid "Getting help" -msgstr "Instellingen" +msgstr "Hulp en ondersteuning" #: front/src/components/common/ActionTable.vue:35 #: front/src/components/common/ActionTable.vue:56 @@ -2108,11 +2212,20 @@ msgctxt "Content/*/Button.Label/Verb" msgid "Go to home page" msgstr "Terug naar hoofdpagina" +#: front/src/views/Notifications.vue:27 src/views/Notifications.vue:61 +msgctxt "Content/Notifications/Button.Label" +msgid "Got it!" +msgstr "" + #: front/src/components/auth/Settings.vue:128 -#, fuzzy msgctxt "Content/Settings/Title" msgid "Hidden artists" -msgstr "Artiesten doorbladeren" +msgstr "Verborgen artiesten" + +#: front/src/components/About.vue:155 +msgctxt "*/*/*/Verb" +msgid "Hide" +msgstr "" #: front/src/components/manage/moderation/InstancePolicyForm.vue:114 msgctxt "Content/Moderation/Help text" @@ -2120,63 +2233,52 @@ msgid "Hide account or domain content, except from followers." msgstr "" #: front/src/components/moderation/FilterModal.vue:40 -#, fuzzy msgctxt "Popup/*/Button.Label" msgid "Hide content" -msgstr "Inhoud toevoegen" +msgstr "Inhoud verbergen" -#: front/src/components/audio/PlayButton.vue:26 +#: front/src/components/audio/PlayButton.vue:31 msgctxt "*/Queue/Dropdown/Button/Label/Short" msgid "Hide content from this artist" -msgstr "" +msgstr "Content van deze artiest verbergen" -#: front/src/components/audio/Player.vue:643 +#: front/src/components/audio/Player.vue:669 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Hide content from this artist…" -msgstr "" +msgstr "Verberg content van deze artiest…" #: front/src/components/library/Home.vue:65 msgctxt "Head/Home/Title" msgid "Home" msgstr "Startpagina" -#: front/src/components/instance/Stats.vue:36 -msgctxt "Content/About/Paragraph/Unit" -msgid "Hours of music" -msgstr "Uren aan muziek" - #: front/src/components/auth/SubsonicTokenForm.vue:10 msgctxt "Content/Settings/Paragraph" -msgid "" -"However, accessing Funkwhale from those clients require a separate password " -"you can set below." -msgstr "" -"Om Funkwhale te benaderen via die apps is een apart wachtwoord nodig. Dit " -"kan je hieronder instellen." +msgid "However, accessing Funkwhale from those clients require a separate password you can set below." +msgstr "Om Funkwhale te benaderen via die apps is een apart wachtwoord nodig. Dit kan je hieronder instellen." #: front/src/views/auth/PasswordResetConfirm.vue:24 +#, fuzzy msgctxt "Content/Signup/Paragraph" -msgid "" -"If the email address provided in the previous step is valid and binded to a " -"user account, you should receive an email with reset instructions in the " -"next couple of minutes." -msgstr "" -"Als het e-mailadres uit de vorige stap geldig is en toebehoort aan een " -"gebruiker, dan zou je een e-mail moeten ontvangen met instructies voor " -"wachtwoordherstel." +msgid "If the email address provided in the previous step is valid and linked to a user account, you should receive an email with reset instructions in the next couple of minutes." +msgstr "Als het e-mailadres uit de vorige stap geldig is en toebehoort aan een gebruiker, dan zou je een e-mail moeten ontvangen met instructies voor wachtwoordherstel." #: front/src/components/auth/Settings.vue:205 msgctxt "Content/Applications/Paragraph" -msgid "" -"If you authorize third-party applications to access your data, those " -"applications will be listed here." -msgstr "" +msgid "If you authorize third-party applications to access your data, those applications will be listed here." +msgstr "Als je applicaties van derden toegang hebt gegeven tot je data, vind je ze hier in de lijst." -#: front/src/components/library/ImportStatusModal.vue:3 +#: front/src/components/mixins/Translations.vue:46 +#: front/src/components/mixins/Translations.vue:47 #, fuzzy +msgctxt "Content/Moderation/Dropdown" +msgid "Illegal content" +msgstr "Inhoud verbergen" + +#: front/src/components/library/ImportStatusModal.vue:3 msgctxt "Popup/Import/Title" msgid "Import detail" -msgstr "Importdatum" +msgstr "Details van de import" #: front/src/components/library/FileUpload.vue:50 msgctxt "Content/Library/Input.Label/Noun" @@ -2184,35 +2286,29 @@ msgid "Import reference" msgstr "Importnummer" #: front/src/components/manage/library/UploadsTable.vue:20 -#: front/src/views/content/libraries/FilesTable.vue:11 -#: front/src/views/content/libraries/FilesTable.vue:59 -msgctxt "Content/Library/*/Noun" -msgid "Import status" -msgstr "Importstatus" - #: front/src/components/manage/library/UploadsTable.vue:64 #: front/src/views/admin/library/UploadDetail.vue:131 +#: front/src/views/content/libraries/FilesTable.vue:11 +#: front/src/views/content/libraries/FilesTable.vue:59 msgctxt "Content/*/*/Noun" msgid "Import status" msgstr "Importstatus" #: front/src/components/mixins/Translations.vue:37 #: front/src/components/mixins/Translations.vue:38 -#, fuzzy msgctxt "Content/Library/Help text" msgid "Imported" -msgstr "Geïmporteerd op" +msgstr "Geïmporteerd" #: front/src/components/federation/FetchButton.vue:47 msgctxt "*/*/Error" msgid "Impossible to connect to the remote server" -msgstr "" +msgstr "Kan geen verbinding krijgen met de externe server" #: front/src/components/moderation/FilterModal.vue:26 -#, fuzzy msgctxt "Popup/Moderation/List item" msgid "In \"Recently added\" widget" -msgstr "Recent toegevoegd" +msgstr "In de \"Recent toegevoegd\" widget" #: front/src/components/moderation/FilterModal.vue:27 msgctxt "Popup/Moderation/List item" @@ -2234,71 +2330,73 @@ msgctxt "Popup/Moderation/List item" msgid "In radio suggestions" msgstr "" -#: front/src/components/manage/users/UsersTable.vue:54 +#: front/src/components/manage/users/UsersTable.vue:55 msgctxt "Content/Admin/Table" msgid "Inactive" msgstr "Inactief" -#: front/src/components/ShortcutsModal.vue:71 +#: front/src/components/ShortcutsModal.vue:124 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Increase volume" -msgstr "" +msgstr "Volume verhogen" #: front/src/components/playlists/Editor.vue:41 -#, fuzzy msgctxt "Content/Playlist/Button.Label/Verb" msgid "Insert from queue (%{ count } track)" msgid_plural "Insert from queue (%{ count } tracks)" -msgstr[0] "Aan de wachtrij toevoegen (%{ count } nummer)" -msgstr[1] "Aan de wachtrij toevoegen (%{ count } nummers)" +msgstr[0] "Toevoegen vanuit wachtrij (%{ count } nummer)" +msgstr[1] "Toevoegen vanuit wachtrij (%{ count } nummers)" #: front/src/components/mixins/Translations.vue:16 #: front/src/components/mixins/Translations.vue:17 -#, fuzzy msgctxt "Content/Settings/Dropdown/Short" msgid "Instance" -msgstr "Radio's van de instantie" +msgstr "Server" -#: front/src/views/admin/moderation/DomainsDetail.vue:71 -#, fuzzy +#: front/src/views/admin/moderation/DomainsDetail.vue:99 msgctxt "Content/Moderation/Title" msgid "Instance data" -msgstr "Radio's van de instantie" +msgstr "Servergegevens" #: front/src/views/admin/Settings.vue:80 msgctxt "Content/Admin/Menu" msgid "Instance information" -msgstr "Instantie-informatie" +msgstr "Server-informatie" #: front/src/components/library/Radios.vue:9 msgctxt "Content/Radio/Title" msgid "Instance radios" -msgstr "Radio's van de instantie" +msgstr "Radio's van deze server" #: front/src/views/admin/Settings.vue:75 msgctxt "Head/Admin/Title" msgid "Instance settings" -msgstr "Instantie-instellingen" +msgstr "Server-instellingen" #: front/src/components/SetInstanceModal.vue:19 -#, fuzzy msgctxt "Popup/Instance/Input.Label/Noun" msgid "Instance URL" -msgstr "Radio's van de instantie" +msgstr "Server-URL" + +#: front/src/components/manage/moderation/ReportCard.vue:92 +#: front/src/components/manage/moderation/ReportCard.vue:203 +msgctxt "Content/*/*/Noun" +msgid "Internal notes" +msgstr "" #: front/src/components/library/FileUpload.vue:268 msgctxt "Content/Library/Help text" -msgid "" -"Invalid file type, ensure you are uploading an audio file. Supported file " -"extensions are %{ extensions }" +msgid "Invalid file type, ensure you are uploading an audio file. Supported file extensions are %{ extensions }" msgstr "" #: front/src/components/library/ImportStatusModal.vue:139 +#: front/src/components/mixins/Translations.vue:45 +#: front/src/components/mixins/Translations.vue:46 msgctxt "Popup/Import/Error.Label" msgid "Invalid metadata" msgstr "" -#: front/src/components/auth/Signup.vue:44 +#: front/src/components/auth/SignupForm.vue:40 #: front/src/components/manage/users/InvitationForm.vue:11 msgctxt "Content/*/Input.Label" msgid "Invitation code" @@ -2310,27 +2408,34 @@ msgctxt "*/Admin/*/Noun" msgid "Invitations" msgstr "Uitnodigingen" -#: front/src/components/Footer.vue:41 +#: front/src/components/manage/moderation/DomainsTable.vue:9 +#: front/src/views/admin/moderation/DomainsDetail.vue:106 +msgctxt "Content/Moderation/*/Adjective" +msgid "Is present on allow-list" +msgstr "" + +#: front/src/components/Footer.vue:49 msgctxt "Footer/*/List item.Link" msgid "Issue tracker" -msgstr "Bugtracker" +msgstr "Issue tracker" #: front/src/components/SetInstanceModal.vue:5 msgctxt "Popup/Instance/Error message.Title" msgid "It is not possible to connect to the given URL" msgstr "" -#: front/src/components/Home.vue:50 -msgctxt "Content/Home/List item/Verb" -msgid "Keep a track of your favorite songs" -msgstr "Beheer je lievelingsmuziek" +#: front/src/components/mixins/Translations.vue:65 +#: front/src/components/mixins/Translations.vue:66 +msgctxt "*/*/*/Noun" +msgid "Items" +msgstr "" #: front/src/components/Footer.vue:33 src/components/ShortcutsModal.vue:3 msgctxt "*/*/*/Noun" msgid "Keyboard shortcuts" -msgstr "" +msgstr "Sneltoetsen" -#: front/src/views/admin/moderation/DomainsDetail.vue:161 +#: front/src/views/admin/moderation/DomainsDetail.vue:198 #, fuzzy msgctxt "Content/Moderation/Table.Label.Link" msgid "Known accounts" @@ -2342,15 +2447,15 @@ msgid "Known libraries" msgstr "Bekende verzamelingen" #: front/src/components/manage/users/UsersTable.vue:41 -#: front/src/components/mixins/Translations.vue:58 -#: front/src/views/admin/moderation/AccountsDetail.vue:205 -#: front/src/components/mixins/Translations.vue:59 +#: front/src/components/mixins/Translations.vue:70 +#: front/src/views/admin/moderation/AccountsDetail.vue:206 +#: front/src/components/mixins/Translations.vue:71 msgctxt "Content/Profile/Table.Label/Short, Noun (Value is a date)" msgid "Last activity" msgstr "Laatste activiteit" -#: front/src/views/admin/moderation/AccountsDetail.vue:188 -#: front/src/views/admin/moderation/DomainsDetail.vue:78 +#: front/src/views/admin/moderation/AccountsDetail.vue:189 +#: front/src/views/admin/moderation/DomainsDetail.vue:115 msgctxt "Content/*/Table.Label" msgid "Last checked" msgstr "" @@ -2365,14 +2470,14 @@ msgctxt "Content/Moderation/Table.Label/Noun" msgid "Last seen" msgstr "" -#: front/src/components/mixins/Translations.vue:47 -#: front/src/components/mixins/Translations.vue:48 +#: front/src/components/mixins/Translations.vue:57 +#: front/src/components/mixins/Translations.vue:58 #, fuzzy msgctxt "Content/Moderation/Dropdown/Noun" msgid "Last seen date" msgstr "Laatste update:" -#: front/src/views/content/remote/Card.vue:60 +#: front/src/views/content/remote/Card.vue:73 msgctxt "Content/Library/Card.List item/Noun" msgid "Last update:" msgstr "Laatste update:" @@ -2382,81 +2487,77 @@ msgctxt "Modal/*/Button.Label/Short, Verb" msgid "Launch" msgstr "Opstarten" -#: front/src/components/Home.vue:10 -msgctxt "Content/Home/Button.Label/Verb" -msgid "Learn more about this instance" -msgstr "Meer informatie over deze instantie" +#: front/src/components/Home.vue:35 +msgctxt "Content/Home/Link" +msgid "Learn more" +msgstr "" #: front/src/components/manage/users/InvitationForm.vue:58 msgctxt "Content/Admin/Input.Placeholder" msgid "Leave empty for a random code" msgstr "Laat leeg om een willekeurig code te krijgen" -#: front/src/components/audio/EmbedWizard.vue:7 +#: front/src/components/audio/EmbedWizard.vue:17 #, fuzzy msgctxt "Popup/Embed/Paragraph" msgid "Leave empty for a responsive widget" msgstr "Laat leeg om een willekeurig code te krijgen" -#: front/src/views/admin/library/AlbumDetail.vue:232 -#: front/src/views/admin/library/ArtistDetail.vue:221 -#: front/src/views/admin/library/TrackDetail.vue:284 -#: front/src/views/admin/moderation/AccountsDetail.vue:327 -#: front/src/views/admin/moderation/DomainsDetail.vue:234 -#: front/src/views/content/Base.vue:5 +#: front/src/components/mixins/Translations.vue:64 +#: front/src/components/mixins/Translations.vue:65 msgctxt "*/*/*/Noun" -msgid "Libraries" -msgstr "Verzamelingen" +msgid "Length" +msgstr "" +#: front/src/views/admin/library/AlbumDetail.vue:248 +#: front/src/views/admin/library/ArtistDetail.vue:236 #: front/src/views/admin/library/Base.vue:17 #: front/src/views/admin/library/LibrariesList.vue:24 -msgctxt "*/*/*" +#: front/src/views/admin/library/TrackDetail.vue:300 +#: front/src/views/admin/moderation/AccountsDetail.vue:339 +#: front/src/views/admin/moderation/DomainsDetail.vue:271 +#: front/src/views/content/Base.vue:5 +msgctxt "*/*/*/Noun" msgid "Libraries" msgstr "Verzamelingen" -#: front/src/components/mixins/Translations.vue:72 -#: front/src/components/mixins/Translations.vue:73 -#, fuzzy +#: front/src/components/mixins/Translations.vue:84 +#: front/src/components/mixins/Translations.vue:85 msgctxt "Content/OAuth Scopes/Label" msgid "Libraries and uploads" -msgstr "Verzameling bijgewerkt" +msgstr "Bibliotheek en uploads" #: front/src/views/content/libraries/Form.vue:2 msgctxt "Content/Library/Paragraph" -msgid "" -"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." -msgstr "" -"Verzamelingen helpen je bij het organiseren en delen van je " -"muziekverzamelingen. Je kunt je eigen muziek uploaden naar Funkwhale en " -"delen met vrienden en familie." +msgid "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." +msgstr "Verzamelingen helpen je bij het organiseren en delen van je muziekverzamelingen. Je kunt je eigen muziek uploaden naar Funkwhale en delen met vrienden en familie." -#: front/src/components/Sidebar.vue:85 src/components/instance/Stats.vue:30 +#: front/src/components/Sidebar.vue:85 #: front/src/components/manage/library/UploadsTable.vue:60 -#: front/src/components/manage/users/UsersTable.vue:173 +#: front/src/components/manage/users/UsersTable.vue:174 +#: front/src/components/mixins/Report.vue:77 #: front/src/views/admin/library/UploadDetail.vue:144 -#: front/src/views/admin/moderation/AccountsDetail.vue:498 -msgctxt "*/*/*" +#: front/src/views/admin/moderation/AccountsDetail.vue:518 src/entities.js:132 +#: front/src/components/mixins/Report.vue:78 +#, fuzzy +msgctxt "*/*/*/Noun" msgid "Library" -msgstr "Verzameling" +msgstr "Bibliotheek" #: front/src/views/content/libraries/Form.vue:103 msgctxt "Content/Library/Message" msgid "Library created" -msgstr "Verzameling gecreëerd" +msgstr "Bibliotheek gecreëerd" #: front/src/views/admin/library/LibraryDetail.vue:78 -#, fuzzy msgctxt "Content/Moderation/Title" msgid "Library data" -msgstr "Verzameling bijgewerkt" +msgstr "Bibliotheekgegevens" #: front/src/views/content/libraries/Form.vue:123 -#, fuzzy msgctxt "Content/Library/Message" msgid "Library deleted" -msgstr "Verzameling bijgewerkt" +msgstr "Bibliotheek verwijderd" #: front/src/views/admin/library/EditsList.vue:4 #, fuzzy @@ -2467,25 +2568,41 @@ msgstr "Verzamelingsbestanden" #: front/src/views/content/libraries/Form.vue:100 msgctxt "Content/Library/Message" msgid "Library updated" -msgstr "Verzameling bijgewerkt" +msgstr "Bibliotheek bijgewerkt" #: front/src/components/library/TrackDetail.vue:19 #: front/src/components/manage/library/TracksTable.vue:43 -#: front/src/views/admin/library/TrackDetail.vue:159 src/edits.js:61 +#: front/src/views/admin/library/TrackDetail.vue:165 src/edits.js:84 +#: front/src/entities.js:115 msgctxt "Content/*/*/Noun" msgid "License" msgstr "" -#: front/src/views/admin/library/AlbumDetail.vue:157 -#: front/src/views/admin/library/ArtistDetail.vue:146 -#: front/src/views/admin/library/TrackDetail.vue:209 -msgctxt "*/*/*/Noun" -msgid "Listenings" +#: front/src/components/Footer.vue:90 +msgctxt "Footer/Settings/Dropdown.Label/Theme name" +msgid "Light" msgstr "" -#: front/src/components/mixins/Translations.vue:80 -#: front/src/components/mixins/Translations.vue:81 -msgctxt "Content/OAuth Scopes/Label" +#: front/src/views/admin/library/AlbumDetail.vue:188 +#: front/src/views/admin/library/ArtistDetail.vue:176 +#: front/src/views/admin/library/LibraryDetail.vue:179 +#: front/src/views/admin/library/TrackDetail.vue:240 +#: front/src/views/admin/moderation/AccountsDetail.vue:269 +msgctxt "Content/Moderation/Table.Label/Noun" +msgid "Linked reports" +msgstr "" + +#: front/src/components/Home.vue:135 +msgctxt "Content/Home/Link" +msgid "Listen to public albums and playlists shared on this pod" +msgstr "" + +#: front/src/components/mixins/Translations.vue:92 +#: front/src/views/admin/library/AlbumDetail.vue:163 +#: front/src/views/admin/library/ArtistDetail.vue:151 +#: front/src/views/admin/library/TrackDetail.vue:215 +#: front/src/components/mixins/Translations.vue:93 +msgctxt "*/*/*/Noun" msgid "Listenings" msgstr "" @@ -2499,50 +2616,51 @@ msgstr "" #, fuzzy msgctxt "Content/Library/Paragraph" msgid "Loading followers…" -msgstr "Bezig met laden van volgers..." +msgstr "Bezig met laden van volgers…" #: front/src/views/content/libraries/Home.vue:3 #, fuzzy msgctxt "Content/Library/Paragraph" msgid "Loading Libraries…" -msgstr "Bezig met laden van verzamelingen..." +msgstr "Bezig met laden van verzamelingen…" #: front/src/views/content/libraries/Detail.vue:3 #: front/src/views/content/libraries/Upload.vue:3 #, fuzzy msgctxt "Content/Library/Paragraph" msgid "Loading library data…" -msgstr "Bezig met laden van verzamelingsgegevens..." +msgstr "Bezig met laden van verzamelingsgegevens…" -#: front/src/views/Notifications.vue:19 +#: front/src/views/Notifications.vue:84 #, fuzzy msgctxt "Content/Notifications/Paragraph" msgid "Loading notifications…" -msgstr "Bezig met laden van meldingen..." +msgstr "Bezig met laden van meldingen…" #: front/src/views/content/remote/Home.vue:3 #, fuzzy msgctxt "Content/Library/Paragraph" msgid "Loading remote libraries…" -msgstr "Bezig met laden van externe verzamelingen..." +msgstr "Bezig met laden van externe verzamelingen…" #: front/src/views/content/libraries/Quota.vue:4 #, fuzzy msgctxt "Content/Library/Paragraph" msgid "Loading usage data…" -msgstr "Bezig met laden van verbruiksgegevens..." +msgstr "Bezig met laden van verbruiksgegevens…" #: front/src/components/favorites/List.vue:5 #, fuzzy msgctxt "Content/Favorites/Message" msgid "Loading your favorites…" -msgstr "Bezig met laden van je favorieten..." +msgstr "Bezig met laden van je favorieten…" #: front/src/components/manage/library/AlbumsTable.vue:65 #: front/src/components/manage/library/ArtistsTable.vue:58 #: front/src/components/manage/library/LibrariesTable.vue:75 #: front/src/components/manage/library/TracksTable.vue:71 #: front/src/components/manage/library/UploadsTable.vue:99 +#: front/src/components/manage/moderation/ReportCard.vue:173 #: front/src/views/admin/library/AlbumDetail.vue:19 #: front/src/views/admin/library/ArtistDetail.vue:18 #: front/src/views/admin/library/LibraryDetail.vue:18 @@ -2559,12 +2677,12 @@ msgctxt "Content/Moderation/*/Short, Noun" msgid "Local account" msgstr "Mijn account" -#: front/src/components/auth/Login.vue:84 +#: front/src/components/Home.vue:96 src/views/auth/Login.vue:29 msgctxt "Head/Login/Title" msgid "Log In" msgstr "Inloggen" -#: front/src/components/auth/Login.vue:4 +#: front/src/views/auth/Login.vue:4 msgctxt "Content/Login/Title/Verb" msgid "Log in to your Funkwhale account" msgstr "Log in op je Funkwhale-account" @@ -2579,7 +2697,7 @@ msgctxt "Sidebar/Profile/List item.Link" msgid "Logged in as %{ username }" msgstr "Ingelogd als %{ username }" -#: front/src/components/Sidebar.vue:54 src/components/auth/Login.vue:42 +#: front/src/components/Sidebar.vue:54 src/components/auth/LoginForm.vue:41 msgctxt "*/Login/*/Verb" msgid "Login" msgstr "Inloggen" @@ -2596,42 +2714,43 @@ msgid "Logout" msgstr "Uitloggen" #: front/src/views/content/libraries/Home.vue:9 -#, fuzzy msgctxt "Content/Library/Paragraph" msgid "Looks like you don't have a library, it's time to create one." -msgstr "" -"Het lijkt erop dat je nog geen verzameling hebt; de hoogste tijd om er één " -"te creëren!" +msgstr "Het lijkt erop dat je geen bibliotheek hebt; tijd om er één te creëren." -#: front/src/components/audio/Player.vue:632 -#: src/components/audio/Player.vue:633 +#: front/src/components/audio/Player.vue:658 +#: src/components/audio/Player.vue:659 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Looping disabled. Click to switch to single-track looping." -msgstr "" -"Herhalen uitgeschakeld. Klik om over te schakelen naar één nummer-herhaling." +msgstr "Herhalen uitgeschakeld. Klik om over te schakelen naar één nummer-herhaling." -#: front/src/components/audio/Player.vue:635 -#: src/components/audio/Player.vue:636 +#: front/src/components/audio/Player.vue:661 +#: src/components/audio/Player.vue:662 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Looping on a single track. Click to switch to whole queue looping." -msgstr "" -"Eén nummer wordt herhaald. Klik om over te schakelen naar wachtrijherhaling." +msgstr "Eén nummer wordt herhaald. Klik om over te schakelen naar wachtrijherhaling." -#: front/src/components/audio/Player.vue:638 -#: src/components/audio/Player.vue:639 +#: front/src/components/audio/Player.vue:664 +#: src/components/audio/Player.vue:665 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Looping on whole queue. Click to disable looping." msgstr "Gehele wachtrij wordt herhaald. Klik om herhalen uit te schakelen." -#: front/src/components/Sidebar.vue:223 +#: front/src/components/Sidebar.vue:230 msgctxt "Sidebar/*/Hidden text" msgid "Main menu" msgstr "" -#: front/src/views/admin/library/Base.vue:31 +#: front/src/views/admin/library/Base.vue:34 msgctxt "Head/Admin/Title" msgid "Manage library" -msgstr "Verzameling beheren" +msgstr "Bibliotheek beheren" + +#: front/src/components/manage/moderation/InstancePolicyModal.vue:8 +#, fuzzy +msgctxt "Popup/Moderation/Title/Verb" +msgid "Manage moderation rules for %{ obj }" +msgstr "Nieuwe moderatieregel toevoegen" #: front/src/components/playlists/PlaylistModal.vue:3 msgctxt "Popup/Playlist/Title/Verb" @@ -2648,7 +2767,7 @@ msgctxt "Content/Playlist/Button.Label/Verb" msgid "Manage your playlists" msgstr "Beheer je afspeellijsten" -#: front/src/views/Notifications.vue:14 +#: front/src/views/Notifications.vue:79 msgctxt "Content/Notifications/Button.Label/Verb" msgid "Mark all as read" msgstr "Alles markeren als gelezen" @@ -2665,12 +2784,12 @@ msgctxt "Content/Notifications/Button.Tooltip/Verb" msgid "Mark as unread" msgstr "Alles markeren als gelezen" -#: front/src/views/admin/moderation/AccountsDetail.vue:310 +#: front/src/views/admin/moderation/AccountsDetail.vue:321 msgctxt "Content/*/*/Unit" msgid "MB" msgstr "MB" -#: front/src/components/audio/Player.vue:625 +#: front/src/components/audio/Player.vue:651 msgctxt "Sidebar/Player/Hidden text" msgid "Media player" msgstr "" @@ -2681,27 +2800,44 @@ msgctxt "Content/Profile/Paragraph" msgid "Member since %{ date }" msgstr "Geregistreerd sinds %{ date }" +#: front/src/components/manage/moderation/ReportCard.vue:109 +#: front/src/components/moderation/ReportModal.vue:41 +msgctxt "*/*/Field.Label/Noun" +msgid "Message" +msgstr "" + #: front/src/components/Footer.vue:32 msgctxt "Footer/*/List item.Link" msgid "Mobile and desktop apps" -msgstr "" +msgstr "Mobiele- en desktop-apps" + +#: front/src/components/Home.vue:143 +#, fuzzy +msgctxt "Content/Home/Link" +msgid "Mobile apps" +msgstr "Mobiele- en desktop-apps" #: front/src/components/Sidebar.vue:96 -#: src/components/manage/users/UsersTable.vue:177 -#: front/src/views/admin/moderation/AccountsDetail.vue:502 -#: front/src/views/admin/moderation/Base.vue:21 +#: src/components/manage/users/UsersTable.vue:178 +#: front/src/views/admin/Settings.vue:85 +#: front/src/views/admin/moderation/AccountsDetail.vue:522 +#: front/src/views/admin/moderation/Base.vue:43 #, fuzzy msgctxt "*/Moderation/*" msgid "Moderation" msgstr "Federatie" #: front/src/views/admin/moderation/AccountsDetail.vue:78 -#: front/src/views/admin/moderation/DomainsDetail.vue:42 +#: front/src/views/admin/moderation/DomainsDetail.vue:70 msgctxt "Content/Moderation/Card.Paragraph" -msgid "" -"Moderation policies help you control how your instance interact with a given" -" domain or account." -msgstr "" +msgid "Moderation policies help you control how your instance interact with a given domain or account." +msgstr "Met moderatieregels kun je bepalen of en hoe er interactie is tussen jouw server en een bepaald domein of account." + +#: front/src/components/manage/moderation/InstancePolicyModal.vue:4 +#, fuzzy +msgctxt "Content/Moderation/Button.Label" +msgid "Moderation rules…" +msgstr "Moderatie-regel aanpassen" #: front/src/components/library/EditCard.vue:5 #, fuzzy @@ -2709,15 +2845,16 @@ msgctxt "Content/Library/Card/Short" msgid "Modification %{ id }" msgstr "Bewerkt op" -#: front/src/components/mixins/Translations.vue:48 -#: front/src/components/mixins/Translations.vue:49 +#: front/src/components/mixins/Translations.vue:58 +#: front/src/components/mixins/Translations.vue:59 msgctxt "Content/Playlist/Dropdown/Noun" msgid "Modification date" msgstr "Bewerkt op" -#: front/src/components/library/AlbumBase.vue:42 -#: front/src/components/library/ArtistBase.vue:53 -#: front/src/components/library/TrackBase.vue:61 +#: front/src/components/audio/PlayButton.vue:100 +#: front/src/components/library/AlbumBase.vue:43 +#: front/src/components/library/ArtistBase.vue:54 +#: front/src/components/library/TrackBase.vue:59 msgctxt "*/*/Button.Label/Noun" msgid "More…" msgstr "" @@ -2727,7 +2864,7 @@ msgctxt "*/*/*/Noun" msgid "Music" msgstr "Muziek" -#: front/src/components/audio/Player.vue:631 +#: front/src/components/audio/Player.vue:657 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Mute" msgstr "Dempen" @@ -2759,7 +2896,7 @@ msgstr "Mijn geweldige omschrijving" #: front/src/views/content/libraries/Form.vue:72 msgctxt "Content/Library/Input.Placeholder" msgid "My awesome library" -msgstr "Mijn geweldige verzameling" +msgstr "Mijn geweldige bibliotheek" #: front/src/components/playlists/Form.vue:76 msgctxt "Content/Playlist/Input.Placeholder" @@ -2776,8 +2913,8 @@ msgctxt "Content/Library/Title" msgid "My libraries" msgstr "Mijn verzamelingen" -#: front/src/components/audio/track/Row.vue:40 -#: src/components/library/EditCard.vue:60 +#: front/src/components/About.vue:105 src/components/audio/track/Row.vue:40 +#: front/src/components/library/EditCard.vue:60 #: front/src/components/library/EditForm.vue:70 #: front/src/components/library/TrackDetail.vue:34 #: front/src/components/library/TrackDetail.vue:43 @@ -2787,54 +2924,56 @@ msgstr "Mijn verzamelingen" #: front/src/components/manage/library/TracksTable.vue:76 #: front/src/components/manage/library/UploadsTable.vue:121 #: front/src/components/manage/library/UploadsTable.vue:128 -#: front/src/components/manage/users/UsersTable.vue:61 +#: front/src/components/manage/moderation/ReportCard.vue:78 +#: front/src/components/manage/moderation/ReportCard.vue:87 +#: front/src/components/manage/moderation/ReportCard.vue:193 +#: front/src/components/manage/users/UsersTable.vue:62 #: front/src/views/admin/library/UploadDetail.vue:179 #: front/src/views/admin/library/UploadDetail.vue:214 #: front/src/views/admin/library/UploadDetail.vue:233 #: front/src/views/admin/library/UploadDetail.vue:244 #: front/src/views/admin/library/UploadDetail.vue:257 -#: front/src/views/admin/moderation/AccountsDetail.vue:192 -#: front/src/views/admin/moderation/DomainsDetail.vue:82 +#: front/src/views/admin/moderation/AccountsDetail.vue:193 +#: front/src/views/admin/moderation/DomainsDetail.vue:119 #: front/src/views/content/libraries/FilesTable.vue:95 #: front/src/views/content/libraries/FilesTable.vue:101 msgctxt "*/*/*" msgid "N/A" msgstr "N.B." -#: front/src/components/manage/library/LibrariesTable.vue:48 -#: front/src/components/manage/library/UploadsTable.vue:59 -msgctxt "*/*/*" -msgid "Name" -msgstr "Naam" - #: front/src/components/auth/ApplicationForm.vue:9 -msgctxt "Content/Applications/Input.Label/Noun" -msgid "Name" -msgstr "Naam" - #: front/src/components/auth/Settings.vue:133 #: front/src/components/manage/library/ArtistsTable.vue:39 +#: front/src/components/manage/library/LibrariesTable.vue:48 +#: front/src/components/manage/library/TagsTable.vue:41 +#: front/src/components/manage/library/UploadsTable.vue:59 #: front/src/components/manage/moderation/AccountsTable.vue:39 -#: front/src/components/manage/moderation/DomainsTable.vue:38 -#: front/src/components/mixins/Translations.vue:53 +#: front/src/components/manage/moderation/DomainsTable.vue:46 +#: front/src/components/mixins/Translations.vue:63 #: front/src/components/playlists/PlaylistModal.vue:45 -#: front/src/views/admin/library/ArtistDetail.vue:98 +#: front/src/views/admin/library/ArtistDetail.vue:103 #: front/src/views/admin/library/LibraryDetail.vue:85 +#: front/src/views/admin/library/TagDetail.vue:68 #: front/src/views/admin/library/UploadDetail.vue:92 -#: front/src/views/admin/moderation/DomainsDetail.vue:97 -#: front/src/views/content/libraries/Form.vue:10 src/edits.js:10 -#: front/src/components/mixins/Translations.vue:54 +#: front/src/views/admin/moderation/DomainsDetail.vue:134 +#: front/src/views/content/libraries/Form.vue:10 src/edits.js:17 +#: front/src/components/mixins/Translations.vue:64 msgctxt "*/*/*/Noun" msgid "Name" msgstr "Naam" +#: front/src/views/Notifications.vue:24 src/views/Notifications.vue:58 +msgctxt "*/*/*" +msgid "Never" +msgstr "" + #: front/src/components/auth/Settings.vue:88 #: front/src/views/auth/PasswordResetConfirm.vue:14 msgctxt "Content/Settings/Input.Label" msgid "New password" msgstr "Nieuw wachtwoord" -#: front/src/components/Sidebar.vue:173 +#: front/src/components/Sidebar.vue:177 msgctxt "Sidebar/Player/Paragraph" msgid "New tracks will be appended here automatically." msgstr "Nieuwe nummers worden hier automatisch toegevoegd." @@ -2844,22 +2983,18 @@ msgctxt "Content/Library/Card.Table.Header/Short" msgid "New value" msgstr "" -#: front/src/components/audio/Player.vue:629 +#: front/src/components/audio/Player.vue:655 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Next track" msgstr "Volgend nummer" -#: front/src/components/Sidebar.vue:130 +#: front/src/components/Sidebar.vue:134 +#: front/src/components/manage/moderation/DomainsTable.vue:13 +#: front/src/views/admin/moderation/DomainsDetail.vue:110 msgctxt "*/*/*" msgid "No" msgstr "Nee" -#: front/src/components/Home.vue:95 -msgctxt "Content/Home/List item" -msgid "No add-ons, no plugins : you only need a web library" -msgstr "" -"Geen uitbreidingen of plug-ins: je hebt alleen een online verzameling nodig" - #: front/src/components/audio/Search.vue:25 #, fuzzy msgctxt "Content/Search/Paragraph" @@ -2878,6 +3013,11 @@ msgctxt "Content/Track/Table.Paragraph" msgid "No copyright information available for this track" msgstr "Geen songtekst beschikbaar voor dit nummer." +#: front/src/components/About.vue:25 src/components/Home.vue:25 +msgctxt "Content/Home/Paragraph" +msgid "No description available." +msgstr "" + #: front/src/components/library/TrackDetail.vue:25 #, fuzzy msgctxt "Content/Track/Table.Paragraph" @@ -2887,9 +3027,9 @@ msgstr "Geen songtekst beschikbaar voor dit nummer." #: front/src/components/federation/LibraryWidget.vue:6 msgctxt "Content/Federation/Paragraph" msgid "No matching library." -msgstr "Geen overeenkomende verzameling gevonden." +msgstr "Geen overeenkomende bibliotheek." -#: front/src/views/Notifications.vue:28 +#: front/src/views/Notifications.vue:93 #, fuzzy msgctxt "Content/Notifications/Paragraph" msgid "No notification to show." @@ -2900,6 +3040,16 @@ msgctxt "Content/*/Paragraph" msgid "No results were found." msgstr "" +#: front/src/components/About.vue:32 +msgctxt "Content/Home/Paragraph" +msgid "No rules available." +msgstr "" + +#: front/src/components/About.vue:39 +msgctxt "Content/Home/Paragraph" +msgid "No terms available." +msgstr "" + #: front/src/components/mixins/Translations.vue:10 #: front/src/components/mixins/Translations.vue:11 msgctxt "Content/Settings/Dropdown" @@ -2909,25 +3059,29 @@ msgstr "Niemand, behalve ik" #: front/src/views/content/libraries/Detail.vue:57 msgctxt "Content/Library/Paragraph" msgid "Nobody is following this library" -msgstr "Niemand volgt deze verzameling" +msgstr "Niemand volgt deze bibliotheek" #: front/src/components/manage/users/InvitationsTable.vue:51 msgctxt "Content/Admin/Table" msgid "Not used" msgstr "Niet gebruikt" -#: front/src/components/mixins/Translations.vue:100 -#: front/src/components/mixins/Translations.vue:101 -msgctxt "Content/OAuth Scopes/Label" -msgid "Notifications" -msgstr "Meldingen" - -#: front/src/components/Sidebar.vue:46 src/views/Notifications.vue:76 +#: front/src/components/Sidebar.vue:46 +#: src/components/mixins/Translations.vue:112 +#: front/src/views/Notifications.vue:151 +#: src/components/mixins/Translations.vue:113 msgctxt "*/Notifications/*" msgid "Notifications" msgstr "Meldingen" -#: front/src/components/Footer.vue:47 +#: front/src/components/mixins/Translations.vue:47 +#: front/src/components/mixins/Translations.vue:48 +#, fuzzy +msgctxt "Content/Moderation/Dropdown" +msgid "Offensive content" +msgstr "Inhoud verbergen" + +#: front/src/components/Footer.vue:55 msgctxt "Footer/*/List item.Link" msgid "Official website" msgstr "Officiële website" @@ -2942,6 +3096,12 @@ msgctxt "Content/Library/Card.Table.Header/Short" msgid "Old value" msgstr "" +#: front/src/components/About.vue:90 +#, fuzzy +msgctxt "*/*/*/State of registrations" +msgid "Open" +msgstr "Open" + #: front/src/components/manage/users/InvitationsTable.vue:20 msgctxt "Content/Admin/Dropdown/Adjective" msgid "Open" @@ -2949,27 +3109,29 @@ msgstr "Open" #: front/src/components/library/ImportStatusModal.vue:56 msgctxt "Popup/Import/Table.Label/Value" -msgid "" -"Open a support thread (include the debug information below in your message)" +msgid "Open a support thread (include the debug information below in your message)" msgstr "" -#: front/src/components/library/AlbumBase.vue:73 -#: front/src/components/library/ArtistBase.vue:84 -#: front/src/components/library/TrackBase.vue:92 +#: front/src/components/library/AlbumBase.vue:87 +#: front/src/components/library/ArtistBase.vue:99 +#: front/src/components/library/TagDetail.vue:11 +#: front/src/components/library/TrackBase.vue:103 +#: front/src/components/manage/moderation/ReportCard.vue:128 msgctxt "Content/Moderation/Link" msgid "Open in moderation interface" msgstr "" -#: front/src/views/admin/library/AlbumDetail.vue:31 -#: front/src/views/admin/library/ArtistDetail.vue:30 -#: front/src/views/admin/library/TrackDetail.vue:30 +#: front/src/views/admin/library/AlbumDetail.vue:37 +#: front/src/views/admin/library/ArtistDetail.vue:35 +#: front/src/views/admin/library/TagDetail.vue:21 +#: front/src/views/admin/library/TrackDetail.vue:36 msgctxt "Content/Moderation/Link/Verb" msgid "Open local profile" msgstr "" -#: front/src/views/admin/library/AlbumDetail.vue:46 -#: front/src/views/admin/library/ArtistDetail.vue:45 -#: front/src/views/admin/library/TrackDetail.vue:45 +#: front/src/views/admin/library/AlbumDetail.vue:52 +#: front/src/views/admin/library/ArtistDetail.vue:50 +#: front/src/views/admin/library/TrackDetail.vue:51 #, fuzzy msgctxt "Content/Moderation/Link/Verb" msgid "Open on MusicBrainz" @@ -2980,10 +3142,10 @@ msgctxt "Content/Moderation/Link/Verb" msgid "Open profile" msgstr "" -#: front/src/views/admin/library/AlbumDetail.vue:54 -#: front/src/views/admin/library/ArtistDetail.vue:53 +#: front/src/views/admin/library/AlbumDetail.vue:60 +#: front/src/views/admin/library/ArtistDetail.vue:58 #: front/src/views/admin/library/LibraryDetail.vue:49 -#: front/src/views/admin/library/TrackDetail.vue:53 +#: front/src/views/admin/library/TrackDetail.vue:59 #: front/src/views/admin/library/UploadDetail.vue:50 #: front/src/views/admin/moderation/AccountsDetail.vue:52 msgctxt "Content/Moderation/Link/Verb" @@ -3006,6 +3168,7 @@ msgstr "Voeg filters toe om je radio te personaliseren" #: src/components/library/Radios.vue:41 #: front/src/components/manage/library/EditsCardList.vue:37 #: front/src/components/manage/users/UsersTable.vue:17 +#: front/src/views/admin/moderation/ReportsList.vue:42 #: front/src/views/playlists/List.vue:25 #, fuzzy msgctxt "Content/Search/Dropdown.Label/Noun" @@ -3014,40 +3177,51 @@ msgstr "Volgorde" #: front/src/components/favorites/List.vue:24 #: src/components/library/Albums.vue:15 -#: front/src/components/library/Artists.vue:15 +#: front/src/components/library/Artists.vue:19 #: src/components/library/Radios.vue:33 #: front/src/components/manage/library/AlbumsTable.vue:11 #: front/src/components/manage/library/ArtistsTable.vue:11 #: front/src/components/manage/library/EditsCardList.vue:29 #: front/src/components/manage/library/LibrariesTable.vue:20 +#: front/src/components/manage/library/TagsTable.vue:11 #: front/src/components/manage/library/TracksTable.vue:11 #: front/src/components/manage/library/UploadsTable.vue:30 #: front/src/components/manage/moderation/AccountsTable.vue:11 -#: front/src/components/manage/moderation/DomainsTable.vue:9 +#: front/src/components/manage/moderation/DomainsTable.vue:17 #: front/src/components/manage/users/InvitationsTable.vue:9 #: front/src/components/manage/users/UsersTable.vue:9 +#: front/src/views/admin/moderation/ReportsList.vue:34 #: front/src/views/content/libraries/FilesTable.vue:21 #: front/src/views/playlists/List.vue:17 msgctxt "Content/Search/Dropdown.Label/Noun" msgid "Ordering" msgstr "Volgorde" -#: front/src/components/library/Albums.vue:23 -#: src/components/library/Artists.vue:23 +#: front/src/components/library/Albums.vue:27 +#: src/components/library/Artists.vue:27 #: front/src/components/manage/library/AlbumsTable.vue:19 #: front/src/components/manage/library/ArtistsTable.vue:19 #: front/src/components/manage/library/LibrariesTable.vue:28 +#: front/src/components/manage/library/TagsTable.vue:19 #: front/src/components/manage/library/TracksTable.vue:19 #: front/src/components/manage/library/UploadsTable.vue:38 #: front/src/components/manage/moderation/AccountsTable.vue:19 -#: front/src/components/manage/moderation/DomainsTable.vue:17 +#: front/src/components/manage/moderation/DomainsTable.vue:25 #: front/src/views/content/libraries/FilesTable.vue:29 msgctxt "Content/Search/Dropdown.Label/Noun" msgid "Ordering direction" msgstr "Sorteervolgorde" +#: front/src/components/mixins/Translations.vue:48 +#: front/src/components/mixins/Translations.vue:49 +msgctxt "Content/Moderation/Dropdown" +msgid "Other" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:143 #: front/src/components/manage/users/InvitationsTable.vue:38 -msgctxt "Content/Admin/Table.Label" +#, fuzzy +msgctxt "*/*/*" msgid "Owner" msgstr "Eigenaar" @@ -3067,12 +3241,15 @@ msgctxt "Content/*/Hidden text/Noun" msgid "Pagination" msgstr "" -#: front/src/components/auth/Login.vue:33 src/components/auth/Signup.vue:40 -msgctxt "Content/*/Input.Label" +#: front/src/components/auth/LoginForm.vue:32 +#: src/components/auth/Settings.vue:291 +#: front/src/components/auth/SignupForm.vue:36 +#, fuzzy +msgctxt "*/*/*" msgid "Password" msgstr "Wachtwoord" -#: front/src/components/auth/SubsonicTokenForm.vue:94 +#: front/src/components/auth/SubsonicTokenForm.vue:100 msgctxt "Content/Settings/Message" msgid "Password updated" msgstr "Wachtwoord bijgewerkt" @@ -3082,12 +3259,12 @@ msgctxt "Content/Signup/Card.Title" msgid "Password updated successfully" msgstr "Wachtwoord is gewijzigd" -#: front/src/components/audio/Player.vue:628 +#: front/src/components/audio/Player.vue:654 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Pause track" msgstr "Nummer pauzeren" -#: front/src/components/ShortcutsModal.vue:59 +#: front/src/components/ShortcutsModal.vue:96 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Pause/play the current track" msgstr "" @@ -3116,7 +3293,7 @@ msgctxt "Content/Library/Label" msgid "Pending files" msgstr "In behandeling zijnde bestanden" -#: front/src/components/Sidebar.vue:225 +#: front/src/components/Sidebar.vue:232 msgctxt "Sidebar/Notifications/Hidden text" msgid "Pending follow requests" msgstr "In behandeling zijnde volgverzoeken" @@ -3128,89 +3305,80 @@ msgctxt "Content/Admin/*/Noun" msgid "Pending review" msgstr "In behandeling zijnde bestanden" -#: front/src/components/Sidebar.vue:226 +#: front/src/components/Sidebar.vue:233 #, fuzzy msgctxt "Sidebar/Moderation/Hidden text" -msgid "Pending review edits" -msgstr "In behandeling zijnde verzoeken" - -#: front/src/components/manage/users/UsersTable.vue:42 -#: front/src/views/admin/moderation/AccountsDetail.vue:166 -msgctxt "Content/Admin/Table.Label/Noun" -msgid "Permissions" -msgstr "Machtigingen" +msgid "Pending review edits" +msgstr "In behandeling zijnde verzoeken" #: front/src/components/auth/Settings.vue:176 +#: front/src/components/manage/users/UsersTable.vue:42 +#: front/src/views/admin/moderation/AccountsDetail.vue:166 msgctxt "Content/*/*/Noun" msgid "Permissions" msgstr "Machtigingen" #: front/src/components/audio/PlayButton.vue:9 -#: front/src/components/library/TrackBase.vue:26 +#: front/src/components/library/TrackBase.vue:24 msgctxt "*/Queue/Button.Label/Short, Verb" msgid "Play" msgstr "Afspelen" #: front/src/components/audio/album/Card.vue:48 -#: front/src/components/audio/artist/Card.vue:44 -#: front/src/components/library/AlbumBase.vue:20 +#: front/src/components/library/AlbumBase.vue:21 #: front/src/components/library/AlbumDetail.vue:11 #: src/views/playlists/Detail.vue:24 msgctxt "Content/Queue/Button.Label/Short, Verb" msgid "Play all" msgstr "Alles afspelen" -#: front/src/components/library/ArtistBase.vue:31 +#: front/src/components/library/ArtistBase.vue:32 msgctxt "Content/Artist/Button.Label/Verb" msgid "Play all albums" msgstr "Alle albums afspelen" -#: front/src/components/audio/PlayButton.vue:76 +#: front/src/components/audio/PlayButton.vue:92 msgctxt "*/Queue/Dropdown/Button/Title" msgid "Play next" msgstr "Hierna afspelen" -#: front/src/components/ShortcutsModal.vue:67 +#: front/src/components/ShortcutsModal.vue:120 #, fuzzy msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Play next track" -msgstr "Nummer afspelen" +msgstr "Afspelen" -#: front/src/components/audio/PlayButton.vue:74 +#: front/src/components/audio/PlayButton.vue:90 msgctxt "*/Queue/Dropdown/Button/Title" msgid "Play now" msgstr "Nu afspelen" -#: front/src/components/ShortcutsModal.vue:63 +#: front/src/components/ShortcutsModal.vue:116 #, fuzzy msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Play previous track" msgstr "Vorig nummer" -#: front/src/components/audio/PlayButton.vue:77 +#: front/src/components/audio/PlayButton.vue:93 msgctxt "*/Queue/Dropdown/Button/Title" msgid "Play similar songs" msgstr "" -#: front/src/components/Sidebar.vue:224 +#: front/src/components/Sidebar.vue:231 #, fuzzy msgctxt "Sidebar/Player/Hidden text" msgid "Play this track" msgstr "Nummer afspelen" -#: front/src/components/audio/Player.vue:627 +#: front/src/components/audio/Player.vue:653 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Play track" msgstr "Nummer afspelen" -#: front/src/components/audio/PlayButton.vue:82 +#: front/src/components/mixins/Report.vue:66 src/views/playlists/Detail.vue:121 +#: front/src/components/mixins/Report.vue:67 #, fuzzy -msgctxt "*/Queue/Button/Title" -msgid "Play..." -msgstr "Afspelen" - -#: front/src/views/playlists/Detail.vue:91 -msgctxt "Head/Playlist/Title" +msgctxt "*/*/*" msgid "Playlist" msgstr "Afspeellijst" @@ -3247,33 +3415,30 @@ msgctxt "Content/Playlist/Dropdown.Label" msgid "Playlist visibility" msgstr "Zichtbaarheid van afspeellijst" -#: front/src/components/mixins/Translations.vue:88 -#: front/src/components/mixins/Translations.vue:89 -msgctxt "Content/OAuth Scopes/Label" -msgid "Playlists" -msgstr "Afspeellijsten" - #: front/src/components/Sidebar.vue:71 src/components/library/Home.vue:16 -#: front/src/components/library/Library.vue:16 src/views/admin/Settings.vue:83 -#: front/src/views/admin/library/AlbumDetail.vue:173 -#: front/src/views/admin/library/ArtistDetail.vue:162 -#: front/src/views/admin/library/TrackDetail.vue:225 +#: front/src/components/library/Library.vue:16 +#: front/src/components/mixins/Translations.vue:100 +#: src/views/admin/Settings.vue:83 +#: front/src/views/admin/library/AlbumDetail.vue:179 +#: front/src/views/admin/library/ArtistDetail.vue:167 +#: front/src/views/admin/library/TrackDetail.vue:231 #: src/views/playlists/List.vue:106 +#: front/src/components/mixins/Translations.vue:101 msgctxt "*/*/*" msgid "Playlists" msgstr "Afspeellijsten" -#: front/src/components/Home.vue:56 -msgctxt "Content/Home/List item" -msgid "Playlists? We got them" -msgstr "Afspeellijsten? Die hebben we" +#: front/src/components/audio/EmbedWizard.vue:9 +msgctxt "Content/Embed/Message" +msgid "Please contact your admins and ask them to update the corresponding setting." +msgstr "" #: front/src/components/auth/Settings.vue:79 msgctxt "Content/Settings/Error message.List item/Call to action" msgid "Please double-check your password is correct" msgstr "Controleer of je wachtwoord klopt" -#: front/src/components/auth/Login.vue:9 +#: front/src/components/auth/LoginForm.vue:5 msgctxt "Content/Login/Error message.List item/Call to action" msgid "Please double-check your username/password couple is correct" msgstr "Controleer of je gebruikersnaam en wachtwoord kloppen" @@ -3283,25 +3448,28 @@ msgctxt "Content/Settings/Paragraph" msgid "PNG, GIF or JPG. At most 2MB. Will be downscaled to 400x400px." msgstr "PNG, GIF of JPG. Maximaal 2MB. Wordt verkleind tot 400x400px." -#: front/src/views/admin/library/TrackDetail.vue:137 +#: front/src/components/About.vue:72 +msgctxt "Content/About/Header/Name" +msgid "Pod configuration" +msgstr "" + +#: front/src/views/admin/library/TrackDetail.vue:143 src/edits.js:70 #, fuzzy -msgctxt "*/*/*/Noun" +msgctxt "*/*/*/Short, Noun" msgid "Position" msgstr "Omschrijving" #: front/src/components/manage/moderation/InstancePolicyForm.vue:118 msgctxt "Content/Moderation/Help text" -msgid "" -"Prevent account or domain from triggering notifications, except from " -"followers." +msgid "Prevent account or domain from triggering notifications, except from followers." msgstr "" -#: front/src/components/audio/EmbedWizard.vue:33 +#: front/src/components/audio/EmbedWizard.vue:43 msgctxt "Popup/Embed/Title/Noun" msgid "Preview" msgstr "" -#: front/src/components/audio/Player.vue:626 +#: front/src/components/audio/Player.vue:652 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Previous track" msgstr "Vorig nummer" @@ -3312,7 +3480,7 @@ msgctxt "Content/Settings/Dropdown/Short" msgid "Private" msgstr "" -#: front/src/views/content/remote/Card.vue:43 +#: front/src/views/content/remote/Card.vue:56 #, fuzzy msgctxt "Content/Library/Card.List item" msgid "Problem during scanning" @@ -3332,17 +3500,23 @@ msgstr "Doorgaan met inloggen" #: front/src/components/library/FileUpload.vue:17 msgctxt "Content/Library/Tab.Title/Short" msgid "Processing" -msgstr "Bezig met verwerken..." +msgstr "Aan het verwerken" -#: front/src/components/mixins/Translations.vue:68 -#: front/src/components/mixins/Translations.vue:69 +#: front/src/components/mixins/Translations.vue:80 +#: front/src/components/mixins/Translations.vue:81 #, fuzzy msgctxt "Content/OAuth Scopes/Label" msgid "Profile" msgstr "Mislukte bestanden" +#: front/src/components/auth/SignupForm.vue:5 +#, fuzzy +msgctxt "Content/Signup/Form/Paragraph" +msgid "Public registrations are not possible on this instance. You will need an invitation code to sign up." +msgstr "Openbare registraties zijn uitgeschakeld op deze server. Om je te kunnen aanmelden heb je een uitnodigings-code nodig." + #: front/src/components/manage/moderation/AccountsTable.vue:188 -#: front/src/components/manage/moderation/DomainsTable.vue:168 +#: front/src/components/manage/moderation/DomainsTable.vue:186 #: front/src/views/content/libraries/Quota.vue:36 #: front/src/views/content/libraries/Quota.vue:39 #: front/src/views/content/libraries/Quota.vue:62 @@ -3373,10 +3547,10 @@ msgctxt "Sidebar/Queue/Tab.Title/Noun" msgid "Queue" msgstr "Wachtrij" -#: front/src/components/audio/Player.vue:322 +#: front/src/components/audio/Player.vue:329 msgctxt "Content/Queue/Message" msgid "Queue shuffled!" -msgstr "Wachtrij ingesteld op willekeurig!" +msgstr "Wachtrij geshuffeld!" #: front/src/views/radios/Detail.vue:80 msgctxt "Head/Radio/Title" @@ -3405,16 +3579,12 @@ msgstr "Radio bijgewerkt" #: front/src/components/library/Library.vue:13 #: src/components/library/Radios.vue:142 +#: front/src/components/mixins/Translations.vue:104 +#: front/src/components/mixins/Translations.vue:105 msgctxt "*/*/*" msgid "Radios" msgstr "Radio's" -#: front/src/components/mixins/Translations.vue:92 -#: front/src/components/mixins/Translations.vue:93 -msgctxt "Content/OAuth Scopes/Label" -msgid "Radios" -msgstr "Radio's" - #: front/src/components/auth/ApplicationForm.vue:151 msgctxt "Content/OAuth Scopes/Label/Verb" msgid "Read" @@ -3441,15 +3611,15 @@ msgctxt "Content/Moderation/*/Noun" msgid "Reason" msgstr "" -#: front/src/views/admin/moderation/AccountsDetail.vue:251 -#: front/src/views/admin/moderation/DomainsDetail.vue:179 +#: front/src/views/admin/moderation/AccountsDetail.vue:252 +#: front/src/views/admin/moderation/DomainsDetail.vue:216 msgctxt "Content/Moderation/Table.Label/Noun" msgid "Received library follows" msgstr "" -#: front/src/components/manage/moderation/DomainsTable.vue:40 -#: front/src/components/mixins/Translations.vue:62 -#: front/src/components/mixins/Translations.vue:63 +#: front/src/components/manage/moderation/DomainsTable.vue:48 +#: front/src/components/mixins/Translations.vue:74 +#: front/src/components/mixins/Translations.vue:75 msgctxt "Content/Moderation/*/Noun" msgid "Received messages" msgstr "" @@ -3470,6 +3640,12 @@ msgctxt "Content/Home/Title" msgid "Recently added" msgstr "Recent toegevoegd" +#: front/src/components/Home.vue:167 +#, fuzzy +msgctxt "Content/Home/Title" +msgid "Recently added albums" +msgstr "Recent toegevoegd" + #: front/src/components/library/Home.vue:11 msgctxt "Content/Home/Title" msgid "Recently favorited" @@ -3499,14 +3675,14 @@ msgctxt "Popup/*/Message.Title" msgid "Refresh error" msgstr "Verversen" -#: front/src/views/admin/library/AlbumDetail.vue:50 -#: front/src/views/admin/library/ArtistDetail.vue:49 -#: front/src/views/admin/library/TrackDetail.vue:49 +#: front/src/views/admin/library/AlbumDetail.vue:56 +#: front/src/views/admin/library/ArtistDetail.vue:54 +#: front/src/views/admin/library/TrackDetail.vue:55 msgctxt "Content/Moderation/Button/Verb" msgid "Refresh from remote server" msgstr "" -#: front/src/views/admin/moderation/DomainsDetail.vue:127 +#: front/src/views/admin/moderation/DomainsDetail.vue:164 msgctxt "Content/Moderation/Button.Label/Verb" msgid "Refresh node info" msgstr "" @@ -3519,9 +3695,7 @@ msgstr "Aflopend" #: front/src/components/federation/FetchButton.vue:80 msgctxt "Popup/*/Message.Content" -msgid "" -"Refresh request wasn't proceed in time by our server. It will be processed " -"later." +msgid "Refresh request wasn't proceed in time by our server. It will be processed later." msgstr "" #: front/src/components/federation/FetchButton.vue:16 @@ -3545,16 +3719,13 @@ msgctxt "Popup/*/Title" msgid "Refreshing object from remote…" msgstr "" -#: front/src/components/auth/Signup.vue:9 -msgctxt "Content/Signup/Form/Paragraph" -msgid "" -"Registration are closed on this instance, you will need an invitation code " -"to signup." -msgstr "" -"Registraties zijn gesloten op deze instantie. Je hebt een uitnodiging nodig " -"om te registreren." +#: front/src/components/About.vue:86 +#, fuzzy +msgctxt "*/*/*" +msgid "Registrations" +msgstr "Administratie" -#: front/src/components/manage/users/UsersTable.vue:71 +#: front/src/components/manage/users/UsersTable.vue:72 #, fuzzy msgctxt "Content/Admin/Table, User role" msgid "Regular user" @@ -3581,8 +3752,8 @@ msgid "Rejected" msgstr "Afgekeurd" #: front/src/components/manage/library/AlbumsTable.vue:43 -#: front/src/components/mixins/Translations.vue:44 src/edits.js:28 -#: front/src/components/mixins/Translations.vue:45 +#: front/src/components/mixins/Translations.vue:54 src/edits.js:43 +#: front/src/components/mixins/Translations.vue:55 #, fuzzy msgctxt "Content/*/*/Noun" msgid "Release date" @@ -3593,6 +3764,11 @@ msgctxt "Content/Library/Paragraph" msgid "Remaining storage space" msgstr "" +#: front/src/views/Notifications.vue:18 src/views/Notifications.vue:52 +msgctxt "Content/Notifications/Label" +msgid "Remind me in:" +msgstr "" + #: front/src/views/content/remote/Home.vue:6 msgctxt "Content/Library/Title/Noun" msgid "Remote libraries" @@ -3600,12 +3776,8 @@ msgstr "Externe verzamelingen" #: front/src/views/content/remote/Home.vue:7 msgctxt "Content/Library/Paragraph" -msgid "" -"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." -msgstr "" -"Externe verzamelingen worden beheerd door andere gebruikers op het netwerk. " -"Je kunt ze gebruiken als ze openbaar zijn of als jou toegang is verleend." +msgid "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." +msgstr "Externe verzamelingen worden beheerd door andere gebruikers op het netwerk. Je kunt ze gebruiken als ze openbaar zijn of als jou toegang is verleend." #: front/src/components/library/radios/Filter.vue:59 msgctxt "Content/Radio/Button.Label/Verb" @@ -3623,6 +3795,13 @@ msgctxt "Content/Moderation/Button.Label" msgid "Remove filter" msgstr "Gebruikersafbeelding verwijderen" +#: front/src/components/manage/moderation/DomainsTable.vue:198 +#: front/src/views/admin/moderation/DomainsDetail.vue:39 +#, fuzzy +msgctxt "Content/Moderation/Action/Verb" +msgid "Remove from allow-list" +msgstr "Verwijderen uit favorieten" + #: front/src/components/favorites/TrackFavoriteIcon.vue:26 msgctxt "Content/Track/Icon.Tooltip/Verb" msgid "Remove from favorites" @@ -3630,44 +3809,106 @@ msgstr "Verwijderen uit favorieten" #: front/src/views/content/libraries/Quota.vue:38 msgctxt "Popup/Library/Paragraph" -msgid "" -"Removes uploaded but yet to be processed tracks completely, adding the " -"corresponding data to your quota." +msgid "Removes uploaded but yet to be processed tracks completely, adding the corresponding data to your quota." msgstr "" #: front/src/views/content/libraries/Quota.vue:64 #, fuzzy msgctxt "Popup/Library/Paragraph" -msgid "" -"Removes uploaded tracks skipped during the import processes completely, " -"adding the corresponding data to your quota." -msgstr "" -"Alle nummers die bij het importeren zijn overgeslagen (om wat voor reden dan" -" ook), worden verwijderd. De bestanden worden volledig verwijderd en je " -"krijgt het bijbehorende quotum terug." +msgid "Removes uploaded tracks skipped during the import processes completely, adding the corresponding data to your quota." +msgstr "Alle nummers die bij het importeren zijn overgeslagen (om wat voor reden dan ook), worden verwijderd. De bestanden worden volledig verwijderd en je krijgt het bijbehorende quotum terug." #: front/src/views/content/libraries/Quota.vue:90 #, fuzzy msgctxt "Popup/Library/Paragraph" -msgid "" -"Removes uploaded tracks that could not be processed by the server " -"completely, adding the corresponding data to your quota." +msgid "Removes uploaded tracks that could not be processed by the server completely, adding the corresponding data to your quota." +msgstr "Alle nummers die nog niet verwerkt zijn, worden verwijderd. De bestanden worden volledig verwijderd en je krijgt het bijbehorende quotum terug." + +#: front/src/components/audio/PlayButton.vue:94 +#, fuzzy +msgctxt "*/Queue/Dropdown/Button/Title" +msgid "Replace current queue" +msgstr "Aan huidige wachtrij toevoegen" + +#: front/src/components/mixins/Report.vue:6 src/components/mixins/Report.vue:7 +msgctxt "*/Moderation/*/Verb" +msgid "Report @%{ username }…" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:5 +msgctxt "Content/Moderation/Card/Short" +msgid "Report %{ id }" +msgstr "" + +#: front/src/components/moderation/ReportModal.vue:139 +msgctxt "*/Moderation/Message" +msgid "Report successfully submitted, thank you" +msgstr "" + +#: front/src/components/mixins/Report.vue:36 +#: src/components/mixins/Report.vue:37 +#, fuzzy +msgctxt "*/Moderation/*/Verb" +msgid "Report this album…" +msgstr "Dit album bewerken" + +#: front/src/components/mixins/Report.vue:50 +#: src/components/mixins/Report.vue:51 +#, fuzzy +msgctxt "*/Moderation/*/Verb" +msgid "Report this artist…" +msgstr "Toevoegen aan deze afspeellijst" + +#: front/src/components/mixins/Report.vue:72 +#: src/components/mixins/Report.vue:73 +#, fuzzy +msgctxt "*/Moderation/*/Verb" +msgid "Report this library…" +msgstr "Deze bibliotheek verwijderen?" + +#: front/src/components/mixins/Report.vue:61 +#: src/components/mixins/Report.vue:62 +#, fuzzy +msgctxt "*/Moderation/*/Verb" +msgid "Report this playlist…" +msgstr "Toevoegen aan deze afspeellijst" + +#: front/src/components/mixins/Report.vue:23 +#: src/components/mixins/Report.vue:24 +#, fuzzy +msgctxt "*/Moderation/*/Verb" +msgid "Report this track…" +msgstr "Instantie-informatie bewerken" + +#: front/src/components/audio/PlayButton.vue:95 +msgctxt "*/Moderation/*/Button/Label,Verb" +msgid "Report…" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:117 +msgctxt "Content/*/*/Short" +msgid "Reported object" +msgstr "" + +#: front/src/views/admin/moderation/Base.vue:5 +#: front/src/views/admin/moderation/ReportsList.vue:3 +#: front/src/views/admin/moderation/ReportsList.vue:208 +msgctxt "*/Moderation/*/Noun" +msgid "Reports" msgstr "" -"Alle nummers die nog niet verwerkt zijn, worden verwijderd. De bestanden " -"worden volledig verwijderd en je krijgt het bijbehorende quotum terug." -#: front/src/components/auth/SubsonicTokenForm.vue:33 -#: front/src/components/auth/SubsonicTokenForm.vue:36 +#: front/src/components/auth/SubsonicTokenForm.vue:38 +#: front/src/components/auth/SubsonicTokenForm.vue:41 msgctxt "*/Settings/Button.Label/Verb" msgid "Request a new password" msgstr "Nieuw wachtwoord aanvragen" -#: front/src/components/auth/SubsonicTokenForm.vue:34 +#: front/src/components/auth/SubsonicTokenForm.vue:39 msgctxt "Popup/Settings/Title" msgid "Request a new Subsonic API password?" msgstr "Nieuw Subsonic-API-wachtwoord aanvragen?" -#: front/src/components/auth/SubsonicTokenForm.vue:42 +#: front/src/components/auth/SubsonicTokenForm.vue:47 msgctxt "Content/Settings/Button.Label/Verb" msgid "Request a password" msgstr "Wachtwoord aanvragen" @@ -3677,36 +3918,53 @@ msgctxt "Popup/*/Loading.Title" msgid "Requesting a fetch…" msgstr "" -#: front/src/components/library/EditForm.vue:82 +#: front/src/components/library/EditForm.vue:94 msgctxt "Content/Library/Button.Label" -msgid "Reset to initial value: %{ value }" +msgid "Reset to initial value" msgstr "" -#: front/src/components/auth/Login.vue:35 src/views/auth/PasswordReset.vue:4 -#: front/src/views/auth/PasswordReset.vue:53 +#: front/src/components/auth/LoginForm.vue:34 +#: src/views/auth/PasswordReset.vue:4 front/src/views/auth/PasswordReset.vue:53 msgctxt "*/Login/*/Verb" msgid "Reset your password" msgstr "Wachtwoord opnieuw instellen" +#: front/src/components/manage/moderation/ReportCard.vue:83 +#, fuzzy +msgctxt "Content/*/*/Noun" +msgid "Resolution date" +msgstr "Toegevoegd" + +#: front/src/components/manage/moderation/ReportCard.vue:218 +msgctxt "Content/*/Button.Label/Verb" +msgid "Resolve" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:62 +#: front/src/views/admin/moderation/ReportsList.vue:20 +msgctxt "Content/*/*/Short" +msgid "Resolved" +msgstr "" + #: front/src/views/content/libraries/FilesTable.vue:223 #, fuzzy msgctxt "Content/Library/Dropdown/Verb" msgid "Restart import" msgstr "Importeren" +#: front/src/components/library/EditForm.vue:31 +msgctxt "Content/Library/Button.Label" +msgid "Restrict to unreviewed edits" +msgstr "" + #: front/src/components/favorites/List.vue:39 -#: src/components/library/Albums.vue:30 -#: front/src/components/library/Artists.vue:30 +#: src/components/library/Albums.vue:34 +#: front/src/components/library/Artists.vue:34 #: src/components/library/Radios.vue:52 front/src/views/playlists/List.vue:32 msgctxt "Content/Search/Dropdown.Label/Noun" msgid "Results per page" msgstr "Aantal resultaten per pagina" -#: front/src/components/library/EditForm.vue:31 -msgctxt "Content/Library/Button.Label" -msgid "Retrict to unreviewed edits" -msgstr "" - #: front/src/views/auth/EmailConfirm.vue:17 #, fuzzy msgctxt "Content/Signup/Link/Verb" @@ -3739,55 +3997,56 @@ msgctxt "Content/Moderation/Card.Title/Noun" msgid "Rule" msgstr "" -#: front/src/components/admin/SettingsGroup.vue:67 +#: front/src/components/About.vue:28 src/components/About.vue:56 +msgctxt "Content/About/Header" +msgid "Rules" +msgstr "" + +#: front/src/components/admin/SettingsGroup.vue:75 #: front/src/components/library/radios/Builder.vue:34 msgctxt "Content/*/Button.Label/Verb" msgid "Save" msgstr "Opslaan" -#: front/src/views/content/remote/Card.vue:175 +#: front/src/views/content/remote/Card.vue:203 msgctxt "Content/Library/Message" msgid "Scan launched" msgstr "Scan begonnen" -#: front/src/views/content/remote/Card.vue:67 +#: front/src/views/content/remote/Card.vue:80 #, fuzzy msgctxt "Content/Library/Card.Button.Label/Verb" msgid "Scan now" msgstr "Nu afspelen" -#: front/src/views/content/remote/Card.vue:35 +#: front/src/views/content/remote/Card.vue:48 msgctxt "Content/Library/Card.List item" msgid "Scan pending" msgstr "Nog te scannen" -#: front/src/views/content/remote/Card.vue:176 +#: front/src/views/content/remote/Card.vue:204 msgctxt "Content/Library/Message" msgid "Scan skipped (previous scan is too recent)" msgstr "Scan overgeslagen (vorige scan was zeer recent)" -#: front/src/views/content/remote/Card.vue:47 +#: front/src/views/content/remote/Card.vue:60 #, fuzzy msgctxt "Content/Library/Card.List item" msgid "Scanned" msgstr "Scan begonnen" -#: front/src/views/content/remote/Card.vue:51 +#: front/src/views/content/remote/Card.vue:64 msgctxt "Content/Library/Card.List item" msgid "Scanned with errors" msgstr "Afgerond, maar met foutmeldingen" -#: front/src/views/content/remote/Card.vue:39 +#: front/src/views/content/remote/Card.vue:52 #, fuzzy msgctxt "Content/Library/Card.List item" msgid "Scanning… (%{ progress }%)" -msgstr "Bezig met scannen... (% {progress }%)" +msgstr "Bezig met scannen… (% {progress }%)" #: front/src/components/auth/ApplicationForm.vue:22 -msgctxt "Content/Applications/Input.Label/Noun" -msgid "Scopes" -msgstr "" - #: front/src/components/auth/Settings.vue:226 msgctxt "Content/*/*/Noun" msgid "Scopes" @@ -3800,12 +4059,14 @@ msgstr "" #: front/src/components/manage/library/ArtistsTable.vue:5 #: front/src/components/manage/library/EditsCardList.vue:6 #: front/src/components/manage/library/LibrariesTable.vue:5 +#: front/src/components/manage/library/TagsTable.vue:5 #: front/src/components/manage/library/TracksTable.vue:5 #: front/src/components/manage/library/UploadsTable.vue:5 #: front/src/components/manage/moderation/AccountsTable.vue:5 #: front/src/components/manage/moderation/DomainsTable.vue:5 #: front/src/components/manage/users/InvitationsTable.vue:5 #: front/src/components/manage/users/UsersTable.vue:5 +#: front/src/views/admin/moderation/ReportsList.vue:8 #: front/src/views/content/libraries/FilesTable.vue:5 #: src/views/playlists/List.vue:13 msgctxt "Content/Search/Input.Label/Noun" @@ -3815,13 +4076,14 @@ msgstr "Zoeken" #: front/src/views/content/remote/ScanForm.vue:9 msgctxt "Content/Library/Input.Label/Verb" msgid "Search a remote library" -msgstr "Zoeken naar externe verzameling" +msgstr "Zoek een externe bibliotheek" #: front/src/components/manage/library/EditsCardList.vue:211 +#: front/src/views/admin/moderation/ReportsList.vue:207 #, fuzzy msgctxt "Content/Search/Input.Placeholder" msgid "Search by account, summary, domain…" -msgstr "Zoek op titel, artiest, domein..." +msgstr "Zoek op titel, artiest, domein…" #: front/src/components/manage/library/LibrariesTable.vue:191 msgctxt "Content/Search/Input.Placeholder" @@ -3842,21 +4104,26 @@ msgstr "" #, fuzzy msgctxt "Content/Search/Input.Placeholder" msgid "Search by domain, title, artist, album, MusicBrainz ID…" -msgstr "Zoek op titel, artiest, album..." +msgstr "Zoek op titel, artiest, album…" #: front/src/components/manage/library/AlbumsTable.vue:174 #, fuzzy msgctxt "Content/Search/Input.Placeholder" msgid "Search by domain, title, artist, MusicBrainz ID…" -msgstr "Zoek op titel, artiest, domein..." +msgstr "Zoek op titel, artiest, domein…" #: front/src/components/manage/moderation/AccountsTable.vue:171 #, fuzzy msgctxt "Content/Search/Input.Placeholder" msgid "Search by domain, username, bio…" -msgstr "Zoek op gebruikersnaam, e-mailadres, code..." +msgstr "Zoek op gebruikersnaam, e-mailadres, code…" + +#: front/src/components/manage/library/TagsTable.vue:165 +msgctxt "Content/Search/Input.Placeholder" +msgid "Search by name" +msgstr "" -#: front/src/components/manage/moderation/DomainsTable.vue:151 +#: front/src/components/manage/moderation/DomainsTable.vue:168 msgctxt "Content/Search/Input.Placeholder" msgid "Search by name…" msgstr "" @@ -3865,41 +4132,54 @@ msgstr "" #, fuzzy msgctxt "Content/Library/Input.Placeholder" msgid "Search by title, artist, album…" -msgstr "Zoek op titel, artiest, album..." +msgstr "Zoek op titel, artiest, album…" #: front/src/components/manage/users/InvitationsTable.vue:153 #, fuzzy msgctxt "Content/Admin/Input.Placeholder/Verb" msgid "Search by username, e-mail address, code…" -msgstr "Zoek op gebruikersnaam, e-mailadres, code..." +msgstr "Zoek op gebruikersnaam, e-mailadres, code…" -#: front/src/components/manage/users/UsersTable.vue:163 +#: front/src/components/manage/users/UsersTable.vue:164 #, fuzzy msgctxt "Content/Search/Input.Placeholder" msgid "Search by username, e-mail address, name…" -msgstr "Zoek op naam, gebruikersnaam, e-mailadres..." +msgstr "Zoek op naam, gebruikersnaam, e-mailadres…" -#: front/src/components/audio/SearchBar.vue:20 -#, fuzzy +#: front/src/components/audio/SearchBar.vue:27 msgctxt "Sidebar/Search/Input.Placeholder" msgid "Search for artists, albums, tracks…" -msgstr "Zoek naar artiesten, albums, nummers..." +msgstr "Zoek artiesten, albums, nummers…" #: front/src/components/audio/Search.vue:2 msgctxt "Content/Search/Title" msgid "Search for some music" msgstr "Zoeken naar muziek" -#: front/src/components/library/AlbumBase.vue:57 -#: front/src/components/library/ArtistBase.vue:68 -#: front/src/components/library/TrackBase.vue:76 +#: front/src/components/library/TagsSelector.vue:6 +#, fuzzy +msgctxt "*/Dropdown/Placeholder/Verb" +msgid "Search for tags…" +msgstr "Zoek artiesten, albums, nummers…" + +#: front/src/components/library/AlbumBase.vue:66 +#: front/src/components/library/ArtistBase.vue:77 +#: front/src/components/library/TrackBase.vue:82 +#, fuzzy +msgctxt "Content/*/Button.Label/Verb" +msgid "Search on Discogs" +msgstr "Zoeken naar muziek" + +#: front/src/components/library/AlbumBase.vue:58 +#: front/src/components/library/ArtistBase.vue:69 +#: front/src/components/library/TrackBase.vue:74 msgctxt "Content/*/Button.Label/Verb" msgid "Search on Wikipedia" msgstr "Zoeken op Wikipedia" #: front/src/components/library/Library.vue:35 -#: src/views/admin/library/Base.vue:32 -#: front/src/views/admin/moderation/Base.vue:22 +#: src/views/admin/library/Base.vue:35 +#: front/src/views/admin/moderation/Base.vue:44 #: src/views/admin/users/Base.vue:21 front/src/views/content/Base.vue:19 msgctxt "Menu/*/Hidden text" msgid "Secondary menu" @@ -3910,6 +4190,26 @@ msgctxt "Content/Admin/Menu.Title" msgid "Sections" msgstr "Secties" +#: front/src/components/ShortcutsModal.vue:108 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek backwards 30s" +msgstr "" + +#: front/src/components/ShortcutsModal.vue:100 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek backwards 5s" +msgstr "" + +#: front/src/components/ShortcutsModal.vue:112 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek forwards 30s" +msgstr "" + +#: front/src/components/ShortcutsModal.vue:104 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek forwards 5s" +msgstr "" + #: front/src/components/library/radios/Builder.vue:46 msgctxt "Content/Radio/Dropdown.Placeholder/Verb" msgid "Select a filter" @@ -3928,9 +4228,14 @@ msgctxt "Content/*/Link/Verb" msgid "Select only current page" msgstr "Alleen deze pagina kiezen" -#: front/src/components/Sidebar.vue:43 src/components/Sidebar.vue:108 -#: front/src/components/manage/users/UsersTable.vue:181 -#: front/src/views/admin/moderation/AccountsDetail.vue:506 +#: front/src/components/Home.vue:43 +msgctxt "Content/Home/Link" +msgid "Server rules" +msgstr "" + +#: front/src/components/Sidebar.vue:43 src/components/Sidebar.vue:112 +#: front/src/components/manage/users/UsersTable.vue:182 +#: front/src/views/admin/moderation/AccountsDetail.vue:526 msgctxt "*/*/*/Noun" msgid "Settings" msgstr "Instellingen" @@ -3953,18 +4258,25 @@ msgstr "Link om te delen" #: front/src/views/content/libraries/Detail.vue:15 #, fuzzy msgctxt "Content/Library/Paragraph" -msgid "" -"Share this link with other users so they can request access to your library." -msgstr "" -"Deel deze link met anderen zodat ze toegang tot je verzamelingen kunnen " -"aanvragen." +msgid "Share this link with other users so they can request access to your library." +msgstr "Deel deze link met anderen zodat ze toegang tot je verzamelingen kunnen aanvragen." #: front/src/views/content/libraries/Detail.vue:14 -#: front/src/views/content/remote/Card.vue:77 +#: front/src/views/content/remote/Card.vue:90 msgctxt "Content/Library/Title" msgid "Sharing link" msgstr "Link om te delen" +#: front/src/components/audio/EmbedWizard.vue:5 +msgctxt "Content/Embed/Message" +msgid "Sharing will not work because this pod doesn't allow anonymous users to access content." +msgstr "" + +#: front/src/components/About.vue:156 +msgctxt "*/*/*/Verb" +msgid "Show" +msgstr "" + #: front/src/components/audio/album/Card.vue:38 #, fuzzy msgctxt "Content/Album/Card.Link/Verb" @@ -3973,11 +4285,11 @@ msgid_plural "Show %{ count } more tracks" msgstr[0] "Nog %{ count } nummer tonen" msgstr[1] "Nog %{ count } nummers tonen" -#: front/src/components/audio/artist/Card.vue:30 +#: front/src/components/tags/List.vue:11 #, fuzzy -msgctxt "Content/Artist/Card.Link" -msgid "Show 1 more album" -msgid_plural "Show %{ count } more albums" +msgctxt "Content/*/Button/Label/Verb" +msgid "Show 1 more tag" +msgid_plural "Show %{ count } more tags" msgstr[0] "Nog %{ count } album tonen" msgstr[1] "Nog %{ count } albums tonen" @@ -3986,17 +4298,28 @@ msgctxt "Content/Library/Button.Label" msgid "Show all edits" msgstr "" -#: front/src/components/ShortcutsModal.vue:42 +#: front/src/components/ShortcutsModal.vue:60 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Show available keyboard shortcuts" +msgstr "Toon beschikbare sneltoetsen" + +#: front/src/components/common/ExpandableDiv.vue:7 +msgctxt "*/*/Button,Label" +msgid "Show less" msgstr "" -#: front/src/views/Notifications.vue:7 +#: front/src/components/common/ExpandableDiv.vue:8 +#, fuzzy +msgctxt "*/*/Button,Label" +msgid "Show more" +msgstr "Nog %{ count } album tonen" + +#: front/src/views/Notifications.vue:72 msgctxt "Content/Notifications/Form.Label/Verb" msgid "Show read notifications" msgstr "Gelezen meldingen tonen" -#: front/src/components/forms/PasswordInput.vue:26 +#: front/src/components/forms/PasswordInput.vue:42 msgctxt "Content/Settings/Button.Tooltip/Verb" msgid "Show/hide password" msgstr "Wachtwoord tonen/verbergen" @@ -4005,57 +4328,64 @@ msgstr "Wachtwoord tonen/verbergen" #: front/src/components/manage/library/ArtistsTable.vue:84 #: front/src/components/manage/library/EditsCardList.vue:72 #: front/src/components/manage/library/LibrariesTable.vue:110 +#: front/src/components/manage/library/TagsTable.vue:79 #: front/src/components/manage/library/TracksTable.vue:95 #: front/src/components/manage/library/UploadsTable.vue:144 #: front/src/components/manage/moderation/AccountsTable.vue:88 -#: front/src/components/manage/moderation/DomainsTable.vue:74 +#: front/src/components/manage/moderation/DomainsTable.vue:85 #: front/src/components/manage/users/InvitationsTable.vue:76 -#: front/src/components/manage/users/UsersTable.vue:87 +#: front/src/components/manage/users/UsersTable.vue:88 #: front/src/views/content/libraries/FilesTable.vue:117 msgctxt "Content/*/Paragraph" msgid "Showing results %{ start }-%{ end } on %{ total }" msgstr "Resultaten - %{ start }-%{ end } van de %{ total }" -#: front/src/components/ShortcutsModal.vue:83 -#, fuzzy +#: front/src/components/ShortcutsModal.vue:140 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Shuffle queue" -msgstr "Willekeurig" +msgstr "Wachtrij shuffelen" -#: front/src/components/audio/Player.vue:641 +#: front/src/components/audio/Player.vue:667 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Shuffle your queue" -msgstr "Willekeurig" +msgstr "Shuffel je wachtrij" + +#: front/src/components/Home.vue:103 +#, fuzzy +msgctxt "*/Signup/Title" +msgid "Sign up" +msgstr "Registreren" -#: front/src/components/auth/Signup.vue:97 +#: front/src/views/auth/Signup.vue:37 msgctxt "*/Signup/Title" msgid "Sign Up" msgstr "Registreren" +#: front/src/components/Home.vue:107 +msgctxt "Content/Home/Paragraph" +msgid "Sign up now to keep a track of your favorites, create playlists, discover new content and much more!" +msgstr "" + #: front/src/components/manage/users/UsersTable.vue:40 msgctxt "Content/Admin/Table.Label/Short, Noun (Value is a date)" msgid "Sign-up" msgstr "Registreren" -#: front/src/components/mixins/Translations.vue:57 -#: front/src/views/admin/moderation/AccountsDetail.vue:197 -#: front/src/components/mixins/Translations.vue:58 +#: front/src/components/mixins/Translations.vue:69 +#: front/src/views/admin/moderation/AccountsDetail.vue:198 +#: front/src/components/mixins/Translations.vue:70 msgctxt "Content/Admin/Table.Label/Noun" msgid "Sign-up date" msgstr "Geregistreerd op" -#: front/src/components/manage/library/UploadsTable.vue:65 -#: front/src/views/admin/library/UploadDetail.vue:219 -msgctxt "Content/*/*/Noun" -msgid "Size" -msgstr "Grootte" - #: front/src/components/library/FileUpload.vue:94 #: front/src/components/library/TrackDetail.vue:39 -#: front/src/components/mixins/Translations.vue:54 +#: front/src/components/manage/library/UploadsTable.vue:65 +#: front/src/components/mixins/Translations.vue:66 +#: front/src/views/admin/library/UploadDetail.vue:219 #: front/src/views/content/libraries/FilesTable.vue:61 -#: front/src/components/mixins/Translations.vue:55 -msgctxt "Content/Library/*/in MB" +#: front/src/components/mixins/Translations.vue:67 +msgctxt "Content/*/*/Noun" msgid "Size" msgstr "Grootte" @@ -4072,7 +4402,7 @@ msgctxt "Content/Library/Label" msgid "Skipped files" msgstr "Overgeslagen bestanden" -#: front/src/views/admin/moderation/DomainsDetail.vue:89 +#: front/src/views/admin/moderation/DomainsDetail.vue:126 msgctxt "Content/Moderation/Table.Label" msgid "Software" msgstr "" @@ -4088,88 +4418,66 @@ msgctxt "Content/*/Paragraph" msgid "Sorry, the page you asked for does not exist:" msgstr "Helaas, de opgevraagde pagina bestaat niet:" -#: front/src/components/Footer.vue:49 +#: front/src/components/Footer.vue:57 msgctxt "Footer/*/List item.Link" msgid "Source code" msgstr "Broncode" #: front/src/components/auth/Profile.vue:23 -#: front/src/components/manage/users/UsersTable.vue:70 +#: front/src/components/manage/users/UsersTable.vue:71 msgctxt "Content/Profile/User role" msgid "Staff member" msgstr "Staflid" -#: front/src/components/audio/PlayButton.vue:23 +#: front/src/components/audio/PlayButton.vue:27 #: src/components/radios/Button.vue:4 #, fuzzy msgctxt "*/Queue/Button.Label/Short, Verb" msgid "Start radio" msgstr "Radio stoppen" -#: front/src/views/admin/Settings.vue:86 -msgctxt "Content/Admin/Menu" +#: front/src/components/About.vue:170 src/components/Home.vue:53 +#: front/src/views/admin/Settings.vue:87 +#, fuzzy +msgctxt "Content/Home/Header" msgid "Statistics" msgstr "Statistieken" -#: front/src/views/admin/moderation/AccountsDetail.vue:490 +#: front/src/views/admin/moderation/AccountsDetail.vue:510 msgctxt "Content/Moderation/Help text" -msgid "" -"Statistics are computed from known activity and content on your instance, " -"and do not reflect general activity for this account" -msgstr "" +msgid "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this account" +msgstr "Statistieken worden berekend op basis van de activiteit en media op je server, en vertegenwoordigen niet de activiteit voor dit account" -#: front/src/views/admin/moderation/DomainsDetail.vue:371 +#: front/src/views/admin/moderation/DomainsDetail.vue:418 msgctxt "Content/Moderation/Help text" -msgid "" -"Statistics are computed from known activity and content on your instance, " -"and do not reflect general activity for this domain" -msgstr "" - -#: front/src/views/admin/library/AlbumDetail.vue:329 -#: front/src/views/admin/library/ArtistDetail.vue:328 -#: front/src/views/admin/library/LibraryDetail.vue:316 -#: front/src/views/admin/library/TrackDetail.vue:371 +msgid "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this domain" +msgstr "Statistieken worden berekend op basis van de activiteit en media op je server, en vertegenwoordigen niet de activiteit voor dit domein" + +#: front/src/views/admin/library/AlbumDetail.vue:346 +#: front/src/views/admin/library/ArtistDetail.vue:345 +#: front/src/views/admin/library/LibraryDetail.vue:356 +#: front/src/views/admin/library/TagDetail.vue:210 +#: front/src/views/admin/library/TrackDetail.vue:389 #: front/src/views/admin/library/UploadDetail.vue:335 msgctxt "Content/Moderation/Help text" -msgid "" -"Statistics are computed from known activity and content on your instance, " -"and do not reflect general activity for this object" -msgstr "" - -#: front/src/views/admin/moderation/DomainsDetail.vue:115 -msgctxt "Content/Moderation/Table.Label (Value is Error message)" -msgid "Status" -msgstr "Status" +msgid "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" +msgstr "Statistieken worden berekend op basis van de activiteit en media op je server, en vertegenwoordigen niet de activiteit voor dit object" #: front/src/components/library/FileUpload.vue:95 -msgctxt "Content/Library/Table.Label (Value is Uploading/Uploaded/Error)" -msgid "Status" -msgstr "Status" - -#: front/src/views/content/libraries/Detail.vue:28 -msgctxt "Content/Library.Federation/Table.Label (Value is Approved/Rejected)" -msgid "Status" -msgstr "Status" - +#: front/src/components/manage/library/EditsCardList.vue:12 +#: front/src/components/manage/moderation/ReportCard.vue:57 #: front/src/components/manage/users/InvitationsTable.vue:17 #: front/src/components/manage/users/InvitationsTable.vue:39 -msgctxt "Content/Admin/*/Noun (Value is Used/Not used)" -msgid "Status" -msgstr "Status" - #: front/src/components/manage/users/UsersTable.vue:43 -msgctxt "Content/Admin/Table.Label/Noun (Value is Regular user/Admin)" -msgid "Status" -msgstr "Status" - -#: front/src/components/manage/library/EditsCardList.vue:12 -msgctxt "" -"Content/Search/Dropdown.Label (Value is All/Pending " -"review/Approved/Rejected)" +#: front/src/views/admin/moderation/DomainsDetail.vue:152 +#: front/src/views/admin/moderation/ReportsList.vue:14 +#: front/src/views/content/libraries/Detail.vue:28 +#, fuzzy +msgctxt "*/*/*" msgid "Status" msgstr "Status" -#: front/src/components/Sidebar.vue:174 src/components/radios/Button.vue:3 +#: front/src/components/Sidebar.vue:178 src/components/radios/Button.vue:3 msgctxt "*/Player/Button.Label/Short, Verb" msgid "Stop radio" msgstr "Radio stoppen" @@ -4179,7 +4487,7 @@ msgctxt "*/*/Button.Label/Verb" msgid "Submit" msgstr "Indienen" -#: front/src/components/library/EditForm.vue:98 +#: front/src/components/library/EditForm.vue:110 msgctxt "Content/Library/Button.Label/Verb" msgid "Submit and apply edit" msgstr "" @@ -4190,12 +4498,24 @@ msgctxt "Content/Library/Button.Label" msgid "Submit another edit" msgstr "Nóg een verzoek indienen" -#: front/src/components/library/EditForm.vue:99 +#: front/src/components/moderation/ReportModal.vue:64 +#, fuzzy +msgctxt "Popup/*/Button.Label" +msgid "Submit report" +msgstr "Indienen" + +#: front/src/components/library/EditForm.vue:111 msgctxt "Content/Library/Button.Label/Verb" msgid "Submit suggestion" msgstr "" -#: front/src/views/admin/Settings.vue:85 +#: front/src/components/manage/moderation/ReportCard.vue:17 +#, fuzzy +msgctxt "Content/Moderation/*" +msgid "Submitted by" +msgstr "Indienen" + +#: front/src/views/admin/Settings.vue:86 msgctxt "Content/Admin/Menu" msgid "Subsonic" msgstr "Subsonic" @@ -4235,14 +4555,19 @@ msgctxt "Content/Library/Tab.Title/Short" msgid "Summary" msgstr "Samenvatting" -#: front/src/components/library/EditForm.vue:87 +#: front/src/components/library/EditForm.vue:99 msgctxt "*/*/*" msgid "Summary (optional)" msgstr "" -#: front/src/components/Footer.vue:39 +#: front/src/components/Footer.vue:47 msgctxt "Footer/*/Listitem.Link" msgid "Support forum" +msgstr "Support-forum" + +#: front/src/views/Notifications.vue:10 +msgctxt "Content/Notifications/Header" +msgid "Support this Funkwhale pod" msgstr "" #: front/src/components/library/FileUpload.vue:85 @@ -4254,49 +4579,65 @@ msgstr "" #, fuzzy msgctxt "Content/Playlist/Paragraph" msgid "Syncing changes to server…" -msgstr "Bezig met synchroniseren van wijzigingen naar server..." +msgstr "Bezig met synchroniseren van wijzigingen naar server…" -#: front/src/components/audio/EmbedWizard.vue:25 -#: front/src/components/common/CopyInput.vue:3 -msgctxt "Content/*/Paragraph" -msgid "Text copied to clipboard!" -msgstr "Tekst gekopieerd naar het klembord!" +#: front/src/components/audio/SearchBar.vue:35 +msgctxt "*/*/*/Noun" +msgid "Tag" +msgstr "" -#: front/src/components/Home.vue:26 -msgctxt "Content/Home/Paragraph" -msgid "" -"That's simple: we loved Grooveshark and we want to build something even " -"better." +#: front/src/views/admin/library/TagDetail.vue:61 +#, fuzzy +msgctxt "Content/Moderation/Title" +msgid "Tag data" +msgstr "Naam van nummer" + +#: front/src/components/library/Albums.vue:23 +#: src/components/library/Artists.vue:15 +#: front/src/views/admin/library/Base.vue:23 +#: src/views/admin/library/TagsList.vue:24 front/src/edits.js:24 +#: src/edits.js:50 src/edits.js:91 src/entities.js:120 +msgctxt "*/*/*/Noun" +msgid "Tags" msgstr "" -"Het zit zo: we waren fan van Grooveshark en wilden iets nóg beters bouwen." -#: front/src/views/admin/library/AlbumDetail.vue:75 -#, fuzzy +#: front/src/components/mixins/Translations.vue:44 +#: front/src/components/mixins/Translations.vue:45 +#, fuzzy +msgctxt "Content/Moderation/Dropdown" +msgid "Takedown request" +msgstr "Volgverzoek intrekken" + +#: front/src/components/About.vue:35 src/components/About.vue:61 +msgctxt "Content/About/Header" +msgid "Terms and privacy policy" +msgstr "" + +#: front/src/components/audio/EmbedWizard.vue:35 +#: front/src/components/common/CopyInput.vue:3 +msgctxt "Content/*/Paragraph" +msgid "Text copied to clipboard!" +msgstr "Tekst gekopieerd naar het klembord!" + +#: front/src/views/admin/library/AlbumDetail.vue:81 msgctxt "Content/Moderation/Paragraph" -msgid "" -"The album will be removed, as well as associated uploads, tracks, favorites " -"and listening history. This action is irreversible." -msgstr "" -"De verzameling en alle bijbehorende nummers worden verwijderd. Dit kan niet " -"ongedaan worden gemaakt." +msgid "The album will be removed, as well as associated uploads, tracks, favorites and listening history. This action is irreversible." +msgstr "Het album en de bijbehorende nummers, favorieten en luisterhistorie worden verwijderd. Dit kan niet ongedaan gemaakt worden." #: front/src/components/auth/Authorize.vue:39 msgctxt "Content/Auth/Paragraph" msgid "The application is also requesting the following unknown permissions:" msgstr "" -#: front/src/views/admin/library/ArtistDetail.vue:74 +#: front/src/views/admin/library/ArtistDetail.vue:79 msgctxt "Content/Moderation/Paragraph" -msgid "" -"The artist will be removed, as well as associated uploads, tracks, albums, " -"favorites and listening history. This action is irreversible." +msgid "The artist will be removed, as well as associated uploads, tracks, albums, favorites and listening history. This action is irreversible." msgstr "" -#: front/src/components/Footer.vue:53 +#: front/src/components/Footer.vue:61 msgctxt "Footer/*/List item.Link" msgid "The funkwhale logo was kindly designed and provided by Francis Gading." -msgstr "" -"Het Funkwhale-logo is met liefde ontworpen en gemaakt door Francis Gading." +msgstr "Funkwhale-logo met liefde ontworpen door Francis Gading." #: front/src/components/SetInstanceModal.vue:8 msgctxt "Popup/Instance/Error message.List item" @@ -4304,29 +4645,18 @@ msgid "The given address is not a Funkwhale server" msgstr "" #: front/src/views/content/libraries/Form.vue:34 -#, fuzzy msgctxt "Popup/Library/Paragraph" -msgid "" -"The library and all its tracks will be deleted. This can not be undone." -msgstr "" -"De verzameling en alle bijbehorende nummers worden verwijderd. Dit kan niet " -"ongedaan worden gemaakt." +msgid "The library and all its tracks will be deleted. This can not be undone." +msgstr "De bibliotheek en al haar nummers worden verwijderd. Dit kan niet ongedaan gemaakt worden." #: front/src/views/admin/library/LibraryDetail.vue:61 -#, fuzzy msgctxt "Content/Moderation/Paragraph" -msgid "" -"The library will be removed, as well as associated uploads, and follows. " -"This action is irreversible." -msgstr "" -"De verzameling en alle bijbehorende nummers worden verwijderd. Dit kan niet " -"ongedaan worden gemaakt." +msgid "The library will be removed, as well as associated uploads, and follows. This action is irreversible." +msgstr "De bibliotheek zal worden verwijderd, samen met alle bijbehorende nummers en volgers. Dit kan niet ongedaan gemaakt worden." #: front/src/components/library/ImportStatusModal.vue:140 msgctxt "Popup/Import/Error.Label" -msgid "" -"The metadata included in the file is invalid or some mandatory fields are " -"missing." +msgid "The metadata included in the file is invalid or some mandatory fields are missing." msgstr "" #: front/src/components/library/FileUpload.vue:38 @@ -4340,14 +4670,16 @@ msgctxt "Sidebar/Player/Error message.Paragraph" msgid "The next track will play automatically in a few seconds…" msgstr "" -#: front/src/components/Home.vue:116 -msgctxt "Content/Home/List item" -msgid "" -"The plaform is free and open-source, you can install it and modify it " -"without worries" +#: front/src/components/manage/moderation/NotesThread.vue:27 +#, fuzzy +msgctxt "Content/Moderation/Paragraph" +msgid "The note will be removed. This action is irreversible." +msgstr "De content zal worden verwijderd. Dit kan niet ongedaan gemaakt worden." + +#: front/src/components/manage/moderation/ReportCard.vue:120 +msgctxt "Content/Moderation/Message" +msgid "The object associated with this report was deleted." msgstr "" -"Het platform is vrij en open source; je kunt het zorgeloos installeren en " -"aanpassen" #: front/src/components/playlists/Form.vue:14 #, fuzzy @@ -4362,58 +4694,49 @@ msgstr "" #: front/src/components/federation/FetchButton.vue:13 msgctxt "Popup/*/Message.Content" -msgid "" -"The remote server answered, but returned data was unsupported by Funkwhale." +msgid "The remote server answered, but returned data was unsupported by Funkwhale." msgstr "" #: front/src/components/federation/FetchButton.vue:44 msgctxt "*/*/Error" -msgid "The remote server didn't answered fast enough" +msgid "The remote server didn't respond quickly enough" msgstr "" #: front/src/components/federation/FetchButton.vue:50 msgctxt "*/*/Error" -msgid "The return server returned invalid JSON or JSON-LD data" +msgid "The remote server returned invalid JSON or JSON-LD data" msgstr "" #: front/src/components/manage/library/AlbumsTable.vue:189 msgctxt "Popup/*/Paragraph" -msgid "" -"The selected albums will be removed, as well as associated tracks, uploads, " -"favorites and listening history. This action is irreversible." +msgid "The selected albums will be removed, as well as associated tracks, uploads, favorites and listening history. This action is irreversible." msgstr "" #: front/src/components/manage/library/ArtistsTable.vue:179 msgctxt "Popup/*/Paragraph" -msgid "" -"The selected artist will be removed, as well as associated uploads, tracks, " -"albums, favorites and listening history. This action is irreversible." +msgid "The selected artist will be removed, as well as associated uploads, tracks, albums, favorites and listening history. This action is irreversible." msgstr "" #: front/src/components/manage/library/LibrariesTable.vue:206 +msgctxt "Popup/*/Paragraph" +msgid "The selected library will be removed, as well as associated uploads and follows. This action is irreversible." +msgstr "De verzameling zal worden verwijderd, samen met de bijbehorende nummers en volgers. Dit kan niet ongedaan gemaakt worden." + +#: front/src/components/manage/library/TagsTable.vue:180 #, fuzzy msgctxt "Popup/*/Paragraph" -msgid "" -"The selected library will be removed, as well as associated uploads and " -"follows. This action is irreversible." -msgstr "" -"De verzameling en alle bijbehorende nummers worden verwijderd. Dit kan niet " -"ongedaan worden gemaakt." +msgid "The selected tag will be removed and unlinked with existing content, if any. This action is irreversible." +msgstr "De geselecteerde content zal worden verwijderd. Dit kan niet ongedaan gemaakt worden." #: front/src/components/manage/library/TracksTable.vue:189 msgctxt "Popup/*/Paragraph" -msgid "" -"The selected tracks will be removed, as well as associated uploads, " -"favorites and listening history. This action is irreversible." +msgid "The selected tracks will be removed, as well as associated uploads, favorites and listening history. This action is irreversible." msgstr "" #: front/src/components/manage/library/UploadsTable.vue:256 -#, fuzzy msgctxt "Popup/*/Paragraph" msgid "The selected upload will be removed. This action is irreversible." -msgstr "" -"De verzameling en alle bijbehorende nummers worden verwijderd. Dit kan niet " -"ongedaan worden gemaakt." +msgstr "De geselecteerde content zal worden verwijderd. Dit kan niet ongedaan gemaakt worden." #: front/src/components/SetInstanceModal.vue:7 msgctxt "Popup/Instance/Error message.List item" @@ -4423,16 +4746,18 @@ msgstr "" #: front/src/components/auth/SubsonicTokenForm.vue:4 msgctxt "Content/Settings/Paragraph" msgid "The Subsonic API is not available on this Funkwhale instance." -msgstr "De Subsonic-API is niet beschikbaar op deze instantie." +msgstr "De Subsonic-API is niet beschikbaar op deze server." #: front/src/components/library/EditCard.vue:96 -#, fuzzy msgctxt "Popup/Library/Paragraph" -msgid "" -"The suggestion will be completely removed, this action is irreversible." -msgstr "" -"De verzameling en alle bijbehorende nummers worden verwijderd. Dit kan niet " -"ongedaan worden gemaakt." +msgid "The suggestion will be completely removed, this action is irreversible." +msgstr "De suggestie zal worden verwijderd. Dit kan niet ongedaan gemaakt worden." + +#: front/src/views/admin/library/TagDetail.vue:44 +#, fuzzy +msgctxt "Content/Moderation/Paragraph" +msgid "The tag will be removed and unlinked from any existing entity. This action is irreversible." +msgstr "De content zal worden verwijderd. Dit kan niet ongedaan gemaakt worden." #: front/src/components/playlists/PlaylistModal.vue:34 #, fuzzy @@ -4445,20 +4770,15 @@ msgctxt "Sidebar/Player/Error message.Title" msgid "The track cannot be loaded" msgstr "" -#: front/src/views/admin/library/TrackDetail.vue:74 +#: front/src/views/admin/library/TrackDetail.vue:80 msgctxt "Content/Moderation/Paragraph" -msgid "" -"The track will be removed, as well as associated uploads, favorites and " -"listening history. This action is irreversible." +msgid "The track will be removed, as well as associated uploads, favorites and listening history. This action is irreversible." msgstr "" #: front/src/views/admin/library/UploadDetail.vue:68 -#, fuzzy msgctxt "Content/Moderation/Paragraph" msgid "The upload will be removed. This action is irreversible." -msgstr "" -"De verzameling en alle bijbehorende nummers worden verwijderd. Dit kan niet " -"ongedaan worden gemaakt." +msgstr "De content zal worden verwijderd. Dit kan niet ongedaan gemaakt worden." #: front/src/components/library/FileUpload.vue:42 msgctxt "Content/Library/List item" @@ -4469,8 +4789,7 @@ msgstr "De geüploade bestanden zijn in de formaten OGG, FLAC of MP3" #, fuzzy msgctxt "Content/Library/Paragraph" msgid "There are various ways to grab new content and make it available here." -msgstr "" -"We hebben verscheidene manieren om nieuwe nummers beschikbaar te maken." +msgstr "We hebben verscheidene manieren om nieuwe nummers beschikbaar te maken." #: front/src/components/manage/moderation/InstancePolicyForm.vue:66 msgctxt "Popup/Moderation/Paragraph" @@ -4487,22 +4806,36 @@ msgctxt "Content/Artist/Paragraph" msgid "This artist is present in the following libraries:" msgstr "Deze artiest komt voor in de volgende verzamelingen:" +#: front/src/components/manage/moderation/DomainsTable.vue:169 +#, fuzzy +msgctxt "Content/Moderation/Popup" +msgid "This domain is present in your allow-list" +msgstr "Deze artiest komt voor in de volgende verzamelingen:" + #: front/src/views/admin/moderation/AccountsDetail.vue:84 -#: front/src/views/admin/moderation/DomainsDetail.vue:48 +#: front/src/views/admin/moderation/DomainsDetail.vue:76 msgctxt "Content/Moderation/Card.Title" msgid "This domain is subject to specific moderation rules" msgstr "" +#: front/src/components/manage/moderation/InstancePolicyModal.vue:16 +msgctxt "Content/Moderation/Card.Title" +msgid "This entity is subject to specific moderation rules" +msgstr "" + #: front/src/views/content/Home.vue:9 -#, fuzzy msgctxt "Content/Library/Paragraph" msgid "This instance offers up to %{quota} of storage space for every user." -msgstr "Deze instantie biedt tot %{ quota } opslagruimte voor elke gebruiker." +msgstr "Deze server biedt tot %{ quota } opslagruimte aan elke gebruiker." + +#: front/src/components/auth/Settings.vue:300 +msgctxt "Popup/Settings/Paragraph" +msgid "This is irreversible and will permanently remove your data from our servers. You will we immediatly logged out." +msgstr "" #: front/src/components/auth/Settings.vue:165 msgctxt "Content/Settings/Paragraph" -msgid "" -"This is the list of applications that have access to your account data." +msgid "This is the list of applications that have access to your account data." msgstr "" #: front/src/components/auth/Settings.vue:218 @@ -4516,21 +4849,16 @@ msgid "This is you!" msgstr "Dit ben jij!" #: front/src/views/content/libraries/Form.vue:73 -#, fuzzy msgctxt "Content/Library/Input.Placeholder" msgid "This library contains my personal music, I hope you like it." -msgstr "" -"Deze verzameling bevat mijn persoonlijke muziek. Ik hoop dat je ervan zult " -"genieten!" +msgstr "Deze bibliotheek bevat mijn persoonlijke muziek. Ik hoop dat het je smaak is." -#: front/src/views/content/remote/Card.vue:141 +#: front/src/views/content/remote/Card.vue:169 msgctxt "Content/Library/Card.Help text" -msgid "" -"This library is private and your approval from its owner is needed to access" -" its content" +msgid "This library is private and your approval from its owner is needed to access its content" msgstr "" -#: front/src/views/content/remote/Card.vue:142 +#: front/src/views/content/remote/Card.vue:170 msgctxt "Content/Library/Card.Help text" msgid "This library is public and you can access its content freely" msgstr "" @@ -4538,12 +4866,8 @@ msgstr "" #: front/src/components/common/ActionTable.vue:47 #, fuzzy msgctxt "Modal/*/Paragraph" -msgid "" -"This may affect a lot of elements or have irreversible consequences, please " -"double check this is really what you want." -msgstr "" -"Dit kan gevolgen hebben voor veel elementen. Controleer of je dit écht wilt " -"doen." +msgid "This may affect a lot of elements or have irreversible consequences, please double check this is really what you want." +msgstr "Dit kan gevolgen hebben voor veel elementen. Controleer of je dit écht wilt doen." #: front/src/components/library/AlbumEdit.vue:8 #: front/src/components/library/ArtistEdit.vue:8 @@ -4552,24 +4876,27 @@ msgctxt "Content/*/Message" msgid "This object is managed by another server, you cannot edit it." msgstr "" +#: front/src/components/Home.vue:87 +msgctxt "Content/Home/Paragraph" +msgid "This pod runs Funkwhale, a community-driven project that lets you listen and share music and audio within a decentralized, open network." +msgstr "" + #: front/src/components/library/FileUpload.vue:51 msgctxt "Content/Library/Paragraph" msgid "This reference will be used to group imported files together." -msgstr "" -"Deze referentie wordt gebruikt om geïmporteerde bestanden te groeperen." +msgstr "Deze referentie wordt gebruikt om geïmporteerde bestanden te groeperen." #: front/src/components/mixins/Translations.vue:33 #: front/src/components/mixins/Translations.vue:34 msgctxt "Content/Library/Help text" -msgid "This track could not be processed, please it is tagged correctly" +msgid "This track could not be processed, please make sure it is tagged correctly" msgstr "" #: front/src/components/mixins/Translations.vue:29 #: front/src/components/mixins/Translations.vue:30 #, fuzzy msgctxt "Content/Library/Help text" -msgid "" -"This track has been uploaded, but hasn't been processed by the server yet" +msgid "This track has been uploaded, but hasn't been processed by the server yet" msgstr "Nummer is geüpload, maar nog niet verwerkt door de server" #: front/src/components/mixins/Translations.vue:25 @@ -4579,7 +4906,7 @@ msgctxt "Content/Library/Help text" msgid "This track is already present in one of your libraries" msgstr "Nummer is al aanwezig in één van je verzamelingen" -#: front/src/components/audio/PlayButton.vue:85 +#: front/src/components/audio/PlayButton.vue:103 msgctxt "*/Queue/Button/Title" msgid "This track is not available in any library you have access to" msgstr "" @@ -4589,91 +4916,85 @@ msgctxt "Content/Track/Paragraph" msgid "This track is present in the following libraries:" msgstr "Dit nummer komt voor in de volgende verzamelingen:" -#: front/src/views/playlists/Detail.vue:38 +#: front/src/views/playlists/Detail.vue:46 msgctxt "Popup/Playlist/Paragraph" msgid "This will completely delete this playlist and cannot be undone." -msgstr "" -"De afspeellijst wordt volledig verwijderd; dit kan niet ongedaan worden " -"gemaakt." +msgstr "De afspeellijst wordt volledig verwijderd; dit kan niet ongedaan worden gemaakt." #: front/src/views/radios/Detail.vue:27 msgctxt "Popup/Radio/Paragraph" msgid "This will completely delete this radio and cannot be undone." -msgstr "" -"De radio wordt volledig verwijderd; dit kan niet ongedaan worden gemaakt." +msgstr "De radio wordt volledig verwijderd; dit kan niet ongedaan worden gemaakt." -#: front/src/components/auth/SubsonicTokenForm.vue:50 +#: front/src/components/auth/SubsonicTokenForm.vue:55 msgctxt "Popup/Settings/Paragraph" -msgid "" -"This will completely disable access to the Subsonic API using from account." +msgid "This will completely disable access to the Subsonic API using from account." msgstr "De toegang tot de Subsonic-API vanaf dit account wordt uitgeschakeld." -#: front/src/components/auth/SubsonicTokenForm.vue:35 +#: front/src/components/manage/moderation/ReportCard.vue:359 +msgctxt "Content/Moderation/Popup,Paragraph" +msgid "This will delete the object associated with this report and mark the report as resolved. The deletion is irreversible." +msgstr "" + +#: front/src/components/auth/SubsonicTokenForm.vue:40 msgctxt "Popup/Settings/Paragraph" -msgid "" -"This will log you out from existing devices that use the current password." +msgid "This will log you out from existing devices that use the current password." msgstr "Je wordt uitgelogd op elk apparaat met het huidige wachtwoord." #: front/src/components/auth/Settings.vue:253 #, fuzzy msgctxt "Popup/Settings/Paragraph" -msgid "" -"This will permanently delete the application and all the associated tokens." -msgstr "" -"De afspeellijst wordt volledig verwijderd; dit kan niet ongedaan worden " -"gemaakt." +msgid "This will permanently delete the application and all the associated tokens." +msgstr "De afspeellijst wordt volledig verwijderd; dit kan niet ongedaan worden gemaakt." #: front/src/components/auth/Settings.vue:194 msgctxt "Popup/Settings/Paragraph" -msgid "" -"This will prevent this application from accessing the service on your " -"behalf." +msgid "This will prevent this application from accessing the service on your behalf." msgstr "" #: front/src/components/playlists/Editor.vue:54 msgctxt "Popup/Playlist/Paragraph" msgid "This will remove all tracks from this playlist and cannot be undone." -msgstr "" -"Alle nummers worden verwijderd uit de afspeellijst; dit kan niet ongedaan " -"worden gemaakt." - -#: front/src/views/admin/library/AlbumDetail.vue:99 -#: front/src/views/admin/library/TrackDetail.vue:98 src/edits.js:21 -#: src/edits.js:39 -msgctxt "*/*/*/Noun" -msgid "Title" -msgstr "Titel" +msgstr "Alle nummers worden verwijderd uit de afspeellijst; dit kan niet ongedaan worden gemaakt." #: front/src/components/audio/track/Table.vue:7 -#: front/src/views/content/libraries/FilesTable.vue:55 -msgctxt "Content/Track/*/Noun" -msgid "Title" -msgstr "Titel" - #: front/src/components/manage/library/AlbumsTable.vue:39 #: front/src/components/manage/library/TracksTable.vue:39 -msgctxt "*/*/*" +#: front/src/views/admin/library/AlbumDetail.vue:105 +#: front/src/views/admin/library/TrackDetail.vue:104 +#: front/src/views/content/libraries/FilesTable.vue:55 src/edits.js:36 +#: front/src/edits.js:62 +msgctxt "*/*/*/Noun" msgid "Title" msgstr "Titel" #: front/src/components/SetInstanceModal.vue:16 msgctxt "Popup/Instance/Paragraph" -msgid "" -"To continue, please select the Funkwhale instance you want to connect to. " -"Enter the address directly, or select one of the suggested choices." +msgid "To continue, please select the Funkwhale instance you want to connect to. Enter the address directly, or select one of the suggested choices." +msgstr "Selecteer met welke Funkwhale-server je wil verbinden om verder te gaan. Voer zelf de url in, of kies een van de suggesties." + +#: front/src/components/ShortcutsModal.vue:148 +#, fuzzy +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Toggle favorite" +msgstr "1 favoriet" + +#: front/src/components/ShortcutsModal.vue:132 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Toggle mute" msgstr "" -#: front/src/components/ShortcutsModal.vue:79 +#: front/src/components/ShortcutsModal.vue:136 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Toggle queue looping" msgstr "" -#: front/src/views/admin/library/AlbumDetail.vue:222 -#: front/src/views/admin/library/ArtistDetail.vue:211 -#: front/src/views/admin/library/LibraryDetail.vue:200 -#: front/src/views/admin/library/TrackDetail.vue:274 -#: front/src/views/admin/moderation/AccountsDetail.vue:317 -#: front/src/views/admin/moderation/DomainsDetail.vue:225 +#: front/src/views/admin/library/AlbumDetail.vue:238 +#: front/src/views/admin/library/ArtistDetail.vue:226 +#: front/src/views/admin/library/LibraryDetail.vue:219 +#: front/src/views/admin/library/TrackDetail.vue:290 +#: front/src/views/admin/moderation/AccountsDetail.vue:329 +#: front/src/views/admin/moderation/DomainsDetail.vue:262 msgctxt "Content/Moderation/Table.Label" msgid "Total size" msgstr "" @@ -4683,21 +5004,19 @@ msgctxt "Content/Library/Card.Help text" msgid "Total size of the files in this library" msgstr "Totale grootte van de bestanden in deze verzameling" -#: front/src/views/admin/moderation/DomainsDetail.vue:105 +#: front/src/views/admin/moderation/DomainsDetail.vue:142 #, fuzzy msgctxt "Content/*/*" msgid "Total users" msgstr "Niet gebruikt" -#: front/src/views/admin/library/UploadDetail.vue:199 -msgctxt "*/*/*" -msgid "Track" -msgstr "Nummer" - -#: front/src/components/audio/SearchBar.vue:27 -#: front/src/components/library/TrackBase.vue:173 +#: front/src/components/audio/SearchBar.vue:34 +#: front/src/components/library/TrackBase.vue:188 #: front/src/components/library/TrackDetail.vue:128 #: front/src/components/metadata/Search.vue:138 +#: src/components/mixins/Report.vue:28 +#: front/src/views/admin/library/UploadDetail.vue:199 +#: front/src/components/mixins/Report.vue:29 msgctxt "*/*/*/Noun" msgid "Track" msgstr "Nummer" @@ -4707,7 +5026,7 @@ msgctxt "Content/Library/Card/Short" msgid "Track #%{ id } - %{ name }" msgstr "" -#: front/src/views/admin/library/TrackDetail.vue:91 +#: front/src/views/admin/library/TrackDetail.vue:97 #, fuzzy msgctxt "Content/Moderation/Title" msgid "Track data" @@ -4718,30 +5037,28 @@ msgctxt "Content/Track/Title/Noun" msgid "Track information" msgstr "Nummerinformatie" -#: front/src/components/mixins/Translations.vue:50 -#: front/src/components/mixins/Translations.vue:51 +#: front/src/components/mixins/Translations.vue:60 +#: front/src/components/mixins/Translations.vue:61 msgctxt "Content/*/Dropdown/Noun" msgid "Track name" msgstr "Naam van nummer" -#: front/src/components/instance/Stats.vue:54 #: front/src/components/library/AlbumDetail.vue:19 -#: front/src/components/playlists/PlaylistModal.vue:47 -#: front/src/views/admin/moderation/AccountsDetail.vue:362 -#: front/src/views/admin/moderation/DomainsDetail.vue:274 -#: front/src/views/content/Base.vue:8 src/views/content/libraries/Detail.vue:8 -#: front/src/views/playlists/Detail.vue:51 src/views/radios/Detail.vue:34 -msgctxt "*/*/*/Noun" -msgid "Tracks" -msgstr "Nummers" - +#: front/src/components/library/TagDetail.vue:36 #: front/src/components/manage/library/AlbumsTable.vue:42 #: front/src/components/manage/library/ArtistsTable.vue:42 -#: front/src/views/admin/library/AlbumDetail.vue:252 -#: front/src/views/admin/library/ArtistDetail.vue:251 +#: front/src/components/manage/library/TagsTable.vue:44 +#: front/src/components/playlists/PlaylistModal.vue:47 +#: front/src/views/admin/library/AlbumDetail.vue:268 +#: front/src/views/admin/library/ArtistDetail.vue:266 #: front/src/views/admin/library/Base.vue:14 -#: front/src/views/admin/library/LibraryDetail.vue:229 +#: front/src/views/admin/library/LibraryDetail.vue:248 +#: front/src/views/admin/library/TagDetail.vue:143 #: front/src/views/admin/library/TracksList.vue:24 +#: front/src/views/admin/moderation/AccountsDetail.vue:374 +#: front/src/views/admin/moderation/DomainsDetail.vue:311 +#: front/src/views/content/Base.vue:8 src/views/content/libraries/Detail.vue:8 +#: front/src/views/playlists/Detail.vue:76 src/views/radios/Detail.vue:34 msgctxt "*/*/*" msgid "Tracks" msgstr "Nummers" @@ -4751,16 +5068,6 @@ msgctxt "Content/Artist/Title" msgid "Tracks by this artist" msgstr "Nummers van deze artiest" -#: front/src/components/instance/Stats.vue:25 -msgctxt "Content/About/Paragraph/Unit" -msgid "Tracks favorited" -msgstr "Nummers in favorieten" - -#: front/src/components/instance/Stats.vue:19 -msgctxt "Content/About/Paragraph/Unit" -msgid "tracks listened" -msgstr "beluisterde nummers" - #: front/src/components/library/radios/Filter.vue:44 #, fuzzy msgctxt "Popup/Radio/Title/Noun" @@ -4768,64 +5075,58 @@ msgid "Tracks matching filter" msgstr "Kloppend nummer" #: front/src/components/library/TrackDetail.vue:57 +#: front/src/components/manage/moderation/ReportCard.vue:134 #: front/src/views/admin/library/UploadDetail.vue:250 +#: front/src/views/admin/moderation/AccountsDetail.vue:181 msgctxt "Content/Track/Table.Label/Noun" msgid "Type" msgstr "Type" -#: front/src/views/admin/moderation/AccountsDetail.vue:180 -msgctxt "Content/Moderation/Table.Label/Noun" -msgid "Type" -msgstr "Type" - #: front/src/components/manage/moderation/AccountsTable.vue:44 -#: front/src/components/manage/moderation/DomainsTable.vue:42 +#: front/src/components/manage/moderation/DomainsTable.vue:50 msgctxt "Content/Moderation/Table.Label/Short" msgid "Under moderation rule" msgstr "" -#: front/src/views/content/remote/Card.vue:109 -#: src/views/content/remote/Card.vue:114 +#: front/src/components/ShortcutsModal.vue:68 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Unfocus searchbar" +msgstr "" + +#: front/src/views/content/remote/Card.vue:122 +#: src/views/content/remote/Card.vue:127 msgctxt "*/Library/Button.Label/Verb" msgid "Unfollow" msgstr "Ontvolgen" -#: front/src/views/content/remote/Card.vue:110 +#: front/src/views/content/remote/Card.vue:123 msgctxt "Popup/Library/Title" msgid "Unfollow this library?" msgstr "Wil je deze verzameling ontvolgen?" -#: front/src/components/About.vue:17 -#, fuzzy -msgctxt "Content/About/Paragraph" -msgid "" -"Unfortunately, the owners of this instance did not yet take the time to " -"complete this page." -msgstr "" -"Helaas is deze pagina nog niet ingevuld door de beheerders van deze " -"instantie." - #: front/src/components/federation/FetchButton.vue:54 #: front/src/components/federation/FetchButton.vue:55 -msgctxt "*/*/Error" -msgid "Unknowkn error" -msgstr "" - #: front/src/components/library/ImportStatusModal.vue:144 -msgctxt "Popup/Import/Error.Label" -msgid "Unkwown error" +msgctxt "*/*/Error" +msgid "Unknown error" msgstr "" -#: front/src/components/Home.vue:37 -msgctxt "Content/Home/Title" -msgid "Unlimited music" -msgstr "Ongelimiteerd luisteren naar muziek" - -#: front/src/components/audio/Player.vue:630 +#: front/src/components/audio/Player.vue:656 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Unmute" msgstr "Ontdempen" +#: front/src/components/manage/moderation/ReportCard.vue:225 +msgctxt "Content/*/Button.Label" +msgid "Unresolve" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:67 +#: front/src/views/admin/moderation/ReportsList.vue:23 +msgctxt "Content/*/*/Short" +msgid "Unresolved" +msgstr "" + #: front/src/components/manage/moderation/InstancePolicyForm.vue:57 #, fuzzy msgctxt "Content/Moderation/Card.Button.Label/Verb" @@ -4893,12 +5194,8 @@ msgstr "Uploaddatum" #: front/src/components/library/FileUpload.vue:258 #, fuzzy msgctxt "Content/Library/Help text" -msgid "" -"Upload denied, ensure the file is not too big and that you have not reached " -"your quota" -msgstr "" -"Upload geweigerd. Zorg ervoor dat het bestand niet te groot is en dat je je " -"quotum nog niet hebt bereikt." +msgid "Upload denied, ensure the file is not too big and that you have not reached your quota" +msgstr "Upload geweigerd. Zorg ervoor dat het bestand niet te groot is en dat je je quotum nog niet hebt bereikt." #: front/src/components/library/ImportStatusModal.vue:8 msgctxt "Popup/Import/Message" @@ -4908,20 +5205,18 @@ msgstr "" #: front/src/views/content/Home.vue:7 #, fuzzy msgctxt "Content/Library/Paragraph" -msgid "" -"Upload music files (MP3, OGG, FLAC, etc.) from your personal library " -"directly from your browser to enjoy them here." -msgstr "" -"Upload je eigen muziekbestanden (MP3, FLAC, OGG) via je browser om er hier " -"naar te luisteren." +msgid "Upload music files (MP3, OGG, FLAC, etc.) from your personal library directly from your browser to enjoy them here." +msgstr "Upload je eigen muziekbestanden (MP3, FLAC, OGG) via je browser om er hier naar te luisteren." #: front/src/components/library/FileUpload.vue:30 msgctxt "Content/Library/Title/Verb" msgid "Upload new tracks" msgstr "Nieuwe nummers uploaden" -#: front/src/views/admin/moderation/AccountsDetail.vue:298 -msgctxt "Content/Moderation/Table.Label/Noun" +#: front/src/components/About.vue:99 +#: front/src/views/admin/moderation/AccountsDetail.vue:309 +#, fuzzy +msgctxt "*/*/*" msgid "Upload quota" msgstr "Uploadquotum" @@ -4932,9 +5227,7 @@ msgstr "Upload verlopen; probeer het opnieuw" #: front/src/components/library/ImportStatusModal.vue:14 msgctxt "Popup/Import/Message" -msgid "" -"Upload was skipped because a similar one is already available in one of your" -" libraries." +msgid "Upload was skipped because a similar one is already available in one of your libraries." msgstr "" #: front/src/components/library/ImportStatusModal.vue:11 @@ -4959,60 +5252,56 @@ msgctxt "Content/Library/Table" msgid "Uploading…" msgstr "Bezig met uploaden" +#: front/src/components/manage/library/LibrariesTable.vue:52 +#: front/src/components/manage/moderation/AccountsTable.vue:41 +#: front/src/components/mixins/Translations.vue:75 +#: front/src/views/admin/library/AlbumDetail.vue:258 +#: front/src/views/admin/library/ArtistDetail.vue:246 #: front/src/views/admin/library/Base.vue:20 +#: front/src/views/admin/library/LibraryDetail.vue:258 +#: front/src/views/admin/library/TrackDetail.vue:310 #: front/src/views/admin/library/UploadsList.vue:24 +#: front/src/views/admin/moderation/AccountsDetail.vue:349 +#: front/src/views/admin/moderation/DomainsDetail.vue:281 +#: front/src/components/mixins/Translations.vue:76 #, fuzzy msgctxt "*/*/*" msgid "Uploads" msgstr "Uploaden" -#: front/src/components/manage/moderation/AccountsTable.vue:41 -#: front/src/components/mixins/Translations.vue:63 -#: front/src/views/admin/library/AlbumDetail.vue:242 -#: front/src/views/admin/library/ArtistDetail.vue:231 -#: front/src/views/admin/library/LibraryDetail.vue:239 -#: front/src/views/admin/library/TrackDetail.vue:294 -#: front/src/views/admin/moderation/AccountsDetail.vue:337 -#: front/src/views/admin/moderation/DomainsDetail.vue:244 -#: front/src/components/mixins/Translations.vue:64 -#, fuzzy -msgctxt "Content/Moderation/Table.Label/Noun" -msgid "Uploads" -msgstr "Uploaden" - -#: front/src/components/manage/library/LibrariesTable.vue:52 -#, fuzzy -msgctxt "Content/*/*/Noun" -msgid "Uploads" -msgstr "Uploaden" - #: front/src/components/auth/ApplicationForm.vue:16 msgctxt "Content/Applications/Help Text" -msgid "" -"Use \"urn:ietf:wg:oauth:2.0:oob\" as a redirect URI if your application is " -"not served on the web." +msgid "Use \"urn:ietf:wg:oauth:2.0:oob\" as a redirect URI if your application is not served on the web." msgstr "" #: front/src/components/Footer.vue:16 msgctxt "Footer/*/List item.Link" msgid "Use another instance" -msgstr "Andere instantie gebruiken" +msgstr "Andere server gebruiken" + +#: front/src/components/Home.vue:146 +msgctxt "Content/Home/Link" +msgid "Use Funkwhale on other devices with our apps" +msgstr "" + +#: front/src/components/moderation/ReportModal.vue:44 +msgctxt "*/*/Field,Help" +msgid "Use this field to provide additional context to the moderator that will handle your report." +msgstr "" #: front/src/views/auth/PasswordReset.vue:12 msgctxt "Content/Signup/Paragraph" -msgid "" -"Use this form to request a password reset. We will send an email to the " -"given address with instructions to reset your password." +msgid "Use this form to request a password reset. We will send an email to the given address with instructions to reset your password." +msgstr "Met dit formulier kun je een nieuw wachtwoord aanvragen. Je ontvangt van ons een e-mail op het door jou ingevoerde aangegeven adres met de instructies om je wachtwoord te herstellen." + +#: front/src/components/moderation/ReportModal.vue:18 +msgctxt "*/Moderation/Popup,Paragraph" +msgid "Use this form to submit a report to our moderation team." msgstr "" -"Met dit formulier kun je een nieuw wachtwoord aanvragen. Je ontvangt van ons" -" een e-mail op het door jou ingevoerde aangegeven adres met de instructies " -"om je wachtwoord te herstellen." #: front/src/components/manage/moderation/InstancePolicyForm.vue:111 msgctxt "Content/Moderation/Help text" -msgid "" -"Use this setting to temporarily enable/disable the policy without completely" -" removing it." +msgid "Use this setting to temporarily enable/disable the policy without completely removing it." msgstr "" #: front/src/components/manage/users/InvitationsTable.vue:49 @@ -5020,15 +5309,27 @@ msgctxt "Content/Admin/Table" msgid "Used" msgstr "Gebruikt" +#: front/src/components/Home.vue:125 +msgctxt "Content/Home/Header" +msgid "Useful links" +msgstr "" + #: front/src/views/content/libraries/Detail.vue:26 msgctxt "Content/Library/Table.Label" msgid "User" msgstr "Gebruiker" -#: front/src/components/instance/Stats.vue:5 -msgctxt "Content/About/Title/Noun" -msgid "User activity" -msgstr "Gebruikersactiviteit" +#: front/src/components/Home.vue:154 +#, fuzzy +msgctxt "Content/Home/Link" +msgid "User guides" +msgstr "Gebruikersverzamelingen" + +#: front/src/views/admin/Settings.vue:88 +#, fuzzy +msgctxt "Content/Admin/Menu" +msgid "User Interface" +msgstr "Gebruikersnaam" #: front/src/components/library/AlbumDetail.vue:26 #: front/src/components/library/ArtistDetail.vue:39 @@ -5042,35 +5343,35 @@ msgctxt "Content/Radio/Title" msgid "User radios" msgstr "Gebruikersradio's" -#: front/src/components/auth/Signup.vue:19 +#: front/src/components/auth/SignupForm.vue:15 #: front/src/components/manage/users/UsersTable.vue:37 -#: front/src/components/mixins/Translations.vue:59 +#: front/src/components/mixins/Translations.vue:71 #: front/src/views/admin/moderation/AccountsDetail.vue:114 -#: front/src/components/mixins/Translations.vue:60 +#: front/src/components/mixins/Translations.vue:72 msgctxt "Content/*/*" msgid "Username" msgstr "Gebruikersnaam" -#: front/src/components/auth/Login.vue:15 +#: front/src/components/auth/LoginForm.vue:11 msgctxt "Content/Login/Input.Label/Noun" msgid "Username or email" msgstr "Gebruikersnaam of e-mailadres" -#: front/src/components/instance/Stats.vue:13 -msgctxt "Content/About/Paragraph/Unit" -msgid "users" -msgstr "gebruikers" - -#: front/src/components/Sidebar.vue:102 -#: front/src/components/manage/moderation/DomainsTable.vue:39 -#: front/src/components/mixins/Translations.vue:61 +#: front/src/components/Sidebar.vue:106 +#: front/src/components/manage/moderation/DomainsTable.vue:47 +#: front/src/components/mixins/Translations.vue:73 #: src/views/admin/Settings.vue:81 front/src/views/admin/users/Base.vue:5 #: src/views/admin/users/UsersList.vue:21 -#: front/src/components/mixins/Translations.vue:62 +#: front/src/components/mixins/Translations.vue:74 msgctxt "*/*/*/Noun" msgid "Users" msgstr "Gebruikers" +#: front/src/components/Home.vue:110 +msgctxt "Content/Home/Paragraph" +msgid "Users on this pod also get %{ quota } of free storage to upload their own content!" +msgstr "" + #: front/src/components/Footer.vue:29 #, fuzzy msgctxt "Footer/*/Title" @@ -5078,10 +5379,9 @@ msgid "Using Funkwhale" msgstr "Over Funkwhale" #: front/src/components/Footer.vue:13 -#, fuzzy msgctxt "Footer/*/List item" msgid "Version %{version}" -msgstr "Broncode (%{ version })" +msgstr "Versie (%{ version })" #: front/src/views/content/libraries/Quota.vue:29 #: front/src/views/content/libraries/Quota.vue:56 @@ -5090,45 +5390,59 @@ msgctxt "Content/Library/Link/Verb" msgid "View files" msgstr "Bestanden bekijken" -#: front/src/components/library/AlbumBase.vue:81 -#: front/src/components/library/ArtistBase.vue:92 -#: front/src/components/library/TrackBase.vue:100 -#: front/src/views/admin/library/AlbumDetail.vue:42 -#: front/src/views/admin/library/ArtistDetail.vue:41 +#: front/src/components/library/AlbumBase.vue:95 +#: front/src/components/library/ArtistBase.vue:107 +#: front/src/components/library/TrackBase.vue:111 +#: front/src/views/admin/library/AlbumDetail.vue:48 +#: front/src/views/admin/library/ArtistDetail.vue:46 #: front/src/views/admin/library/LibraryDetail.vue:34 #: front/src/views/admin/library/LibraryDetail.vue:45 -#: front/src/views/admin/library/TrackDetail.vue:41 +#: front/src/views/admin/library/TagDetail.vue:32 +#: front/src/views/admin/library/TrackDetail.vue:47 #: front/src/views/admin/library/UploadDetail.vue:35 #: front/src/views/admin/library/UploadDetail.vue:46 #: front/src/views/admin/moderation/AccountsDetail.vue:37 #: front/src/views/admin/moderation/AccountsDetail.vue:45 +#: front/src/views/admin/moderation/DomainsDetail.vue:30 msgctxt "Content/Moderation/Link/Verb" msgid "View in Django's admin" msgstr "" -#: front/src/components/library/AlbumBase.vue:61 -#: front/src/components/library/ArtistBase.vue:72 -#: front/src/components/library/TrackBase.vue:80 +#: front/src/components/Home.vue:169 +msgctxt "Content/Home/Link" +msgid "View more…" +msgstr "" + +#: front/src/components/library/AlbumBase.vue:62 +#: front/src/components/library/ArtistBase.vue:73 +#: front/src/components/library/TrackBase.vue:78 #: front/src/components/metadata/ArtistCard.vue:49 #: front/src/components/metadata/ReleaseCard.vue:53 msgctxt "Content/*/*/Clickable, Verb" msgid "View on MusicBrainz" msgstr "Bekijken op MusicBrainz" +#: front/src/components/manage/moderation/ReportCard.vue:124 +msgctxt "Content/Moderation/Link" +msgid "View public page" +msgstr "" + #: front/src/components/manage/library/LibrariesTable.vue:11 #: front/src/components/manage/library/LibrariesTable.vue:51 #: front/src/components/manage/library/UploadsTable.vue:11 #: front/src/components/manage/library/UploadsTable.vue:63 #: front/src/views/admin/library/LibraryDetail.vue:94 #: front/src/views/admin/library/UploadDetail.vue:101 +#: front/src/views/content/libraries/Form.vue:18 msgctxt "*/*/*" msgid "Visibility" msgstr "Zichtbaarheid" -#: front/src/views/content/libraries/Form.vue:18 -msgctxt "Content/Library/Dropdown.Label" -msgid "Visibility" -msgstr "Zichtbaarheid" +#: front/src/components/Home.vue:91 +#, fuzzy +msgctxt "Content/Home/Link" +msgid "Visit funkwhale.audio" +msgstr "Over Funkwhale" #: front/src/components/library/AlbumDetail.vue:4 msgctxt "Content/Album/" @@ -5140,7 +5454,13 @@ msgctxt "Popup/*/Loading.Title" msgid "Waiting for result…" msgstr "" -#: front/src/components/auth/Login.vue:7 +#: front/src/components/auth/Settings.vue:285 +#, fuzzy +msgctxt "Content/Settings/Error message.Title" +msgid "We cannot delete your account" +msgstr "Er is een fout opgetreden tijdens het inloggen" + +#: front/src/components/auth/LoginForm.vue:3 msgctxt "Content/Login/Error message.Title" msgid "We cannot log you in" msgstr "Er is een fout opgetreden tijdens het inloggen" @@ -5151,10 +5471,10 @@ msgctxt "Content/*/Error message.Title" msgid "We cannot save your changes" msgstr "Je instellingen kunnen niet worden opgeslagen" -#: front/src/components/Home.vue:122 -msgctxt "Content/Home/List item" -msgid "We do not track you or bother you with ads" -msgstr "We volgen je niet en vallen je niet lastig met reclame" +#: front/src/views/Notifications.vue:39 +msgctxt "Content/Notifications/Paragraph" +msgid "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!" +msgstr "" #: front/src/components/library/FileUpload.vue:39 #, fuzzy @@ -5162,32 +5482,27 @@ msgctxt "Content/Library/Link" msgid "We recommend using Picard for that purpose." msgstr "we raden aan om hiervoor Picard te gebruiken" -#: front/src/components/Home.vue:7 -msgctxt "Content/Home/Title" -msgid "We think listening to music should be simple." -msgstr "Omdat het makkelijk moet zijn naar muziek te luisteren." +#: front/src/components/moderation/ReportModal.vue:35 +msgctxt "*/*/Field,Help" +msgid "We'll use this email if we need to contact you regarding this report." +msgstr "" -#: front/src/components/Home.vue:148 +#: front/src/components/Home.vue:207 msgctxt "Head/Home/Title" msgid "Welcome" msgstr "Welkom" #: front/src/components/Home.vue:5 -msgctxt "Content/Home/Title/Verb" -msgid "Welcome on Funkwhale" -msgstr "Welkom op Funkwhale" - -#: front/src/components/Home.vue:24 -msgctxt "Content/Home/Title" -msgid "Why funkwhale?" -msgstr "Waarom Funkwhale?" +msgctxt "Content/Home/Header" +msgid "Welcome to %{ podName }!" +msgstr "" -#: front/src/components/audio/EmbedWizard.vue:13 +#: front/src/components/audio/EmbedWizard.vue:23 msgctxt "Popup/Embed/Input.Label" msgid "Widget height" msgstr "" -#: front/src/components/audio/EmbedWizard.vue:6 +#: front/src/components/audio/EmbedWizard.vue:16 msgctxt "Popup/Embed/Input.Label" msgid "Widget width" msgstr "" @@ -5207,9 +5522,11 @@ msgctxt "Content/OAuth Scopes/Help Text" msgid "Write-only access to user data" msgstr "" -#: front/src/components/Sidebar.vue:129 +#: front/src/components/Sidebar.vue:133 #: front/src/components/manage/moderation/AccountsTable.vue:72 -#: front/src/components/manage/moderation/DomainsTable.vue:58 +#: front/src/components/manage/moderation/DomainsTable.vue:12 +#: front/src/components/manage/moderation/DomainsTable.vue:69 +#: front/src/views/admin/moderation/DomainsDetail.vue:109 msgctxt "*/*/*" msgid "Yes" msgstr "Ja" @@ -5222,29 +5539,18 @@ msgstr "Ja, ik wil uitloggen!" #: front/src/views/content/libraries/Form.vue:19 #, fuzzy msgctxt "Content/Library/Paragraph" -msgid "" -"You are able to share your library with other people, regardless of its " -"visibility." -msgstr "" -"Je kunt je verzameling delen met anderen, ongeacht hoe je de zichtbaarheid " -"hebt ingesteld." +msgid "You are able to share your library with other people, regardless of its visibility." +msgstr "Je kunt je verzameling delen met anderen, ongeacht hoe je de zichtbaarheid hebt ingesteld." #: front/src/components/library/FileUpload.vue:32 msgctxt "Content/Library/Paragraph" -msgid "" -"You are about to upload music to your library. Before proceeding, please " -"ensure that:" -msgstr "" -"Je staat op het punt muziek te uploaden. Controleer voordat je doorgaat:" +msgid "You are about to upload music to your library. Before proceeding, please ensure that:" +msgstr "Je staat op het punt muziek te uploaden. Controleer voordat je doorgaat:" #: front/src/components/SetInstanceModal.vue:12 msgctxt "Popup/Login/Paragraph" -msgid "" -"You are currently connected to <a href=\"%{ url }\" target=\"_blank\">%{ " -"hostname } <i class=\"external icon\"/></a>. If you continue, you will " -"be disconnected from your current instance and all your local data will be " -"deleted." -msgstr "" +msgid "You are currently connected to <a href=\"%{ url }\" target=\"_blank\">%{ hostname } <i class=\"external icon\"/></a>. If you continue, you will be disconnected from your current instance and all your local data will be deleted." +msgstr "Je bent momenteel verbonden met <a href=\"%{ url }\" target=\"_blank\">%{ hostname } <i class=\"external icon\"/></a>. Als je doorgaat, zal je worden ontkoppeld van de huidige server en zal al je lokale data worden gewist." #: front/src/components/library/ArtistDetail.vue:6 msgctxt "Content/Artist/Paragraph" @@ -5258,67 +5564,45 @@ msgstr "Je bent ingelogd als %{ username }" #: front/src/components/library/FileUpload.vue:35 msgctxt "Content/Library/List item" -msgid "" -"You are not uploading copyrighted content in a public library, otherwise you" -" may be infringing the law" +msgid "You are not uploading copyrighted content in a public library, otherwise you may be infringing the law" msgstr "" #: front/src/components/SetInstanceModal.vue:98 msgctxt "*/Instance/Message" msgid "You are now using the Funkwhale instance at %{ url }" -msgstr "" +msgstr "Je gebruikt nu de Funkwhale-server op %{ url }" #: front/src/views/content/Home.vue:17 +#, fuzzy msgctxt "Content/Library/Paragraph" -msgid "" -"You can follow libraries from other users to get access to new music. Public" -" libraries can be followed immediatly, while following a private library " -"requires approval from its owner." -msgstr "" -"Je kunt andere verzamelingen volgen voor toegang tot nieuwe muziek. Openbare" -" verzamelingen kun je meteen volgen, maar voor privéverzamelingen heb je " -"toestemming nodig van de beheerder." - -#: front/src/components/Home.vue:128 -msgctxt "Content/Home/List item" -msgid "" -"You can invite friends and family to your instance so they can enjoy your " -"music" -msgstr "" -"Je kunt vrienden en familie uitnodigen zodat ze kunnen genieten van je " -"muziek" +msgid "You can 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." +msgstr "Je kunt andere verzamelingen volgen voor toegang tot nieuwe muziek. Openbare verzamelingen kun je meteen volgen, maar voor privéverzamelingen heb je toestemming nodig van de beheerder." #: front/src/components/moderation/FilterModal.vue:31 msgctxt "Popup/Moderation/Paragraph" -msgid "" -"You can manage and update your filters anytime from your account settings." +msgid "You can manage and update your filters any time from your account settings." msgstr "" #: front/src/views/auth/EmailConfirm.vue:24 #, fuzzy msgctxt "Content/Signup/Paragraph" msgid "You can now use the service without limitations." +msgstr "Je e-mailadres is bevestigd. Je kunt nu onbeperkt gebruikmaken van de dienst." + +#: front/src/components/auth/Settings.vue:278 +msgctxt "Content/Settings/Paragraph'" +msgid "You can permanently and irreversibly delete your account and all the associated data using the form below. You will be asked for confirmation." msgstr "" -"Je e-mailadres is bevestigd. Je kunt nu onbeperkt gebruikmaken van de " -"dienst." #: front/src/components/library/radios/Builder.vue:7 msgctxt "Content/Radio/Paragraph" -msgid "" -"You can use this interface to build your own custom radio, which will play " -"tracks according to your criteria." -msgstr "" -"Met dit hulpmiddel kun je je eigen radiostation opzetten. Dit station speelt" -" nummers aan de hand van jouw wensen." +msgid "You can use this interface to build your own custom radio, which will play tracks according to your criteria." +msgstr "Met dit hulpmiddel kun je je eigen radiostation opzetten. Dit station speelt nummers aan de hand van jouw wensen." #: front/src/components/auth/SubsonicTokenForm.vue:7 msgctxt "Content/Settings/Paragraph" -msgid "" -"You can use those to enjoy your playlist and music in offline mode, on your " -"smartphone or tablet, for instance." -msgstr "" -"Je kunt ze gebruiken om ook offline te genieten van je afspeellijst en " -"muziek, bijvoorbeeld op je smartphone of tablet." +msgid "You can use those to enjoy your playlist and music in offline mode, on your smartphone or tablet, for instance." +msgstr "Je kunt ze gebruiken om ook offline te genieten van je afspeellijst en muziek, bijvoorbeeld op je smartphone of tablet." #: front/src/components/auth/Settings.vue:202 msgctxt "Content/Applications/Paragraph" @@ -5336,19 +5620,17 @@ msgctxt "Content/Moderation/Card.Title" msgid "You don't have any rule in place for this account." msgstr "" -#: front/src/views/admin/moderation/DomainsDetail.vue:39 +#: front/src/views/admin/moderation/DomainsDetail.vue:67 msgctxt "Content/Moderation/Card.Title" msgid "You don't have any rule in place for this domain." msgstr "" #: front/src/components/library/EditForm.vue:52 msgctxt "Content/Library/Paragraph" -msgid "" -"You don't have the permission to edit this object, but you can suggest " -"changes. Once submitted, suggestions will be reviewed before approval." +msgid "You don't have the permission to edit this object, but you can suggest changes. Once submitted, suggestions will be reviewed before approval." msgstr "" -#: front/src/components/Sidebar.vue:171 +#: front/src/components/Sidebar.vue:175 msgctxt "Sidebar/Player/Title" msgid "You have a radio playing" msgstr "Er wordt een radiostation afgespeeld" @@ -5360,8 +5642,7 @@ msgstr "" #: front/src/components/auth/Settings.vue:100 msgctxt "Popup/Settings/List item" -msgid "" -"You will be logged out from this session and have to log in with the new one" +msgid "You will be logged out from this session and have to log in with the new one" msgstr "Je wordt uitgelogd uit deze sessie moet inloggen op de nieuwe" #: front/src/components/auth/Authorize.vue:51 @@ -5376,25 +5657,24 @@ msgstr "" #: front/src/components/auth/Settings.vue:71 msgctxt "Content/Settings/Paragraph" -msgid "" -"You will have to update your password on your clients that use this " -"password." -msgstr "" -"Je moet je wachtwoord bijwerken op je clients die ook dit wachtwoord " -"gebruiken." +msgid "You will have to update your password on your clients that use this password." +msgstr "Je moet je wachtwoord bijwerken op je clients die ook dit wachtwoord gebruiken." #: front/src/components/moderation/FilterModal.vue:20 msgctxt "Popup/Moderation/Paragraph" -msgid "" -"You will not see tracks, albums and user activity linked to this artist " -"anymore:" +msgid "You will not see tracks, albums and user activity linked to this artist any more:" msgstr "" -#: front/src/components/auth/Signup.vue:13 +#: front/src/components/auth/SignupForm.vue:9 msgctxt "Content/Signup/Form/Paragraph" msgid "Your account cannot be created." msgstr "" +#: front/src/components/auth/Settings.vue:281 +msgctxt "Content/Settings/Paragraph'" +msgid "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." +msgstr "" + #: front/src/components/auth/Settings.vue:215 #, fuzzy msgctxt "Content/Settings/Title/Noun" @@ -5406,6 +5686,11 @@ msgctxt "Content/Settings/Error message.Title" msgid "Your avatar cannot be saved" msgstr "" +#: front/src/components/auth/Settings.vue:527 +msgctxt "*/Auth/Message" +msgid "Your deletion request was submitted, your account and content will be deleted shortly" +msgstr "" + #: front/src/components/library/EditForm.vue:3 msgctxt "Content/Library/Paragraph" msgid "Your edit was successfully submitted." @@ -5416,12 +5701,12 @@ msgctxt "Head/Favorites/Title" msgid "Your Favorites" msgstr "Je favorieten" -#: front/src/components/Home.vue:109 -msgctxt "Content/Home/Title" -msgid "Your music, your way" -msgstr "Jouw muziek op jouw manier" +#: front/src/views/Notifications.vue:5 +msgctxt "Content/Notifications/Title" +msgid "Your messages" +msgstr "" -#: front/src/views/Notifications.vue:4 +#: front/src/views/Notifications.vue:69 msgctxt "Content/Notifications/Title" msgid "Your notifications" msgstr "Je meldingen" @@ -5439,44 +5724,39 @@ msgstr "Je wachtwoord is bijgewerkt." #: front/src/components/auth/Settings.vue:14 #, fuzzy msgctxt "Content/Settings/Error message.Title" -msgid "Your settings can't be updateds" +msgid "Your settings can't be updated" msgstr "Instellingen bijgewerkt" #: front/src/components/auth/Settings.vue:101 msgctxt "Popup/Settings/List item" -msgid "" -"Your Subsonic password will be changed to a new, random one, logging you out" -" from devices that used the old Subsonic password" -msgstr "" -"Je Subsonic-wachtwoord wordt gewijzigd in een nieuw willekeurig wachtwoord. " -"Hierbij wordt je uitgelogd op apparaten die het oude Subsonic-wachtwoord " -"gebruiken." +msgid "Your Subsonic password will be changed to a new, random one, logging you out from devices that used the old Subsonic password" +msgstr "Je Subsonic-wachtwoord wordt vervangen door een nieuwe, waardoor je wordt uitgelogd op apparaten die het oude wachtwoord gebruiken" -#: front/src/edits.js:47 +#: front/src/entities.js:126 #, fuzzy -msgctxt "*/*/*/Short, Noun" -msgid "Position" -msgstr "Omschrijving" +msgctxt "*/*/*/Noun" +msgid "MusicBrainz ID" +msgstr "Bekijken op MusicBrainz" -#: front/src/edits.js:54 -#, fuzzy -msgctxt "Content/Track/*/Noun" -msgid "Copyright" -msgstr "Kopiëren" +#: front/src/main.js:110 +msgctxt "*/Error/Paragraph" +msgid "You sent too many requests and have been rate limited, please try again in %{ delay }" +msgstr "" + +#: front/src/main.js:113 +msgctxt "*/Error/Paragraph" +msgid "You sent too many requests and have been rate limited, please try again later" +msgstr "" -#: front/src/components/library/AlbumBase.vue:183 +#: front/src/components/library/AlbumBase.vue:208 #, fuzzy msgctxt "Content/Album/Header.Title" -msgid "" -"Album containing %{ count } track, by <a class=\"internal\" href=\"%{ " -"artistUrl }\">%{ artist }</a>" -msgid_plural "" -"Album containing %{ count } tracks, by <a class=\"internal\" href=\"%{ " -"artistUrl }\">%{ artist }</a>" +msgid "Album containing %{ count } track, by <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" +msgid_plural "Album containing %{ count } tracks, by <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" msgstr[0] "Album met %{ count } nummer, van %{ artist }" msgstr[1] "Album met %{ count } nummers, van %{ artist }" -#: front/src/components/audio/PlayButton.vue:220 +#: front/src/components/audio/PlayButton.vue:246 #, fuzzy msgctxt "*/Queue/Message" msgid "%{ count } track was added to your queue" diff --git a/front/locales/oc/LC_MESSAGES/app.po b/front/locales/oc/LC_MESSAGES/app.po index 2ba2f5e23c320a992431ca412e36c676c67098c4..048854e66eedf714ded4dd7fa1b74c0aa296d6a9 100644 --- a/front/locales/oc/LC_MESSAGES/app.po +++ b/front/locales/oc/LC_MESSAGES/app.po @@ -7,16 +7,16 @@ msgid "" msgstr "" "Project-Id-Version: front 1.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-05-16 10:35+0200\n" -"PO-Revision-Date: 2019-05-07 09:29+0000\n" -"Last-Translator: Quentà <quentin_antonin@hotmail.com>\n" +"POT-Creation-Date: 2019-10-01 15:15+0200\n" +"PO-Revision-Date: 2019-09-29 20:13+0000\n" +"Last-Translator: Quentin PAGÈS <quentinantonin@free.fr>\n" "Language-Team: none\n" "Language: oc\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 3.2.2\n" +"X-Generator: Weblate 3.7\n" #: front/src/components/playlists/PlaylistModal.vue:9 msgctxt "Popup/Playlist/Paragraph" @@ -38,6 +38,48 @@ msgctxt "Content/Auth/Title" msgid "%{ app } wants to access your Funkwhale account" msgstr "%{ app } vòl accedir a vòstre compte Funkwhale" +#: front/src/components/About.vue:173 src/components/Home.vue:56 +msgctxt "Content/Home/Stat" +msgid "%{ count } active user" +msgid_plural "%{ count } active users" +msgstr[0] "%{ count } utilizaire actiu" +msgstr[1] "%{ count } utilizaires actius" + +#: front/src/components/About.vue:182 +msgctxt "Content/Home/Stat" +msgid "%{ count } albums" +msgid_plural "%{ count } albums" +msgstr[0] "%{ count } album" +msgstr[1] "%{ count } albums" + +#: front/src/components/About.vue:152 +msgctxt "*/*/*" +msgid "%{ count } allowed domains" +msgid_plural "%{ count } allowed domains" +msgstr[0] "%{ count } domeni autorizat" +msgstr[1] "%{ count } domenis autorizats" + +#: front/src/components/About.vue:179 +msgctxt "Content/Home/Stat" +msgid "%{ count } artists" +msgid_plural "%{ count } artists" +msgstr[0] "%{ count } artista" +msgstr[1] "%{ count } artistas" + +#: front/src/components/About.vue:176 src/components/Home.vue:59 +msgctxt "Content/Home/Stat" +msgid "%{ count } hour of music" +msgid_plural "%{ count } hours of music" +msgstr[0] "%{ count } ora de musica" +msgstr[1] "%{ count } oras de musica" + +#: front/src/components/About.vue:188 +msgctxt "Content/Home/Stat" +msgid "%{ count } listenings" +msgid_plural "%{ count } listenings" +msgstr[0] "%{ count } escota" +msgstr[1] "%{ count } escotas" + #: front/src/components/common/ActionTable.vue:68 msgctxt "Content/*/Paragraph" msgid "%{ count } on %{ total } selected" @@ -45,9 +87,9 @@ msgid_plural "%{ count } on %{ total } selected" msgstr[0] "%{ count } sus %{ total } element seleccionat" msgstr[1] "%{ count } sus %{ total } elements seleccionats" -#: front/src/components/Sidebar.vue:121 src/components/audio/album/Card.vue:52 +#: front/src/components/Sidebar.vue:125 src/components/audio/album/Card.vue:52 #: front/src/views/content/libraries/Card.vue:40 -#: src/views/content/remote/Card.vue:30 +#: src/views/content/remote/Card.vue:43 msgctxt "*/*/*" msgid "%{ count } track" msgid_plural "%{ count } tracks" @@ -68,7 +110,14 @@ msgid_plural "%{ count } tracks matching combined filters" msgstr[0] "%{ count } pista correspond als filtres seleccionats" msgstr[1] "%{ count } pistas correspondon als filtres seleccionats" -#: front/src/components/playlists/Card.vue:18 +#: front/src/components/About.vue:185 +msgctxt "Content/Home/Stat" +msgid "%{ count } tracks" +msgid_plural "%{ count } tracks" +msgstr[0] "%{ count } pista" +msgstr[1] "%{ count } pistas" + +#: front/src/components/playlists/Card.vue:28 msgctxt "Content/*/Card/List item" msgid "%{ count} track" msgid_plural "%{ count } tracks" @@ -93,9 +142,7 @@ msgstr "%{ minutes } min" #: front/src/components/notifications/NotificationRow.vue:40 msgctxt "Content/Notifications/Paragraph" msgid "%{ username } accepted your follow on library \"%{ library }\"" -msgstr "" -"%{ username } acceptèt vòstra demanda de seguiment de la bibliotèca « %{ " -"library } »" +msgstr "%{ username } acceptèt vòstra demanda de seguiment de la bibliotèca « %{ library } »" #: front/src/components/notifications/NotificationRow.vue:39 msgctxt "Content/Notifications/Paragraph" @@ -114,12 +161,10 @@ msgstr "Perfil de %{ username }" #: front/src/components/playlists/PlaylistModal.vue:21 msgctxt "Popup/Playlist/Paragraph" -msgid "" -"<strong>%{ track }</strong> is already in <strong>%{ playlist }</strong>." -msgstr "" -"<strong>%{ track }</strong> es ja dins <strong>%{ playlist }</strong>." +msgid "<strong>%{ track }</strong> is already in <strong>%{ playlist }</strong>." +msgstr "<strong>%{ track }</strong> es ja dins <strong>%{ playlist }</strong>." -#: front/src/components/audio/artist/Card.vue:41 +#: front/src/components/audio/artist/Card.vue:11 msgctxt "Content/Artist/Card" msgid "1 album" msgid_plural "%{ count } albums" @@ -133,32 +178,49 @@ msgid_plural "%{ count } favorites" msgstr[0] "1 favorit" msgstr[1] "%{ count } favorits" -#: front/src/components/Home.vue:64 -msgctxt "Content/Home/Title" -msgid "A clean library" -msgstr "Bibliotèca de qualitat" +#: front/src/components/audio/artist/Card.vue:15 +msgctxt "Content/Artist/Card" +msgid "1 track" +msgid_plural "%{ count } tracks" +msgstr[0] "Una pista" +msgstr[1] "%{ count } pistas" + +#: front/src/views/Notifications.vue:21 src/views/Notifications.vue:55 +msgctxt "*/*/*" +msgid "30 days" +msgstr "30 jorns" + +#: front/src/views/Notifications.vue:22 src/views/Notifications.vue:56 +msgctxt "*/*/*" +msgid "60 days" +msgstr "60 jorns" + +#: front/src/views/Notifications.vue:23 src/views/Notifications.vue:57 +msgctxt "*/*/*" +msgid "90 days" +msgstr "90 jorns" #: front/src/components/library/FileUpload.vue:264 msgctxt "Content/Library/Help text" -msgid "A network error occured while uploading this file" +msgid "A network error occurred while uploading this file" msgstr "Una error de ret s’es producha en enviar aqueste fichièr" -#: front/src/components/library/EditForm.vue:145 +#: front/src/components/library/EditForm.vue:161 msgctxt "*/*/Placeholder" msgid "A short summary describing your changes." msgstr "Una descripcion pichona per explicar vòstres cambiaments." #: front/src/components/About.vue:5 -msgctxt "Content/About/Title/Short, Noun" -msgid "About %{ instance }" -msgstr "A prepaus de %{ instance }" +msgctxt "Content/Home/Header" +msgid "About %{ podName }" +msgstr "A prepaus de %{ podName }" #: front/src/components/Footer.vue:6 msgctxt "Footer/About/Title" msgid "About %{instanceName}" msgstr "A prepaus de %{instanceName}" -#: front/src/components/Footer.vue:45 +#: front/src/components/Footer.vue:53 src/components/Home.vue:85 msgctxt "Footer/*/Title/Short" msgid "About Funkwhale" msgstr "A prepaus de Funkwhale" @@ -168,10 +230,15 @@ msgctxt "Footer/About/List item.Link" msgid "About page" msgstr "Pagina « a prepaus »" -#: front/src/components/About.vue:8 src/components/About.vue:67 -msgctxt "Content/About/Title" -msgid "About this instance" -msgstr "A prepaus d’aquesta instà ncia" +#: front/src/components/Home.vue:19 +msgctxt "Content/Home/Header" +msgid "About this Funkwhale pod" +msgstr "A prepaus d’aqueste pod Funkwhale" + +#: front/src/components/About.vue:21 src/components/About.vue:51 +msgctxt "Content/About/Header" +msgid "About this pod" +msgstr "A prepaus d’aqueste pod" #: front/src/views/content/libraries/Detail.vue:48 msgctxt "Content/Library/Button.Label" @@ -183,96 +250,87 @@ msgctxt "Content/Library/Table/Short" msgid "Accepted" msgstr "Acceptat" -#: front/src/components/auth/SubsonicTokenForm.vue:110 +#: front/src/components/auth/SubsonicTokenForm.vue:117 msgctxt "Content/Settings/Message" msgid "Access disabled" msgstr "Accès desactivat" -#: front/src/components/mixins/Translations.vue:73 -#: front/src/components/mixins/Translations.vue:74 +#: front/src/components/mixins/Translations.vue:85 +#: front/src/components/mixins/Translations.vue:86 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to audio files, libraries, artists, albums and tracks" msgstr "Accès als fichièrs à udio, bibliotècas, artistas, albums e pistas" -#: front/src/components/mixins/Translations.vue:97 -#: front/src/components/mixins/Translations.vue:98 +#: front/src/components/mixins/Translations.vue:109 +#: front/src/components/mixins/Translations.vue:110 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to content filters" msgstr "Accès als filtre de contengut" -#: front/src/components/mixins/Translations.vue:105 -#: front/src/components/mixins/Translations.vue:106 +#: front/src/components/mixins/Translations.vue:117 +#: front/src/components/mixins/Translations.vue:118 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to edits" msgstr "Accès a las modificacions" -#: front/src/components/mixins/Translations.vue:69 -#: front/src/components/mixins/Translations.vue:70 +#: front/src/components/mixins/Translations.vue:81 +#: front/src/components/mixins/Translations.vue:82 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to email, username, and profile information" msgstr "Accès als corrièls, nom d’utilizaire e informacions del perfil" -#: front/src/components/mixins/Translations.vue:77 -#: front/src/components/mixins/Translations.vue:78 +#: front/src/components/mixins/Translations.vue:89 +#: front/src/components/mixins/Translations.vue:90 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to favorites" msgstr "Accès als favorits" -#: front/src/components/mixins/Translations.vue:85 -#: front/src/components/mixins/Translations.vue:86 +#: front/src/components/mixins/Translations.vue:97 +#: front/src/components/mixins/Translations.vue:98 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to follows" msgstr "Accès al seguiment" -#: front/src/components/mixins/Translations.vue:81 -#: front/src/components/mixins/Translations.vue:82 +#: front/src/components/mixins/Translations.vue:93 +#: front/src/components/mixins/Translations.vue:94 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to listening history" msgstr "Accès a l’istoric d’escota" -#: front/src/components/mixins/Translations.vue:101 -#: front/src/components/mixins/Translations.vue:102 +#: front/src/components/mixins/Translations.vue:113 +#: front/src/components/mixins/Translations.vue:114 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to notifications" msgstr "Accès a las notificacions" -#: front/src/components/mixins/Translations.vue:89 -#: front/src/components/mixins/Translations.vue:90 +#: front/src/components/mixins/Translations.vue:101 +#: front/src/components/mixins/Translations.vue:102 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to playlists" msgstr "Accès a las listas de lectura" -#: front/src/components/mixins/Translations.vue:93 -#: front/src/components/mixins/Translations.vue:94 +#: front/src/components/mixins/Translations.vue:105 +#: front/src/components/mixins/Translations.vue:106 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to radios" msgstr "Accès a las rà dios" -#: front/src/components/Home.vue:101 -msgctxt "Content/Home/List item" -msgid "" -"Access your music from a clean interface that focuses on what really matters" -msgstr "" -"Accedissètz a vòstra musica d’una interfà cia afinada estant, adaptada a çò " -"que compta vertadièrament" - #: front/src/components/manage/library/UploadsTable.vue:67 -#: front/src/components/mixins/Translations.vue:45 +#: front/src/components/mixins/Translations.vue:55 #: front/src/views/admin/library/UploadDetail.vue:175 -#: front/src/components/mixins/Translations.vue:46 +#: front/src/components/mixins/Translations.vue:56 msgctxt "Content/*/*/Noun" msgid "Accessed date" msgstr "Data d’accès" -#: front/src/views/admin/library/LibraryDetail.vue:104 -#: front/src/views/admin/library/UploadDetail.vue:111 -msgctxt "*/*/*/Noun" -msgid "Account" -msgstr "Compte" - #: front/src/components/manage/library/LibrariesTable.vue:49 #: front/src/components/manage/library/UploadsTable.vue:61 -msgctxt "*/*/*" +#: front/src/components/manage/moderation/ReportCard.vue:156 +#: front/src/components/mixins/Report.vue:13 +#: front/src/views/admin/library/LibraryDetail.vue:113 +#: front/src/views/admin/library/UploadDetail.vue:111 +#: front/src/components/mixins/Report.vue:14 +msgctxt "*/*/*/Noun" msgid "Account" msgstr "Compte" @@ -286,7 +344,7 @@ msgctxt "Content/Settings/Title" msgid "Account settings" msgstr "Paramètres del compte" -#: front/src/components/auth/Settings.vue:479 +#: front/src/components/auth/Settings.vue:544 msgctxt "Head/Settings/Title" msgid "Account Settings" msgstr "Paramètres del compte" @@ -303,7 +361,7 @@ msgstr "Adreça electronica del compte" #: front/src/views/admin/moderation/AccountsList.vue:3 #: front/src/views/admin/moderation/AccountsList.vue:24 -#: front/src/views/admin/moderation/Base.vue:8 +#: front/src/views/admin/moderation/Base.vue:11 msgctxt "*/Moderation/Title" msgid "Accounts" msgstr "Comptes" @@ -316,31 +374,30 @@ msgstr "Accion" #: front/src/components/common/ActionTable.vue:101 msgctxt "Content/*/Paragraph" msgid "Action %{ action } was launched successfully on %{ count } element" -msgid_plural "" -"Action %{ action } was launched successfully on %{ count } elements" -msgstr[0] "" -"L’action %{ action } es estada lançada corrèctament sus %{ count } element" -msgstr[1] "" -"L’action %{ action } es estada lançada corrèctament sus %{ count } elements" +msgid_plural "Action %{ action } was launched successfully on %{ count } elements" +msgstr[0] "L’action %{ action } es estada lançada corrèctament sus %{ count } element" +msgstr[1] "L’action %{ action } es estada lançada corrèctament sus %{ count } elements" #: front/src/components/common/ActionTable.vue:22 #: front/src/components/library/radios/Builder.vue:65 +#: front/src/components/manage/moderation/ReportCard.vue:210 msgctxt "Content/*/*/Noun" msgid "Actions" msgstr "Accions" -#: front/src/components/manage/users/UsersTable.vue:53 +#: front/src/components/manage/users/UsersTable.vue:54 msgctxt "Content/Admin/Table" msgid "Active" msgstr "Actiu" -#: front/src/views/admin/library/AlbumDetail.vue:134 -#: front/src/views/admin/library/ArtistDetail.vue:123 -#: front/src/views/admin/library/LibraryDetail.vue:138 -#: front/src/views/admin/library/TrackDetail.vue:186 +#: front/src/views/admin/library/AlbumDetail.vue:140 +#: front/src/views/admin/library/ArtistDetail.vue:128 +#: front/src/views/admin/library/LibraryDetail.vue:147 +#: front/src/views/admin/library/TagDetail.vue:83 +#: front/src/views/admin/library/TrackDetail.vue:192 #: front/src/views/admin/library/UploadDetail.vue:160 -#: front/src/views/admin/moderation/AccountsDetail.vue:220 -#: front/src/views/admin/moderation/DomainsDetail.vue:136 +#: front/src/views/admin/moderation/AccountsDetail.vue:221 +#: front/src/views/admin/moderation/DomainsDetail.vue:173 msgctxt "Content/Moderation/Title" msgid "Activity" msgstr "Activitat" @@ -351,7 +408,7 @@ msgctxt "Content/Settings/Dropdown.Label/Noun" msgid "Activity visibility" msgstr "Visibilitat de l’activitat" -#: front/src/views/admin/moderation/DomainsList.vue:18 +#: front/src/views/admin/moderation/DomainsList.vue:22 msgctxt "Content/Moderation/Button/Verb" msgid "Add" msgstr "Ajustar" @@ -397,7 +454,19 @@ msgctxt "Content/Radio/Paragraph" msgid "Add filters to customize your radio" msgstr "Ajustar de filtres per dire de personalizar vòstra rà dio" -#: front/src/components/audio/PlayButton.vue:75 +#: front/src/components/manage/moderation/NoteForm.vue:12 +msgctxt "Content/Moderation/Button.Label/Verb" +msgid "Add note" +msgstr "Ajustar una nòta" + +#: front/src/components/manage/moderation/DomainsTable.vue:191 +#: front/src/views/admin/moderation/DomainsDetail.vue:46 +#: front/src/views/admin/moderation/DomainsList.vue:18 +msgctxt "Content/Moderation/Action/Verb" +msgid "Add to allow-list" +msgstr "Ajustar a la lista d’autorizacion" + +#: front/src/components/audio/PlayButton.vue:91 msgctxt "*/Queue/Dropdown/Button/Title" msgid "Add to current queue" msgstr "Ajustar a la lista actuala" @@ -429,7 +498,7 @@ msgctxt "Popup/Playlist/Table.Button.Label/Verb" msgid "Add track" msgstr "Ajustar una pista" -#: front/src/components/manage/users/UsersTable.vue:69 +#: front/src/components/manage/users/UsersTable.vue:70 msgctxt "Content/Admin/Table.User role" msgid "Admin" msgstr "Admin" @@ -439,49 +508,49 @@ msgctxt "Sidebar/Admin/Title/Noun" msgid "Administration" msgstr "Administracion" -#: front/src/views/admin/library/TrackDetail.vue:107 -msgctxt "*/*/*/Noun" -msgid "Album" -msgstr "Album" - -#: front/src/components/audio/SearchBar.vue:26 +#: front/src/components/audio/SearchBar.vue:33 #: src/components/audio/track/Table.vue:9 -#: front/src/components/library/AlbumBase.vue:152 -#: front/src/components/library/ArtistBase.vue:194 +#: front/src/components/library/AlbumBase.vue:170 +#: front/src/components/library/ArtistBase.vue:212 #: front/src/components/manage/library/TracksTable.vue:40 #: front/src/components/metadata/Search.vue:134 +#: src/components/mixins/Report.vue:41 +#: front/src/views/admin/library/TrackDetail.vue:113 #: front/src/views/content/libraries/FilesTable.vue:57 +#: front/src/components/mixins/Report.vue:42 msgctxt "*/*/*" msgid "Album" msgstr "Album" -#: front/src/views/admin/library/TrackDetail.vue:128 +#: front/src/views/admin/library/TrackDetail.vue:134 msgctxt "*/*/*/Noun" msgid "Album artist" msgstr "Artista d’aqueste album" -#: front/src/views/admin/library/AlbumDetail.vue:92 +#: front/src/views/admin/library/AlbumDetail.vue:98 msgctxt "Content/Moderation/Title" msgid "Album data" msgstr "Donadas de l’album" -#: front/src/components/mixins/Translations.vue:51 -#: front/src/components/mixins/Translations.vue:52 +#: front/src/components/mixins/Translations.vue:61 +#: front/src/components/mixins/Translations.vue:62 msgctxt "Content/*/Dropdown/Noun" msgid "Album name" msgstr "Nom de l’album" #: front/src/components/audio/Search.vue:19 -#: src/components/instance/Stats.vue:48 -#: front/src/components/library/Albums.vue:120 -#: src/components/library/Library.vue:7 +#: src/components/library/Albums.vue:129 +#: front/src/components/library/Library.vue:7 +#: src/components/library/TagDetail.vue:28 #: front/src/components/manage/library/ArtistsTable.vue:41 +#: front/src/components/manage/library/TagsTable.vue:43 #: front/src/views/admin/library/AlbumsList.vue:24 -#: front/src/views/admin/library/ArtistDetail.vue:241 +#: front/src/views/admin/library/ArtistDetail.vue:256 #: front/src/views/admin/library/Base.vue:11 -#: front/src/views/admin/library/LibraryDetail.vue:219 -#: front/src/views/admin/moderation/AccountsDetail.vue:354 -#: front/src/views/admin/moderation/DomainsDetail.vue:264 +#: front/src/views/admin/library/LibraryDetail.vue:238 +#: front/src/views/admin/library/TagDetail.vue:133 +#: front/src/views/admin/moderation/AccountsDetail.vue:366 +#: front/src/views/admin/moderation/DomainsDetail.vue:301 msgctxt "*/*/*" msgid "Albums" msgstr "Albums" @@ -495,7 +564,10 @@ msgstr "Albums d’aqueste artista" #: front/src/components/manage/library/LibrariesTable.vue:13 #: front/src/components/manage/library/UploadsTable.vue:13 #: front/src/components/manage/library/UploadsTable.vue:22 +#: front/src/components/manage/moderation/DomainsTable.vue:11 #: front/src/components/manage/users/InvitationsTable.vue:19 +#: front/src/components/moderation/ReportCategoryDropdown.vue:32 +#: front/src/views/admin/moderation/ReportsList.vue:17 #: front/src/views/content/libraries/FilesTable.vue:13 msgctxt "Content/*/Dropdown" msgid "All" @@ -513,44 +585,51 @@ msgctxt "Head/Authorize/Title" msgid "Allow application" msgstr "Autorizar l’aplicacion" +#: front/src/components/About.vue:136 +msgctxt "*/*/*" +msgid "Allow-list" +msgstr "Lista d’autorizacions" + +#: front/src/components/About.vue:149 +msgctxt "*/*/*" +msgid "Allowed domains" +msgstr "Domenis autorizats" + #: front/src/components/library/ImportStatusModal.vue:17 msgctxt "Popup/Import/Message" -msgid "" -"An error occured during upload processing. You will find more information " -"below." -msgstr "" -"Una error s’es producha pendent lo processús de mandadÃs. Trobaretz mai " -"d’informacion çai-jos." +msgid "An error occurred during upload processing. You will find more information below." +msgstr "Una error s’es producha pendent lo processús de mandadÃs. Trobaretz mai d’informacion çai-jos." #: front/src/components/playlists/Editor.vue:13 msgctxt "Content/Playlist/Error message.Title" -msgid "An error occured while saving your changes" +msgid "An error occurred while saving your changes" msgstr "Una error s’es producha en enregistrar vòstras modificacions" #: front/src/components/federation/FetchButton.vue:21 msgctxt "Popup/*/Message.Content" -msgid "An error occured while trying to refresh data:" +msgid "An error occurred while trying to refresh data:" msgstr "Una error s’es producha en actualizar las donadas :" #: front/src/components/federation/FetchButton.vue:41 msgctxt "*/*/Error" -msgid "An HTTP error occured while contacting the remote server" +msgid "An HTTP error occurred while contacting the remote server" msgstr "Una error HTTP s’es producha en contactar lo servidor alonhat" -#: front/src/components/auth/Login.vue:10 -msgctxt "Content/Login/Error message/List item" -msgid "" -"An unknown error happend, this can mean the server is down or cannot be " -"reached" -msgstr "" -"Una error desconeguda encontrada, aquò pòt significar que lo servidor es " -"fòra servici o pòt pas èsser atengut" - #: front/src/components/library/ImportStatusModal.vue:145 msgctxt "Popup/Import/Error.Label" -msgid "An unkwown error occured" +msgid "An unknown error occurred" msgstr "Una error desconeguda s’es producha" +#: front/src/components/About.vue:123 +msgctxt "*/*/*" +msgid "Anonymous access" +msgstr "Accès anonim" + +#: front/src/components/moderation/ReportModal.vue:54 +msgctxt "Popup/Moderation/Error message" +msgid "Anonymous reports are disabled, please sign-in to submit a report." +msgstr "Los senhalaments anonims son desactivats, marcatz-vos per realizar un senhalament." + #: front/src/components/auth/Settings.vue:175 #: src/components/auth/Settings.vue:225 msgctxt "*/*/*/Noun" @@ -569,12 +648,8 @@ msgstr "ID de l’aplicacion" #: front/src/components/auth/ApplicationEdit.vue:16 msgctxt "Content/Application/Paragraph/" -msgid "" -"Application ID and secret are really sensitive values and must be treated " -"like passwords. Do not share those with anyone else." -msgstr "" -"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." +msgid "Application ID and secret are really sensitive values and must be treated like passwords. Do not share those with anyone else." +msgstr "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." #: front/src/components/auth/ApplicationEdit.vue:25 msgctxt "Content/Applications/Label" @@ -603,29 +678,27 @@ msgctxt "Content/Login/Title" msgid "Are you sure you want to log out?" msgstr "Volètz vertadièrament vos desconnectar ?" +#: front/src/components/audio/SearchBar.vue:32 +#: src/components/audio/track/Table.vue:8 #: front/src/components/manage/library/AlbumsTable.vue:40 #: front/src/components/manage/library/TracksTable.vue:41 -msgctxt "*/*/*" -msgid "Artist" -msgstr "Artista" - -#: front/src/components/audio/SearchBar.vue:25 -#: src/components/audio/track/Table.vue:8 #: front/src/components/metadata/Search.vue:130 -#: front/src/views/admin/library/AlbumDetail.vue:108 -#: front/src/views/admin/library/TrackDetail.vue:118 -#: front/src/views/content/libraries/FilesTable.vue:56 +#: src/components/mixins/Report.vue:55 +#: front/src/views/admin/library/AlbumDetail.vue:114 +#: front/src/views/admin/library/TrackDetail.vue:124 +#: front/src/views/content/libraries/FilesTable.vue:56 src/entities.js:12 +#: front/src/components/mixins/Report.vue:56 msgctxt "*/*/*/Noun" msgid "Artist" msgstr "Artista" -#: front/src/views/admin/library/ArtistDetail.vue:91 +#: front/src/views/admin/library/ArtistDetail.vue:96 msgctxt "Content/Moderation/Title" msgid "Artist data" msgstr "Donadas de l’artista" -#: front/src/components/mixins/Translations.vue:52 -#: front/src/components/mixins/Translations.vue:53 +#: front/src/components/mixins/Translations.vue:62 +#: front/src/components/mixins/Translations.vue:63 msgctxt "Content/*/Dropdown/Noun" msgid "Artist name" msgstr "Nom de l’artista" @@ -635,36 +708,36 @@ msgctxt "*/Search/Input.Placeholder" msgid "Artist, album, track…" msgstr "Artista, album, pista…" +#: front/src/components/audio/Search.vue:10 +#: src/components/library/Artists.vue:117 +#: front/src/components/library/Library.vue:10 +#: front/src/components/library/TagDetail.vue:19 +#: front/src/components/manage/library/TagsTable.vue:42 #: front/src/views/admin/library/ArtistsList.vue:24 #: front/src/views/admin/library/Base.vue:8 -#: front/src/views/admin/library/LibraryDetail.vue:209 -msgctxt "*/*/*" -msgid "Artists" -msgstr "Artistas" - -#: front/src/components/audio/Search.vue:10 -#: src/components/instance/Stats.vue:42 -#: front/src/components/library/Artists.vue:117 -#: src/components/library/Library.vue:10 -#: front/src/views/admin/moderation/AccountsDetail.vue:346 -#: front/src/views/admin/moderation/DomainsDetail.vue:254 +#: front/src/views/admin/library/LibraryDetail.vue:228 +#: front/src/views/admin/library/TagDetail.vue:123 +#: front/src/views/admin/moderation/AccountsDetail.vue:358 +#: front/src/views/admin/moderation/DomainsDetail.vue:291 msgctxt "*/*/*/Noun" msgid "Artists" msgstr "Artistas" #: front/src/components/favorites/List.vue:34 -#: src/components/library/Albums.vue:25 -#: front/src/components/library/Artists.vue:25 +#: src/components/library/Albums.vue:29 +#: front/src/components/library/Artists.vue:29 #: src/components/library/Radios.vue:44 #: front/src/components/manage/library/AlbumsTable.vue:21 #: front/src/components/manage/library/ArtistsTable.vue:21 #: front/src/components/manage/library/EditsCardList.vue:39 #: front/src/components/manage/library/LibrariesTable.vue:30 +#: front/src/components/manage/library/TagsTable.vue:21 #: front/src/components/manage/library/TracksTable.vue:21 #: front/src/components/manage/library/UploadsTable.vue:40 #: front/src/components/manage/moderation/AccountsTable.vue:21 -#: front/src/components/manage/moderation/DomainsTable.vue:19 +#: front/src/components/manage/moderation/DomainsTable.vue:27 #: front/src/components/manage/users/UsersTable.vue:19 +#: front/src/views/admin/moderation/ReportsList.vue:44 #: front/src/views/content/libraries/FilesTable.vue:31 #: front/src/views/playlists/List.vue:27 msgctxt "Content/Search/Dropdown" @@ -676,18 +749,24 @@ msgctxt "Content/Signup/Button.Label/Verb" msgid "Ask for a password reset" msgstr "Demandar un nòu senhal" -#: front/src/views/admin/library/AlbumDetail.vue:198 -#: front/src/views/admin/library/ArtistDetail.vue:187 -#: front/src/views/admin/library/LibraryDetail.vue:176 -#: front/src/views/admin/library/TrackDetail.vue:250 +#: front/src/components/manage/moderation/ReportCard.vue:72 +msgctxt "Content/Moderation/*" +msgid "Assigned to" +msgstr "Atribuit a" + +#: front/src/views/admin/library/AlbumDetail.vue:214 +#: front/src/views/admin/library/ArtistDetail.vue:202 +#: front/src/views/admin/library/LibraryDetail.vue:195 +#: front/src/views/admin/library/TagDetail.vue:113 +#: front/src/views/admin/library/TrackDetail.vue:266 #: front/src/views/admin/library/UploadDetail.vue:191 -#: front/src/views/admin/moderation/AccountsDetail.vue:274 -#: front/src/views/admin/moderation/DomainsDetail.vue:202 +#: front/src/views/admin/moderation/AccountsDetail.vue:285 +#: front/src/views/admin/moderation/DomainsDetail.vue:239 msgctxt "Content/Moderation/Title" msgid "Audio content" msgstr "Contengut à udio" -#: front/src/components/ShortcutsModal.vue:55 +#: front/src/components/ShortcutsModal.vue:92 msgctxt "Popup/Keyboard shortcuts/Title" msgid "Audio player shortcuts" msgstr "Acorchis del lector à udio" @@ -730,9 +809,9 @@ msgid "Back to settings" msgstr "Tornar als paramètres" #: front/src/components/library/TrackDetail.vue:48 -#: front/src/components/mixins/Translations.vue:55 +#: front/src/components/mixins/Translations.vue:67 #: front/src/views/admin/library/UploadDetail.vue:227 -#: front/src/components/mixins/Translations.vue:56 +#: front/src/components/mixins/Translations.vue:68 msgctxt "Content/Track/*/Noun" msgid "Bitrate" msgstr "Debit" @@ -745,14 +824,8 @@ msgstr "O blocar tot" #: front/src/components/manage/moderation/InstancePolicyForm.vue:112 msgctxt "Content/Moderation/Help text" -msgid "" -"Block everything from this account or domain. This will prevent any " -"interaction with the entity, and purge related content (uploads, libraries, " -"follows, etc.)" -msgstr "" -"O blocar tot d’aqueste compte estant. Empacharà totas interaccion amb " -"l’entitat e purgarà lo contengut ligat (pistas, bibliotèca, seguiments, " -"etc.)" +msgid "Block everything from this account or domain. This will prevent any interaction with the entity, and purge related content (uploads, libraries, follows, etc.)" +msgstr "O blocar tot d’aqueste compte estant. Empacharà totas interaccion amb l’entitat e purgarà lo contengut ligat (pistas, bibliotèca, seguiments, etc.)" #: front/src/components/Sidebar.vue:18 src/components/library/Library.vue:4 msgctxt "*/Library/*/Verb" @@ -764,6 +837,11 @@ msgctxt "Sidebar/Library/List item.Link/Verb" msgid "Browse library" msgstr "Percórrer la bibliotèca" +#: front/src/components/Home.vue:132 +msgctxt "Content/Home/Link" +msgid "Browse public content" +msgstr "Percórrer lo contengut public" + #: front/src/components/library/Albums.vue:4 msgctxt "Content/Album/Title" msgid "Browsing albums" @@ -794,43 +872,43 @@ msgctxt "Content/Album/Card" msgid "By %{ artist }" msgstr "De %{ artist }" -#: front/src/views/content/remote/Card.vue:112 +#: front/src/views/content/remote/Card.vue:125 msgctxt "Popup/Library/Paragraph" msgid "By unfollowing this library, you loose access to its content." -msgstr "" -"En quitar de seguir aquesta bibliotèca, perdretz l’accès a son contengut." +msgstr "En quitar de seguir aquesta bibliotèca, perdretz l’accès a son contengut." -#: front/src/views/admin/library/AlbumDetail.vue:214 -#: front/src/views/admin/library/ArtistDetail.vue:203 -#: front/src/views/admin/library/LibraryDetail.vue:192 -#: front/src/views/admin/library/TrackDetail.vue:266 +#: front/src/views/admin/library/AlbumDetail.vue:230 +#: front/src/views/admin/library/ArtistDetail.vue:218 +#: front/src/views/admin/library/LibraryDetail.vue:211 +#: front/src/views/admin/library/TrackDetail.vue:282 #: front/src/views/admin/library/UploadDetail.vue:208 -#: front/src/views/admin/moderation/AccountsDetail.vue:290 -#: front/src/views/admin/moderation/DomainsDetail.vue:217 +#: front/src/views/admin/moderation/AccountsDetail.vue:301 +#: front/src/views/admin/moderation/DomainsDetail.vue:254 msgctxt "Content/Moderation/Table.Label/Noun" msgid "Cached size" msgstr "Talha del cache" #: front/src/components/SetInstanceModal.vue:37 #: front/src/components/common/DangerousButton.vue:17 -#: front/src/components/library/AlbumBase.vue:36 -#: front/src/components/library/ArtistBase.vue:47 -#: front/src/components/library/EditForm.vue:95 -#: front/src/components/library/TrackBase.vue:55 +#: front/src/components/library/AlbumBase.vue:37 +#: front/src/components/library/ArtistBase.vue:48 +#: front/src/components/library/EditForm.vue:107 +#: front/src/components/library/TrackBase.vue:53 #: front/src/components/library/radios/Filter.vue:53 #: front/src/components/manage/moderation/InstancePolicyForm.vue:54 #: front/src/components/moderation/FilterModal.vue:39 +#: front/src/components/moderation/ReportModal.vue:59 #: front/src/components/playlists/PlaylistModal.vue:26 #: front/src/components/playlists/PlaylistModal.vue:77 +#: front/src/views/playlists/Detail.vue:62 msgctxt "*/*/Button.Label/Verb" msgid "Cancel" msgstr "Anullar" -#: front/src/views/content/remote/Card.vue:97 -#, fuzzy +#: front/src/views/content/remote/Card.vue:110 msgctxt "Content/Library/Card.Paragraph" msgid "Cancel follow request" -msgstr "Demandas d’abonament en espèra" +msgstr "Anullar lad emanda d’abonament" #: front/src/components/library/radios/Builder.vue:64 msgctxt "Content/Radio/Table.Label/Noun (Value is a number of Tracks)" @@ -842,6 +920,14 @@ msgctxt "Content/Library/Help text" msgid "Cannot upload this file, ensure it is not too big" msgstr "MandadÃs del fichièr impossible, asseguratz-vos qu’es pas tròp pesuc" +#: front/src/components/manage/moderation/ReportCard.vue:30 +#: front/src/components/mixins/Translations.vue:42 +#: front/src/components/moderation/ReportCategoryDropdown.vue:2 +#: front/src/components/mixins/Translations.vue:43 +msgctxt "*/*/*" +msgid "Category" +msgstr "Categoria" + #: front/src/components/Footer.vue:21 msgctxt "Footer/Settings/Dropdown.Label/Short, Verb" msgid "Change language" @@ -857,6 +943,11 @@ msgctxt "Content/Settings/Button.Label" msgid "Change password" msgstr "Cambiar lo senhal" +#: front/src/components/Footer.vue:37 +msgctxt "Footer/Settings/Dropdown.Label/Short, Verb" +msgid "Change theme" +msgstr "Cambiar lo tèma" + #: front/src/views/auth/PasswordResetConfirm.vue:62 msgctxt "*/Signup/Title" msgid "Change your password" @@ -874,43 +965,32 @@ msgstr "Cambiament sincronizat amb lo servidor" #: front/src/components/auth/Settings.vue:71 msgctxt "Content/Settings/Paragraph'" -msgid "" -"Changing your password will also change your Subsonic API password if you " -"have requested one." -msgstr "" -"L’actualizacion de vòstra senhal cambiarà tanben lo de l’API Subsonic se " -"n’avètz un." +msgid "Changing your password will also change your Subsonic API password if you have requested one." +msgstr "L’actualizacion de vòstra senhal cambiarà tanben lo de l’API Subsonic se n’avètz un." #: front/src/components/auth/Settings.vue:98 msgctxt "Popup/Settings/Paragraph" msgid "Changing your password will have the following consequences:" msgstr "Lo cambiament de senhal a las consequéncias seguentas :" -#: front/src/components/Footer.vue:40 +#: front/src/components/Footer.vue:48 msgctxt "Footer/*/List item.Link" msgid "Chat room" msgstr "Sala de discutida" #: front/src/components/auth/ApplicationForm.vue:24 msgctxt "Content/Applications/Paragraph/" -msgid "" -"Checking the parent \"Read\" or \"Write\" scopes implies access to all the " -"corresponding children scopes." -msgstr "" -"Causir l’autorizacion «Lectura» o «Escritura» sul parent implica l’accès a " -"totes los jos elements correspondents." +msgid "Checking the parent \"Read\" or \"Write\" scopes implies access to all the corresponding children scopes." +msgstr "Causir l’autorizacion «Lectura» o «Escritura» sul parent implica l’accès a totes los jos elements correspondents." #: front/src/components/SetInstanceModal.vue:2 msgctxt "Popup/Instance/Title" msgid "Choose your instance" msgstr "Causissètz vòstra instà ncia" -#: front/src/components/manage/users/InvitationForm.vue:37 -msgctxt "Content/Admin/Button.Label/Verb" -msgid "Clear" -msgstr "Escafar" - #: front/src/components/library/EditForm.vue:75 +#: front/src/components/library/EditForm.vue:88 +#: front/src/components/manage/users/InvitationForm.vue:37 msgctxt "Content/Library/Button.Label" msgid "Clear" msgstr "Escafar" @@ -921,47 +1001,45 @@ msgctxt "*/Playlist/Button.Label/Verb" msgid "Clear playlist" msgstr "Escafar la lista de lectura" -#: front/src/components/audio/Player.vue:642 +#: front/src/components/ShortcutsModal.vue:144 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Clear queue" +msgstr "Voidar la fila" + +#: front/src/components/audio/Player.vue:668 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Clear your queue" msgstr "Voidar la fila" -#: front/src/components/Home.vue:44 -msgctxt "Content/Home/List item/Verb" -msgid "Click once, listen for hours using built-in radios" -msgstr "Amb un clic, escotatz d’oras de musica a la rà dio" - #: front/src/components/mixins/Translations.vue:21 #: front/src/components/mixins/Translations.vue:22 msgctxt "Content/Library/Link.Title" -msgid "" -"Click to display more information about the import process for this upload" -msgstr "" -"Clicar per mostrar mai d’informacion tocant lo processús d’import d’aqueste " -"mandadÃs" +msgid "Click to display more information about the import process for this upload" +msgstr "Clicar per mostrar mai d’informacion tocant lo processús d’import d’aqueste mandadÃs" #: front/src/components/library/FileUpload.vue:82 msgctxt "Content/Library/Paragraph/Call to action" msgid "Click to select files to upload or drag and drop files or directories" -msgstr "" -"Clicatz per causir los fichièrs d’enviar o lisatz los fichièrs o repertòris" +msgstr "Clicatz per causir los fichièrs d’enviar o lisatz los fichièrs o repertòris" +#: front/src/components/ShortcutsModal.vue:38 #: front/src/components/federation/FetchButton.vue:85 #: front/src/components/library/ImportStatusModal.vue:79 +#: front/src/components/manage/moderation/InstancePolicyModal.vue:34 msgctxt "*/*/Button.Label/Verb" msgid "Close" msgstr "Tampar" -#: front/src/components/ShortcutsModal.vue:20 -msgctxt "Popup/Keyboard shortcuts/Button.Label/Verb" -msgid "Close" -msgstr "Tampar" - #: front/src/components/federation/FetchButton.vue:88 msgctxt "*/*/Button.Label/Verb" msgid "Close and reload page" msgstr "Tampar e tornar cargar la pagina" +#: front/src/components/About.vue:94 +msgctxt "*/*/*/State of registrations" +msgid "Closed" +msgstr "Tampadas" + #: front/src/components/manage/users/InvitationForm.vue:26 #: front/src/components/manage/users/InvitationsTable.vue:42 msgctxt "Content/Admin/Table.Label/Noun" @@ -969,8 +1047,8 @@ msgid "Code" msgstr "Còdi" #: front/src/components/audio/album/Card.vue:41 -#: front/src/components/audio/artist/Card.vue:33 -msgctxt "Content/*/Card.Link/Verb" +#: front/src/components/common/CollapseLink.vue:3 +msgctxt "*/*/Button,Label" msgid "Collapse" msgstr "Plegar" @@ -994,44 +1072,46 @@ msgctxt "Content/Signup/Form.Label" msgid "Confirmation code" msgstr "Còdi de confirmacion" +#: front/src/components/About.vue:67 src/components/Home.vue:65 +msgctxt "Content/Home/Header/Name" +msgid "Contact" +msgstr "Contacte" + #: front/src/components/moderation/FilterModal.vue:90 msgctxt "*/Moderation/Message" msgid "Content filter successfully added" msgstr "Filtre de contengut corrèctament ajustat" -#: front/src/components/mixins/Translations.vue:96 -#: front/src/components/mixins/Translations.vue:97 -msgctxt "Content/OAuth Scopes/Label" -msgid "Content filters" -msgstr "Filtres de contengut" - #: front/src/components/auth/Settings.vue:116 +#: front/src/components/mixins/Translations.vue:108 +#: front/src/components/mixins/Translations.vue:109 msgctxt "Content/Settings/Title/Noun" msgid "Content filters" msgstr "Filtres de contengut" #: front/src/components/auth/Settings.vue:119 msgctxt "Content/Settings/Paragraph" -msgid "" -"Content filters help you hide content you don't want to see on the service." -msgstr "" -"Los filtres de contengut vos ajudan a amagar los contenguts que volètz pas " -"veire sus aqueste servici." +msgid "Content filters help you hide content you don't want to see on the service." +msgstr "Los filtres de contengut vos ajudan a amagar los contenguts que volètz pas veire sus aqueste servici." #: front/src/components/common/ActionTable.vue:8 msgctxt "Content/*/Button.Help text.Paragraph" msgid "Content have been updated, click refresh to see up-to-date content" -msgstr "" -"Lo contengut es estat actualizat, clicar per tornar cargar e veire lo " -"contengut a jorn" +msgstr "Lo contengut es estat actualizat, clicar per tornar cargar e veire lo contengut a jorn" -#: front/src/components/Footer.vue:48 +#: front/src/components/About.vue:46 +msgctxt "Content/About/Header" +msgid "Contents" +msgstr "Contengut" + +#: front/src/components/Footer.vue:56 msgctxt "Footer/*/List item.Link" msgid "Contribute" msgstr "Contribuir" -#: front/src/components/audio/EmbedWizard.vue:19 +#: front/src/components/audio/EmbedWizard.vue:29 #: front/src/components/common/CopyInput.vue:8 +#: front/src/components/forms/PasswordInput.vue:43 msgctxt "*/*/Button.Label/Short, Verb" msgid "Copy" msgstr "Copiar" @@ -1046,14 +1126,14 @@ msgctxt "Content/Auth/Paragraph" msgid "Copy-paste the following code in the application:" msgstr "Copiatz-pegatz lo còdi seguent dins l’aplicacion :" -#: front/src/components/audio/EmbedWizard.vue:21 +#: front/src/components/audio/EmbedWizard.vue:31 msgctxt "Popup/Embed/Paragraph" msgid "Copy/paste this code in your website HTML" msgstr "Copiatz / Pegatz aqueste còdi al vòstre site HTML" #: front/src/components/library/TrackDetail.vue:10 -#: front/src/views/admin/library/TrackDetail.vue:153 -msgctxt "Content/Track/Table.Label/Noun" +#: front/src/views/admin/library/TrackDetail.vue:159 src/edits.js:77 +msgctxt "Content/Track/*/Noun" msgid "Copyright" msgstr "Copyright" @@ -1067,29 +1147,20 @@ msgctxt "Content/Library/Error message.Title" msgid "Could not fetch remote library" msgstr "Error en recuperar la bibliotèca alonhada" -#: front/src/components/Home.vue:80 -msgctxt "Content/Home/List item" -msgid "Covers, lyrics, our goal is to have them all ;)" -msgstr "Jaqueta d’albums, paraulas, nòstra tòca es d’o aver tot ;)" - #: front/src/components/manage/moderation/InstancePolicyForm.vue:58 msgctxt "Content/Moderation/Card.Button.Label/Verb" msgid "Create" msgstr "Crear" -#: front/src/components/auth/Signup.vue:4 +#: front/src/views/auth/Signup.vue:4 msgctxt "Content/Signup/Title" msgid "Create a funkwhale account" msgstr "Crear un compte funkwhale" -#: front/src/components/auth/Settings.vue:220 -msgctxt "Content/Settings/Button.Label" -msgid "Create a new application" -msgstr "Crear una nòva aplicacion" - #: front/src/components/auth/ApplicationNew.vue:8 #: front/src/components/auth/ApplicationNew.vue:41 -msgctxt "Content/Applications/Title" +#: front/src/components/auth/Settings.vue:220 +msgctxt "Content/Settings/Button.Label" msgid "Create a new application" msgstr "Crear una nòva aplicacion" @@ -1103,7 +1174,7 @@ msgctxt "Popup/Playlist/Title/Verb" msgid "Create a new playlist" msgstr "Crear una nòva lista de lectura" -#: front/src/components/Sidebar.vue:57 src/components/auth/Login.vue:17 +#: front/src/components/Sidebar.vue:57 src/components/auth/LoginForm.vue:15 msgctxt "*/Signup/Link/Verb" msgid "Create an account" msgstr "Crear un compte" @@ -1118,7 +1189,7 @@ msgctxt "Content/Library/Button.Label/Verb" msgid "Create library" msgstr "Crear una bibliotèca" -#: front/src/components/auth/Signup.vue:53 +#: front/src/components/auth/SignupForm.vue:49 msgctxt "Content/Signup/Button.Label" msgid "Create my account" msgstr "Crear mon compte" @@ -1143,11 +1214,13 @@ msgstr "Crear vòstra pròpria rà dio" #: front/src/components/manage/library/AlbumsTable.vue:44 #: front/src/components/manage/library/ArtistsTable.vue:43 #: front/src/components/manage/library/LibrariesTable.vue:54 +#: front/src/components/manage/library/TagsTable.vue:45 #: front/src/components/manage/library/TracksTable.vue:44 #: front/src/components/manage/library/UploadsTable.vue:66 +#: front/src/components/manage/moderation/ReportCard.vue:43 #: front/src/components/manage/users/InvitationsTable.vue:40 -#: front/src/components/mixins/Translations.vue:43 -#: front/src/components/mixins/Translations.vue:44 +#: front/src/components/mixins/Translations.vue:53 +#: front/src/components/mixins/Translations.vue:54 msgctxt "Content/*/*/Noun" msgid "Creation date" msgstr "Data de creacion" @@ -1157,6 +1230,11 @@ msgctxt "Content/Settings/Title/Noun" msgid "Current avatar" msgstr "Avatar actual" +#: front/src/components/admin/SettingsGroup.vue:67 +msgctxt "Content/Settings/Title/Noun" +msgid "Current image" +msgstr "Imatge actual" + #: front/src/views/content/libraries/DetailArea.vue:4 msgctxt "Content/Library/Title" msgid "Current library" @@ -1172,18 +1250,20 @@ msgctxt "Content/Library/Title" msgid "Current usage" msgstr "Utilizacion actuala" +#: front/src/components/Footer.vue:94 +msgctxt "Footer/Settings/Dropdown.Label/Theme name" +msgid "Dark" +msgstr "Escur" + #: front/src/components/federation/FetchButton.vue:53 msgctxt "*/*/Error" msgid "Data returned by the remote server had invalid or missing attributes" -msgstr "" -"Las donadas tornadas pel servidor alonhat an d’atributs mancants o invalids" +msgstr "Las donadas tornadas pel servidor alonhat an d’atributs mancants o invalids" #: front/src/components/federation/FetchButton.vue:17 msgctxt "Popup/*/Message.Content" msgid "Data was refreshed successfully from remote server." -msgstr "" -"Las donadas son estadas actualizadas corrèctament del servidors alonhat " -"estant." +msgstr "Las donadas son estadas actualizadas corrèctament del servidors alonhat estant." #: front/src/views/content/libraries/Detail.vue:27 msgctxt "Content/Library/Table.Label" @@ -1195,7 +1275,7 @@ msgctxt "Popup/Import/Table.Label/Noun" msgid "Debug information" msgstr "Informacions de debug" -#: front/src/components/ShortcutsModal.vue:75 +#: front/src/components/ShortcutsModal.vue:128 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Decrease volume" msgstr "Reduire lo volum" @@ -1207,23 +1287,29 @@ msgstr "Reduire lo volum" #: front/src/components/manage/library/AlbumsTable.vue:188 #: front/src/components/manage/library/ArtistsTable.vue:178 #: front/src/components/manage/library/LibrariesTable.vue:205 +#: front/src/components/manage/library/TagsTable.vue:179 #: front/src/components/manage/library/TracksTable.vue:188 #: front/src/components/manage/library/UploadsTable.vue:255 #: front/src/components/manage/moderation/InstancePolicyForm.vue:61 +#: front/src/components/manage/moderation/NotesThread.vue:24 +#: front/src/components/manage/moderation/NotesThread.vue:29 +#: front/src/components/manage/moderation/ReportCard.vue:360 #: front/src/components/manage/users/InvitationsTable.vue:167 -#: front/src/views/admin/library/AlbumDetail.vue:72 -#: front/src/views/admin/library/AlbumDetail.vue:77 -#: front/src/views/admin/library/ArtistDetail.vue:71 +#: front/src/views/admin/library/AlbumDetail.vue:78 +#: front/src/views/admin/library/AlbumDetail.vue:83 #: front/src/views/admin/library/ArtistDetail.vue:76 +#: front/src/views/admin/library/ArtistDetail.vue:81 #: front/src/views/admin/library/LibraryDetail.vue:58 #: front/src/views/admin/library/LibraryDetail.vue:63 -#: front/src/views/admin/library/TrackDetail.vue:71 -#: front/src/views/admin/library/TrackDetail.vue:76 +#: front/src/views/admin/library/TagDetail.vue:41 +#: front/src/views/admin/library/TagDetail.vue:46 +#: front/src/views/admin/library/TrackDetail.vue:77 +#: front/src/views/admin/library/TrackDetail.vue:82 #: front/src/views/admin/library/UploadDetail.vue:65 #: front/src/views/admin/library/UploadDetail.vue:70 #: front/src/views/content/libraries/FilesTable.vue:222 #: front/src/views/content/libraries/Form.vue:29 -#: src/views/playlists/Detail.vue:34 +#: src/views/playlists/Detail.vue:42 msgctxt "*/*/*/Verb" msgid "Delete" msgstr "Suprimir" @@ -1248,7 +1334,19 @@ msgctxt "Popup/Moderation/Button.Label/Verb" msgid "Delete moderation rule" msgstr "Suprimir la règla de moderacion" -#: front/src/views/playlists/Detail.vue:39 +#: front/src/components/auth/Settings.vue:274 +#: src/components/auth/Settings.vue:302 +#, fuzzy +msgctxt "*/*/Button.Label" +msgid "Delete my account" +msgstr "Suprimir mon compte" + +#: front/src/components/auth/Settings.vue:297 +msgctxt "*/*/Button.Label" +msgid "Delete my account…" +msgstr "Suprimir mon compte…" + +#: front/src/views/playlists/Detail.vue:47 msgctxt "Popup/Playlist/Button.Label/Verb" msgid "Delete playlist" msgstr "Suprimir la lista de lectura" @@ -1258,13 +1356,23 @@ msgctxt "Popup/Radio/Button.Label/Verb" msgid "Delete radio" msgstr "Suprimir la rà dio" -#: front/src/views/admin/library/AlbumDetail.vue:73 -#: front/src/views/admin/library/TrackDetail.vue:72 +#: front/src/components/manage/moderation/ReportCard.vue:357 +msgctxt "Content/Moderation/Button/Verb" +msgid "Delete reported object" +msgstr "Escafar l’objècte senhalat" + +#: front/src/components/manage/moderation/ReportCard.vue:358 +msgctxt "Content/Moderation/Popup/Header" +msgid "Delete reported object?" +msgstr "Escafar l’objècte senhalat ?" + +#: front/src/views/admin/library/AlbumDetail.vue:79 +#: front/src/views/admin/library/TrackDetail.vue:78 msgctxt "Popup/Library/Title" msgid "Delete this album?" msgstr "Suprimir aqueste album ?" -#: front/src/views/admin/library/ArtistDetail.vue:72 +#: front/src/views/admin/library/ArtistDetail.vue:77 msgctxt "Popup/Library/Title" msgid "Delete this artist?" msgstr "Suprimir aqueste artista ?" @@ -1280,60 +1388,69 @@ msgctxt "Popup/Moderation/Title" msgid "Delete this moderation rule?" msgstr "Suprimir aquesta règla de moderacion ?" +#: front/src/components/manage/moderation/NotesThread.vue:25 +msgctxt "Popup/Moderation/Title" +msgid "Delete this note?" +msgstr "Suprimir aqueste nòta ?" + #: front/src/components/library/EditCard.vue:94 msgctxt "Popup/Library/Title" msgid "Delete this suggestion?" msgstr "Suprimir aquesta règla de moderacion ?" +#: front/src/views/admin/library/TagDetail.vue:42 +msgctxt "Popup/Library/Title" +msgid "Delete this tag?" +msgstr "Suprimir aquesta etiqueta ?" + #: front/src/views/admin/library/UploadDetail.vue:66 msgctxt "Popup/Library/Title" msgid "Delete this upload?" msgstr "Suprimir aqueste mandadÃs ?" #: front/src/components/favorites/List.vue:35 -#: src/components/library/Albums.vue:26 -#: front/src/components/library/Artists.vue:26 +#: src/components/library/Albums.vue:30 +#: front/src/components/library/Artists.vue:30 #: src/components/library/Radios.vue:47 #: front/src/components/manage/library/AlbumsTable.vue:22 #: front/src/components/manage/library/ArtistsTable.vue:22 #: front/src/components/manage/library/EditsCardList.vue:40 #: front/src/components/manage/library/LibrariesTable.vue:31 +#: front/src/components/manage/library/TagsTable.vue:22 #: front/src/components/manage/library/TracksTable.vue:22 #: front/src/components/manage/library/UploadsTable.vue:41 #: front/src/components/manage/moderation/AccountsTable.vue:22 -#: front/src/components/manage/moderation/DomainsTable.vue:20 +#: front/src/components/manage/moderation/DomainsTable.vue:28 #: front/src/components/manage/users/UsersTable.vue:20 +#: front/src/views/admin/moderation/ReportsList.vue:45 #: front/src/views/content/libraries/FilesTable.vue:32 #: front/src/views/playlists/List.vue:28 msgctxt "Content/Search/Dropdown" msgid "Descending" msgstr "Descendent" -#: front/src/views/admin/library/LibraryDetail.vue:123 -msgctxt "*/*/*/Noun" -msgid "Description" -msgstr "Descripcion" +#: front/src/components/manage/moderation/NoteForm.vue:37 +msgctxt "Content/Moderation/Placeholder" +msgid "Describe what actions have been taken, or any other related updates…" +msgstr "Descrivètz quinas accions son estadas presas, o tota autra mesa a jorn ligada…" #: front/src/components/library/radios/Builder.vue:25 +#: front/src/views/admin/library/LibraryDetail.vue:132 #: front/src/views/content/libraries/Form.vue:14 -msgctxt "Content/*/Input.Label/Noun" +msgctxt "*/*/*/Noun" msgid "Description" msgstr "Descripcion" #: front/src/views/content/libraries/Card.vue:48 -#: src/views/content/remote/Card.vue:54 +#: src/views/content/remote/Card.vue:67 msgctxt "Content/Library/Card.Button.Label/Noun" msgid "Details" msgstr "Detalhs" -#: front/src/views/admin/moderation/AccountsDetail.vue:491 +#: front/src/views/admin/moderation/AccountsDetail.vue:511 msgctxt "Content/Moderation/Help text" -msgid "" -"Determine how much content the user can upload. Leave empty to use the " -"default value of the instance." -msgstr "" -"Definissètz la quantitat de contengut que l’utilizaire pòt enviar. Daissatz " -"void per emplegar las valors per defaut de l’instà ncia." +msgid "Determine how much content the user can upload. Leave empty to use the default value of the instance." +msgstr "Definissètz la quantitat de contengut que l’utilizaire pòt enviar. Daissatz void per emplegar las valors per defaut de l’instà ncia." #: front/src/components/mixins/Translations.vue:8 #: front/src/components/mixins/Translations.vue:9 @@ -1342,38 +1459,50 @@ msgid "Determine the visibility level of your activity" msgstr "Determinatz lo nivèl de visibilitat de vòstra activitat" #: front/src/components/auth/Settings.vue:104 -#: front/src/components/auth/SubsonicTokenForm.vue:51 +#: front/src/components/auth/SubsonicTokenForm.vue:56 msgctxt "Popup/Settings/Button.Label" msgid "Disable access" msgstr "Desactivar l’accès" -#: front/src/components/auth/SubsonicTokenForm.vue:48 +#: front/src/components/auth/SubsonicTokenForm.vue:53 msgctxt "Content/Settings/Button.Label/Verb" msgid "Disable Subsonic access" msgstr "Desactivar l’accès via Subsonic" -#: front/src/components/auth/SubsonicTokenForm.vue:49 +#: front/src/components/auth/SubsonicTokenForm.vue:54 msgctxt "Popup/Settings/Title" msgid "Disable Subsonic API access?" msgstr "Desactivar l’accès a l’API Subsonic ?" +#: front/src/components/About.vue:118 src/components/About.vue:131 +#: front/src/components/About.vue:144 #: front/src/components/manage/moderation/InstancePolicyForm.vue:18 #: front/src/views/admin/moderation/AccountsDetail.vue:157 #: front/src/views/admin/moderation/AccountsDetail.vue:161 -msgctxt "*/*/*" +msgctxt "*/*/*/State of feature" msgid "Disabled" -msgstr "Desactivat" +msgstr "Desactivada" -#: front/src/views/admin/library/TrackDetail.vue:145 +#: front/src/views/admin/library/TrackDetail.vue:151 msgctxt "*/*/*/Noun" msgid "Disc number" msgstr "Numèro del disc" +#: front/src/components/Home.vue:157 +msgctxt "Content/Home/Link" +msgid "Discover everything you need to know about Funkwhale and its features" +msgstr "Descobrissètz tot çò que devètz saber de Funkwhale e de sas foncionalitats" + #: front/src/components/auth/SubsonicTokenForm.vue:13 msgctxt "Content/Settings/Link" msgid "Discover how to use Funkwhale from other apps" msgstr "Aprenètz a utilizar Funkwhale amb d’autras aplicacions" +#: front/src/views/Notifications.vue:45 +msgctxt "Content/Notifications/Button.Label/Verb" +msgid "Discover other ways to help" +msgstr "Descobrissètz d’autras biaisses d’ajudar" + #: front/src/views/admin/moderation/AccountsDetail.vue:132 msgctxt "'Content/*/*/Noun'" msgid "Display name" @@ -1386,12 +1515,13 @@ msgstr "Mostrar publicament" #: front/src/components/manage/moderation/InstancePolicyForm.vue:122 msgctxt "Content/Moderation/Help text" -msgid "" -"Do not download any media file (audio, album cover, account avatar…) from " -"this account or domain. This will purge existing content as well." -msgstr "" -"Telecargar pas cap de mèdia (à udio, album, tampa, avatar de compte…) " -"d’aqueste compte o domeni. Purgarà tanben lo contengut existent." +msgid "Do not download any media file (audio, album cover, account avatar…) from this account or domain. This will purge existing content as well." +msgstr "Telecargar pas cap de mèdia (à udio, album, tampa, avatar de compte…) d’aqueste compte o domeni. Purgarà tanben lo contengut existent." + +#: front/src/views/Notifications.vue:36 +msgctxt "Content/Notifications/Header" +msgid "Do you like Funkwhale?" +msgstr "Vos agrada Funkwhale ?" #: front/src/components/playlists/Editor.vue:51 msgctxt "Popup/Playlist/Title" @@ -1403,7 +1533,7 @@ msgctxt "Modal/*/Title" msgid "Do you want to confirm this action?" msgstr "Volètz confirmar aquesta accion ?" -#: front/src/views/playlists/Detail.vue:35 +#: front/src/views/playlists/Detail.vue:43 msgctxt "Popup/Playlist/Title/Call to action" msgid "Do you want to delete the playlist \"%{ playlist }\"?" msgstr "Volètz suprimir la lista de lectura « %{ playlist } »  ?" @@ -1413,6 +1543,11 @@ msgctxt "Popup/Radio/Title" msgid "Do you want to delete the radio \"%{ radio }\"?" msgstr "Volètz suprimir la rà dio « %{ playlist } »  ?" +#: front/src/components/auth/Settings.vue:298 +msgctxt "Popup/Settings/Title" +msgid "Do you want to delete your account?" +msgstr "Volètz suprimir vòstre compte ?" + #: front/src/components/moderation/FilterModal.vue:3 msgctxt "Popup/Moderation/Title/Verb" msgid "Do you want to hide content from artist \"%{ name }\"?" @@ -1425,7 +1560,12 @@ msgid_plural "Do you want to launch %{ action } on %{ count } elements?" msgstr[0] "Volètz lançar l’accion « %{ action } » sus %{ count } element ?" msgstr[1] "Volètz lançar l’accion « %{ action } » sus %{ count } elements ?" -#: front/src/components/Sidebar.vue:118 +#: front/src/components/moderation/ReportModal.vue:3 +msgctxt "Popup/Moderation/Title/Verb" +msgid "Do you want to report this object?" +msgstr "Volètz senhalar aqueste objècte ?" + +#: front/src/components/Sidebar.vue:122 msgctxt "Sidebar/Queue/Message" msgid "Do you want to restore your previous queue?" msgstr "Volètz restablir vòstra fila precedenta ?" @@ -1441,26 +1581,33 @@ msgstr "Documentacion" #: front/src/components/manage/library/TracksTable.vue:42 #: front/src/components/manage/library/UploadsTable.vue:62 #: front/src/components/manage/moderation/AccountsTable.vue:40 -#: front/src/components/mixins/Translations.vue:60 -#: front/src/views/admin/library/AlbumDetail.vue:118 -#: front/src/views/admin/library/ArtistDetail.vue:107 -#: front/src/views/admin/library/LibraryDetail.vue:114 -#: front/src/views/admin/library/TrackDetail.vue:170 +#: front/src/components/manage/moderation/ReportCard.vue:169 +#: front/src/components/manage/moderation/ReportCard.vue:179 +#: front/src/components/mixins/Translations.vue:72 +#: front/src/views/admin/library/AlbumDetail.vue:124 +#: front/src/views/admin/library/ArtistDetail.vue:112 +#: front/src/views/admin/library/LibraryDetail.vue:123 +#: front/src/views/admin/library/TrackDetail.vue:176 #: front/src/views/admin/library/UploadDetail.vue:121 #: front/src/views/admin/moderation/AccountsDetail.vue:123 -#: front/src/components/mixins/Translations.vue:61 +#: front/src/components/mixins/Translations.vue:73 msgctxt "Content/Moderation/*/Noun" msgid "Domain" msgstr "Domenu" -#: front/src/views/admin/moderation/Base.vue:5 +#: front/src/views/admin/moderation/Base.vue:8 #: front/src/views/admin/moderation/DomainsList.vue:3 -#: front/src/views/admin/moderation/DomainsList.vue:48 +#: front/src/views/admin/moderation/DomainsList.vue:54 msgctxt "*/Moderation/*/Noun" msgid "Domains" msgstr "Domenis" -#: front/src/components/library/TrackBase.vue:39 +#: front/src/views/Notifications.vue:42 +msgctxt "Content/Notifications/Button.Label/Verb" +msgid "Donate" +msgstr "Donar" + +#: front/src/components/library/TrackBase.vue:37 #: front/src/views/admin/library/UploadDetail.vue:58 msgctxt "Content/Track/Link/Verb" msgid "Download" @@ -1473,10 +1620,10 @@ msgstr "Lisatz las linhas per triar las pistas de la lista de lectura" #: front/src/components/audio/track/Table.vue:10 #: front/src/components/library/TrackDetail.vue:30 -#: front/src/components/mixins/Translations.vue:56 +#: front/src/components/mixins/Translations.vue:68 #: front/src/views/admin/library/UploadDetail.vue:238 #: front/src/views/content/libraries/FilesTable.vue:60 -#: front/src/components/mixins/Translations.vue:57 +#: front/src/components/mixins/Translations.vue:69 msgctxt "Content/*/*" msgid "Duration" msgstr "Durada" @@ -1486,41 +1633,27 @@ msgctxt "Content/Signup/Message" msgid "E-mail address confirmed" msgstr "Corrièl confirmat" -#: front/src/components/Home.vue:88 -msgctxt "Content/Home/Title" -msgid "Easy to use" -msgstr "Simple d’utilizar" - -#: front/src/components/library/AlbumBase.vue:68 -#: front/src/components/library/ArtistBase.vue:79 -#: front/src/components/library/TrackBase.vue:87 +#: front/src/components/auth/Settings.vue:246 +#: src/components/library/AlbumBase.vue:73 +#: front/src/components/library/ArtistBase.vue:84 +#: front/src/components/library/TrackBase.vue:89 #: front/src/components/manage/moderation/InstancePolicyCard.vue:45 #: front/src/components/radios/Card.vue:23 -#: src/views/admin/library/AlbumDetail.vue:65 -#: front/src/views/admin/library/ArtistDetail.vue:64 -#: front/src/views/admin/library/TrackDetail.vue:64 +#: src/views/admin/library/AlbumDetail.vue:71 +#: front/src/views/admin/library/ArtistDetail.vue:69 +#: front/src/views/admin/library/TrackDetail.vue:70 #: front/src/views/content/libraries/Detail.vue:9 #: src/views/playlists/Detail.vue:31 msgctxt "Content/*/Button.Label/Verb" msgid "Edit" msgstr "Modificar" -#: front/src/components/auth/Settings.vue:246 -msgctxt "Content/Settings/Button.Label" -msgid "Edit" -msgstr "Modificar" - #: front/src/components/auth/ApplicationEdit.vue:30 #: front/src/components/auth/ApplicationEdit.vue:75 msgctxt "Content/Applications/Title" msgid "Edit application" msgstr "Modificar l’aplicacion" -#: front/src/components/About.vue:22 -msgctxt "Content/Settings/Button.Label/Verb" -msgid "Edit instance info" -msgstr "Editrar las informacions d’aquesta instà ncia" - #: front/src/components/manage/moderation/InstancePolicyForm.vue:3 msgctxt "Content/Moderation/Card.Title/Verb" msgid "Edit moderation rule" @@ -1541,23 +1674,20 @@ msgctxt "Content/*/Title" msgid "Edit this track" msgstr "Modificar aquesta pista" -#: front/src/views/admin/library/AlbumDetail.vue:182 -#: front/src/views/admin/library/ArtistDetail.vue:171 +#: front/src/components/mixins/Translations.vue:116 +#: front/src/views/admin/library/AlbumDetail.vue:198 +#: front/src/views/admin/library/ArtistDetail.vue:186 #: front/src/views/admin/library/Base.vue:5 #: src/views/admin/library/EditsList.vue:24 -#: front/src/views/admin/library/TrackDetail.vue:234 +#: front/src/views/admin/library/TrackDetail.vue:250 +#: front/src/components/mixins/Translations.vue:117 msgctxt "*/Admin/*/Noun" msgid "Edits" msgstr "Modificacions" -#: front/src/components/mixins/Translations.vue:104 -#: front/src/components/mixins/Translations.vue:105 -msgctxt "Content/OAuth Scopes/Label" -msgid "Edits" -msgstr "Modificacions" - -#: front/src/components/auth/Signup.vue:30 +#: front/src/components/auth/SignupForm.vue:26 #: front/src/components/manage/users/UsersTable.vue:38 +#: front/src/components/moderation/ReportModal.vue:31 msgctxt "Content/*/*/Noun" msgid "Email" msgstr "Corrièl" @@ -1567,52 +1697,60 @@ msgctxt "Content/*/*" msgid "Email address" msgstr "Adreça electronica" -#: front/src/components/library/AlbumBase.vue:53 -#: front/src/components/library/ArtistBase.vue:64 -#: front/src/components/library/TrackBase.vue:72 +#: front/src/components/library/AlbumBase.vue:54 +#: front/src/components/library/ArtistBase.vue:65 +#: front/src/components/library/TrackBase.vue:70 +#: src/views/playlists/Detail.vue:38 msgctxt "Content/*/Button.Label/Verb" msgid "Embed" msgstr "Integrar" -#: front/src/components/audio/EmbedWizard.vue:20 +#: front/src/components/audio/EmbedWizard.vue:30 msgctxt "Popup/Embed/Input.Label/Noun" msgid "Embed code" msgstr "Còdi d’integracion" -#: front/src/components/library/AlbumBase.vue:26 +#: front/src/components/library/AlbumBase.vue:27 msgctxt "Popup/Album/Title/Verb" msgid "Embed this album on your website" msgstr "Integrar aqueste album a un site web" -#: front/src/components/library/ArtistBase.vue:37 +#: front/src/components/library/ArtistBase.vue:38 msgctxt "Popup/Artist/Title/Verb" msgid "Embed this artist work on your website" msgstr "Integrar aquesta pista a vòstre site web" -#: front/src/components/library/TrackBase.vue:45 +#: front/src/views/playlists/Detail.vue:52 +msgctxt "Popup/Album/Title/Verb" +msgid "Embed this playlist on your website" +msgstr "Integrar aquesta lista de lectura a un site web" + +#: front/src/components/library/TrackBase.vue:43 msgctxt "Popup/Track/Title" msgid "Embed this track on your website" msgstr "Integrar aquesta pista a un site web" -#: front/src/views/admin/moderation/AccountsDetail.vue:259 -#: front/src/views/admin/moderation/DomainsDetail.vue:187 +#: front/src/views/admin/moderation/AccountsDetail.vue:260 +#: front/src/views/admin/moderation/DomainsDetail.vue:224 msgctxt "Content/Moderation/Table.Label/Noun" msgid "Emitted library follows" msgstr "Seguiments de bibliotècas enviats" -#: front/src/views/admin/moderation/AccountsDetail.vue:243 -#: front/src/views/admin/moderation/DomainsDetail.vue:171 +#: front/src/views/admin/moderation/AccountsDetail.vue:244 +#: front/src/views/admin/moderation/DomainsDetail.vue:208 msgctxt "Content/Moderation/Table.Label/Noun" msgid "Emitted messages" msgstr "Messatge emés" +#: front/src/components/About.vue:114 src/components/About.vue:127 +#: front/src/components/About.vue:140 #: front/src/components/manage/moderation/InstancePolicyCard.vue:8 #: front/src/components/manage/moderation/InstancePolicyForm.vue:17 #: front/src/views/admin/moderation/AccountsDetail.vue:156 #: front/src/views/admin/moderation/AccountsDetail.vue:160 -msgctxt "*/*/*" +msgctxt "*/*/*/State of feature" msgid "Enabled" -msgstr "Activat" +msgstr "Activada" #: front/src/views/playlists/Detail.vue:30 msgctxt "Content/Playlist/Button.Label/Verb" @@ -1629,9 +1767,9 @@ msgctxt "Content/Search/Input.Placeholder" msgid "Enter a radio name…" msgstr "Escrivètz un nom de rà dio…" -#: front/src/components/library/Albums.vue:119 +#: front/src/components/library/Albums.vue:128 msgctxt "Content/Search/Input.Placeholder" -msgid "Enter album title..." +msgid "Enter album title…" msgstr "Picatz lo tÃtol de l’album…" #: front/src/components/library/Artists.vue:116 @@ -1646,15 +1784,16 @@ msgstr "Escrivètz un nom de lista de lectura…" #: front/src/views/auth/PasswordReset.vue:54 msgctxt "Content/Signup/Input.Placeholder" -msgid "Enter the email address binded to your account" +msgid "Enter the email address linked to your account" msgstr "Picatz l’adreça de corrièl ligada a vòstre compte" -#: front/src/components/auth/Signup.vue:103 +#: front/src/components/auth/SignupForm.vue:96 msgctxt "Content/Signup/Form/Placeholder" msgid "Enter your email" msgstr "Escrivètz vòstre adreça electronica" -#: front/src/components/auth/Signup.vue:98 src/components/auth/Signup.vue:100 +#: front/src/components/auth/SignupForm.vue:91 +#: src/components/auth/SignupForm.vue:93 msgctxt "Content/Signup/Form/Placeholder" msgid "Enter your invitation code (case insensitive)" msgstr "Escrivètz vòstre còdi d’invitacion (pas sensible a la cassa)" @@ -1664,12 +1803,12 @@ msgctxt "Content/Library/Input.Placeholder/Verb" msgid "Enter your search query…" msgstr "Escrivètz vòstra recèrca…" -#: front/src/components/auth/Signup.vue:102 +#: front/src/components/auth/SignupForm.vue:95 msgctxt "Content/Signup/Form/Placeholder" msgid "Enter your username" msgstr "Escrivètz vòstre nom d’utilizaire" -#: front/src/components/auth/Login.vue:83 +#: front/src/components/auth/LoginForm.vue:81 msgctxt "Content/Login/Input.Placeholder" msgid "Enter your username or email" msgstr "Escrivètz vòstre nom d’utilizaire o corrièl" @@ -1686,7 +1825,7 @@ msgctxt "Popup/Import/Table.Label/Noun" msgid "Error detail" msgstr "Detalhs de l’error" -#: front/src/views/admin/Settings.vue:87 +#: front/src/views/admin/Settings.vue:89 msgctxt "Content/Admin/Menu" msgid "Error reporting" msgstr "Rapòrt d’error" @@ -1742,16 +1881,12 @@ msgctxt "Popup/Moderation/Error message" msgid "Error while fetching application data" msgstr "Error en recuperar las donadas de l’aplicacion" -#: front/src/views/admin/moderation/DomainsDetail.vue:118 +#: front/src/views/admin/moderation/DomainsDetail.vue:155 msgctxt "Content/Moderation/Table" msgid "Error while fetching node info" msgstr "Error en recuperar las informacions del nos" #: front/src/components/admin/SettingsGroup.vue:5 -msgctxt "Content/Settings/Error message.Title" -msgid "Error while saving settings" -msgstr "Error en enregistrar los paramètres" - #: front/src/components/federation/FetchButton.vue:73 msgctxt "Content/*/Error message.Title" msgid "Error while saving settings" @@ -1762,6 +1897,16 @@ msgctxt "Content/Library/Error message.Title" msgid "Error while submitting edit" msgstr "Error en enviar la modificacion" +#: front/src/components/manage/moderation/NoteForm.vue:3 +msgctxt "Content/Moderation/Error message.Title" +msgid "Error while submitting note" +msgstr "Error en enviar la nòta" + +#: front/src/components/moderation/ReportModal.vue:11 +msgctxt "Popup/Moderation/Error message" +msgid "Error while submitting report" +msgstr "Error en enviar lo senhalament" + #: front/src/components/mixins/Translations.vue:32 #: front/src/components/mixins/Translations.vue:33 msgctxt "Content/Library/Table/Short" @@ -1796,9 +1941,14 @@ msgctxt "Content/Radio/Table.Label/Verb" msgid "Exclude" msgstr "Exclure" +#: front/src/components/common/CollapseLink.vue:2 +msgctxt "*/*/Button,Label" +msgid "Expand" +msgstr "Desplegar" + #: front/src/components/manage/users/InvitationsTable.vue:41 -#: front/src/components/mixins/Translations.vue:49 -#: front/src/components/mixins/Translations.vue:50 +#: front/src/components/mixins/Translations.vue:59 +#: front/src/components/mixins/Translations.vue:60 msgctxt "Content/Admin/Table.Label/Noun" msgid "Expiration date" msgstr "Data d’expiracion" @@ -1815,16 +1965,8 @@ msgstr "Expirada/utilizada" #: front/src/components/manage/moderation/InstancePolicyForm.vue:110 msgctxt "Content/Moderation/Help text" -msgid "" -"Explain why you're applying this policy. Depending on your instance " -"configuration, this will help you remember why you acted on this account or " -"domain, and may be displayed publicly to help users understand what " -"moderation rules are in place." -msgstr "" -"Explicatz perque aplicatz aquesta politica. Segon la configuracion de " -"l’instà ncia, aquò vos ajudarà a vos rapelar perque avètz agit sus aqueste " -"compte o domeni, e aquò pòt èsser mostrat publicament per ajudar als " -"utilizaires a comprendre qualas règlas de moderacion son en plaça." +msgid "Explain why you're applying this policy. Depending on your instance configuration, this will help you remember why you acted on this account or domain, and may be displayed publicly to help users understand what moderation rules are in place." +msgstr "Explicatz perque aplicatz aquesta politica. Segon la configuracion de l’instà ncia, aquò vos ajudarà a vos rapelar perque avètz agit sus aqueste compte o domeni, e aquò pòt èsser mostrat publicament per ajudar als utilizaires a comprendre qualas règlas de moderacion son en plaça." #: front/src/components/manage/library/UploadsTable.vue:25 #: front/src/views/content/libraries/FilesTable.vue:16 @@ -1832,31 +1974,27 @@ msgctxt "Content/Library/Dropdown" msgid "Failed" msgstr "Fracà s" -#: front/src/views/content/remote/Card.vue:62 +#: front/src/views/content/remote/Card.vue:75 msgctxt "Content/Library/Card.List item/Noun" msgid "Failed tracks:" msgstr "Pistas en error :" -#: front/src/views/admin/library/AlbumDetail.vue:165 -#: front/src/views/admin/library/ArtistDetail.vue:154 -#: front/src/views/admin/library/TrackDetail.vue:217 +#: front/src/views/admin/library/AlbumDetail.vue:171 +#: front/src/views/admin/library/ArtistDetail.vue:159 +#: front/src/views/admin/library/TrackDetail.vue:223 msgctxt "*/*/*" msgid "Favorited tracks" msgstr "Pistas en favorit" #: front/src/components/Sidebar.vue:66 +#: src/components/mixins/Translations.vue:88 +#: front/src/components/mixins/Translations.vue:89 msgctxt "Sidebar/Favorites/List item.Link/Noun" msgid "Favorites" msgstr "Favorits" -#: front/src/components/mixins/Translations.vue:76 -#: front/src/components/mixins/Translations.vue:77 -msgctxt "Content/OAuth Scopes/Label" -msgid "Favorites" -msgstr "Favorits" - -#: front/src/views/admin/Settings.vue:84 -msgctxt "Content/Admin/Menu" +#: front/src/components/About.vue:110 src/views/admin/Settings.vue:84 +msgctxt "*/*/*" msgid "Federation" msgstr "Federacion" @@ -1880,6 +2018,11 @@ msgctxt "Content/Radio/Table.Label/Noun" msgid "Filter name" msgstr "Nom del filtre" +#: front/src/components/Home.vue:118 +msgctxt "Content/Home/Link" +msgid "Find another pod" +msgstr "Trobar un autre pod" + #: front/src/components/manage/library/UploadsTable.vue:26 #: front/src/components/mixins/Translations.vue:36 #: front/src/views/content/libraries/FilesTable.vue:17 @@ -1889,25 +2032,31 @@ msgid "Finished" msgstr "Acabat" #: front/src/components/manage/moderation/AccountsTable.vue:42 -#: front/src/components/manage/moderation/DomainsTable.vue:41 -#: front/src/views/admin/library/AlbumDetail.vue:149 -#: front/src/views/admin/library/ArtistDetail.vue:138 -#: front/src/views/admin/library/LibraryDetail.vue:153 -#: front/src/views/admin/library/TrackDetail.vue:201 +#: front/src/components/manage/moderation/DomainsTable.vue:49 +#: front/src/views/admin/library/AlbumDetail.vue:155 +#: front/src/views/admin/library/ArtistDetail.vue:143 +#: front/src/views/admin/library/LibraryDetail.vue:162 +#: front/src/views/admin/library/TagDetail.vue:98 +#: front/src/views/admin/library/TrackDetail.vue:207 #: front/src/views/admin/library/UploadDetail.vue:167 -#: front/src/views/admin/moderation/AccountsDetail.vue:235 -#: front/src/views/admin/moderation/DomainsDetail.vue:151 +#: front/src/views/admin/moderation/AccountsDetail.vue:236 +#: front/src/views/admin/moderation/DomainsDetail.vue:188 msgctxt "Content/Moderation/Table.Label/Short (Value is a date)" msgid "First seen" msgstr "Primièra aparicion" -#: front/src/components/mixins/Translations.vue:46 -#: front/src/components/mixins/Translations.vue:47 +#: front/src/components/mixins/Translations.vue:56 +#: front/src/components/mixins/Translations.vue:57 msgctxt "Content/Moderation/Dropdown/Noun" msgid "First seen date" msgstr "Data de primièra aparicion" -#: front/src/views/content/remote/Card.vue:87 +#: front/src/components/ShortcutsModal.vue:64 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Focus searchbar" +msgstr "Anar a la recèrca" + +#: front/src/views/content/remote/Card.vue:100 msgctxt "Content/Library/Card.Button.Label/Verb" msgid "Follow" msgstr "Seguir" @@ -1917,43 +2066,35 @@ msgctxt "Content/Library/Title/Verb" msgid "Follow remote libraries" msgstr "Seguir de bibliotècas alonhadas" -#: front/src/views/content/remote/Card.vue:92 +#: front/src/views/content/remote/Card.vue:105 msgctxt "Content/Library/Card.Paragraph" msgid "Follow request pending approval" msgstr "Abonament en espèra de validacion" -#: front/src/components/mixins/Translations.vue:64 -#: front/src/views/admin/library/LibraryDetail.vue:161 +#: front/src/components/manage/library/LibrariesTable.vue:53 +#: front/src/components/mixins/Translations.vue:76 +#: front/src/views/admin/library/LibraryDetail.vue:170 #: front/src/views/content/libraries/Detail.vue:7 -#: front/src/components/mixins/Translations.vue:65 +#: front/src/components/mixins/Translations.vue:77 msgctxt "Content/Federation/*/Noun" msgid "Followers" msgstr "Seguidors" -#: front/src/components/manage/library/LibrariesTable.vue:53 -msgctxt "Content/*/*/Noun" -msgid "Followers" -msgstr "Seguidors" - -#: front/src/views/content/remote/Card.vue:103 +#: front/src/views/content/remote/Card.vue:116 msgctxt "Content/Library/Card.Paragraph" msgid "Following" msgstr "Abonat" -#: front/src/components/mixins/Translations.vue:84 -#: front/src/components/mixins/Translations.vue:85 +#: front/src/components/mixins/Translations.vue:96 +#: front/src/components/mixins/Translations.vue:97 msgctxt "Content/OAuth Scopes/Label" msgid "Follows" msgstr "Seguir" -#: front/src/components/library/TrackBase.vue:17 +#: front/src/components/library/TrackBase.vue:245 msgctxt "Content/Track/Paragraph" -msgid "" -"From album <a class=\"internal\" href=\"%{ albumUrl }\">%{ album }</a> by <a" -" class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" -msgstr "" -"De l’album <a class=\"internal\" href=\"%{ albumUrl }\">%{ album }</a> per " -"<a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" +msgid "From album <a class=\"internal\" href=\"%{ albumUrl }\">%{ album }</a> by <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" +msgstr "De l’album <a class=\"internal\" href=\"%{ albumUrl }\">%{ album }</a> per <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" #: front/src/components/auth/Authorize.vue:28 msgctxt "Content/Auth/Label/Noun" @@ -1962,38 +2103,20 @@ msgstr "Accès complèt" #: front/src/components/auth/SubsonicTokenForm.vue:7 msgctxt "Content/Settings/Paragraph'" -msgid "" -"Funkwhale is compatible with other music players that support the Subsonic " -"API." -msgstr "" -"Funkwhale es compatible amb d’autres lectors de musica compatibles amb l’API" -" Subsonic." - -#: front/src/components/Home.vue:90 -msgctxt "Content/Home/Paragraph" -msgid "Funkwhale is dead simple to use." -msgstr "Funkwhale es simple d’utilizar." - -#: front/src/components/Home.vue:39 -msgctxt "Content/Home/Paragraph" -msgid "" -"Funkwhale is designed to make it easy to listen to music you like, or to " -"discover new artists." -msgstr "" -"Funkwhale es concebut per facilitar l’escota de las musicas que vos agradan " -"e descobrir de novèls artistas." +msgid "Funkwhale is compatible with other music players that support the Subsonic API." +msgstr "Funkwhale es compatible amb d’autres lectors de musica compatibles amb l’API Subsonic." -#: front/src/components/Home.vue:111 +#: front/src/components/Home.vue:88 msgctxt "Content/Home/Paragraph" -msgid "Funkwhale is free and gives you control on your music." -msgstr "Funkwhale es a gratÃs e vos dòna lo contròla de vòstra musica." +msgid "Funkwhale is free and developped by a friendly community of volunteers." +msgstr "Funkwhale es gratuit e desvolopat per de una comunautat de volontaris simpatics." -#: front/src/components/Home.vue:66 -msgctxt "Content/Home/Paragraph" -msgid "Funkwhale takes care of handling your music" -msgstr "Funkwhale prend cura de vòstra musica" +#: front/src/components/About.vue:78 +msgctxt "*/*/*" +msgid "Funkwhale version" +msgstr "Version de Funkwhale" -#: front/src/components/ShortcutsModal.vue:38 +#: front/src/components/ShortcutsModal.vue:56 msgctxt "Popup/Keyboard shortcuts/Title" msgid "General shortcuts" msgstr "Acrochis generals" @@ -2003,35 +2126,17 @@ msgctxt "Content/Admin/Button.Label/Verb" msgid "Get a new invitation" msgstr "Obténer una novèla invitacion" -#: front/src/components/Home.vue:13 -msgctxt "Content/Home/Button.Label/Verb" -msgid "Get me to the library" -msgstr "Menatz-me a la bibliotèca" - -#: front/src/components/Home.vue:70 -msgctxt "Content/Home/List item/Verb" -msgid "" -"Get quality metadata about your music thanks to <a href=\"%{ url }\" " -"target=\"_blank\">MusicBrainz</a>" -msgstr "" -"Obtenètz de metadonadas de qualitat per vòstra musica grà cia a <a href=\"%{ " -"url }\" target=\"_blank\">MusicBrainz</a>" - #: front/src/views/content/Home.vue:12 src/views/content/Home.vue:19 msgctxt "Content/Library/Button.Label/Verb" msgid "Get started" msgstr "Començar" -#: front/src/components/Footer.vue:37 +#: front/src/components/Footer.vue:45 +#: src/components/library/ImportStatusModal.vue:45 msgctxt "Footer/*/Link" msgid "Getting help" msgstr "Obténer d’ajuda" -#: front/src/components/library/ImportStatusModal.vue:45 -msgctxt "Popup/Import/Table.Label/Noun" -msgid "Getting help" -msgstr "Obténer d’ajuda" - #: front/src/components/common/ActionTable.vue:35 #: front/src/components/common/ActionTable.vue:56 msgctxt "Content/*/Button.Label/Short, Verb" @@ -2043,11 +2148,21 @@ msgctxt "Content/*/Button.Label/Verb" msgid "Go to home page" msgstr "Tornar a l’acuèlh" +#: front/src/views/Notifications.vue:27 src/views/Notifications.vue:61 +msgctxt "Content/Notifications/Button.Label" +msgid "Got it!" +msgstr "Comprés !" + #: front/src/components/auth/Settings.vue:128 msgctxt "Content/Settings/Title" msgid "Hidden artists" msgstr "Artistas amagats" +#: front/src/components/About.vue:155 +msgctxt "*/*/*/Verb" +msgid "Hide" +msgstr "Amagar" + #: front/src/components/manage/moderation/InstancePolicyForm.vue:114 msgctxt "Content/Moderation/Help text" msgid "Hide account or domain content, except from followers." @@ -2058,12 +2173,12 @@ msgctxt "Popup/*/Button.Label" msgid "Hide content" msgstr "Amagar lo contengut" -#: front/src/components/audio/PlayButton.vue:26 +#: front/src/components/audio/PlayButton.vue:31 msgctxt "*/Queue/Dropdown/Button/Label/Short" msgid "Hide content from this artist" msgstr "Amagar lo contengut d’aqueste artista" -#: front/src/components/audio/Player.vue:643 +#: front/src/components/audio/Player.vue:669 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Hide content from this artist…" msgstr "Amagar lo contengut d’aqueste artista…" @@ -2073,39 +2188,26 @@ msgctxt "Head/Home/Title" msgid "Home" msgstr "Acuèlh" -#: front/src/components/instance/Stats.vue:36 -msgctxt "Content/About/Paragraph/Unit" -msgid "Hours of music" -msgstr "Oras de musica" - #: front/src/components/auth/SubsonicTokenForm.vue:10 msgctxt "Content/Settings/Paragraph" -msgid "" -"However, accessing Funkwhale from those clients require a separate password " -"you can set below." -msgstr "" -"Pr’aquò, accedir a Funkwhale d’un client estant demanda un senhal diferent " -"que podètz configurar çai-jos." +msgid "However, accessing Funkwhale from those clients require a separate password you can set below." +msgstr "Pr’aquò, accedir a Funkwhale d’un client estant demanda un senhal diferent que podètz configurar çai-jos." #: front/src/views/auth/PasswordResetConfirm.vue:24 msgctxt "Content/Signup/Paragraph" -msgid "" -"If the email address provided in the previous step is valid and binded to a " -"user account, you should receive an email with reset instructions in the " -"next couple of minutes." -msgstr "" -"Se l’adreça qu’avètz provesida es valida e associada a un compte utilizaire," -" sètz per recebre un messatge amb las consignas de reïnicializacion d’aquà " -"una estona." +msgid "If the email address provided in the previous step is valid and linked to a user account, you should receive an email with reset instructions in the next couple of minutes." +msgstr "Se l’adreça qu’avètz provesida es valida e associada a un compte utilizaire, sètz per recebre un messatge amb las consignas de reïnicializacion d’aquà una estona." #: front/src/components/auth/Settings.vue:205 msgctxt "Content/Applications/Paragraph" -msgid "" -"If you authorize third-party applications to access your data, those " -"applications will be listed here." -msgstr "" -"S’autorizatz de tèrças aplicacions a accedir a vòstras donadas, serà n " -"listadas aquÃ." +msgid "If you authorize third-party applications to access your data, those applications will be listed here." +msgstr "S’autorizatz de tèrças aplicacions a accedir a vòstras donadas, serà n listadas aquÃ." + +#: front/src/components/mixins/Translations.vue:46 +#: front/src/components/mixins/Translations.vue:47 +msgctxt "Content/Moderation/Dropdown" +msgid "Illegal content" +msgstr "Contengut illegal" #: front/src/components/library/ImportStatusModal.vue:3 msgctxt "Popup/Import/Title" @@ -2118,14 +2220,10 @@ msgid "Import reference" msgstr "Importar la referéncia" #: front/src/components/manage/library/UploadsTable.vue:20 -#: front/src/views/content/libraries/FilesTable.vue:11 -#: front/src/views/content/libraries/FilesTable.vue:59 -msgctxt "Content/Library/*/Noun" -msgid "Import status" -msgstr "Estatut de l’import" - #: front/src/components/manage/library/UploadsTable.vue:64 #: front/src/views/admin/library/UploadDetail.vue:131 +#: front/src/views/content/libraries/FilesTable.vue:11 +#: front/src/views/content/libraries/FilesTable.vue:59 msgctxt "Content/*/*/Noun" msgid "Import status" msgstr "Estatut de l’import" @@ -2166,23 +2264,22 @@ msgctxt "Popup/Moderation/List item" msgid "In radio suggestions" msgstr "Dins las suggestions de rà dios" -#: front/src/components/manage/users/UsersTable.vue:54 +#: front/src/components/manage/users/UsersTable.vue:55 msgctxt "Content/Admin/Table" msgid "Inactive" msgstr "Actiu" -#: front/src/components/ShortcutsModal.vue:71 +#: front/src/components/ShortcutsModal.vue:124 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Increase volume" msgstr "Aumentar lo volum" #: front/src/components/playlists/Editor.vue:41 -#, fuzzy msgctxt "Content/Playlist/Button.Label/Verb" msgid "Insert from queue (%{ count } track)" msgid_plural "Insert from queue (%{ count } tracks)" -msgstr[0] "Inserir de la fila (%{ count } pista)" -msgstr[1] "Inserir de la fila (%{ count } pistas)" +msgstr[0] "Inserir de la fila estant (%{ count } pista)" +msgstr[1] "Inserir de la fila estant (%{ count } pistas)" #: front/src/components/mixins/Translations.vue:16 #: front/src/components/mixins/Translations.vue:17 @@ -2190,7 +2287,7 @@ msgctxt "Content/Settings/Dropdown/Short" msgid "Instance" msgstr "Instà ncia" -#: front/src/views/admin/moderation/DomainsDetail.vue:71 +#: front/src/views/admin/moderation/DomainsDetail.vue:99 msgctxt "Content/Moderation/Title" msgid "Instance data" msgstr "Donadas de l’instà ncia" @@ -2215,21 +2312,25 @@ msgctxt "Popup/Instance/Input.Label/Noun" msgid "Instance URL" msgstr "URL de l’instà ncia" +#: front/src/components/manage/moderation/ReportCard.vue:92 +#: front/src/components/manage/moderation/ReportCard.vue:203 +msgctxt "Content/*/*/Noun" +msgid "Internal notes" +msgstr "Nòtas intèrnas" + #: front/src/components/library/FileUpload.vue:268 msgctxt "Content/Library/Help text" -msgid "" -"Invalid file type, ensure you are uploading an audio file. Supported file " -"extensions are %{ extensions }" -msgstr "" -"Tipe de fichièr pas valid, asseguratz-vos d’enviar un fichièr à udio. Las " -"extensions compatiblas son %{ extensions }" +msgid "Invalid file type, ensure you are uploading an audio file. Supported file extensions are %{ extensions }" +msgstr "Tipe de fichièr pas valid, asseguratz-vos d’enviar un fichièr à udio. Las extensions compatiblas son %{ extensions }" #: front/src/components/library/ImportStatusModal.vue:139 +#: front/src/components/mixins/Translations.vue:45 +#: front/src/components/mixins/Translations.vue:46 msgctxt "Popup/Import/Error.Label" msgid "Invalid metadata" msgstr "Metadonada invalida" -#: front/src/components/auth/Signup.vue:44 +#: front/src/components/auth/SignupForm.vue:40 #: front/src/components/manage/users/InvitationForm.vue:11 msgctxt "Content/*/Input.Label" msgid "Invitation code" @@ -2241,7 +2342,13 @@ msgctxt "*/Admin/*/Noun" msgid "Invitations" msgstr "Invitacions" -#: front/src/components/Footer.vue:41 +#: front/src/components/manage/moderation/DomainsTable.vue:9 +#: front/src/views/admin/moderation/DomainsDetail.vue:106 +msgctxt "Content/Moderation/*/Adjective" +msgid "Is present on allow-list" +msgstr "Es present dins la lista d’autorizacion" + +#: front/src/components/Footer.vue:49 msgctxt "Footer/*/List item.Link" msgid "Issue tracker" msgstr "Traçador de problèmas" @@ -2251,17 +2358,18 @@ msgctxt "Popup/Instance/Error message.Title" msgid "It is not possible to connect to the given URL" msgstr "Connexion impossibla a l’URL donada" -#: front/src/components/Home.vue:50 -msgctxt "Content/Home/List item/Verb" -msgid "Keep a track of your favorite songs" -msgstr "Gardatz una traça de vòstras cançons favoritas" +#: front/src/components/mixins/Translations.vue:65 +#: front/src/components/mixins/Translations.vue:66 +msgctxt "*/*/*/Noun" +msgid "Items" +msgstr "Elements" #: front/src/components/Footer.vue:33 src/components/ShortcutsModal.vue:3 msgctxt "*/*/*/Noun" msgid "Keyboard shortcuts" msgstr "Acorchis clavièr" -#: front/src/views/admin/moderation/DomainsDetail.vue:161 +#: front/src/views/admin/moderation/DomainsDetail.vue:198 msgctxt "Content/Moderation/Table.Label.Link" msgid "Known accounts" msgstr "Comptes coneguts" @@ -2272,15 +2380,15 @@ msgid "Known libraries" msgstr "Bibliotècas conegudas" #: front/src/components/manage/users/UsersTable.vue:41 -#: front/src/components/mixins/Translations.vue:58 -#: front/src/views/admin/moderation/AccountsDetail.vue:205 -#: front/src/components/mixins/Translations.vue:59 +#: front/src/components/mixins/Translations.vue:70 +#: front/src/views/admin/moderation/AccountsDetail.vue:206 +#: front/src/components/mixins/Translations.vue:71 msgctxt "Content/Profile/Table.Label/Short, Noun (Value is a date)" msgid "Last activity" msgstr "Darrièra activitat" -#: front/src/views/admin/moderation/AccountsDetail.vue:188 -#: front/src/views/admin/moderation/DomainsDetail.vue:78 +#: front/src/views/admin/moderation/AccountsDetail.vue:189 +#: front/src/views/admin/moderation/DomainsDetail.vue:115 msgctxt "Content/*/Table.Label" msgid "Last checked" msgstr "Darrièra verificacion" @@ -2295,13 +2403,13 @@ msgctxt "Content/Moderation/Table.Label/Noun" msgid "Last seen" msgstr "Darrièra visita" -#: front/src/components/mixins/Translations.vue:47 -#: front/src/components/mixins/Translations.vue:48 +#: front/src/components/mixins/Translations.vue:57 +#: front/src/components/mixins/Translations.vue:58 msgctxt "Content/Moderation/Dropdown/Noun" msgid "Last seen date" msgstr "Darrièra visita" -#: front/src/views/content/remote/Card.vue:60 +#: front/src/views/content/remote/Card.vue:73 msgctxt "Content/Library/Card.List item/Noun" msgid "Last update:" msgstr "Darrièra actualizacion :" @@ -2311,60 +2419,59 @@ msgctxt "Modal/*/Button.Label/Short, Verb" msgid "Launch" msgstr "Aviar" -#: front/src/components/Home.vue:10 -msgctxt "Content/Home/Button.Label/Verb" -msgid "Learn more about this instance" -msgstr "Ne saber mai tocant aquesta instà ncia" +#: front/src/components/Home.vue:35 +msgctxt "Content/Home/Link" +msgid "Learn more" +msgstr "Ne saber mai" #: front/src/components/manage/users/InvitationForm.vue:58 msgctxt "Content/Admin/Input.Placeholder" msgid "Leave empty for a random code" msgstr "Daissar void per obténer un còdi aleatòri" -#: front/src/components/audio/EmbedWizard.vue:7 +#: front/src/components/audio/EmbedWizard.vue:17 msgctxt "Popup/Embed/Paragraph" msgid "Leave empty for a responsive widget" msgstr "Daissar void per un widget adaptatiu" -#: front/src/views/admin/library/AlbumDetail.vue:232 -#: front/src/views/admin/library/ArtistDetail.vue:221 -#: front/src/views/admin/library/TrackDetail.vue:284 -#: front/src/views/admin/moderation/AccountsDetail.vue:327 -#: front/src/views/admin/moderation/DomainsDetail.vue:234 -#: front/src/views/content/Base.vue:5 +#: front/src/components/mixins/Translations.vue:64 +#: front/src/components/mixins/Translations.vue:65 msgctxt "*/*/*/Noun" -msgid "Libraries" -msgstr "Bibliotècas" +msgid "Length" +msgstr "Durada" +#: front/src/views/admin/library/AlbumDetail.vue:248 +#: front/src/views/admin/library/ArtistDetail.vue:236 #: front/src/views/admin/library/Base.vue:17 #: front/src/views/admin/library/LibrariesList.vue:24 -msgctxt "*/*/*" +#: front/src/views/admin/library/TrackDetail.vue:300 +#: front/src/views/admin/moderation/AccountsDetail.vue:339 +#: front/src/views/admin/moderation/DomainsDetail.vue:271 +#: front/src/views/content/Base.vue:5 +msgctxt "*/*/*/Noun" msgid "Libraries" msgstr "Bibliotècas" -#: front/src/components/mixins/Translations.vue:72 -#: front/src/components/mixins/Translations.vue:73 +#: front/src/components/mixins/Translations.vue:84 +#: front/src/components/mixins/Translations.vue:85 msgctxt "Content/OAuth Scopes/Label" msgid "Libraries and uploads" msgstr "Bibliotèca e mandadÃs" #: front/src/views/content/libraries/Form.vue:2 msgctxt "Content/Library/Paragraph" -msgid "" -"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." -msgstr "" -"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." +msgid "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." +msgstr "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." -#: front/src/components/Sidebar.vue:85 src/components/instance/Stats.vue:30 +#: front/src/components/Sidebar.vue:85 #: front/src/components/manage/library/UploadsTable.vue:60 -#: front/src/components/manage/users/UsersTable.vue:173 +#: front/src/components/manage/users/UsersTable.vue:174 +#: front/src/components/mixins/Report.vue:77 #: front/src/views/admin/library/UploadDetail.vue:144 -#: front/src/views/admin/moderation/AccountsDetail.vue:498 -msgctxt "*/*/*" +#: front/src/views/admin/moderation/AccountsDetail.vue:518 src/entities.js:132 +#: front/src/components/mixins/Report.vue:78 +#, fuzzy +msgctxt "*/*/*/Noun" msgid "Library" msgstr "Bibliotèca" @@ -2395,21 +2502,37 @@ msgstr "Bibliotèca actualizada" #: front/src/components/library/TrackDetail.vue:19 #: front/src/components/manage/library/TracksTable.vue:43 -#: front/src/views/admin/library/TrackDetail.vue:159 src/edits.js:61 +#: front/src/views/admin/library/TrackDetail.vue:165 src/edits.js:84 +#: front/src/entities.js:115 msgctxt "Content/*/*/Noun" msgid "License" msgstr "Licéncia" -#: front/src/views/admin/library/AlbumDetail.vue:157 -#: front/src/views/admin/library/ArtistDetail.vue:146 -#: front/src/views/admin/library/TrackDetail.vue:209 -msgctxt "*/*/*/Noun" -msgid "Listenings" -msgstr "Escotas" +#: front/src/components/Footer.vue:90 +msgctxt "Footer/Settings/Dropdown.Label/Theme name" +msgid "Light" +msgstr "Clar" -#: front/src/components/mixins/Translations.vue:80 -#: front/src/components/mixins/Translations.vue:81 -msgctxt "Content/OAuth Scopes/Label" +#: front/src/views/admin/library/AlbumDetail.vue:188 +#: front/src/views/admin/library/ArtistDetail.vue:176 +#: front/src/views/admin/library/LibraryDetail.vue:179 +#: front/src/views/admin/library/TrackDetail.vue:240 +#: front/src/views/admin/moderation/AccountsDetail.vue:269 +msgctxt "Content/Moderation/Table.Label/Noun" +msgid "Linked reports" +msgstr "Senhalaments ligats" + +#: front/src/components/Home.vue:135 +msgctxt "Content/Home/Link" +msgid "Listen to public albums and playlists shared on this pod" +msgstr "Escotar d’albums publics e de listas de lectura partejadas sus aqueste pod" + +#: front/src/components/mixins/Translations.vue:92 +#: front/src/views/admin/library/AlbumDetail.vue:163 +#: front/src/views/admin/library/ArtistDetail.vue:151 +#: front/src/views/admin/library/TrackDetail.vue:215 +#: front/src/components/mixins/Translations.vue:93 +msgctxt "*/*/*/Noun" msgid "Listenings" msgstr "Escotas" @@ -2435,7 +2558,7 @@ msgctxt "Content/Library/Paragraph" msgid "Loading library data…" msgstr "Cargament de las donadas de la bibliotèca…" -#: front/src/views/Notifications.vue:19 +#: front/src/views/Notifications.vue:84 msgctxt "Content/Notifications/Paragraph" msgid "Loading notifications…" msgstr "Cargament de las notificacions…" @@ -2460,6 +2583,7 @@ msgstr "Cargament dels favorits…" #: front/src/components/manage/library/LibrariesTable.vue:75 #: front/src/components/manage/library/TracksTable.vue:71 #: front/src/components/manage/library/UploadsTable.vue:99 +#: front/src/components/manage/moderation/ReportCard.vue:173 #: front/src/views/admin/library/AlbumDetail.vue:19 #: front/src/views/admin/library/ArtistDetail.vue:18 #: front/src/views/admin/library/LibraryDetail.vue:18 @@ -2475,12 +2599,12 @@ msgctxt "Content/Moderation/*/Short, Noun" msgid "Local account" msgstr "Compte local" -#: front/src/components/auth/Login.vue:84 +#: front/src/components/Home.vue:96 src/views/auth/Login.vue:29 msgctxt "Head/Login/Title" msgid "Log In" msgstr "Connexion" -#: front/src/components/auth/Login.vue:4 +#: front/src/views/auth/Login.vue:4 msgctxt "Content/Login/Title/Verb" msgid "Log in to your Funkwhale account" msgstr "Connectatz-vos a vòstre compte Funkwhale" @@ -2495,7 +2619,7 @@ msgctxt "Sidebar/Profile/List item.Link" msgid "Logged in as %{ username }" msgstr "Connectat coma %{ username }" -#: front/src/components/Sidebar.vue:54 src/components/auth/Login.vue:42 +#: front/src/components/Sidebar.vue:54 src/components/auth/LoginForm.vue:41 msgctxt "*/Login/*/Verb" msgid "Login" msgstr "Connexion" @@ -2513,41 +2637,41 @@ msgstr "Desconnexion" #: front/src/views/content/libraries/Home.vue:9 msgctxt "Content/Library/Paragraph" msgid "Looks like you don't have a library, it's time to create one." -msgstr "" -"Sembla qu’avètz pas cap de bibliotèca pel moment, es ora de ne crear una." +msgstr "Sembla qu’avètz pas cap de bibliotèca pel moment, es ora de ne crear una." -#: front/src/components/audio/Player.vue:632 -#: src/components/audio/Player.vue:633 +#: front/src/components/audio/Player.vue:658 +#: src/components/audio/Player.vue:659 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Looping disabled. Click to switch to single-track looping." -msgstr "" -"Repeticion desactivada. Clicatz per activar la repeticion de la pista " -"actuala." +msgstr "Repeticion desactivada. Clicatz per activar la repeticion de la pista actuala." -#: front/src/components/audio/Player.vue:635 -#: src/components/audio/Player.vue:636 +#: front/src/components/audio/Player.vue:661 +#: src/components/audio/Player.vue:662 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Looping on a single track. Click to switch to whole queue looping." -msgstr "" -"Repeticion de la pista actuala. Clicatz per activar la repeticion de tota la" -" fila." +msgstr "Repeticion de la pista actuala. Clicatz per activar la repeticion de tota la fila." -#: front/src/components/audio/Player.vue:638 -#: src/components/audio/Player.vue:639 +#: front/src/components/audio/Player.vue:664 +#: src/components/audio/Player.vue:665 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Looping on whole queue. Click to disable looping." msgstr "Repeticion de tota la fila, clicatz per desactivar la repeticion." -#: front/src/components/Sidebar.vue:223 +#: front/src/components/Sidebar.vue:230 msgctxt "Sidebar/*/Hidden text" msgid "Main menu" msgstr "Menú mà ger" -#: front/src/views/admin/library/Base.vue:31 +#: front/src/views/admin/library/Base.vue:34 msgctxt "Head/Admin/Title" msgid "Manage library" msgstr "Gerir la bibliotèca" +#: front/src/components/manage/moderation/InstancePolicyModal.vue:8 +msgctxt "Popup/Moderation/Title/Verb" +msgid "Manage moderation rules for %{ obj }" +msgstr "Gerir las règlas de moderacion per %{ obj }" + #: front/src/components/playlists/PlaylistModal.vue:3 msgctxt "Popup/Playlist/Title/Verb" msgid "Manage playlists" @@ -2563,7 +2687,7 @@ msgctxt "Content/Playlist/Button.Label/Verb" msgid "Manage your playlists" msgstr "Gerir vòstras listas de lectura" -#: front/src/views/Notifications.vue:14 +#: front/src/views/Notifications.vue:79 msgctxt "Content/Notifications/Button.Label/Verb" msgid "Mark all as read" msgstr "Las marcar totas coma legidas" @@ -2578,12 +2702,12 @@ msgctxt "Content/Notifications/Button.Tooltip/Verb" msgid "Mark as unread" msgstr "Marcar coma pas legidas" -#: front/src/views/admin/moderation/AccountsDetail.vue:310 +#: front/src/views/admin/moderation/AccountsDetail.vue:321 msgctxt "Content/*/*/Unit" msgid "MB" msgstr "Mo" -#: front/src/components/audio/Player.vue:625 +#: front/src/components/audio/Player.vue:651 msgctxt "Sidebar/Player/Hidden text" msgid "Media player" msgstr "Lector mèdia" @@ -2593,43 +2717,57 @@ msgctxt "Content/Profile/Paragraph" msgid "Member since %{ date }" msgstr "Membre dempuèi %{ date }" +#: front/src/components/manage/moderation/ReportCard.vue:109 +#: front/src/components/moderation/ReportModal.vue:41 +msgctxt "*/*/Field.Label/Noun" +msgid "Message" +msgstr "Messatge" + #: front/src/components/Footer.vue:32 msgctxt "Footer/*/List item.Link" msgid "Mobile and desktop apps" msgstr "Aplicacions mobil e de burèu" +#: front/src/components/Home.vue:143 +msgctxt "Content/Home/Link" +msgid "Mobile apps" +msgstr "Aplicacions mobil" + #: front/src/components/Sidebar.vue:96 -#: src/components/manage/users/UsersTable.vue:177 -#: front/src/views/admin/moderation/AccountsDetail.vue:502 -#: front/src/views/admin/moderation/Base.vue:21 +#: src/components/manage/users/UsersTable.vue:178 +#: front/src/views/admin/Settings.vue:85 +#: front/src/views/admin/moderation/AccountsDetail.vue:522 +#: front/src/views/admin/moderation/Base.vue:43 msgctxt "*/Moderation/*" msgid "Moderation" msgstr "Moderacion" #: front/src/views/admin/moderation/AccountsDetail.vue:78 -#: front/src/views/admin/moderation/DomainsDetail.vue:42 +#: front/src/views/admin/moderation/DomainsDetail.vue:70 msgctxt "Content/Moderation/Card.Paragraph" -msgid "" -"Moderation policies help you control how your instance interact with a given" -" domain or account." -msgstr "" -"Las politicas de moderacion vos ajudan a contrarotlar cossà vòstra instà ncia" -" deu interagir amb un compte o domeni donat." +msgid "Moderation policies help you control how your instance interact with a given domain or account." +msgstr "Las politicas de moderacion vos ajudan a contrarotlar cossà vòstra instà ncia deu interagir amb un compte o domeni donat." + +#: front/src/components/manage/moderation/InstancePolicyModal.vue:4 +msgctxt "Content/Moderation/Button.Label" +msgid "Moderation rules…" +msgstr "Règlas de moderacion…" #: front/src/components/library/EditCard.vue:5 msgctxt "Content/Library/Card/Short" msgid "Modification %{ id }" msgstr "Modificacion %{ id }" -#: front/src/components/mixins/Translations.vue:48 -#: front/src/components/mixins/Translations.vue:49 +#: front/src/components/mixins/Translations.vue:58 +#: front/src/components/mixins/Translations.vue:59 msgctxt "Content/Playlist/Dropdown/Noun" msgid "Modification date" msgstr "Data de modificacion" -#: front/src/components/library/AlbumBase.vue:42 -#: front/src/components/library/ArtistBase.vue:53 -#: front/src/components/library/TrackBase.vue:61 +#: front/src/components/audio/PlayButton.vue:100 +#: front/src/components/library/AlbumBase.vue:43 +#: front/src/components/library/ArtistBase.vue:54 +#: front/src/components/library/TrackBase.vue:59 msgctxt "*/*/Button.Label/Noun" msgid "More…" msgstr "Mai…" @@ -2639,7 +2777,7 @@ msgctxt "*/*/*/Noun" msgid "Music" msgstr "Musica" -#: front/src/components/audio/Player.vue:631 +#: front/src/components/audio/Player.vue:657 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Mute" msgstr "Copar lo son" @@ -2686,8 +2824,8 @@ msgctxt "Content/Library/Title" msgid "My libraries" msgstr "Mas bibliotècas" -#: front/src/components/audio/track/Row.vue:40 -#: src/components/library/EditCard.vue:60 +#: front/src/components/About.vue:105 src/components/audio/track/Row.vue:40 +#: front/src/components/library/EditCard.vue:60 #: front/src/components/library/EditForm.vue:70 #: front/src/components/library/TrackDetail.vue:34 #: front/src/components/library/TrackDetail.vue:43 @@ -2697,54 +2835,56 @@ msgstr "Mas bibliotècas" #: front/src/components/manage/library/TracksTable.vue:76 #: front/src/components/manage/library/UploadsTable.vue:121 #: front/src/components/manage/library/UploadsTable.vue:128 -#: front/src/components/manage/users/UsersTable.vue:61 +#: front/src/components/manage/moderation/ReportCard.vue:78 +#: front/src/components/manage/moderation/ReportCard.vue:87 +#: front/src/components/manage/moderation/ReportCard.vue:193 +#: front/src/components/manage/users/UsersTable.vue:62 #: front/src/views/admin/library/UploadDetail.vue:179 #: front/src/views/admin/library/UploadDetail.vue:214 #: front/src/views/admin/library/UploadDetail.vue:233 #: front/src/views/admin/library/UploadDetail.vue:244 #: front/src/views/admin/library/UploadDetail.vue:257 -#: front/src/views/admin/moderation/AccountsDetail.vue:192 -#: front/src/views/admin/moderation/DomainsDetail.vue:82 +#: front/src/views/admin/moderation/AccountsDetail.vue:193 +#: front/src/views/admin/moderation/DomainsDetail.vue:119 #: front/src/views/content/libraries/FilesTable.vue:95 #: front/src/views/content/libraries/FilesTable.vue:101 msgctxt "*/*/*" msgid "N/A" msgstr "ND" -#: front/src/components/manage/library/LibrariesTable.vue:48 -#: front/src/components/manage/library/UploadsTable.vue:59 -msgctxt "*/*/*" -msgid "Name" -msgstr "Nom" - #: front/src/components/auth/ApplicationForm.vue:9 -msgctxt "Content/Applications/Input.Label/Noun" -msgid "Name" -msgstr "Nom" - #: front/src/components/auth/Settings.vue:133 #: front/src/components/manage/library/ArtistsTable.vue:39 +#: front/src/components/manage/library/LibrariesTable.vue:48 +#: front/src/components/manage/library/TagsTable.vue:41 +#: front/src/components/manage/library/UploadsTable.vue:59 #: front/src/components/manage/moderation/AccountsTable.vue:39 -#: front/src/components/manage/moderation/DomainsTable.vue:38 -#: front/src/components/mixins/Translations.vue:53 +#: front/src/components/manage/moderation/DomainsTable.vue:46 +#: front/src/components/mixins/Translations.vue:63 #: front/src/components/playlists/PlaylistModal.vue:45 -#: front/src/views/admin/library/ArtistDetail.vue:98 +#: front/src/views/admin/library/ArtistDetail.vue:103 #: front/src/views/admin/library/LibraryDetail.vue:85 +#: front/src/views/admin/library/TagDetail.vue:68 #: front/src/views/admin/library/UploadDetail.vue:92 -#: front/src/views/admin/moderation/DomainsDetail.vue:97 -#: front/src/views/content/libraries/Form.vue:10 src/edits.js:10 -#: front/src/components/mixins/Translations.vue:54 +#: front/src/views/admin/moderation/DomainsDetail.vue:134 +#: front/src/views/content/libraries/Form.vue:10 src/edits.js:17 +#: front/src/components/mixins/Translations.vue:64 msgctxt "*/*/*/Noun" msgid "Name" msgstr "Nom" +#: front/src/views/Notifications.vue:24 src/views/Notifications.vue:58 +msgctxt "*/*/*" +msgid "Never" +msgstr "Jamai" + #: front/src/components/auth/Settings.vue:88 #: front/src/views/auth/PasswordResetConfirm.vue:14 msgctxt "Content/Settings/Input.Label" msgid "New password" msgstr "Nòu senhal" -#: front/src/components/Sidebar.vue:173 +#: front/src/components/Sidebar.vue:177 msgctxt "Sidebar/Player/Paragraph" msgid "New tracks will be appended here automatically." msgstr "Las novèlas pistas serà n automaticament ajustadas aquÃ." @@ -2754,21 +2894,18 @@ msgctxt "Content/Library/Card.Table.Header/Short" msgid "New value" msgstr "Nòva valor" -#: front/src/components/audio/Player.vue:629 +#: front/src/components/audio/Player.vue:655 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Next track" msgstr "Pista seguenta" -#: front/src/components/Sidebar.vue:130 +#: front/src/components/Sidebar.vue:134 +#: front/src/components/manage/moderation/DomainsTable.vue:13 +#: front/src/views/admin/moderation/DomainsDetail.vue:110 msgctxt "*/*/*" msgid "No" msgstr "Non" -#: front/src/components/Home.vue:95 -msgctxt "Content/Home/List item" -msgid "No add-ons, no plugins : you only need a web library" -msgstr "Cap d’extension d’installar, vos cal pas qu’una bibliotèca sul web" - #: front/src/components/audio/Search.vue:25 msgctxt "Content/Search/Paragraph" msgid "No album matched your query" @@ -2782,9 +2919,12 @@ msgstr "Cap d’artista correspond pas a vòstra recèrca" #: front/src/components/library/TrackDetail.vue:14 msgctxt "Content/Track/Table.Paragraph" msgid "No copyright information available for this track" -msgstr "" -"Cap d’informacions pas disponiblas per aquesta pista tocant los dreches " -"d’autor" +msgstr "Cap d’informacions pas disponiblas per aquesta pista tocant los dreches d’autor" + +#: front/src/components/About.vue:25 src/components/Home.vue:25 +msgctxt "Content/Home/Paragraph" +msgid "No description available." +msgstr "Cap de descripcion pas disponibla." #: front/src/components/library/TrackDetail.vue:25 msgctxt "Content/Track/Table.Paragraph" @@ -2796,7 +2936,7 @@ msgctxt "Content/Federation/Paragraph" msgid "No matching library." msgstr "Cap de bibliotèca correspondenta." -#: front/src/views/Notifications.vue:28 +#: front/src/views/Notifications.vue:93 msgctxt "Content/Notifications/Paragraph" msgid "No notification to show." msgstr "Cap de notificacion de mostrar." @@ -2806,6 +2946,16 @@ msgctxt "Content/*/Paragraph" msgid "No results were found." msgstr "Cap de resultat pas trobat." +#: front/src/components/About.vue:32 +msgctxt "Content/Home/Paragraph" +msgid "No rules available." +msgstr "Cap de règla pas disponibla." + +#: front/src/components/About.vue:39 +msgctxt "Content/Home/Paragraph" +msgid "No terms available." +msgstr "Cap de condicion pas disponibla." + #: front/src/components/mixins/Translations.vue:10 #: front/src/components/mixins/Translations.vue:11 msgctxt "Content/Settings/Dropdown" @@ -2822,18 +2972,21 @@ msgctxt "Content/Admin/Table" msgid "Not used" msgstr "Pas utilizat" -#: front/src/components/mixins/Translations.vue:100 -#: front/src/components/mixins/Translations.vue:101 -msgctxt "Content/OAuth Scopes/Label" -msgid "Notifications" -msgstr "Notificacions" - -#: front/src/components/Sidebar.vue:46 src/views/Notifications.vue:76 +#: front/src/components/Sidebar.vue:46 +#: src/components/mixins/Translations.vue:112 +#: front/src/views/Notifications.vue:151 +#: src/components/mixins/Translations.vue:113 msgctxt "*/Notifications/*" msgid "Notifications" msgstr "Notificacions" -#: front/src/components/Footer.vue:47 +#: front/src/components/mixins/Translations.vue:47 +#: front/src/components/mixins/Translations.vue:48 +msgctxt "Content/Moderation/Dropdown" +msgid "Offensive content" +msgstr "Contengut ofensiu" + +#: front/src/components/Footer.vue:55 msgctxt "Footer/*/List item.Link" msgid "Official website" msgstr "Site oficial" @@ -2848,6 +3001,11 @@ msgctxt "Content/Library/Card.Table.Header/Short" msgid "Old value" msgstr "Anciana valor" +#: front/src/components/About.vue:90 +msgctxt "*/*/*/State of registrations" +msgid "Open" +msgstr "Dubèrtas" + #: front/src/components/manage/users/InvitationsTable.vue:20 msgctxt "Content/Admin/Dropdown/Adjective" msgid "Open" @@ -2855,27 +3013,29 @@ msgstr "Accès liure" #: front/src/components/library/ImportStatusModal.vue:56 msgctxt "Popup/Import/Table.Label/Value" -msgid "" -"Open a support thread (include the debug information below in your message)" -msgstr "" - -#: front/src/components/library/AlbumBase.vue:73 -#: front/src/components/library/ArtistBase.vue:84 -#: front/src/components/library/TrackBase.vue:92 +msgid "Open a support thread (include the debug information below in your message)" +msgstr "Dobrir un fil de discutida d’assisténcia (donatz las informacions de desbugatge dins vòstre messatge)" + +#: front/src/components/library/AlbumBase.vue:87 +#: front/src/components/library/ArtistBase.vue:99 +#: front/src/components/library/TagDetail.vue:11 +#: front/src/components/library/TrackBase.vue:103 +#: front/src/components/manage/moderation/ReportCard.vue:128 msgctxt "Content/Moderation/Link" msgid "Open in moderation interface" msgstr "Dobrir dins l’interfà cia de moderacion" -#: front/src/views/admin/library/AlbumDetail.vue:31 -#: front/src/views/admin/library/ArtistDetail.vue:30 -#: front/src/views/admin/library/TrackDetail.vue:30 +#: front/src/views/admin/library/AlbumDetail.vue:37 +#: front/src/views/admin/library/ArtistDetail.vue:35 +#: front/src/views/admin/library/TagDetail.vue:21 +#: front/src/views/admin/library/TrackDetail.vue:36 msgctxt "Content/Moderation/Link/Verb" msgid "Open local profile" msgstr "Dobrir lo perfil local" -#: front/src/views/admin/library/AlbumDetail.vue:46 -#: front/src/views/admin/library/ArtistDetail.vue:45 -#: front/src/views/admin/library/TrackDetail.vue:45 +#: front/src/views/admin/library/AlbumDetail.vue:52 +#: front/src/views/admin/library/ArtistDetail.vue:50 +#: front/src/views/admin/library/TrackDetail.vue:51 msgctxt "Content/Moderation/Link/Verb" msgid "Open on MusicBrainz" msgstr "Veire sus MusicBrainz" @@ -2885,10 +3045,10 @@ msgctxt "Content/Moderation/Link/Verb" msgid "Open profile" msgstr "Dobrir lo perfil" -#: front/src/views/admin/library/AlbumDetail.vue:54 -#: front/src/views/admin/library/ArtistDetail.vue:53 +#: front/src/views/admin/library/AlbumDetail.vue:60 +#: front/src/views/admin/library/ArtistDetail.vue:58 #: front/src/views/admin/library/LibraryDetail.vue:49 -#: front/src/views/admin/library/TrackDetail.vue:53 +#: front/src/views/admin/library/TrackDetail.vue:59 #: front/src/views/admin/library/UploadDetail.vue:50 #: front/src/views/admin/moderation/AccountsDetail.vue:52 msgctxt "Content/Moderation/Link/Verb" @@ -2909,6 +3069,7 @@ msgstr "O personalizatz aquesta règla" #: src/components/library/Radios.vue:41 #: front/src/components/manage/library/EditsCardList.vue:37 #: front/src/components/manage/users/UsersTable.vue:17 +#: front/src/views/admin/moderation/ReportsList.vue:42 #: front/src/views/playlists/List.vue:25 msgctxt "Content/Search/Dropdown.Label/Noun" msgid "Order" @@ -2916,40 +3077,50 @@ msgstr "Ã’rdre" #: front/src/components/favorites/List.vue:24 #: src/components/library/Albums.vue:15 -#: front/src/components/library/Artists.vue:15 +#: front/src/components/library/Artists.vue:19 #: src/components/library/Radios.vue:33 #: front/src/components/manage/library/AlbumsTable.vue:11 #: front/src/components/manage/library/ArtistsTable.vue:11 #: front/src/components/manage/library/EditsCardList.vue:29 #: front/src/components/manage/library/LibrariesTable.vue:20 +#: front/src/components/manage/library/TagsTable.vue:11 #: front/src/components/manage/library/TracksTable.vue:11 #: front/src/components/manage/library/UploadsTable.vue:30 #: front/src/components/manage/moderation/AccountsTable.vue:11 -#: front/src/components/manage/moderation/DomainsTable.vue:9 +#: front/src/components/manage/moderation/DomainsTable.vue:17 #: front/src/components/manage/users/InvitationsTable.vue:9 #: front/src/components/manage/users/UsersTable.vue:9 +#: front/src/views/admin/moderation/ReportsList.vue:34 #: front/src/views/content/libraries/FilesTable.vue:21 #: front/src/views/playlists/List.vue:17 msgctxt "Content/Search/Dropdown.Label/Noun" msgid "Ordering" msgstr "Ã’rdre" -#: front/src/components/library/Albums.vue:23 -#: src/components/library/Artists.vue:23 +#: front/src/components/library/Albums.vue:27 +#: src/components/library/Artists.vue:27 #: front/src/components/manage/library/AlbumsTable.vue:19 #: front/src/components/manage/library/ArtistsTable.vue:19 #: front/src/components/manage/library/LibrariesTable.vue:28 +#: front/src/components/manage/library/TagsTable.vue:19 #: front/src/components/manage/library/TracksTable.vue:19 #: front/src/components/manage/library/UploadsTable.vue:38 #: front/src/components/manage/moderation/AccountsTable.vue:19 -#: front/src/components/manage/moderation/DomainsTable.vue:17 +#: front/src/components/manage/moderation/DomainsTable.vue:25 #: front/src/views/content/libraries/FilesTable.vue:29 msgctxt "Content/Search/Dropdown.Label/Noun" msgid "Ordering direction" msgstr "Direccion" +#: front/src/components/mixins/Translations.vue:48 +#: front/src/components/mixins/Translations.vue:49 +msgctxt "Content/Moderation/Dropdown" +msgid "Other" +msgstr "Autre" + +#: front/src/components/manage/moderation/ReportCard.vue:143 #: front/src/components/manage/users/InvitationsTable.vue:38 -msgctxt "Content/Admin/Table.Label" +msgctxt "*/*/*" msgid "Owner" msgstr "Proprietari" @@ -2968,12 +3139,14 @@ msgctxt "Content/*/Hidden text/Noun" msgid "Pagination" msgstr "Paginacion" -#: front/src/components/auth/Login.vue:33 src/components/auth/Signup.vue:40 -msgctxt "Content/*/Input.Label" +#: front/src/components/auth/LoginForm.vue:32 +#: src/components/auth/Settings.vue:291 +#: front/src/components/auth/SignupForm.vue:36 +msgctxt "*/*/*" msgid "Password" msgstr "Senhal" -#: front/src/components/auth/SubsonicTokenForm.vue:94 +#: front/src/components/auth/SubsonicTokenForm.vue:100 msgctxt "Content/Settings/Message" msgid "Password updated" msgstr "Senhal actualizat" @@ -2983,12 +3156,12 @@ msgctxt "Content/Signup/Card.Title" msgid "Password updated successfully" msgstr "Senhal corrèctament modificat" -#: front/src/components/audio/Player.vue:628 +#: front/src/components/audio/Player.vue:654 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Pause track" msgstr "Pausar" -#: front/src/components/ShortcutsModal.vue:59 +#: front/src/components/ShortcutsModal.vue:96 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Pause/play the current track" msgstr "Pausar/Legir la pista actuala" @@ -3017,7 +3190,7 @@ msgctxt "Content/Library/Label" msgid "Pending files" msgstr "Fichièrs en espèra" -#: front/src/components/Sidebar.vue:225 +#: front/src/components/Sidebar.vue:232 msgctxt "Sidebar/Notifications/Hidden text" msgid "Pending follow requests" msgstr "Demandas d’abonament en espèra" @@ -3028,84 +3201,75 @@ msgctxt "Content/Admin/*/Noun" msgid "Pending review" msgstr "En espèra de validacion" -#: front/src/components/Sidebar.vue:226 +#: front/src/components/Sidebar.vue:233 msgctxt "Sidebar/Moderation/Hidden text" msgid "Pending review edits" msgstr "Fichièrs en espèra" +#: front/src/components/auth/Settings.vue:176 #: front/src/components/manage/users/UsersTable.vue:42 #: front/src/views/admin/moderation/AccountsDetail.vue:166 -msgctxt "Content/Admin/Table.Label/Noun" -msgid "Permissions" -msgstr "Autorizacions" - -#: front/src/components/auth/Settings.vue:176 msgctxt "Content/*/*/Noun" msgid "Permissions" msgstr "Autorizacions" #: front/src/components/audio/PlayButton.vue:9 -#: front/src/components/library/TrackBase.vue:26 +#: front/src/components/library/TrackBase.vue:24 msgctxt "*/Queue/Button.Label/Short, Verb" msgid "Play" msgstr "Legir" #: front/src/components/audio/album/Card.vue:48 -#: front/src/components/audio/artist/Card.vue:44 -#: front/src/components/library/AlbumBase.vue:20 +#: front/src/components/library/AlbumBase.vue:21 #: front/src/components/library/AlbumDetail.vue:11 #: src/views/playlists/Detail.vue:24 msgctxt "Content/Queue/Button.Label/Short, Verb" msgid "Play all" msgstr "O legir tot" -#: front/src/components/library/ArtistBase.vue:31 +#: front/src/components/library/ArtistBase.vue:32 msgctxt "Content/Artist/Button.Label/Verb" msgid "Play all albums" msgstr "Legir totes los albums" -#: front/src/components/audio/PlayButton.vue:76 +#: front/src/components/audio/PlayButton.vue:92 msgctxt "*/Queue/Dropdown/Button/Title" msgid "Play next" msgstr "Legir en seguida" -#: front/src/components/ShortcutsModal.vue:67 +#: front/src/components/ShortcutsModal.vue:120 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Play next track" msgstr "Legir la pista seguenta" -#: front/src/components/audio/PlayButton.vue:74 +#: front/src/components/audio/PlayButton.vue:90 msgctxt "*/Queue/Dropdown/Button/Title" msgid "Play now" msgstr "Legir ara" -#: front/src/components/ShortcutsModal.vue:63 +#: front/src/components/ShortcutsModal.vue:116 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Play previous track" msgstr "Legir la pista precedenta" -#: front/src/components/audio/PlayButton.vue:77 +#: front/src/components/audio/PlayButton.vue:93 msgctxt "*/Queue/Dropdown/Button/Title" msgid "Play similar songs" msgstr "Legir de cançons similaras" -#: front/src/components/Sidebar.vue:224 +#: front/src/components/Sidebar.vue:231 msgctxt "Sidebar/Player/Hidden text" msgid "Play this track" msgstr "Legir aquesta pista" -#: front/src/components/audio/Player.vue:627 +#: front/src/components/audio/Player.vue:653 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Play track" msgstr "Legir" -#: front/src/components/audio/PlayButton.vue:82 -msgctxt "*/Queue/Button/Title" -msgid "Play..." -msgstr "Legir…" - -#: front/src/views/playlists/Detail.vue:91 -msgctxt "Head/Playlist/Title" +#: front/src/components/mixins/Report.vue:66 src/views/playlists/Detail.vue:121 +#: front/src/components/mixins/Report.vue:67 +msgctxt "*/*/*" msgid "Playlist" msgstr "Lista de lectura" @@ -3141,33 +3305,30 @@ msgctxt "Content/Playlist/Dropdown.Label" msgid "Playlist visibility" msgstr "Visibilitat de la lista de lectura" -#: front/src/components/mixins/Translations.vue:88 -#: front/src/components/mixins/Translations.vue:89 -msgctxt "Content/OAuth Scopes/Label" -msgid "Playlists" -msgstr "Listas de lectura" - #: front/src/components/Sidebar.vue:71 src/components/library/Home.vue:16 -#: front/src/components/library/Library.vue:16 src/views/admin/Settings.vue:83 -#: front/src/views/admin/library/AlbumDetail.vue:173 -#: front/src/views/admin/library/ArtistDetail.vue:162 -#: front/src/views/admin/library/TrackDetail.vue:225 +#: front/src/components/library/Library.vue:16 +#: front/src/components/mixins/Translations.vue:100 +#: src/views/admin/Settings.vue:83 +#: front/src/views/admin/library/AlbumDetail.vue:179 +#: front/src/views/admin/library/ArtistDetail.vue:167 +#: front/src/views/admin/library/TrackDetail.vue:231 #: src/views/playlists/List.vue:106 +#: front/src/components/mixins/Translations.vue:101 msgctxt "*/*/*" msgid "Playlists" msgstr "Listas de lectura" -#: front/src/components/Home.vue:56 -msgctxt "Content/Home/List item" -msgid "Playlists? We got them" -msgstr "Las listas de lectura ? Las avèm" +#: front/src/components/audio/EmbedWizard.vue:9 +msgctxt "Content/Embed/Message" +msgid "Please contact your admins and ask them to update the corresponding setting." +msgstr "" #: front/src/components/auth/Settings.vue:79 msgctxt "Content/Settings/Error message.List item/Call to action" msgid "Please double-check your password is correct" msgstr "Mercés de verificar que lo senhal es corrèct" -#: front/src/components/auth/Login.vue:9 +#: front/src/components/auth/LoginForm.vue:5 msgctxt "Content/Login/Error message.List item/Call to action" msgid "Please double-check your username/password couple is correct" msgstr "Mercés de verificar que lo nom d’utilizaire e lo senhal son corrèctes" @@ -3175,29 +3336,29 @@ msgstr "Mercés de verificar que lo nom d’utilizaire e lo senhal son corrècte #: front/src/components/auth/Settings.vue:46 msgctxt "Content/Settings/Paragraph" msgid "PNG, GIF or JPG. At most 2MB. Will be downscaled to 400x400px." -msgstr "" -"PNG, GIF o JPG. 2Mo al maximum. L’imatge serà retalhat en 400×400 pixèls." +msgstr "PNG, GIF o JPG. 2Mo al maximum. L’imatge serà retalhat en 400×400 pixèls." -#: front/src/views/admin/library/TrackDetail.vue:137 -msgctxt "*/*/*/Noun" +#: front/src/components/About.vue:72 +msgctxt "Content/About/Header/Name" +msgid "Pod configuration" +msgstr "Configuracion del pod" + +#: front/src/views/admin/library/TrackDetail.vue:143 src/edits.js:70 +msgctxt "*/*/*/Short, Noun" msgid "Position" msgstr "Posicions" #: front/src/components/manage/moderation/InstancePolicyForm.vue:118 msgctxt "Content/Moderation/Help text" -msgid "" -"Prevent account or domain from triggering notifications, except from " -"followers." -msgstr "" -"Empacha lo compte o domeni de far veire de notificacions, levat pels " -"seguidors." +msgid "Prevent account or domain from triggering notifications, except from followers." +msgstr "Empacha lo compte o domeni de far veire de notificacions, levat pels seguidors." -#: front/src/components/audio/EmbedWizard.vue:33 +#: front/src/components/audio/EmbedWizard.vue:43 msgctxt "Popup/Embed/Title/Noun" msgid "Preview" msgstr "Apercebut" -#: front/src/components/audio/Player.vue:626 +#: front/src/components/audio/Player.vue:652 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Previous track" msgstr "Pista precedenta" @@ -3208,7 +3369,7 @@ msgctxt "Content/Settings/Dropdown/Short" msgid "Private" msgstr "Privat" -#: front/src/views/content/remote/Card.vue:43 +#: front/src/views/content/remote/Card.vue:56 msgctxt "Content/Library/Card.List item" msgid "Problem during scanning" msgstr "Error en explorant" @@ -3229,14 +3390,19 @@ msgctxt "Content/Library/Tab.Title/Short" msgid "Processing" msgstr "Tractament" -#: front/src/components/mixins/Translations.vue:68 -#: front/src/components/mixins/Translations.vue:69 +#: front/src/components/mixins/Translations.vue:80 +#: front/src/components/mixins/Translations.vue:81 msgctxt "Content/OAuth Scopes/Label" msgid "Profile" msgstr "Perfil" +#: front/src/components/auth/SignupForm.vue:5 +msgctxt "Content/Signup/Form/Paragraph" +msgid "Public registrations are not possible on this instance. You will need an invitation code to sign up." +msgstr "Las inscripcions son tampadas sus aquesta instà ncia. Auretz de téner un còdi d’invitacion per vos marcar." + #: front/src/components/manage/moderation/AccountsTable.vue:188 -#: front/src/components/manage/moderation/DomainsTable.vue:168 +#: front/src/components/manage/moderation/DomainsTable.vue:186 #: front/src/views/content/libraries/Quota.vue:36 #: front/src/views/content/libraries/Quota.vue:39 #: front/src/views/content/libraries/Quota.vue:62 @@ -3267,7 +3433,7 @@ msgctxt "Sidebar/Queue/Tab.Title/Noun" msgid "Queue" msgstr "Fila" -#: front/src/components/audio/Player.vue:322 +#: front/src/components/audio/Player.vue:329 msgctxt "Content/Queue/Message" msgid "Queue shuffled!" msgstr "La fila es estada mesclada !" @@ -3299,16 +3465,12 @@ msgstr "Rà dio actualizada" #: front/src/components/library/Library.vue:13 #: src/components/library/Radios.vue:142 +#: front/src/components/mixins/Translations.vue:104 +#: front/src/components/mixins/Translations.vue:105 msgctxt "*/*/*" msgid "Radios" msgstr "Rà dios" -#: front/src/components/mixins/Translations.vue:92 -#: front/src/components/mixins/Translations.vue:93 -msgctxt "Content/OAuth Scopes/Label" -msgid "Radios" -msgstr "Rà dios" - #: front/src/components/auth/ApplicationForm.vue:151 msgctxt "Content/OAuth Scopes/Label/Verb" msgid "Read" @@ -3335,15 +3497,15 @@ msgctxt "Content/Moderation/*/Noun" msgid "Reason" msgstr "Rason" -#: front/src/views/admin/moderation/AccountsDetail.vue:251 -#: front/src/views/admin/moderation/DomainsDetail.vue:179 +#: front/src/views/admin/moderation/AccountsDetail.vue:252 +#: front/src/views/admin/moderation/DomainsDetail.vue:216 msgctxt "Content/Moderation/Table.Label/Noun" msgid "Received library follows" msgstr "Seguiments de bibliotècas recebuts" -#: front/src/components/manage/moderation/DomainsTable.vue:40 -#: front/src/components/mixins/Translations.vue:62 -#: front/src/components/mixins/Translations.vue:63 +#: front/src/components/manage/moderation/DomainsTable.vue:48 +#: front/src/components/mixins/Translations.vue:74 +#: front/src/components/mixins/Translations.vue:75 msgctxt "Content/Moderation/*/Noun" msgid "Received messages" msgstr "Messatges recebuts" @@ -3363,6 +3525,11 @@ msgctxt "Content/Home/Title" msgid "Recently added" msgstr "Ajustats i a res" +#: front/src/components/Home.vue:167 +msgctxt "Content/Home/Title" +msgid "Recently added albums" +msgstr "Albums ajustats i a res" + #: front/src/components/library/Home.vue:11 msgctxt "Content/Home/Title" msgid "Recently favorited" @@ -3391,14 +3558,14 @@ msgctxt "Popup/*/Message.Title" msgid "Refresh error" msgstr "Error en actualizar" -#: front/src/views/admin/library/AlbumDetail.vue:50 -#: front/src/views/admin/library/ArtistDetail.vue:49 -#: front/src/views/admin/library/TrackDetail.vue:49 +#: front/src/views/admin/library/AlbumDetail.vue:56 +#: front/src/views/admin/library/ArtistDetail.vue:54 +#: front/src/views/admin/library/TrackDetail.vue:55 msgctxt "Content/Moderation/Button/Verb" msgid "Refresh from remote server" msgstr "Actualizar del servidor alonhat estant" -#: front/src/views/admin/moderation/DomainsDetail.vue:127 +#: front/src/views/admin/moderation/DomainsDetail.vue:164 msgctxt "Content/Moderation/Button.Label/Verb" msgid "Refresh node info" msgstr "Actualizar las info del nos" @@ -3410,10 +3577,8 @@ msgstr "Actualizar las info del nos" #: front/src/components/federation/FetchButton.vue:80 msgctxt "Popup/*/Message.Content" -msgid "" -"Refresh request wasn't proceed in time by our server. It will be processed " -"later." -msgstr "" +msgid "Refresh request wasn't proceed in time by our server. It will be processed later." +msgstr "La requèsta d’actualizacion es pas estada tractada a temps per nòstre servidor. Serà executada mai tard." #: front/src/components/federation/FetchButton.vue:16 msgctxt "Popup/*/Message.Title" @@ -3433,18 +3598,14 @@ msgstr "L’actualizada es estada passada" #: front/src/components/federation/FetchButton.vue:7 msgctxt "Popup/*/Title" msgid "Refreshing object from remote…" -msgstr "" +msgstr "Actualizacion de l’objècte del servidor alonhat estant…" -#: front/src/components/auth/Signup.vue:9 -msgctxt "Content/Signup/Form/Paragraph" -msgid "" -"Registration are closed on this instance, you will need an invitation code " -"to signup." -msgstr "" -"Las inscripcions son tampadas sus aquestà instà ncia, aurètz de téner un còdi" -" d’invitacion per vos marcar." +#: front/src/components/About.vue:86 +msgctxt "*/*/*" +msgid "Registrations" +msgstr "Inscripcions" -#: front/src/components/manage/users/UsersTable.vue:71 +#: front/src/components/manage/users/UsersTable.vue:72 msgctxt "Content/Admin/Table, User role" msgid "Regular user" msgstr "Utilizaire estandard" @@ -3469,8 +3630,8 @@ msgid "Rejected" msgstr "Regetat" #: front/src/components/manage/library/AlbumsTable.vue:43 -#: front/src/components/mixins/Translations.vue:44 src/edits.js:28 -#: front/src/components/mixins/Translations.vue:45 +#: front/src/components/mixins/Translations.vue:54 src/edits.js:43 +#: front/src/components/mixins/Translations.vue:55 msgctxt "Content/*/*/Noun" msgid "Release date" msgstr "Data de sortida" @@ -3480,6 +3641,11 @@ msgctxt "Content/Library/Paragraph" msgid "Remaining storage space" msgstr "Espaci liure" +#: front/src/views/Notifications.vue:18 src/views/Notifications.vue:52 +msgctxt "Content/Notifications/Label" +msgid "Remind me in:" +msgstr "Me tornar avisar d’aquà :" + #: front/src/views/content/remote/Home.vue:6 msgctxt "Content/Library/Title/Noun" msgid "Remote libraries" @@ -3487,12 +3653,8 @@ msgstr "Bibliotècas alonhadas" #: front/src/views/content/remote/Home.vue:7 msgctxt "Content/Library/Paragraph" -msgid "" -"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." -msgstr "" -"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." +msgid "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." +msgstr "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." #: front/src/components/library/radios/Filter.vue:59 msgctxt "Content/Radio/Button.Label/Verb" @@ -3509,6 +3671,12 @@ msgctxt "Content/Moderation/Button.Label" msgid "Remove filter" msgstr "Levar lo filtre" +#: front/src/components/manage/moderation/DomainsTable.vue:198 +#: front/src/views/admin/moderation/DomainsDetail.vue:39 +msgctxt "Content/Moderation/Action/Verb" +msgid "Remove from allow-list" +msgstr "Tirar de la lista de las autorizacions" + #: front/src/components/favorites/TrackFavoriteIcon.vue:26 msgctxt "Content/Track/Icon.Tooltip/Verb" msgid "Remove from favorites" @@ -3516,44 +3684,98 @@ msgstr "Tirar dels favorits" #: front/src/views/content/libraries/Quota.vue:38 msgctxt "Popup/Library/Paragraph" -msgid "" -"Removes uploaded but yet to be processed tracks completely, adding the " -"corresponding data to your quota." -msgstr "" -"Las pistas importadas que lo servidor a pas encara tractadas serà n " -"complètament suprimidas. Lo quòta correspondent vos serà tornat." +msgid "Removes uploaded but yet to be processed tracks completely, adding the corresponding data to your quota." +msgstr "Las pistas importadas que lo servidor a pas encara tractadas serà n complètament suprimidas. Lo quòta correspondent vos serà tornat." #: front/src/views/content/libraries/Quota.vue:64 msgctxt "Popup/Library/Paragraph" -msgid "" -"Removes uploaded tracks skipped during the import processes completely, " -"adding the corresponding data to your quota." -msgstr "" -"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." +msgid "Removes uploaded tracks skipped during the import processes completely, adding the corresponding data to your quota." +msgstr "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." #: front/src/views/content/libraries/Quota.vue:90 msgctxt "Popup/Library/Paragraph" -msgid "" -"Removes uploaded tracks that could not be processed by the server " -"completely, adding the corresponding data to your quota." -msgstr "" -"Las pistas enviadas mas pas complètament tractadas pel servidor serà n " -"complètament suprimidas. Vos donarà de nòu lo quòta escafat." +msgid "Removes uploaded tracks that could not be processed by the server completely, adding the corresponding data to your quota." +msgstr "Las pistas enviadas mas pas complètament tractadas pel servidor serà n complètament suprimidas. Vos donarà de nòu lo quòta escafat." -#: front/src/components/auth/SubsonicTokenForm.vue:33 -#: front/src/components/auth/SubsonicTokenForm.vue:36 +#: front/src/components/audio/PlayButton.vue:94 +msgctxt "*/Queue/Dropdown/Button/Title" +msgid "Replace current queue" +msgstr "Remplaçar la fila actuala" + +#: front/src/components/mixins/Report.vue:6 src/components/mixins/Report.vue:7 +msgctxt "*/Moderation/*/Verb" +msgid "Report @%{ username }…" +msgstr "Senhalar @%{ username }…" + +#: front/src/components/manage/moderation/ReportCard.vue:5 +msgctxt "Content/Moderation/Card/Short" +msgid "Report %{ id }" +msgstr "Senhalar %{ id }" + +#: front/src/components/moderation/ReportModal.vue:139 +msgctxt "*/Moderation/Message" +msgid "Report successfully submitted, thank you" +msgstr "Senhalament corrèctament enviat, mercés" + +#: front/src/components/mixins/Report.vue:36 +#: src/components/mixins/Report.vue:37 +msgctxt "*/Moderation/*/Verb" +msgid "Report this album…" +msgstr "Senhalar aqueste album…" + +#: front/src/components/mixins/Report.vue:50 +#: src/components/mixins/Report.vue:51 +msgctxt "*/Moderation/*/Verb" +msgid "Report this artist…" +msgstr "Senhalar aqueste artista…" + +#: front/src/components/mixins/Report.vue:72 +#: src/components/mixins/Report.vue:73 +msgctxt "*/Moderation/*/Verb" +msgid "Report this library…" +msgstr "Senhalar aquesta bibliotèca…" + +#: front/src/components/mixins/Report.vue:61 +#: src/components/mixins/Report.vue:62 +msgctxt "*/Moderation/*/Verb" +msgid "Report this playlist…" +msgstr "Senhalar aquesta lista de lectura…" + +#: front/src/components/mixins/Report.vue:23 +#: src/components/mixins/Report.vue:24 +msgctxt "*/Moderation/*/Verb" +msgid "Report this track…" +msgstr "Senhalar aquesta pista…" + +#: front/src/components/audio/PlayButton.vue:95 +msgctxt "*/Moderation/*/Button/Label,Verb" +msgid "Report…" +msgstr "Senhalar…" + +#: front/src/components/manage/moderation/ReportCard.vue:117 +msgctxt "Content/*/*/Short" +msgid "Reported object" +msgstr "Objècte senhalat" + +#: front/src/views/admin/moderation/Base.vue:5 +#: front/src/views/admin/moderation/ReportsList.vue:3 +#: front/src/views/admin/moderation/ReportsList.vue:208 +msgctxt "*/Moderation/*/Noun" +msgid "Reports" +msgstr "Senhalaments" + +#: front/src/components/auth/SubsonicTokenForm.vue:38 +#: front/src/components/auth/SubsonicTokenForm.vue:41 msgctxt "*/Settings/Button.Label/Verb" msgid "Request a new password" msgstr "Demandar un nòu senhal" -#: front/src/components/auth/SubsonicTokenForm.vue:34 +#: front/src/components/auth/SubsonicTokenForm.vue:39 msgctxt "Popup/Settings/Title" msgid "Request a new Subsonic API password?" msgstr "Demandar un nòu senhal per l’API Subsonic ?" -#: front/src/components/auth/SubsonicTokenForm.vue:42 +#: front/src/components/auth/SubsonicTokenForm.vue:47 msgctxt "Content/Settings/Button.Label/Verb" msgid "Request a password" msgstr "Demandar un senhal" @@ -3561,37 +3783,53 @@ msgstr "Demandar un senhal" #: front/src/components/federation/FetchButton.vue:64 msgctxt "Popup/*/Loading.Title" msgid "Requesting a fetch…" -msgstr "" +msgstr "Demanda de recuperacion…" -#: front/src/components/library/EditForm.vue:82 +#: front/src/components/library/EditForm.vue:94 msgctxt "Content/Library/Button.Label" -msgid "Reset to initial value: %{ value }" -msgstr "Tornar a la valor iniciala : %{ value }" +msgid "Reset to initial value" +msgstr "Tornar a la valor iniciala" -#: front/src/components/auth/Login.vue:35 src/views/auth/PasswordReset.vue:4 -#: front/src/views/auth/PasswordReset.vue:53 +#: front/src/components/auth/LoginForm.vue:34 +#: src/views/auth/PasswordReset.vue:4 front/src/views/auth/PasswordReset.vue:53 msgctxt "*/Login/*/Verb" msgid "Reset your password" msgstr "Reïnicializar lo senhal" +#: front/src/components/manage/moderation/ReportCard.vue:83 +msgctxt "Content/*/*/Noun" +msgid "Resolution date" +msgstr "Data de resolucion" + +#: front/src/components/manage/moderation/ReportCard.vue:218 +msgctxt "Content/*/Button.Label/Verb" +msgid "Resolve" +msgstr "Resòlver" + +#: front/src/components/manage/moderation/ReportCard.vue:62 +#: front/src/views/admin/moderation/ReportsList.vue:20 +msgctxt "Content/*/*/Short" +msgid "Resolved" +msgstr "Resolgut" + #: front/src/views/content/libraries/FilesTable.vue:223 msgctxt "Content/Library/Dropdown/Verb" msgid "Restart import" msgstr "Relançar l’import" +#: front/src/components/library/EditForm.vue:31 +msgctxt "Content/Library/Button.Label" +msgid "Restrict to unreviewed edits" +msgstr "Restrénher a la modifications pas repassadas" + #: front/src/components/favorites/List.vue:39 -#: src/components/library/Albums.vue:30 -#: front/src/components/library/Artists.vue:30 +#: src/components/library/Albums.vue:34 +#: front/src/components/library/Artists.vue:34 #: src/components/library/Radios.vue:52 front/src/views/playlists/List.vue:32 msgctxt "Content/Search/Dropdown.Label/Noun" msgid "Results per page" msgstr "Resultats per pagina" -#: front/src/components/library/EditForm.vue:31 -msgctxt "Content/Library/Button.Label" -msgid "Retrict to unreviewed edits" -msgstr "Restrénher a la modifications pas repassadas" - #: front/src/views/auth/EmailConfirm.vue:17 msgctxt "Content/Signup/Link/Verb" msgid "Return to login" @@ -3622,52 +3860,53 @@ msgctxt "Content/Moderation/Card.Title/Noun" msgid "Rule" msgstr "Règla" -#: front/src/components/admin/SettingsGroup.vue:67 +#: front/src/components/About.vue:28 src/components/About.vue:56 +msgctxt "Content/About/Header" +msgid "Rules" +msgstr "Règlas" + +#: front/src/components/admin/SettingsGroup.vue:75 #: front/src/components/library/radios/Builder.vue:34 msgctxt "Content/*/Button.Label/Verb" msgid "Save" msgstr "Enregistrar" -#: front/src/views/content/remote/Card.vue:175 +#: front/src/views/content/remote/Card.vue:203 msgctxt "Content/Library/Message" msgid "Scan launched" msgstr "Exploracion lançada" -#: front/src/views/content/remote/Card.vue:67 +#: front/src/views/content/remote/Card.vue:80 msgctxt "Content/Library/Card.Button.Label/Verb" msgid "Scan now" msgstr "Explorar ara" -#: front/src/views/content/remote/Card.vue:35 +#: front/src/views/content/remote/Card.vue:48 msgctxt "Content/Library/Card.List item" msgid "Scan pending" msgstr "Analisi en espèra" -#: front/src/views/content/remote/Card.vue:176 +#: front/src/views/content/remote/Card.vue:204 msgctxt "Content/Library/Message" msgid "Scan skipped (previous scan is too recent)" msgstr "Exploracion sautada (la darrièra es tròp recenta)" -#: front/src/views/content/remote/Card.vue:47 +#: front/src/views/content/remote/Card.vue:60 msgctxt "Content/Library/Card.List item" msgid "Scanned" msgstr "Explorat" -#: front/src/views/content/remote/Card.vue:51 +#: front/src/views/content/remote/Card.vue:64 msgctxt "Content/Library/Card.List item" msgid "Scanned with errors" msgstr "Explorada amb d’errors" -#: front/src/views/content/remote/Card.vue:39 +#: front/src/views/content/remote/Card.vue:52 msgctxt "Content/Library/Card.List item" msgid "Scanning… (%{ progress }%)" msgstr "Exploracion… (%{ progress }%)" #: front/src/components/auth/ApplicationForm.vue:22 -msgctxt "Content/Applications/Input.Label/Noun" -msgid "Scopes" -msgstr "Visibilitat" - #: front/src/components/auth/Settings.vue:226 msgctxt "Content/*/*/Noun" msgid "Scopes" @@ -3680,12 +3919,14 @@ msgstr "Visibilitats" #: front/src/components/manage/library/ArtistsTable.vue:5 #: front/src/components/manage/library/EditsCardList.vue:6 #: front/src/components/manage/library/LibrariesTable.vue:5 +#: front/src/components/manage/library/TagsTable.vue:5 #: front/src/components/manage/library/TracksTable.vue:5 #: front/src/components/manage/library/UploadsTable.vue:5 #: front/src/components/manage/moderation/AccountsTable.vue:5 #: front/src/components/manage/moderation/DomainsTable.vue:5 #: front/src/components/manage/users/InvitationsTable.vue:5 #: front/src/components/manage/users/UsersTable.vue:5 +#: front/src/views/admin/moderation/ReportsList.vue:8 #: front/src/views/content/libraries/FilesTable.vue:5 #: src/views/playlists/List.vue:13 msgctxt "Content/Search/Input.Label/Noun" @@ -3698,6 +3939,7 @@ msgid "Search a remote library" msgstr "Cercar una bibliotèca alonhada" #: front/src/components/manage/library/EditsCardList.vue:211 +#: front/src/views/admin/moderation/ReportsList.vue:207 msgctxt "Content/Search/Input.Placeholder" msgid "Search by account, summary, domain…" msgstr "Recercar per tÃtol, artista, domeni…" @@ -3732,7 +3974,12 @@ msgctxt "Content/Search/Input.Placeholder" msgid "Search by domain, username, bio…" msgstr "Recercar per domeni, nom d’utilizaire, bio…" -#: front/src/components/manage/moderation/DomainsTable.vue:151 +#: front/src/components/manage/library/TagsTable.vue:165 +msgctxt "Content/Search/Input.Placeholder" +msgid "Search by name" +msgstr "Recercar per nom" + +#: front/src/components/manage/moderation/DomainsTable.vue:168 msgctxt "Content/Search/Input.Placeholder" msgid "Search by name…" msgstr "Recercar per nom…" @@ -3747,12 +3994,12 @@ msgctxt "Content/Admin/Input.Placeholder/Verb" msgid "Search by username, e-mail address, code…" msgstr "Recercar per nom d’utilizaire, corrièl, còdi…" -#: front/src/components/manage/users/UsersTable.vue:163 +#: front/src/components/manage/users/UsersTable.vue:164 msgctxt "Content/Search/Input.Placeholder" msgid "Search by username, e-mail address, name…" msgstr "Recercar per nom d’utilizaire, corrièl, nom…" -#: front/src/components/audio/SearchBar.vue:20 +#: front/src/components/audio/SearchBar.vue:27 msgctxt "Sidebar/Search/Input.Placeholder" msgid "Search for artists, albums, tracks…" msgstr "Recercar d’artistas, d’albums, de pistas…" @@ -3762,16 +4009,28 @@ msgctxt "Content/Search/Title" msgid "Search for some music" msgstr "Recercar de musica" -#: front/src/components/library/AlbumBase.vue:57 -#: front/src/components/library/ArtistBase.vue:68 -#: front/src/components/library/TrackBase.vue:76 +#: front/src/components/library/TagsSelector.vue:6 +msgctxt "*/Dropdown/Placeholder/Verb" +msgid "Search for tags…" +msgstr "Recercar per etiquetas…" + +#: front/src/components/library/AlbumBase.vue:66 +#: front/src/components/library/ArtistBase.vue:77 +#: front/src/components/library/TrackBase.vue:82 +msgctxt "Content/*/Button.Label/Verb" +msgid "Search on Discogs" +msgstr "Recercar en Discogs" + +#: front/src/components/library/AlbumBase.vue:58 +#: front/src/components/library/ArtistBase.vue:69 +#: front/src/components/library/TrackBase.vue:74 msgctxt "Content/*/Button.Label/Verb" msgid "Search on Wikipedia" msgstr "Recercar sus Wikipèdia" #: front/src/components/library/Library.vue:35 -#: src/views/admin/library/Base.vue:32 -#: front/src/views/admin/moderation/Base.vue:22 +#: src/views/admin/library/Base.vue:35 +#: front/src/views/admin/moderation/Base.vue:44 #: src/views/admin/users/Base.vue:21 front/src/views/content/Base.vue:19 msgctxt "Menu/*/Hidden text" msgid "Secondary menu" @@ -3782,13 +4041,32 @@ msgctxt "Content/Admin/Menu.Title" msgid "Sections" msgstr "Seccions" +#: front/src/components/ShortcutsModal.vue:108 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek backwards 30s" +msgstr "Recular de 30s" + +#: front/src/components/ShortcutsModal.vue:100 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek backwards 5s" +msgstr "Recular de 5s" + +#: front/src/components/ShortcutsModal.vue:112 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek forwards 30s" +msgstr "Avançar de 30s" + +#: front/src/components/ShortcutsModal.vue:104 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek forwards 5s" +msgstr "Avançar de 5s" + #: front/src/components/library/radios/Builder.vue:46 msgctxt "Content/Radio/Dropdown.Placeholder/Verb" msgid "Select a filter" msgstr "Seleccionar un filtre" #: front/src/components/common/ActionTable.vue:79 -#, fuzzy msgctxt "Content/*/Link/Verb" msgid "Select all %{ total } elements" msgid_plural "Select all %{ total } elements" @@ -3800,9 +4078,14 @@ msgctxt "Content/*/Link/Verb" msgid "Select only current page" msgstr "Seleccionar solament la pagina actuala" -#: front/src/components/Sidebar.vue:43 src/components/Sidebar.vue:108 -#: front/src/components/manage/users/UsersTable.vue:181 -#: front/src/views/admin/moderation/AccountsDetail.vue:506 +#: front/src/components/Home.vue:43 +msgctxt "Content/Home/Link" +msgid "Server rules" +msgstr "Règlas del servidor" + +#: front/src/components/Sidebar.vue:43 src/components/Sidebar.vue:112 +#: front/src/components/manage/users/UsersTable.vue:182 +#: front/src/views/admin/moderation/AccountsDetail.vue:526 msgctxt "*/*/*/Noun" msgid "Settings" msgstr "Paramètres" @@ -3824,50 +4107,65 @@ msgstr "Ligam de partatge" #: front/src/views/content/libraries/Detail.vue:15 msgctxt "Content/Library/Paragraph" -msgid "" -"Share this link with other users so they can request access to your library." -msgstr "" -"Partajatz aqueste ligam amb d’autres utilizaires per que pòscan accedir a " -"vòstra bibliotèca." +msgid "Share this link with other users so they can request access to your library." +msgstr "Partajatz aqueste ligam amb d’autres utilizaires per que pòscan accedir a vòstra bibliotèca." #: front/src/views/content/libraries/Detail.vue:14 -#: front/src/views/content/remote/Card.vue:77 +#: front/src/views/content/remote/Card.vue:90 msgctxt "Content/Library/Title" msgid "Sharing link" msgstr "Ligam de partatge" +#: front/src/components/audio/EmbedWizard.vue:5 +msgctxt "Content/Embed/Message" +msgid "Sharing will not work because this pod doesn't allow anonymous users to access content." +msgstr "" + +#: front/src/components/About.vue:156 +msgctxt "*/*/*/Verb" +msgid "Show" +msgstr "Mostrar" + #: front/src/components/audio/album/Card.vue:38 -#, fuzzy msgctxt "Content/Album/Card.Link/Verb" msgid "Show %{ count } more track" msgid_plural "Show %{ count } more tracks" -msgstr[0] "%{ count } pista mai" -msgstr[1] "%{ count } pistas mai" +msgstr[0] "Mostrar %{ count } pista mai" +msgstr[1] "Mostrar %{ count } pistas mai" -#: front/src/components/audio/artist/Card.vue:30 -#, fuzzy -msgctxt "Content/Artist/Card.Link" -msgid "Show 1 more album" -msgid_plural "Show %{ count } more albums" -msgstr[0] "Mostrar 1 album mai" -msgstr[1] "Mostrar %{ count } albums mai" +#: front/src/components/tags/List.vue:11 +msgctxt "Content/*/Button/Label/Verb" +msgid "Show 1 more tag" +msgid_plural "Show %{ count } more tags" +msgstr[0] "Mostrar 1 etiqueta de mai" +msgstr[1] "Mostrar %{ count } etiquetas de mai" #: front/src/components/library/EditForm.vue:21 msgctxt "Content/Library/Button.Label" msgid "Show all edits" msgstr "Mostrar totas las modificacions" -#: front/src/components/ShortcutsModal.vue:42 +#: front/src/components/ShortcutsModal.vue:60 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Show available keyboard shortcuts" msgstr "Mostrar los acorchis clavièr disponibles" -#: front/src/views/Notifications.vue:7 +#: front/src/components/common/ExpandableDiv.vue:7 +msgctxt "*/*/Button,Label" +msgid "Show less" +msgstr "Ne veire mens" + +#: front/src/components/common/ExpandableDiv.vue:8 +msgctxt "*/*/Button,Label" +msgid "Show more" +msgstr "Ne veire mai" + +#: front/src/views/Notifications.vue:72 msgctxt "Content/Notifications/Form.Label/Verb" msgid "Show read notifications" msgstr "Mostrar las notificacions legidas" -#: front/src/components/forms/PasswordInput.vue:26 +#: front/src/components/forms/PasswordInput.vue:42 msgctxt "Content/Settings/Button.Tooltip/Verb" msgid "Show/hide password" msgstr "Mostrar/amagar lo senhal" @@ -3876,56 +4174,63 @@ msgstr "Mostrar/amagar lo senhal" #: front/src/components/manage/library/ArtistsTable.vue:84 #: front/src/components/manage/library/EditsCardList.vue:72 #: front/src/components/manage/library/LibrariesTable.vue:110 +#: front/src/components/manage/library/TagsTable.vue:79 #: front/src/components/manage/library/TracksTable.vue:95 #: front/src/components/manage/library/UploadsTable.vue:144 #: front/src/components/manage/moderation/AccountsTable.vue:88 -#: front/src/components/manage/moderation/DomainsTable.vue:74 +#: front/src/components/manage/moderation/DomainsTable.vue:85 #: front/src/components/manage/users/InvitationsTable.vue:76 -#: front/src/components/manage/users/UsersTable.vue:87 +#: front/src/components/manage/users/UsersTable.vue:88 #: front/src/views/content/libraries/FilesTable.vue:117 msgctxt "Content/*/Paragraph" msgid "Showing results %{ start }-%{ end } on %{ total }" msgstr "Afichatge dels resultats %{ start }-%{ end } sus %{ total }" -#: front/src/components/ShortcutsModal.vue:83 +#: front/src/components/ShortcutsModal.vue:140 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Shuffle queue" msgstr "Mesclar la fila" -#: front/src/components/audio/Player.vue:641 +#: front/src/components/audio/Player.vue:667 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Shuffle your queue" msgstr "Mesclar la fila" -#: front/src/components/auth/Signup.vue:97 +#: front/src/components/Home.vue:103 +msgctxt "*/Signup/Title" +msgid "Sign up" +msgstr "Inscripcion" + +#: front/src/views/auth/Signup.vue:37 msgctxt "*/Signup/Title" msgid "Sign Up" msgstr "Inscripcion" +#: front/src/components/Home.vue:107 +msgctxt "Content/Home/Paragraph" +msgid "Sign up now to keep a track of your favorites, create playlists, discover new content and much more!" +msgstr "Marcatz-vos per garda una traça de vòstres favorits, crear de lista de lectura, descobrir de nòu contengut e encara mai !" + #: front/src/components/manage/users/UsersTable.vue:40 msgctxt "Content/Admin/Table.Label/Short, Noun (Value is a date)" msgid "Sign-up" msgstr "Inscripcion" -#: front/src/components/mixins/Translations.vue:57 -#: front/src/views/admin/moderation/AccountsDetail.vue:197 -#: front/src/components/mixins/Translations.vue:58 +#: front/src/components/mixins/Translations.vue:69 +#: front/src/views/admin/moderation/AccountsDetail.vue:198 +#: front/src/components/mixins/Translations.vue:70 msgctxt "Content/Admin/Table.Label/Noun" msgid "Sign-up date" msgstr "Data d’inscripcion" -#: front/src/components/manage/library/UploadsTable.vue:65 -#: front/src/views/admin/library/UploadDetail.vue:219 -msgctxt "Content/*/*/Noun" -msgid "Size" -msgstr "Talha" - #: front/src/components/library/FileUpload.vue:94 #: front/src/components/library/TrackDetail.vue:39 -#: front/src/components/mixins/Translations.vue:54 +#: front/src/components/manage/library/UploadsTable.vue:65 +#: front/src/components/mixins/Translations.vue:66 +#: front/src/views/admin/library/UploadDetail.vue:219 #: front/src/views/content/libraries/FilesTable.vue:61 -#: front/src/components/mixins/Translations.vue:55 -msgctxt "Content/Library/*/in MB" +#: front/src/components/mixins/Translations.vue:67 +msgctxt "Content/*/*/Noun" msgid "Size" msgstr "Talha" @@ -3942,7 +4247,7 @@ msgctxt "Content/Library/Label" msgid "Skipped files" msgstr "Fichièrs ignorats" -#: front/src/views/admin/moderation/DomainsDetail.vue:89 +#: front/src/views/admin/moderation/DomainsDetail.vue:126 msgctxt "Content/Moderation/Table.Label" msgid "Software" msgstr "Logicial" @@ -3957,96 +4262,63 @@ msgctxt "Content/*/Paragraph" msgid "Sorry, the page you asked for does not exist:" msgstr "O planhèm, la pagina demandada existÃs pas :" -#: front/src/components/Footer.vue:49 +#: front/src/components/Footer.vue:57 msgctxt "Footer/*/List item.Link" msgid "Source code" msgstr "Còdi font" #: front/src/components/auth/Profile.vue:23 -#: front/src/components/manage/users/UsersTable.vue:70 +#: front/src/components/manage/users/UsersTable.vue:71 msgctxt "Content/Profile/User role" msgid "Staff member" msgstr "Membre de la còla" -#: front/src/components/audio/PlayButton.vue:23 +#: front/src/components/audio/PlayButton.vue:27 #: src/components/radios/Button.vue:4 msgctxt "*/Queue/Button.Label/Short, Verb" msgid "Start radio" msgstr "Aviar la rà dio" -#: front/src/views/admin/Settings.vue:86 -msgctxt "Content/Admin/Menu" +#: front/src/components/About.vue:170 src/components/Home.vue:53 +#: front/src/views/admin/Settings.vue:87 +msgctxt "Content/Home/Header" msgid "Statistics" msgstr "Estatisticas" -#: front/src/views/admin/moderation/AccountsDetail.vue:490 +#: front/src/views/admin/moderation/AccountsDetail.vue:510 msgctxt "Content/Moderation/Help text" -msgid "" -"Statistics are computed from known activity and content on your instance, " -"and do not reflect general activity for this account" -msgstr "" -"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" +msgid "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this account" +msgstr "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" -#: front/src/views/admin/moderation/DomainsDetail.vue:371 +#: front/src/views/admin/moderation/DomainsDetail.vue:418 msgctxt "Content/Moderation/Help text" -msgid "" -"Statistics are computed from known activity and content on your instance, " -"and do not reflect general activity for this domain" -msgstr "" -"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 " -"domeni" - -#: front/src/views/admin/library/AlbumDetail.vue:329 -#: front/src/views/admin/library/ArtistDetail.vue:328 -#: front/src/views/admin/library/LibraryDetail.vue:316 -#: front/src/views/admin/library/TrackDetail.vue:371 +msgid "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this domain" +msgstr "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 domeni" + +#: front/src/views/admin/library/AlbumDetail.vue:346 +#: front/src/views/admin/library/ArtistDetail.vue:345 +#: front/src/views/admin/library/LibraryDetail.vue:356 +#: front/src/views/admin/library/TagDetail.vue:210 +#: front/src/views/admin/library/TrackDetail.vue:389 #: front/src/views/admin/library/UploadDetail.vue:335 msgctxt "Content/Moderation/Help text" -msgid "" -"Statistics are computed from known activity and content on your instance, " -"and do not reflect general activity for this object" -msgstr "" -"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" - -#: front/src/views/admin/moderation/DomainsDetail.vue:115 -msgctxt "Content/Moderation/Table.Label (Value is Error message)" -msgid "Status" -msgstr "Estatut" +msgid "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" +msgstr "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" #: front/src/components/library/FileUpload.vue:95 -msgctxt "Content/Library/Table.Label (Value is Uploading/Uploaded/Error)" -msgid "Status" -msgstr "Estatut" - -#: front/src/views/content/libraries/Detail.vue:28 -msgctxt "Content/Library.Federation/Table.Label (Value is Approved/Rejected)" -msgid "Status" -msgstr "Estatut" - +#: front/src/components/manage/library/EditsCardList.vue:12 +#: front/src/components/manage/moderation/ReportCard.vue:57 #: front/src/components/manage/users/InvitationsTable.vue:17 #: front/src/components/manage/users/InvitationsTable.vue:39 -msgctxt "Content/Admin/*/Noun (Value is Used/Not used)" -msgid "Status" -msgstr "Estatut" - #: front/src/components/manage/users/UsersTable.vue:43 -msgctxt "Content/Admin/Table.Label/Noun (Value is Regular user/Admin)" -msgid "Status" -msgstr "Estatut" - -#: front/src/components/manage/library/EditsCardList.vue:12 -msgctxt "" -"Content/Search/Dropdown.Label (Value is All/Pending " -"review/Approved/Rejected)" +#: front/src/views/admin/moderation/DomainsDetail.vue:152 +#: front/src/views/admin/moderation/ReportsList.vue:14 +#: front/src/views/content/libraries/Detail.vue:28 +msgctxt "*/*/*" msgid "Status" msgstr "Estatut" -#: front/src/components/Sidebar.vue:174 src/components/radios/Button.vue:3 +#: front/src/components/Sidebar.vue:178 src/components/radios/Button.vue:3 msgctxt "*/Player/Button.Label/Short, Verb" msgid "Stop radio" msgstr "Arrestar la rà dio" @@ -4056,7 +4328,7 @@ msgctxt "*/*/Button.Label/Verb" msgid "Submit" msgstr "Validar" -#: front/src/components/library/EditForm.vue:98 +#: front/src/components/library/EditForm.vue:110 msgctxt "Content/Library/Button.Label/Verb" msgid "Submit and apply edit" msgstr "Enviar e aplicar la modificacion" @@ -4066,12 +4338,22 @@ msgctxt "Content/Library/Button.Label" msgid "Submit another edit" msgstr "Enviar una modificacion de mai" -#: front/src/components/library/EditForm.vue:99 +#: front/src/components/moderation/ReportModal.vue:64 +msgctxt "Popup/*/Button.Label" +msgid "Submit report" +msgstr "Enviar" + +#: front/src/components/library/EditForm.vue:111 msgctxt "Content/Library/Button.Label/Verb" msgid "Submit suggestion" msgstr "Enviar la suggestion" -#: front/src/views/admin/Settings.vue:85 +#: front/src/components/manage/moderation/ReportCard.vue:17 +msgctxt "Content/Moderation/*" +msgid "Submitted by" +msgstr "Enviat per" + +#: front/src/views/admin/Settings.vue:86 msgctxt "Content/Admin/Menu" msgid "Subsonic" msgstr "Subsonic" @@ -4111,16 +4393,21 @@ msgctxt "Content/Library/Tab.Title/Short" msgid "Summary" msgstr "Resumit" -#: front/src/components/library/EditForm.vue:87 +#: front/src/components/library/EditForm.vue:99 msgctxt "*/*/*" msgid "Summary (optional)" msgstr "Resumit (opcional)" -#: front/src/components/Footer.vue:39 +#: front/src/components/Footer.vue:47 msgctxt "Footer/*/Listitem.Link" msgid "Support forum" msgstr "Forum d’assisténcia" +#: front/src/views/Notifications.vue:10 +msgctxt "Content/Notifications/Header" +msgid "Support this Funkwhale pod" +msgstr "Sosténer aqueste pod Funkwhale" + #: front/src/components/library/FileUpload.vue:85 msgctxt "Content/Library/Paragraph" msgid "Supported extensions: %{ extensions }" @@ -4131,45 +4418,61 @@ msgctxt "Content/Playlist/Paragraph" msgid "Syncing changes to server…" msgstr "Sincronizacion dels cambiaments amb lo servidor…" -#: front/src/components/audio/EmbedWizard.vue:25 +#: front/src/components/audio/SearchBar.vue:35 +msgctxt "*/*/*/Noun" +msgid "Tag" +msgstr "Etiqueta" + +#: front/src/views/admin/library/TagDetail.vue:61 +msgctxt "Content/Moderation/Title" +msgid "Tag data" +msgstr "Donada de l’etiqueta" + +#: front/src/components/library/Albums.vue:23 +#: src/components/library/Artists.vue:15 +#: front/src/views/admin/library/Base.vue:23 +#: src/views/admin/library/TagsList.vue:24 front/src/edits.js:24 +#: src/edits.js:50 src/edits.js:91 src/entities.js:120 +msgctxt "*/*/*/Noun" +msgid "Tags" +msgstr "Etiquetas" + +#: front/src/components/mixins/Translations.vue:44 +#: front/src/components/mixins/Translations.vue:45 +msgctxt "Content/Moderation/Dropdown" +msgid "Takedown request" +msgstr "Demanda de retrait" + +#: front/src/components/About.vue:35 src/components/About.vue:61 +msgctxt "Content/About/Header" +msgid "Terms and privacy policy" +msgstr "Tèrmes e politica de confidencialitat" + +#: front/src/components/audio/EmbedWizard.vue:35 #: front/src/components/common/CopyInput.vue:3 msgctxt "Content/*/Paragraph" msgid "Text copied to clipboard!" msgstr "Tèxte copiat al quichapapièr !" -#: front/src/components/Home.vue:26 -msgctxt "Content/Home/Paragraph" -msgid "" -"That's simple: we loved Grooveshark and we want to build something even " -"better." -msgstr "" -"Es simple : nos agradava Grooveshark e voliam construire quicòm de melhor." - -#: front/src/views/admin/library/AlbumDetail.vue:75 +#: front/src/views/admin/library/AlbumDetail.vue:81 msgctxt "Content/Moderation/Paragraph" -msgid "" -"The album will be removed, as well as associated uploads, tracks, favorites " -"and listening history. This action is irreversible." -msgstr "" +msgid "The album will be removed, as well as associated uploads, tracks, favorites and listening history. This action is irreversible." +msgstr "L’album serà tirat, e mai los mandadisses, pistas, favorits e istorics d’escota ligats. Aquesta accion es irreversibla." #: front/src/components/auth/Authorize.vue:39 msgctxt "Content/Auth/Paragraph" msgid "The application is also requesting the following unknown permissions:" -msgstr "" -"L’aplicacion demanda tanben las autorizacions desconegudas seguentas :" +msgstr "L’aplicacion demanda tanben las autorizacions desconegudas seguentas :" -#: front/src/views/admin/library/ArtistDetail.vue:74 +#: front/src/views/admin/library/ArtistDetail.vue:79 msgctxt "Content/Moderation/Paragraph" -msgid "" -"The artist will be removed, as well as associated uploads, tracks, albums, " -"favorites and listening history. This action is irreversible." -msgstr "" +msgid "The artist will be removed, as well as associated uploads, tracks, albums, favorites and listening history. This action is irreversible." +msgstr "L’artista serà tirat, e mai los mandadisses, pistas, albums, favorits e istorics d’escota ligats. Aquesta accion es irreversibla." -#: front/src/components/Footer.vue:53 +#: front/src/components/Footer.vue:61 msgctxt "Footer/*/List item.Link" msgid "The funkwhale logo was kindly designed and provided by Francis Gading." -msgstr "" -"Lo logotipe de Funkwhale foguèt dessenhat e fornit per Francis Gading." +msgstr "Lo logotipe de Funkwhale foguèt dessenhat e fornit per Francis Gading." #: front/src/components/SetInstanceModal.vue:8 msgctxt "Popup/Instance/Error message.List item" @@ -4178,25 +4481,18 @@ msgstr "L’adreça donada es pas un servidor Funkwhale" #: front/src/views/content/libraries/Form.vue:34 msgctxt "Popup/Library/Paragraph" -msgid "" -"The library and all its tracks will be deleted. This can not be undone." -msgstr "" -"Aquesta bibliotèca e totas sas pistas serà n suprimidas. Aquesta accion se " -"pòt pas anullar." +msgid "The library and all its tracks will be deleted. This can not be undone." +msgstr "Aquesta bibliotèca e totas sas pistas serà n suprimidas. Aquesta accion se pòt pas anullar." #: front/src/views/admin/library/LibraryDetail.vue:61 msgctxt "Content/Moderation/Paragraph" -msgid "" -"The library will be removed, as well as associated uploads, and follows. " -"This action is irreversible." -msgstr "" +msgid "The library will be removed, as well as associated uploads, and follows. This action is irreversible." +msgstr "Aquesta bibliotèca serà tirada, e mai los mandadisses e abonaments ligats. Aquesta accions es irreversibla." #: front/src/components/library/ImportStatusModal.vue:140 msgctxt "Popup/Import/Error.Label" -msgid "" -"The metadata included in the file is invalid or some mandatory fields are " -"missing." -msgstr "" +msgid "The metadata included in the file is invalid or some mandatory fields are missing." +msgstr "La metadonada inclusa al fichièr es invalida o de camps obligatòris son absents." #: front/src/components/library/FileUpload.vue:38 msgctxt "Content/Library/List item" @@ -4208,14 +4504,15 @@ msgctxt "Sidebar/Player/Error message.Paragraph" msgid "The next track will play automatically in a few seconds…" msgstr "La pista seguenta serà legida automaticament dins una estona…" -#: front/src/components/Home.vue:116 -msgctxt "Content/Home/List item" -msgid "" -"The plaform is free and open-source, you can install it and modify it " -"without worries" -msgstr "" -"La plataforma es gratuita e liura, podètz l’installar e la modificar sens " -"cap de limit" +#: front/src/components/manage/moderation/NotesThread.vue:27 +msgctxt "Content/Moderation/Paragraph" +msgid "The note will be removed. This action is irreversible." +msgstr "La nòta serà tirada. Aquesta accion es irreversibla." + +#: front/src/components/manage/moderation/ReportCard.vue:120 +msgctxt "Content/Moderation/Message" +msgid "The object associated with this report was deleted." +msgstr "L’objècte d’aqueste senhalament es estat suprimit." #: front/src/components/playlists/Form.vue:14 msgctxt "Content/Playlist/Error message.Title" @@ -4225,57 +4522,52 @@ msgstr "Lista de lectura creada" #: front/src/components/federation/FetchButton.vue:37 msgctxt "*/*/Error" msgid "The remote server answered with HTTP %{ status }" -msgstr "" +msgstr "Lo servidor alonhat a respondut amb lo còdi HTTP %{ status }" #: front/src/components/federation/FetchButton.vue:13 msgctxt "Popup/*/Message.Content" -msgid "" -"The remote server answered, but returned data was unsupported by Funkwhale." -msgstr "" +msgid "The remote server answered, but returned data was unsupported by Funkwhale." +msgstr "Lo servidor alonhat a respondut, mas las donadas enviadas son pas suportadas er Funkwhale." #: front/src/components/federation/FetchButton.vue:44 msgctxt "*/*/Error" -msgid "The remote server didn't answered fast enough" -msgstr "" +msgid "The remote server didn't respond quickly enough" +msgstr "Lo servidor alonhat a tròp tardat a respondre" #: front/src/components/federation/FetchButton.vue:50 msgctxt "*/*/Error" -msgid "The return server returned invalid JSON or JSON-LD data" -msgstr "" +msgid "The remote server returned invalid JSON or JSON-LD data" +msgstr "Lo servidor alonhat a respondut amb de donadas JSON o JSON-LD invalidas" #: front/src/components/manage/library/AlbumsTable.vue:189 msgctxt "Popup/*/Paragraph" -msgid "" -"The selected albums will be removed, as well as associated tracks, uploads, " -"favorites and listening history. This action is irreversible." -msgstr "" +msgid "The selected albums will be removed, as well as associated tracks, uploads, favorites and listening history. This action is irreversible." +msgstr "Los albums seleccionats serà n tirats, e mai las pistas, mandadisses e istorics d’escota ligats. Aquesta accion es irreversibla." #: front/src/components/manage/library/ArtistsTable.vue:179 msgctxt "Popup/*/Paragraph" -msgid "" -"The selected artist will be removed, as well as associated uploads, tracks, " -"albums, favorites and listening history. This action is irreversible." -msgstr "" +msgid "The selected artist will be removed, as well as associated uploads, tracks, albums, favorites and listening history. This action is irreversible." +msgstr "Los artistas seleccionats serà s tirats, e mai los mandadisses, pistas, albums, favorits e istorics d’escota ligats. Aquesta accion es irreversibla." #: front/src/components/manage/library/LibrariesTable.vue:206 msgctxt "Popup/*/Paragraph" -msgid "" -"The selected library will be removed, as well as associated uploads and " -"follows. This action is irreversible." -msgstr "" +msgid "The selected library will be removed, as well as associated uploads and follows. This action is irreversible." +msgstr "Las bibliotècas seleccionadas serà s tiradas, e mai los mandadisses e abonaments ligats. Aquesta accions es irreversibla." + +#: front/src/components/manage/library/TagsTable.vue:180 +msgctxt "Popup/*/Paragraph" +msgid "The selected tag will be removed and unlinked with existing content, if any. This action is irreversible." +msgstr "L’etiqueta seguenta serà tirada e desligada del contengut existent, se cal. Aquesta accion es irreversibla." #: front/src/components/manage/library/TracksTable.vue:189 msgctxt "Popup/*/Paragraph" -msgid "" -"The selected tracks will be removed, as well as associated uploads, " -"favorites and listening history. This action is irreversible." -msgstr "" +msgid "The selected tracks will be removed, as well as associated uploads, favorites and listening history. This action is irreversible." +msgstr "Las pistas seleccionadas serà n tiradas, e mai las pistas, mandadisses e istorics d’escota ligats. Aquesta accion es irreversibla." #: front/src/components/manage/library/UploadsTable.vue:256 msgctxt "Popup/*/Paragraph" msgid "The selected upload will be removed. This action is irreversible." -msgstr "" -"La suggestion serà complètament tirada, aquesta accion es irreversibla." +msgstr "La suggestion serà complètament tirada, aquesta accion es irreversibla." #: front/src/components/SetInstanceModal.vue:7 msgctxt "Popup/Instance/Error message.List item" @@ -4289,10 +4581,13 @@ msgstr "L’API Subsonic es pas disponibla per aquesta instà ncia Funkwhale." #: front/src/components/library/EditCard.vue:96 msgctxt "Popup/Library/Paragraph" -msgid "" -"The suggestion will be completely removed, this action is irreversible." -msgstr "" -"La suggestion serà complètament tirada, aquesta accion es irreversibla." +msgid "The suggestion will be completely removed, this action is irreversible." +msgstr "La suggestion serà complètament tirada, aquesta accion es irreversibla." + +#: front/src/views/admin/library/TagDetail.vue:44 +msgctxt "Content/Moderation/Paragraph" +msgid "The tag will be removed and unlinked from any existing entity. This action is irreversible." +msgstr "L’etiqueta seguenta serà tirada e desligada de las entitats existentas. Aquesta accion es irreversibla." #: front/src/components/playlists/PlaylistModal.vue:34 msgctxt "Popup/Playlist/Error message.Title" @@ -4304,18 +4599,15 @@ msgctxt "Sidebar/Player/Error message.Title" msgid "The track cannot be loaded" msgstr "La pista pòt pas èsser cargada" -#: front/src/views/admin/library/TrackDetail.vue:74 +#: front/src/views/admin/library/TrackDetail.vue:80 msgctxt "Content/Moderation/Paragraph" -msgid "" -"The track will be removed, as well as associated uploads, favorites and " -"listening history. This action is irreversible." -msgstr "" +msgid "The track will be removed, as well as associated uploads, favorites and listening history. This action is irreversible." +msgstr "La pista serà tirada, e mai las pistas, mandadisses, favorits e istorics d’escota ligats. Aquesta accion es irreversibla." #: front/src/views/admin/library/UploadDetail.vue:68 msgctxt "Content/Moderation/Paragraph" msgid "The upload will be removed. This action is irreversible." -msgstr "" -"La suggestion serà complètament tirada, aquesta accion es irreversibla." +msgstr "La suggestion serà complètament tirada, aquesta accion es irreversibla." #: front/src/components/library/FileUpload.vue:42 msgctxt "Content/Library/List item" @@ -4325,9 +4617,7 @@ msgstr "Los fichièrs enviats son al format OGG, Flac o MP3" #: front/src/views/content/Home.vue:4 msgctxt "Content/Library/Paragraph" msgid "There are various ways to grab new content and make it available here." -msgstr "" -"Prepausam mantun biais de recuperar de nòu contengut e de lo far venir " -"disponible aquÃ." +msgstr "Prepausam mantun biais de recuperar de nòu contengut e de lo far venir disponible aquÃ." #: front/src/components/manage/moderation/InstancePolicyForm.vue:66 msgctxt "Popup/Moderation/Paragraph" @@ -4344,28 +4634,41 @@ msgctxt "Content/Artist/Paragraph" msgid "This artist is present in the following libraries:" msgstr "Aqueste artista es present a las bibliotècas seguentas :" +#: front/src/components/manage/moderation/DomainsTable.vue:169 +msgctxt "Content/Moderation/Popup" +msgid "This domain is present in your allow-list" +msgstr "Aqueste domeni es present dins vòstra lista d’autorizacion" + #: front/src/views/admin/moderation/AccountsDetail.vue:84 -#: front/src/views/admin/moderation/DomainsDetail.vue:48 +#: front/src/views/admin/moderation/DomainsDetail.vue:76 msgctxt "Content/Moderation/Card.Title" msgid "This domain is subject to specific moderation rules" msgstr "Aqueste domeni es sosmés a de règlas de moderacion especificadas" +#: front/src/components/manage/moderation/InstancePolicyModal.vue:16 +msgctxt "Content/Moderation/Card.Title" +msgid "This entity is subject to specific moderation rules" +msgstr "Aquesta entitat es somesa a de règlas de moderacion especificadas" + #: front/src/views/content/Home.vue:9 msgctxt "Content/Library/Paragraph" msgid "This instance offers up to %{quota} of storage space for every user." -msgstr "" -"Aquesta instà ncia provesÃs fins a %{quota} d’espaci per cada utilizaire." +msgstr "Aquesta instà ncia provesÃs fins a %{quota} d’espaci per cada utilizaire." + +#: front/src/components/auth/Settings.vue:300 +msgctxt "Popup/Settings/Paragraph" +msgid "This is irreversible and will permanently remove your data from our servers. You will we immediatly logged out." +msgstr "Aquò es irreversible e suprimirà d’un biais permanent vòstras donadas de nòstres servidors. Seretz immediatament desconnectat." #: front/src/components/auth/Settings.vue:165 msgctxt "Content/Settings/Paragraph" -msgid "" -"This is the list of applications that have access to your account data." -msgstr "" +msgid "This is the list of applications that have access to your account data." +msgstr "Aquò es la lista de las aplicacions qu’an accès a las donadas de vòstre compte." #: front/src/components/auth/Settings.vue:218 msgctxt "Content/Settings/Paragraph" msgid "This is the list of applications that you have created." -msgstr "" +msgstr "Aquò es la lista de las aplicacions qu’avètz creadas." #: front/src/components/auth/Profile.vue:16 msgctxt "Content/Profile/Button.Paragraph" @@ -4375,59 +4678,50 @@ msgstr "Sètz vos !" #: front/src/views/content/libraries/Form.vue:73 msgctxt "Content/Library/Input.Placeholder" msgid "This library contains my personal music, I hope you like it." -msgstr "" -"Aquesta bibliotèca conten ma musica personala, espèri que vos agradarà ." +msgstr "Aquesta bibliotèca conten ma musica personala, espèri que vos agradarà ." -#: front/src/views/content/remote/Card.vue:141 +#: front/src/views/content/remote/Card.vue:169 msgctxt "Content/Library/Card.Help text" -msgid "" -"This library is private and your approval from its owner is needed to access" -" its content" -msgstr "" -"Aquesta bibliotèca es privada e son proprietari deu validar vòstra demanda " -"d’accès per que accediscatz a son contengut" +msgid "This library is private and your approval from its owner is needed to access its content" +msgstr "Aquesta bibliotèca es privada e son proprietari deu validar vòstra demanda d’accès per que accediscatz a son contengut" -#: front/src/views/content/remote/Card.vue:142 +#: front/src/views/content/remote/Card.vue:170 msgctxt "Content/Library/Card.Help text" msgid "This library is public and you can access its content freely" -msgstr "" -"Aqueste bibliotèca es publica e podètz accedir a son contengut liurament" +msgstr "Aqueste bibliotèca es publica e podètz accedir a son contengut liurament" #: front/src/components/common/ActionTable.vue:47 msgctxt "Modal/*/Paragraph" -msgid "" -"This may affect a lot of elements or have irreversible consequences, please " -"double check this is really what you want." -msgstr "" -"Aquesta operacion pòt afectar mantun elements o pòt pas èsser anullada, " -"mercés de verificar s’es ben çò que desiratz." +msgid "This may affect a lot of elements or have irreversible consequences, please double check this is really what you want." +msgstr "Aquesta operacion pòt afectar mantun elements o pòt pas èsser anullada, mercés de verificar s’es ben çò que desiratz." #: front/src/components/library/AlbumEdit.vue:8 #: front/src/components/library/ArtistEdit.vue:8 #: front/src/components/library/TrackEdit.vue:8 msgctxt "Content/*/Message" msgid "This object is managed by another server, you cannot edit it." -msgstr "" +msgstr "Aqueste objècte es gerit per un autre servidor, podètz pas lo modificar." + +#: front/src/components/Home.vue:87 +msgctxt "Content/Home/Paragraph" +msgid "This pod runs Funkwhale, a community-driven project that lets you listen and share music and audio within a decentralized, open network." +msgstr "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." #: front/src/components/library/FileUpload.vue:51 msgctxt "Content/Library/Paragraph" msgid "This reference will be used to group imported files together." -msgstr "" -"Utilizarem aquesta referéncia per gropar los fichièrs importats amassa." +msgstr "Utilizarem aquesta referéncia per gropar los fichièrs importats amassa." #: front/src/components/mixins/Translations.vue:33 #: front/src/components/mixins/Translations.vue:34 msgctxt "Content/Library/Help text" -msgid "This track could not be processed, please it is tagged correctly" -msgstr "" -"Una error s’es producha en tractar aquesta pista, asseguratz-vos qu’es " -"corrèctament etiquetada" +msgid "This track could not be processed, please make sure it is tagged correctly" +msgstr "Una error s’es producha en tractar aquesta pista, asseguratz-vos qu’es corrèctament etiquetada" #: front/src/components/mixins/Translations.vue:29 #: front/src/components/mixins/Translations.vue:30 msgctxt "Content/Library/Help text" -msgid "" -"This track has been uploaded, but hasn't been processed by the server yet" +msgid "This track has been uploaded, but hasn't been processed by the server yet" msgstr "La pista es enviada mas pas encara tractada pel servidor" #: front/src/components/mixins/Translations.vue:25 @@ -4436,105 +4730,93 @@ msgctxt "Content/Library/Help text" msgid "This track is already present in one of your libraries" msgstr "La pista ja presenta dins una de vòstras bibliotècas" -#: front/src/components/audio/PlayButton.vue:85 +#: front/src/components/audio/PlayButton.vue:103 msgctxt "*/Queue/Button/Title" msgid "This track is not available in any library you have access to" -msgstr "" -"Aquesta pista es pas disponibla dins cap de las bibliotècas qu’avètz accès" +msgstr "Aquesta pista es pas disponibla dins cap de las bibliotècas qu’avètz accès" #: front/src/components/library/TrackDetail.vue:82 msgctxt "Content/Track/Paragraph" msgid "This track is present in the following libraries:" msgstr "Aquesta pista es presenta a las bibliotècas seguentas :" -#: front/src/views/playlists/Detail.vue:38 +#: front/src/views/playlists/Detail.vue:46 msgctxt "Popup/Playlist/Paragraph" msgid "This will completely delete this playlist and cannot be undone." -msgstr "" -"Aquò escafarà aquesta lista de lectura per totjorn e poirà pas èsser " -"anullat." +msgstr "Aquò escafarà aquesta lista de lectura per totjorn e poirà pas èsser anullat." #: front/src/views/radios/Detail.vue:27 msgctxt "Popup/Radio/Paragraph" msgid "This will completely delete this radio and cannot be undone." msgstr "Aquò escafarà aquesta rà dio per totjorn e poirà pas èsser anullat." -#: front/src/components/auth/SubsonicTokenForm.vue:50 +#: front/src/components/auth/SubsonicTokenForm.vue:55 msgctxt "Popup/Settings/Paragraph" -msgid "" -"This will completely disable access to the Subsonic API using from account." -msgstr "" -"Aquò desactivarà complètament l’accès a l’API Subsonic de vòstre compte " -"estant." +msgid "This will completely disable access to the Subsonic API using from account." +msgstr "Aquò desactivarà complètament l’accès a l’API Subsonic de vòstre compte estant." -#: front/src/components/auth/SubsonicTokenForm.vue:35 +#: front/src/components/manage/moderation/ReportCard.vue:359 +msgctxt "Content/Moderation/Popup,Paragraph" +msgid "This will delete the object associated with this report and mark the report as resolved. The deletion is irreversible." +msgstr "Aquò suprimirà l’objècte ligat amb aqueste senhalament e lo marcarà coma resolgut. Aquesta supression es irreversibla." + +#: front/src/components/auth/SubsonicTokenForm.vue:40 msgctxt "Popup/Settings/Paragraph" -msgid "" -"This will log you out from existing devices that use the current password." -msgstr "" -"Aquò vos desconnectarà de totes los periferics qu’utilizan aqueste senhal." +msgid "This will log you out from existing devices that use the current password." +msgstr "Aquò vos desconnectarà de totes los periferics qu’utilizan aqueste senhal." #: front/src/components/auth/Settings.vue:253 msgctxt "Popup/Settings/Paragraph" -msgid "" -"This will permanently delete the application and all the associated tokens." -msgstr "" -"Aquò escafarà aquesta aplicacion per totjorn e totes los getons ligats." +msgid "This will permanently delete the application and all the associated tokens." +msgstr "Aquò escafarà aquesta aplicacion per totjorn e totes los getons ligats." #: front/src/components/auth/Settings.vue:194 msgctxt "Popup/Settings/Paragraph" -msgid "" -"This will prevent this application from accessing the service on your " -"behalf." -msgstr "" +msgid "This will prevent this application from accessing the service on your behalf." +msgstr "Aquò empacha aquesta aplicacion d’accedir al servici en vòstre nom." #: front/src/components/playlists/Editor.vue:54 msgctxt "Popup/Playlist/Paragraph" msgid "This will remove all tracks from this playlist and cannot be undone." -msgstr "" -"Aquò escafarà totas las pistas de la lista de lectura e poirà pas èsser " -"anullat." - -#: front/src/views/admin/library/AlbumDetail.vue:99 -#: front/src/views/admin/library/TrackDetail.vue:98 src/edits.js:21 -#: src/edits.js:39 -msgctxt "*/*/*/Noun" -msgid "Title" -msgstr "TÃtol" +msgstr "Aquò escafarà totas las pistas de la lista de lectura e poirà pas èsser anullat." #: front/src/components/audio/track/Table.vue:7 -#: front/src/views/content/libraries/FilesTable.vue:55 -msgctxt "Content/Track/*/Noun" -msgid "Title" -msgstr "TÃtol" - #: front/src/components/manage/library/AlbumsTable.vue:39 #: front/src/components/manage/library/TracksTable.vue:39 -msgctxt "*/*/*" +#: front/src/views/admin/library/AlbumDetail.vue:105 +#: front/src/views/admin/library/TrackDetail.vue:104 +#: front/src/views/content/libraries/FilesTable.vue:55 src/edits.js:36 +#: front/src/edits.js:62 +msgctxt "*/*/*/Noun" msgid "Title" msgstr "TÃtol" #: front/src/components/SetInstanceModal.vue:16 msgctxt "Popup/Instance/Paragraph" -msgid "" -"To continue, please select the Funkwhale instance you want to connect to. " -"Enter the address directly, or select one of the suggested choices." -msgstr "" -"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." +msgid "To continue, please select the Funkwhale instance you want to connect to. Enter the address directly, or select one of the suggested choices." +msgstr "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." + +#: front/src/components/ShortcutsModal.vue:148 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Toggle favorite" +msgstr "Ajustar/Tirar dels favorits" -#: front/src/components/ShortcutsModal.vue:79 +#: front/src/components/ShortcutsModal.vue:132 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Toggle mute" +msgstr "Copar/Restablir lo son" + +#: front/src/components/ShortcutsModal.vue:136 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Toggle queue looping" msgstr "Cambiar lo tipe de lectura de la lista" -#: front/src/views/admin/library/AlbumDetail.vue:222 -#: front/src/views/admin/library/ArtistDetail.vue:211 -#: front/src/views/admin/library/LibraryDetail.vue:200 -#: front/src/views/admin/library/TrackDetail.vue:274 -#: front/src/views/admin/moderation/AccountsDetail.vue:317 -#: front/src/views/admin/moderation/DomainsDetail.vue:225 +#: front/src/views/admin/library/AlbumDetail.vue:238 +#: front/src/views/admin/library/ArtistDetail.vue:226 +#: front/src/views/admin/library/LibraryDetail.vue:219 +#: front/src/views/admin/library/TrackDetail.vue:290 +#: front/src/views/admin/moderation/AccountsDetail.vue:329 +#: front/src/views/admin/moderation/DomainsDetail.vue:262 msgctxt "Content/Moderation/Table.Label" msgid "Total size" msgstr "Talha totala" @@ -4544,20 +4826,18 @@ msgctxt "Content/Library/Card.Help text" msgid "Total size of the files in this library" msgstr "Talha totala dels fichièrs d’aquesta bibliotèca" -#: front/src/views/admin/moderation/DomainsDetail.vue:105 +#: front/src/views/admin/moderation/DomainsDetail.vue:142 msgctxt "Content/*/*" msgid "Total users" msgstr "Utilizaires totals" -#: front/src/views/admin/library/UploadDetail.vue:199 -msgctxt "*/*/*" -msgid "Track" -msgstr "Pista" - -#: front/src/components/audio/SearchBar.vue:27 -#: front/src/components/library/TrackBase.vue:173 +#: front/src/components/audio/SearchBar.vue:34 +#: front/src/components/library/TrackBase.vue:188 #: front/src/components/library/TrackDetail.vue:128 #: front/src/components/metadata/Search.vue:138 +#: src/components/mixins/Report.vue:28 +#: front/src/views/admin/library/UploadDetail.vue:199 +#: front/src/components/mixins/Report.vue:29 msgctxt "*/*/*/Noun" msgid "Track" msgstr "Pista" @@ -4567,7 +4847,7 @@ msgctxt "Content/Library/Card/Short" msgid "Track #%{ id } - %{ name }" msgstr "Pista #%{ id } - %{ name }" -#: front/src/views/admin/library/TrackDetail.vue:91 +#: front/src/views/admin/library/TrackDetail.vue:97 msgctxt "Content/Moderation/Title" msgid "Track data" msgstr "Donada de la pista" @@ -4577,30 +4857,28 @@ msgctxt "Content/Track/Title/Noun" msgid "Track information" msgstr "Informacions de la pista" -#: front/src/components/mixins/Translations.vue:50 -#: front/src/components/mixins/Translations.vue:51 +#: front/src/components/mixins/Translations.vue:60 +#: front/src/components/mixins/Translations.vue:61 msgctxt "Content/*/Dropdown/Noun" msgid "Track name" msgstr "Nom de la pista" -#: front/src/components/instance/Stats.vue:54 #: front/src/components/library/AlbumDetail.vue:19 -#: front/src/components/playlists/PlaylistModal.vue:47 -#: front/src/views/admin/moderation/AccountsDetail.vue:362 -#: front/src/views/admin/moderation/DomainsDetail.vue:274 -#: front/src/views/content/Base.vue:8 src/views/content/libraries/Detail.vue:8 -#: front/src/views/playlists/Detail.vue:51 src/views/radios/Detail.vue:34 -msgctxt "*/*/*/Noun" -msgid "Tracks" -msgstr "Pistas" - +#: front/src/components/library/TagDetail.vue:36 #: front/src/components/manage/library/AlbumsTable.vue:42 #: front/src/components/manage/library/ArtistsTable.vue:42 -#: front/src/views/admin/library/AlbumDetail.vue:252 -#: front/src/views/admin/library/ArtistDetail.vue:251 +#: front/src/components/manage/library/TagsTable.vue:44 +#: front/src/components/playlists/PlaylistModal.vue:47 +#: front/src/views/admin/library/AlbumDetail.vue:268 +#: front/src/views/admin/library/ArtistDetail.vue:266 #: front/src/views/admin/library/Base.vue:14 -#: front/src/views/admin/library/LibraryDetail.vue:229 +#: front/src/views/admin/library/LibraryDetail.vue:248 +#: front/src/views/admin/library/TagDetail.vue:143 #: front/src/views/admin/library/TracksList.vue:24 +#: front/src/views/admin/moderation/AccountsDetail.vue:374 +#: front/src/views/admin/moderation/DomainsDetail.vue:311 +#: front/src/views/content/Base.vue:8 src/views/content/libraries/Detail.vue:8 +#: front/src/views/playlists/Detail.vue:76 src/views/radios/Detail.vue:34 msgctxt "*/*/*" msgid "Tracks" msgstr "Pistas" @@ -4610,79 +4888,64 @@ msgctxt "Content/Artist/Title" msgid "Tracks by this artist" msgstr "Pistas d’aqueste artista" -#: front/src/components/instance/Stats.vue:25 -msgctxt "Content/About/Paragraph/Unit" -msgid "Tracks favorited" -msgstr "Pistas en favorits" - -#: front/src/components/instance/Stats.vue:19 -msgctxt "Content/About/Paragraph/Unit" -msgid "tracks listened" -msgstr "pistas escotadas" - #: front/src/components/library/radios/Filter.vue:44 msgctxt "Popup/Radio/Title/Noun" msgid "Tracks matching filter" msgstr "Pistas correspondentas al filtre" #: front/src/components/library/TrackDetail.vue:57 +#: front/src/components/manage/moderation/ReportCard.vue:134 #: front/src/views/admin/library/UploadDetail.vue:250 +#: front/src/views/admin/moderation/AccountsDetail.vue:181 msgctxt "Content/Track/Table.Label/Noun" msgid "Type" msgstr "Tipe" -#: front/src/views/admin/moderation/AccountsDetail.vue:180 -msgctxt "Content/Moderation/Table.Label/Noun" -msgid "Type" -msgstr "Tipe" - #: front/src/components/manage/moderation/AccountsTable.vue:44 -#: front/src/components/manage/moderation/DomainsTable.vue:42 +#: front/src/components/manage/moderation/DomainsTable.vue:50 msgctxt "Content/Moderation/Table.Label/Short" msgid "Under moderation rule" msgstr "Jos règla de moderacion" -#: front/src/views/content/remote/Card.vue:109 -#: src/views/content/remote/Card.vue:114 +#: front/src/components/ShortcutsModal.vue:68 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Unfocus searchbar" +msgstr "Sortir de la recèrca" + +#: front/src/views/content/remote/Card.vue:122 +#: src/views/content/remote/Card.vue:127 msgctxt "*/Library/Button.Label/Verb" msgid "Unfollow" msgstr "Quitar de seguir" -#: front/src/views/content/remote/Card.vue:110 +#: front/src/views/content/remote/Card.vue:123 msgctxt "Popup/Library/Title" msgid "Unfollow this library?" msgstr "Quitar de seguir aquesta bibliotèca ?" -#: front/src/components/About.vue:17 -msgctxt "Content/About/Paragraph" -msgid "" -"Unfortunately, the owners of this instance did not yet take the time to " -"complete this page." -msgstr "" -"Malurosament, los gestionaris d’aquesta instà ncia aguèron pas encara lo " -"temps de completar pas aquesta pagina." - #: front/src/components/federation/FetchButton.vue:54 #: front/src/components/federation/FetchButton.vue:55 -msgctxt "*/*/Error" -msgid "Unknowkn error" -msgstr "Error desconeguda" - #: front/src/components/library/ImportStatusModal.vue:144 -msgctxt "Popup/Import/Error.Label" -msgid "Unkwown error" +msgctxt "*/*/Error" +msgid "Unknown error" msgstr "Error desconeguda" -#: front/src/components/Home.vue:37 -msgctxt "Content/Home/Title" -msgid "Unlimited music" -msgstr "Musica sens cap de limit" - -#: front/src/components/audio/Player.vue:630 +#: front/src/components/audio/Player.vue:656 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Unmute" msgstr "Restablir lo son" +#: front/src/components/manage/moderation/ReportCard.vue:225 +msgctxt "Content/*/Button.Label" +msgid "Unresolve" +msgstr "Pas resolgut" + +#: front/src/components/manage/moderation/ReportCard.vue:67 +#: front/src/views/admin/moderation/ReportsList.vue:23 +msgctxt "Content/*/*/Short" +msgid "Unresolved" +msgstr "Pas resolgut" + #: front/src/components/manage/moderation/InstancePolicyForm.vue:57 msgctxt "Content/Moderation/Card.Button.Label/Verb" msgid "Update" @@ -4746,35 +5009,27 @@ msgstr "Data de mandadÃs" #: front/src/components/library/FileUpload.vue:258 msgctxt "Content/Library/Help text" -msgid "" -"Upload denied, ensure the file is not too big and that you have not reached " -"your quota" -msgstr "" -"MandadÃs refusat, asseguratz-vos que lo fichièr es pas tròp grand e qu’avètz" -" pas atenhut vòstre quòta" +msgid "Upload denied, ensure the file is not too big and that you have not reached your quota" +msgstr "MandadÃs refusat, asseguratz-vos que lo fichièr es pas tròp grand e qu’avètz pas atenhut vòstre quòta" #: front/src/components/library/ImportStatusModal.vue:8 msgctxt "Popup/Import/Message" msgid "Upload is still pending and will soon be processed by the server." -msgstr "" +msgstr "Lo mandadÃs es encara en espèra e serà lèu tractat pel servidor." #: front/src/views/content/Home.vue:7 msgctxt "Content/Library/Paragraph" -msgid "" -"Upload music files (MP3, OGG, FLAC, etc.) from your personal library " -"directly from your browser to enjoy them here." -msgstr "" -"Enviatz vòstres fichièrs musicals (MP3, OGG, FLAC, etc.) de vòstra " -"bibliotèca personala estant dirèctament amb vòstre navigador per ne " -"profechar aquÃ." +msgid "Upload music files (MP3, OGG, FLAC, etc.) from your personal library directly from your browser to enjoy them here." +msgstr "Enviatz vòstres fichièrs musicals (MP3, OGG, FLAC, etc.) de vòstra bibliotèca personala estant dirèctament amb vòstre navigador per ne profechar aquÃ." #: front/src/components/library/FileUpload.vue:30 msgctxt "Content/Library/Title/Verb" msgid "Upload new tracks" msgstr "Enviar nòvas pistas" -#: front/src/views/admin/moderation/AccountsDetail.vue:298 -msgctxt "Content/Moderation/Table.Label/Noun" +#: front/src/components/About.vue:99 +#: front/src/views/admin/moderation/AccountsDetail.vue:309 +msgctxt "*/*/*" msgid "Upload quota" msgstr "Quòta de mandadÃs" @@ -4785,15 +5040,13 @@ msgstr "Temps de transferiment expirat, ensajatz tornamai" #: front/src/components/library/ImportStatusModal.vue:14 msgctxt "Popup/Import/Message" -msgid "" -"Upload was skipped because a similar one is already available in one of your" -" libraries." -msgstr "" +msgid "Upload was skipped because a similar one is already available in one of your libraries." +msgstr "Lo mandadÃs es estat sautat perque un que li sembla es ja disponible dins una de vòstras bibliotèca." #: front/src/components/library/ImportStatusModal.vue:11 msgctxt "Popup/Import/Message" msgid "Upload was successfully processed by the server." -msgstr "" +msgstr "Lo mandadÃs es estat corrèctament tractat pel servidor." #: front/src/components/library/FileUpload.vue:109 msgctxt "Content/Library/Table" @@ -4810,74 +5063,81 @@ msgctxt "Content/Library/Table" msgid "Uploading…" msgstr "MandadÃs…" +#: front/src/components/manage/library/LibrariesTable.vue:52 +#: front/src/components/manage/moderation/AccountsTable.vue:41 +#: front/src/components/mixins/Translations.vue:75 +#: front/src/views/admin/library/AlbumDetail.vue:258 +#: front/src/views/admin/library/ArtistDetail.vue:246 #: front/src/views/admin/library/Base.vue:20 +#: front/src/views/admin/library/LibraryDetail.vue:258 +#: front/src/views/admin/library/TrackDetail.vue:310 #: front/src/views/admin/library/UploadsList.vue:24 +#: front/src/views/admin/moderation/AccountsDetail.vue:349 +#: front/src/views/admin/moderation/DomainsDetail.vue:281 +#: front/src/components/mixins/Translations.vue:76 msgctxt "*/*/*" msgid "Uploads" msgstr "MandadÃs" -#: front/src/components/manage/moderation/AccountsTable.vue:41 -#: front/src/components/mixins/Translations.vue:63 -#: front/src/views/admin/library/AlbumDetail.vue:242 -#: front/src/views/admin/library/ArtistDetail.vue:231 -#: front/src/views/admin/library/LibraryDetail.vue:239 -#: front/src/views/admin/library/TrackDetail.vue:294 -#: front/src/views/admin/moderation/AccountsDetail.vue:337 -#: front/src/views/admin/moderation/DomainsDetail.vue:244 -#: front/src/components/mixins/Translations.vue:64 -msgctxt "Content/Moderation/Table.Label/Noun" -msgid "Uploads" -msgstr "MandadÃs" - -#: front/src/components/manage/library/LibrariesTable.vue:52 -msgctxt "Content/*/*/Noun" -msgid "Uploads" -msgstr "MandadÃs" - #: front/src/components/auth/ApplicationForm.vue:16 msgctxt "Content/Applications/Help Text" -msgid "" -"Use \"urn:ietf:wg:oauth:2.0:oob\" as a redirect URI if your application is " -"not served on the web." -msgstr "" +msgid "Use \"urn:ietf:wg:oauth:2.0:oob\" as a redirect URI if your application is not served on the web." +msgstr "Utilizatz « urn:ietf:wg:oauth:2.0:oob » coma URI de redireccion se vòstra aplicacion es pas disponibla en linha." #: front/src/components/Footer.vue:16 msgctxt "Footer/*/List item.Link" msgid "Use another instance" msgstr "Utilizar una autra instà ncia" +#: front/src/components/Home.vue:146 +msgctxt "Content/Home/Link" +msgid "Use Funkwhale on other devices with our apps" +msgstr "Utilizar Funkwhale sus d’autres aparelhs amb nòstra aplicacion" + +#: front/src/components/moderation/ReportModal.vue:44 +msgctxt "*/*/Field,Help" +msgid "Use this field to provide additional context to the moderator that will handle your report." +msgstr "Utilizatz aqueste camp per provesir mai de contèxt al moderator que gerirà lo senhalament." + #: front/src/views/auth/PasswordReset.vue:12 msgctxt "Content/Signup/Paragraph" -msgid "" -"Use this form to request a password reset. We will send an email to the " -"given address with instructions to reset your password." -msgstr "" -"Garnissètz aqueste formulari per demandar un nòu senhal. Auretz un corrièl a" -" vòstra adreça indicada contenent las consignas de reïnicializacion." +msgid "Use this form to request a password reset. We will send an email to the given address with instructions to reset your password." +msgstr "Garnissètz aqueste formulari per demandar un nòu senhal. Auretz un corrièl a vòstra adreça indicada contenent las consignas de reïnicializacion." + +#: front/src/components/moderation/ReportModal.vue:18 +msgctxt "*/Moderation/Popup,Paragraph" +msgid "Use this form to submit a report to our moderation team." +msgstr "Utilizatz aqueste formulari per enviar un senhalament als nòstres moderators." #: front/src/components/manage/moderation/InstancePolicyForm.vue:111 msgctxt "Content/Moderation/Help text" -msgid "" -"Use this setting to temporarily enable/disable the policy without completely" -" removing it." -msgstr "" -"Utilizatz aqueste paramètre per activar/desactivar temporà riament la règla " -"sens la suprimir complètament." +msgid "Use this setting to temporarily enable/disable the policy without completely removing it." +msgstr "Utilizatz aqueste paramètre per activar/desactivar temporà riament la règla sens la suprimir complètament." #: front/src/components/manage/users/InvitationsTable.vue:49 msgctxt "Content/Admin/Table" msgid "Used" msgstr "Utilizat" +#: front/src/components/Home.vue:125 +msgctxt "Content/Home/Header" +msgid "Useful links" +msgstr "Ligams utils" + #: front/src/views/content/libraries/Detail.vue:26 msgctxt "Content/Library/Table.Label" msgid "User" msgstr "Utilizaire" -#: front/src/components/instance/Stats.vue:5 -msgctxt "Content/About/Title/Noun" -msgid "User activity" -msgstr "Activitat dels utilizaires" +#: front/src/components/Home.vue:154 +msgctxt "Content/Home/Link" +msgid "User guides" +msgstr "Guida de l’utilizaire" + +#: front/src/views/admin/Settings.vue:88 +msgctxt "Content/Admin/Menu" +msgid "User Interface" +msgstr "Interfà cia utilizaire" #: front/src/components/library/AlbumDetail.vue:26 #: front/src/components/library/ArtistDetail.vue:39 @@ -4891,35 +5151,35 @@ msgctxt "Content/Radio/Title" msgid "User radios" msgstr "Rà dios dels utilizaires" -#: front/src/components/auth/Signup.vue:19 +#: front/src/components/auth/SignupForm.vue:15 #: front/src/components/manage/users/UsersTable.vue:37 -#: front/src/components/mixins/Translations.vue:59 +#: front/src/components/mixins/Translations.vue:71 #: front/src/views/admin/moderation/AccountsDetail.vue:114 -#: front/src/components/mixins/Translations.vue:60 +#: front/src/components/mixins/Translations.vue:72 msgctxt "Content/*/*" msgid "Username" msgstr "Nom d’utilizaire" -#: front/src/components/auth/Login.vue:15 +#: front/src/components/auth/LoginForm.vue:11 msgctxt "Content/Login/Input.Label/Noun" msgid "Username or email" msgstr "Nom d’utilizaire o corrièl" -#: front/src/components/instance/Stats.vue:13 -msgctxt "Content/About/Paragraph/Unit" -msgid "users" -msgstr "utilizaires" - -#: front/src/components/Sidebar.vue:102 -#: front/src/components/manage/moderation/DomainsTable.vue:39 -#: front/src/components/mixins/Translations.vue:61 +#: front/src/components/Sidebar.vue:106 +#: front/src/components/manage/moderation/DomainsTable.vue:47 +#: front/src/components/mixins/Translations.vue:73 #: src/views/admin/Settings.vue:81 front/src/views/admin/users/Base.vue:5 #: src/views/admin/users/UsersList.vue:21 -#: front/src/components/mixins/Translations.vue:62 +#: front/src/components/mixins/Translations.vue:74 msgctxt "*/*/*/Noun" msgid "Users" msgstr "Utilizaires" +#: front/src/components/Home.vue:110 +msgctxt "Content/Home/Paragraph" +msgid "Users on this pod also get %{ quota } of free storage to upload their own content!" +msgstr "Los utilizaires d’aqueste pod an tanben %{ quota } d’espaci per enviar lor pròpri contengut !" + #: front/src/components/Footer.vue:29 msgctxt "Footer/*/Title" msgid "Using Funkwhale" @@ -4937,45 +5197,58 @@ msgctxt "Content/Library/Link/Verb" msgid "View files" msgstr "Veire los fichièrs" -#: front/src/components/library/AlbumBase.vue:81 -#: front/src/components/library/ArtistBase.vue:92 -#: front/src/components/library/TrackBase.vue:100 -#: front/src/views/admin/library/AlbumDetail.vue:42 -#: front/src/views/admin/library/ArtistDetail.vue:41 +#: front/src/components/library/AlbumBase.vue:95 +#: front/src/components/library/ArtistBase.vue:107 +#: front/src/components/library/TrackBase.vue:111 +#: front/src/views/admin/library/AlbumDetail.vue:48 +#: front/src/views/admin/library/ArtistDetail.vue:46 #: front/src/views/admin/library/LibraryDetail.vue:34 #: front/src/views/admin/library/LibraryDetail.vue:45 -#: front/src/views/admin/library/TrackDetail.vue:41 +#: front/src/views/admin/library/TagDetail.vue:32 +#: front/src/views/admin/library/TrackDetail.vue:47 #: front/src/views/admin/library/UploadDetail.vue:35 #: front/src/views/admin/library/UploadDetail.vue:46 #: front/src/views/admin/moderation/AccountsDetail.vue:37 #: front/src/views/admin/moderation/AccountsDetail.vue:45 +#: front/src/views/admin/moderation/DomainsDetail.vue:30 msgctxt "Content/Moderation/Link/Verb" msgid "View in Django's admin" msgstr "Veire sul panèl d’admin de Django" -#: front/src/components/library/AlbumBase.vue:61 -#: front/src/components/library/ArtistBase.vue:72 -#: front/src/components/library/TrackBase.vue:80 +#: front/src/components/Home.vue:169 +msgctxt "Content/Home/Link" +msgid "View more…" +msgstr "Ne veire mai…" + +#: front/src/components/library/AlbumBase.vue:62 +#: front/src/components/library/ArtistBase.vue:73 +#: front/src/components/library/TrackBase.vue:78 #: front/src/components/metadata/ArtistCard.vue:49 #: front/src/components/metadata/ReleaseCard.vue:53 msgctxt "Content/*/*/Clickable, Verb" msgid "View on MusicBrainz" msgstr "Veire sus MusicBrainz" +#: front/src/components/manage/moderation/ReportCard.vue:124 +msgctxt "Content/Moderation/Link" +msgid "View public page" +msgstr "Veire la pagina publica" + #: front/src/components/manage/library/LibrariesTable.vue:11 #: front/src/components/manage/library/LibrariesTable.vue:51 #: front/src/components/manage/library/UploadsTable.vue:11 #: front/src/components/manage/library/UploadsTable.vue:63 #: front/src/views/admin/library/LibraryDetail.vue:94 #: front/src/views/admin/library/UploadDetail.vue:101 +#: front/src/views/content/libraries/Form.vue:18 msgctxt "*/*/*" msgid "Visibility" msgstr "Visibilitat" -#: front/src/views/content/libraries/Form.vue:18 -msgctxt "Content/Library/Dropdown.Label" -msgid "Visibility" -msgstr "Visibilitat" +#: front/src/components/Home.vue:91 +msgctxt "Content/Home/Link" +msgid "Visit funkwhale.audio" +msgstr "Visitar funkwhale.audio" #: front/src/components/library/AlbumDetail.vue:4 msgctxt "Content/Album/" @@ -4987,7 +5260,12 @@ msgctxt "Popup/*/Loading.Title" msgid "Waiting for result…" msgstr "En espèra dels resultats…" -#: front/src/components/auth/Login.vue:7 +#: front/src/components/auth/Settings.vue:285 +msgctxt "Content/Settings/Error message.Title" +msgid "We cannot delete your account" +msgstr "Podèm pas suprimir vòstre compte" + +#: front/src/components/auth/LoginForm.vue:3 msgctxt "Content/Login/Error message.Title" msgid "We cannot log you in" msgstr "Error pendent la connexion" @@ -4997,42 +5275,37 @@ msgctxt "Content/*/Error message.Title" msgid "We cannot save your changes" msgstr "Podèm pas enregistrar vòstras modificacions" -#: front/src/components/Home.vue:122 -msgctxt "Content/Home/List item" -msgid "We do not track you or bother you with ads" -msgstr "Vos pistam pas e vos mostram pas cap de reclama" +#: front/src/views/Notifications.vue:39 +msgctxt "Content/Notifications/Paragraph" +msgid "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!" +msgstr "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 !" #: front/src/components/library/FileUpload.vue:39 msgctxt "Content/Library/Link" msgid "We recommend using Picard for that purpose." msgstr "Vos recomandam d’utilizar lo logicial Picard per aquò far." -#: front/src/components/Home.vue:7 -msgctxt "Content/Home/Title" -msgid "We think listening to music should be simple." -msgstr "Pensam que l’accès a la musica deuriá èsser simple." +#: front/src/components/moderation/ReportModal.vue:35 +msgctxt "*/*/Field,Help" +msgid "We'll use this email if we need to contact you regarding this report." +msgstr "Utilizarem aquesta adreça se nos fa besonh vos contactar tocant aqueste senhalament." -#: front/src/components/Home.vue:148 +#: front/src/components/Home.vue:207 msgctxt "Head/Home/Title" msgid "Welcome" msgstr "La benvenguda" #: front/src/components/Home.vue:5 -msgctxt "Content/Home/Title/Verb" -msgid "Welcome on Funkwhale" -msgstr "La benvenguda a Funkwhale" - -#: front/src/components/Home.vue:24 -msgctxt "Content/Home/Title" -msgid "Why funkwhale?" -msgstr "Perque Funkwhale ?" +msgctxt "Content/Home/Header" +msgid "Welcome to %{ podName }!" +msgstr "La benvengut a %{ podName } !" -#: front/src/components/audio/EmbedWizard.vue:13 +#: front/src/components/audio/EmbedWizard.vue:23 msgctxt "Popup/Embed/Input.Label" msgid "Widget height" msgstr "Nautor del widget" -#: front/src/components/audio/EmbedWizard.vue:6 +#: front/src/components/audio/EmbedWizard.vue:16 msgctxt "Popup/Embed/Input.Label" msgid "Widget width" msgstr "Largor del widget" @@ -5050,11 +5323,13 @@ msgstr "Escritura sola" #: front/src/components/auth/ApplicationForm.vue:158 msgctxt "Content/OAuth Scopes/Help Text" msgid "Write-only access to user data" -msgstr "" +msgstr "Accès escritura sola de las donadas utilizaire" -#: front/src/components/Sidebar.vue:129 +#: front/src/components/Sidebar.vue:133 #: front/src/components/manage/moderation/AccountsTable.vue:72 -#: front/src/components/manage/moderation/DomainsTable.vue:58 +#: front/src/components/manage/moderation/DomainsTable.vue:12 +#: front/src/components/manage/moderation/DomainsTable.vue:69 +#: front/src/views/admin/moderation/DomainsDetail.vue:109 msgctxt "*/*/*" msgid "Yes" msgstr "Ã’c" @@ -5066,34 +5341,18 @@ msgstr "Ã’c-ben, desconnectatz-me !" #: front/src/views/content/libraries/Form.vue:19 msgctxt "Content/Library/Paragraph" -msgid "" -"You are able to share your library with other people, regardless of its " -"visibility." -msgstr "" -"Poiretz partejar vòstra bibiotèca amb d’autres gents, sens importà ncia de sa" -" visibilitat." +msgid "You are able to share your library with other people, regardless of its visibility." +msgstr "Poiretz partejar vòstra bibiotèca amb d’autres gents, sens importà ncia de sa visibilitat." #: front/src/components/library/FileUpload.vue:32 msgctxt "Content/Library/Paragraph" -msgid "" -"You are about to upload music to your library. Before proceeding, please " -"ensure that:" -msgstr "" -"Sètz a man d’enviar de la musica a vòstra bibliotèca. Abans de començar, " -"mercés de vos assegurar que :" +msgid "You are about to upload music to your library. Before proceeding, please ensure that:" +msgstr "Sètz a man d’enviar de la musica a vòstra bibliotèca. Abans de començar, mercés de vos assegurar que :" #: front/src/components/SetInstanceModal.vue:12 msgctxt "Popup/Login/Paragraph" -msgid "" -"You are currently connected to <a href=\"%{ url }\" target=\"_blank\">%{ " -"hostname } <i class=\"external icon\"/></a>. If you continue, you will " -"be disconnected from your current instance and all your local data will be " -"deleted." -msgstr "" -"Sètz actualament connectat a <a href=\"%{ url }\" target=\"_blank\">%{ " -"hostname } <i class=\"external icon\"/></a>. Se contunhatz, seretz " -"desconnectat de l’instà ncia actuala e totas vòstras donadas localas serà n " -"suprimidas." +msgid "You are currently connected to <a href=\"%{ url }\" target=\"_blank\">%{ hostname } <i class=\"external icon\"/></a>. If you continue, you will be disconnected from your current instance and all your local data will be deleted." +msgstr "Sètz actualament connectat a <a href=\"%{ url }\" target=\"_blank\">%{ hostname } <i class=\"external icon\"/></a>. Se contunhatz, seretz desconnectat de l’instà ncia actuala e totas vòstras donadas localas serà n suprimidas." #: front/src/components/library/ArtistDetail.vue:6 msgctxt "Content/Artist/Paragraph" @@ -5107,12 +5366,8 @@ msgstr "Sètz connectat coma %{ username }" #: front/src/components/library/FileUpload.vue:35 msgctxt "Content/Library/List item" -msgid "" -"You are not uploading copyrighted content in a public library, otherwise you" -" may be infringing the law" -msgstr "" -"Envietz pas cap de contengut jos dreches a una bibliotèca publica, autrament" -" enfranhètz la lei" +msgid "You are not uploading copyrighted content in a public library, otherwise you may be infringing the law" +msgstr "Envietz pas cap de contengut jos dreches a una bibliotèca publica, autrament enfranhètz la lei" #: front/src/components/SetInstanceModal.vue:98 msgctxt "*/Instance/Message" @@ -5121,54 +5376,33 @@ msgstr "Utilizatz una instà ncia Funkwhale a %{ url }" #: front/src/views/content/Home.vue:17 msgctxt "Content/Library/Paragraph" -msgid "" -"You can follow libraries from other users to get access to new music. Public" -" libraries can be followed immediatly, while following a private library " -"requires approval from its owner." -msgstr "" -"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." - -#: front/src/components/Home.vue:128 -msgctxt "Content/Home/List item" -msgid "" -"You can invite friends and family to your instance so they can enjoy your " -"music" -msgstr "" -"Podètz convidar vòstres amics e vòstra familha a aquesta instà ncia per que " -"pòscan profeitar de vòstra musica" +msgid "You can 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." +msgstr "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." #: front/src/components/moderation/FilterModal.vue:31 msgctxt "Popup/Moderation/Paragraph" -msgid "" -"You can manage and update your filters anytime from your account settings." -msgstr "" -"Podètz gerir e actualizar los filtres quand volgatz dels paramètres de " -"compte estant." +msgid "You can manage and update your filters any time from your account settings." +msgstr "Podètz gerir e actualizar los filtres quand volgatz dels paramètres de compte estant." #: front/src/views/auth/EmailConfirm.vue:24 msgctxt "Content/Signup/Paragraph" msgid "You can now use the service without limitations." msgstr "Podètz ara utilizar lo servici sens cap de limitacions." +#: front/src/components/auth/Settings.vue:278 +msgctxt "Content/Settings/Paragraph'" +msgid "You can permanently and irreversibly delete your account and all the associated data using the form below. You will be asked for confirmation." +msgstr "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." + #: front/src/components/library/radios/Builder.vue:7 msgctxt "Content/Radio/Paragraph" -msgid "" -"You can use this interface to build your own custom radio, which will play " -"tracks according to your criteria." -msgstr "" -"Podètz utilizar aquesta interfà cia per realizar vòstra pròpria rà dio " -"personalizada, que jogarà las listas segon los critèris indicats." +msgid "You can use this interface to build your own custom radio, which will play tracks according to your criteria." +msgstr "Podètz utilizar aquesta interfà cia per realizar vòstra pròpria rà dio personalizada, que jogarà las listas segon los critèris indicats." #: front/src/components/auth/SubsonicTokenForm.vue:7 msgctxt "Content/Settings/Paragraph" -msgid "" -"You can use those to enjoy your playlist and music in offline mode, on your " -"smartphone or tablet, for instance." -msgstr "" -"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." +msgid "You can use those to enjoy your playlist and music in offline mode, on your smartphone or tablet, for instance." +msgstr "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." #: front/src/components/auth/Settings.vue:202 msgctxt "Content/Applications/Paragraph" @@ -5185,22 +5419,17 @@ msgctxt "Content/Moderation/Card.Title" msgid "You don't have any rule in place for this account." msgstr "Avètz pas cap de règla en plaça per aqueste compte." -#: front/src/views/admin/moderation/DomainsDetail.vue:39 +#: front/src/views/admin/moderation/DomainsDetail.vue:67 msgctxt "Content/Moderation/Card.Title" msgid "You don't have any rule in place for this domain." msgstr "Avètz pas cap de règla en plaça per aqueste domeni." #: front/src/components/library/EditForm.vue:52 msgctxt "Content/Library/Paragraph" -msgid "" -"You don't have the permission to edit this object, but you can suggest " -"changes. Once submitted, suggestions will be reviewed before approval." -msgstr "" -"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." +msgid "You don't have the permission to edit this object, but you can suggest changes. Once submitted, suggestions will be reviewed before approval." +msgstr "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." -#: front/src/components/Sidebar.vue:171 +#: front/src/components/Sidebar.vue:175 msgctxt "Sidebar/Player/Title" msgid "You have a radio playing" msgstr "Escotatz una rà dio" @@ -5212,16 +5441,13 @@ msgstr "Poiriá arribar qu’ajatz de problèma de connexion." #: front/src/components/auth/Settings.vue:100 msgctxt "Popup/Settings/List item" -msgid "" -"You will be logged out from this session and have to log in with the new one" -msgstr "" -"Sètz per èsser desconnectat d’aquesta session e vos caldrà vos connectar amb" -" lo nòu senhal" +msgid "You will be logged out from this session and have to log in with the new one" +msgstr "Sètz per èsser desconnectat d’aquesta session e vos caldrà vos connectar amb lo nòu senhal" #: front/src/components/auth/Authorize.vue:51 msgctxt "Content/Auth/Paragraph" msgid "You will be redirected to <strong>%{ url }</strong>" -msgstr "" +msgstr "Seretz mandat a <strong>%{ url }</strong>" #: front/src/components/auth/Authorize.vue:49 msgctxt "Content/Auth/Paragraph" @@ -5230,26 +5456,23 @@ msgstr "Vos mostrarem un còdi de copiar-pegar dins l’aplicacion." #: front/src/components/auth/Settings.vue:71 msgctxt "Content/Settings/Paragraph" -msgid "" -"You will have to update your password on your clients that use this " -"password." -msgstr "" -"Vos caldrà actualizar lo senhal sus totes los clients qu’utilizan aqueste " -"senhal." +msgid "You will have to update your password on your clients that use this password." +msgstr "Vos caldrà actualizar lo senhal sus totes los clients qu’utilizan aqueste senhal." #: front/src/components/moderation/FilterModal.vue:20 msgctxt "Popup/Moderation/Paragraph" -msgid "" -"You will not see tracks, albums and user activity linked to this artist " -"anymore:" -msgstr "" -"Veiretz pas mai las pistas, albums e las activitats d’utilizaires ligadas a " -"aqueste artista :" +msgid "You will not see tracks, albums and user activity linked to this artist any more:" +msgstr "Veiretz pas mai las pistas, albums e las activitats d’utilizaires ligadas a aqueste artista :" -#: front/src/components/auth/Signup.vue:13 +#: front/src/components/auth/SignupForm.vue:9 msgctxt "Content/Signup/Form/Paragraph" msgid "Your account cannot be created." -msgstr "L’avatar pòt pas èsser enregistrat" +msgstr "Lo compte pòt pas èsser creat." + +#: front/src/components/auth/Settings.vue:281 +msgctxt "Content/Settings/Paragraph'" +msgid "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." +msgstr "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." #: front/src/components/auth/Settings.vue:215 msgctxt "Content/Settings/Title/Noun" @@ -5261,6 +5484,11 @@ msgctxt "Content/Settings/Error message.Title" msgid "Your avatar cannot be saved" msgstr "L’avatar pòt pas èsser enregistrat" +#: front/src/components/auth/Settings.vue:527 +msgctxt "*/Auth/Message" +msgid "Your deletion request was submitted, your account and content will be deleted shortly" +msgstr "Vòstra demanda de supression es estada enviada, vòstre compte e lo contengut serà n lèu suprimits" + #: front/src/components/library/EditForm.vue:3 msgctxt "Content/Library/Paragraph" msgid "Your edit was successfully submitted." @@ -5271,12 +5499,12 @@ msgctxt "Head/Favorites/Title" msgid "Your Favorites" msgstr "Vòstres favorits" -#: front/src/components/Home.vue:109 -msgctxt "Content/Home/Title" -msgid "Your music, your way" -msgstr "Vòstra musica, coma volètz" +#: front/src/views/Notifications.vue:5 +msgctxt "Content/Notifications/Title" +msgid "Your messages" +msgstr "Vòstre messatge" -#: front/src/views/Notifications.vue:4 +#: front/src/views/Notifications.vue:69 msgctxt "Content/Notifications/Title" msgid "Your notifications" msgstr "Vòstras notificacions" @@ -5293,42 +5521,37 @@ msgstr "Vòstre senhal es corrèctament cambiat." #: front/src/components/auth/Settings.vue:14 msgctxt "Content/Settings/Error message.Title" -msgid "Your settings can't be updateds" +msgid "Your settings can't be updated" msgstr "Impossible d’actualizar vòstres paramètres" #: front/src/components/auth/Settings.vue:101 msgctxt "Popup/Settings/List item" -msgid "" -"Your Subsonic password will be changed to a new, random one, logging you out" -" from devices that used the old Subsonic password" -msgstr "" -"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" +msgid "Your Subsonic password will be changed to a new, random one, logging you out from devices that used the old Subsonic password" +msgstr "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" -#: front/src/edits.js:47 -msgctxt "*/*/*/Short, Noun" -msgid "Position" -msgstr "Posicions" +#: front/src/entities.js:126 +msgctxt "*/*/*/Noun" +msgid "MusicBrainz ID" +msgstr "MusicBrainz ID" -#: front/src/edits.js:54 -msgctxt "Content/Track/*/Noun" -msgid "Copyright" -msgstr "Copyright" +#: front/src/main.js:110 +msgctxt "*/Error/Paragraph" +msgid "You sent too many requests and have been rate limited, please try again in %{ delay }" +msgstr "Avètz realizat tròpas de requèstas e sètz estat limitat, volgatz tornar ensajar d’aquà %{ delay }" -#: front/src/components/library/AlbumBase.vue:183 -#, fuzzy +#: front/src/main.js:113 +msgctxt "*/Error/Paragraph" +msgid "You sent too many requests and have been rate limited, please try again later" +msgstr "Avètz realizat tròpas de requèstas e sètz estat limitat, volgatz tornar ensajar mai tard" + +#: front/src/components/library/AlbumBase.vue:208 msgctxt "Content/Album/Header.Title" -msgid "" -"Album containing %{ count } track, by <a class=\"internal\" href=\"%{ " -"artistUrl }\">%{ artist }</a>" -msgid_plural "" -"Album containing %{ count } tracks, by <a class=\"internal\" href=\"%{ " -"artistUrl }\">%{ artist }</a>" -msgstr[0] "Album contenent %{ count } pista, de %{ artist }" -msgstr[1] "Album contenent %{ count } pistas, de %{ artist }" - -#: front/src/components/audio/PlayButton.vue:220 -#, fuzzy +msgid "Album containing %{ count } track, by <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" +msgid_plural "Album containing %{ count } tracks, by <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" +msgstr[0] "Album contenent %{ count } pista, de <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" +msgstr[1] "Album contenent %{ count } pistas, de <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" + +#: front/src/components/audio/PlayButton.vue:246 msgctxt "*/Queue/Message" msgid "%{ count } track was added to your queue" msgid_plural "%{ count } tracks were added to your queue" diff --git a/front/locales/pl/LC_MESSAGES/app.po b/front/locales/pl/LC_MESSAGES/app.po index 8bd099422c801c81c0e1a81f65a5cfac6c253e07..365ef6674466ef187c9cc33f7656dbe6ab613fad 100644 --- a/front/locales/pl/LC_MESSAGES/app.po +++ b/front/locales/pl/LC_MESSAGES/app.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: front 1.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-05-16 10:35+0200\n" +"POT-Creation-Date: 2019-10-01 15:15+0200\n" "PO-Revision-Date: 2018-11-11 08:36+0000\n" "Last-Translator: Marcin MikoÅ‚ajczak <me@m4sk.in>\n" "Language-Team: \n" @@ -38,6 +38,59 @@ msgctxt "Content/Auth/Title" msgid "%{ app } wants to access your Funkwhale account" msgstr "Zaloguj siÄ™ na swoje konto Funkwhale" +#: front/src/components/About.vue:173 src/components/Home.vue:56 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } active user" +msgid_plural "%{ count } active users" +msgstr[0] "%{ count } utwór" +msgstr[1] "%{ count } utwory" +msgstr[2] "%{ count } utworów" + +#: front/src/components/About.vue:182 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } albums" +msgid_plural "%{ count } albums" +msgstr[0] "%{ count } utwór" +msgstr[1] "%{ count } utwory" +msgstr[2] "%{ count } utworów" + +#: front/src/components/About.vue:152 +msgctxt "*/*/*" +msgid "%{ count } allowed domains" +msgid_plural "%{ count } allowed domains" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: front/src/components/About.vue:179 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } artists" +msgid_plural "%{ count } artists" +msgstr[0] "%{ count } utwór" +msgstr[1] "%{ count } utwory" +msgstr[2] "%{ count } utworów" + +#: front/src/components/About.vue:176 src/components/Home.vue:59 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } hour of music" +msgid_plural "%{ count } hours of music" +msgstr[0] "%{ count } utwór" +msgstr[1] "%{ count } utwory" +msgstr[2] "%{ count } utworów" + +#: front/src/components/About.vue:188 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } listenings" +msgid_plural "%{ count } listenings" +msgstr[0] "%{ count } utwór" +msgstr[1] "%{ count } utwory" +msgstr[2] "%{ count } utworów" + #: front/src/components/common/ActionTable.vue:68 #, fuzzy msgctxt "Content/*/Paragraph" @@ -47,9 +100,9 @@ msgstr[0] "%{ count } z %{ total } zaznaczonego" msgstr[1] "%{ count } z %{ total } zaznaczonych" msgstr[2] "%{ count } z %{ total } zaznaczonych" -#: front/src/components/Sidebar.vue:121 src/components/audio/album/Card.vue:52 +#: front/src/components/Sidebar.vue:125 src/components/audio/album/Card.vue:52 #: front/src/views/content/libraries/Card.vue:40 -#: src/views/content/remote/Card.vue:30 +#: src/views/content/remote/Card.vue:43 #, fuzzy msgctxt "*/*/*" msgid "%{ count } track" @@ -76,7 +129,16 @@ msgstr[0] "%{ count } utwór zgodny z wybranymi filtrami" msgstr[1] "%{ count } utwory zgodne z wybranymi filtrami" msgstr[2] "%{ count } utworów zgodnych z wybranymi filtrami" -#: front/src/components/playlists/Card.vue:18 +#: front/src/components/About.vue:185 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } tracks" +msgid_plural "%{ count } tracks" +msgstr[0] "%{ count } utwór" +msgstr[1] "%{ count } utwory" +msgstr[2] "%{ count } utworów" + +#: front/src/components/playlists/Card.vue:28 #, fuzzy msgctxt "Content/*/Card/List item" msgid "%{ count} track" @@ -122,11 +184,10 @@ msgstr "Profil %{ username }" #: front/src/components/playlists/PlaylistModal.vue:21 msgctxt "Popup/Playlist/Paragraph" -msgid "" -"<strong>%{ track }</strong> is already in <strong>%{ playlist }</strong>." +msgid "<strong>%{ track }</strong> is already in <strong>%{ playlist }</strong>." msgstr "" -#: front/src/components/audio/artist/Card.vue:41 +#: front/src/components/audio/artist/Card.vue:11 #, fuzzy msgctxt "Content/Artist/Card" msgid "1 album" @@ -144,24 +205,45 @@ msgstr[0] "1 polubienie" msgstr[1] "%{ count} polubienia" msgstr[2] "%{ count} polubieÅ„" -#: front/src/components/Home.vue:64 -msgctxt "Content/Home/Title" -msgid "A clean library" -msgstr "Przejrzysta biblioteka" +#: front/src/components/audio/artist/Card.vue:15 +#, fuzzy +msgctxt "Content/Artist/Card" +msgid "1 track" +msgid_plural "%{ count } tracks" +msgstr[0] "Dodaj utwór" +msgstr[1] "Dodaj utwór" +msgstr[2] "Dodaj utwór" + +#: front/src/views/Notifications.vue:21 src/views/Notifications.vue:55 +msgctxt "*/*/*" +msgid "30 days" +msgstr "" + +#: front/src/views/Notifications.vue:22 src/views/Notifications.vue:56 +msgctxt "*/*/*" +msgid "60 days" +msgstr "" + +#: front/src/views/Notifications.vue:23 src/views/Notifications.vue:57 +msgctxt "*/*/*" +msgid "90 days" +msgstr "" #: front/src/components/library/FileUpload.vue:264 +#, fuzzy msgctxt "Content/Library/Help text" -msgid "A network error occured while uploading this file" +msgid "A network error occurred while uploading this file" msgstr "WystÄ…piÅ‚ bÅ‚Ä…d sieci podczas wysyÅ‚ania tego pliku" -#: front/src/components/library/EditForm.vue:145 +#: front/src/components/library/EditForm.vue:161 msgctxt "*/*/Placeholder" msgid "A short summary describing your changes." msgstr "WystÄ…piÅ‚ bÅ‚Ä…d podczas zapisywania zmian" #: front/src/components/About.vue:5 -msgctxt "Content/About/Title/Short, Noun" -msgid "About %{ instance }" +#, fuzzy +msgctxt "Content/Home/Header" +msgid "About %{ podName }" msgstr "O %{ instance }" #: front/src/components/Footer.vue:6 @@ -169,7 +251,7 @@ msgctxt "Footer/About/Title" msgid "About %{instanceName}" msgstr "O %{ instance }" -#: front/src/components/Footer.vue:45 +#: front/src/components/Footer.vue:53 src/components/Home.vue:85 msgctxt "Footer/*/Title/Short" msgid "About Funkwhale" msgstr "O Funkwhale" @@ -179,9 +261,16 @@ msgctxt "Footer/About/List item.Link" msgid "About page" msgstr "Strona albumu" -#: front/src/components/About.vue:8 src/components/About.vue:67 -msgctxt "Content/About/Title" -msgid "About this instance" +#: front/src/components/Home.vue:19 +#, fuzzy +msgctxt "Content/Home/Header" +msgid "About this Funkwhale pod" +msgstr "O Funkwhale" + +#: front/src/components/About.vue:21 src/components/About.vue:51 +#, fuzzy +msgctxt "Content/About/Header" +msgid "About this pod" msgstr "O tej instancji" #: front/src/views/content/libraries/Detail.vue:48 @@ -194,96 +283,87 @@ msgctxt "Content/Library/Table/Short" msgid "Accepted" msgstr "Zaakceptowano" -#: front/src/components/auth/SubsonicTokenForm.vue:110 +#: front/src/components/auth/SubsonicTokenForm.vue:117 msgctxt "Content/Settings/Message" msgid "Access disabled" msgstr "Brak dostÄ™pu" -#: front/src/components/mixins/Translations.vue:73 -#: front/src/components/mixins/Translations.vue:74 +#: front/src/components/mixins/Translations.vue:85 +#: front/src/components/mixins/Translations.vue:86 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to audio files, libraries, artists, albums and tracks" msgstr "" -#: front/src/components/mixins/Translations.vue:97 -#: front/src/components/mixins/Translations.vue:98 +#: front/src/components/mixins/Translations.vue:109 +#: front/src/components/mixins/Translations.vue:110 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to content filters" msgstr "Zaznacz filtr" -#: front/src/components/mixins/Translations.vue:105 -#: front/src/components/mixins/Translations.vue:106 +#: front/src/components/mixins/Translations.vue:117 +#: front/src/components/mixins/Translations.vue:118 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to edits" msgstr "Brak dostÄ™pu" -#: front/src/components/mixins/Translations.vue:69 -#: front/src/components/mixins/Translations.vue:70 +#: front/src/components/mixins/Translations.vue:81 +#: front/src/components/mixins/Translations.vue:82 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to email, username, and profile information" msgstr "" -#: front/src/components/mixins/Translations.vue:77 -#: front/src/components/mixins/Translations.vue:78 +#: front/src/components/mixins/Translations.vue:89 +#: front/src/components/mixins/Translations.vue:90 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to favorites" msgstr "Dodaj do ulubionych" -#: front/src/components/mixins/Translations.vue:85 -#: front/src/components/mixins/Translations.vue:86 +#: front/src/components/mixins/Translations.vue:97 +#: front/src/components/mixins/Translations.vue:98 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to follows" msgstr "" -#: front/src/components/mixins/Translations.vue:81 -#: front/src/components/mixins/Translations.vue:82 +#: front/src/components/mixins/Translations.vue:93 +#: front/src/components/mixins/Translations.vue:94 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to listening history" msgstr "" -#: front/src/components/mixins/Translations.vue:101 -#: front/src/components/mixins/Translations.vue:102 +#: front/src/components/mixins/Translations.vue:113 +#: front/src/components/mixins/Translations.vue:114 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to notifications" msgstr "Twoje powiadomienia" -#: front/src/components/mixins/Translations.vue:89 -#: front/src/components/mixins/Translations.vue:90 +#: front/src/components/mixins/Translations.vue:101 +#: front/src/components/mixins/Translations.vue:102 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to playlists" msgstr "Dodaj do playlisty…" -#: front/src/components/mixins/Translations.vue:93 -#: front/src/components/mixins/Translations.vue:94 +#: front/src/components/mixins/Translations.vue:105 +#: front/src/components/mixins/Translations.vue:106 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to radios" msgstr "Brak dostÄ™pu" -#: front/src/components/Home.vue:101 -msgctxt "Content/Home/List item" -msgid "" -"Access your music from a clean interface that focuses on what really matters" -msgstr "" -"Uzyskaj dostÄ™p do swojej muzyki z przejrzystego interfejsu skupionego na " -"tym, co naprawdÄ™ ważne" - #: front/src/components/manage/library/UploadsTable.vue:67 -#: front/src/components/mixins/Translations.vue:45 +#: front/src/components/mixins/Translations.vue:55 #: front/src/views/admin/library/UploadDetail.vue:175 -#: front/src/components/mixins/Translations.vue:46 +#: front/src/components/mixins/Translations.vue:56 msgctxt "Content/*/*/Noun" msgid "Accessed date" msgstr "Brak dostÄ™pu" -#: front/src/views/admin/library/LibraryDetail.vue:104 -#: front/src/views/admin/library/UploadDetail.vue:111 -msgctxt "*/*/*/Noun" -msgid "Account" -msgstr "Stan konta" - #: front/src/components/manage/library/LibrariesTable.vue:49 #: front/src/components/manage/library/UploadsTable.vue:61 -msgctxt "*/*/*" +#: front/src/components/manage/moderation/ReportCard.vue:156 +#: front/src/components/mixins/Report.vue:13 +#: front/src/views/admin/library/LibraryDetail.vue:113 +#: front/src/views/admin/library/UploadDetail.vue:111 +#: front/src/components/mixins/Report.vue:14 +msgctxt "*/*/*/Noun" msgid "Account" msgstr "Stan konta" @@ -297,7 +377,7 @@ msgctxt "Content/Settings/Title" msgid "Account settings" msgstr "Ustawienia konta" -#: front/src/components/auth/Settings.vue:479 +#: front/src/components/auth/Settings.vue:544 msgctxt "Head/Settings/Title" msgid "Account Settings" msgstr "Ustawienia konta" @@ -314,7 +394,7 @@ msgstr "Adres e-mail konta" #: front/src/views/admin/moderation/AccountsList.vue:3 #: front/src/views/admin/moderation/AccountsList.vue:24 -#: front/src/views/admin/moderation/Base.vue:8 +#: front/src/views/admin/moderation/Base.vue:11 msgctxt "*/Moderation/Title" msgid "Accounts" msgstr "Stan konta" @@ -328,33 +408,31 @@ msgstr "DziaÅ‚anie" #, fuzzy msgctxt "Content/*/Paragraph" msgid "Action %{ action } was launched successfully on %{ count } element" -msgid_plural "" -"Action %{ action } was launched successfully on %{ count } elements" -msgstr[0] "" -"DziaÅ‚anie %{ action } zostaÅ‚o rozpoczÄ™te pomyÅ›lnie na %{ count } elemencie" -msgstr[1] "" -"DziaÅ‚anie %{ action } zostaÅ‚o rozpoczÄ™te pomyÅ›lnie na %{ count } elementach" -msgstr[2] "" -"DziaÅ‚anie %{ action } zostaÅ‚o rozpoczÄ™te pomyÅ›lnie na %{ count } elementach" +msgid_plural "Action %{ action } was launched successfully on %{ count } elements" +msgstr[0] "DziaÅ‚anie %{ action } zostaÅ‚o rozpoczÄ™te pomyÅ›lnie na %{ count } elemencie" +msgstr[1] "DziaÅ‚anie %{ action } zostaÅ‚o rozpoczÄ™te pomyÅ›lnie na %{ count } elementach" +msgstr[2] "DziaÅ‚anie %{ action } zostaÅ‚o rozpoczÄ™te pomyÅ›lnie na %{ count } elementach" #: front/src/components/common/ActionTable.vue:22 #: front/src/components/library/radios/Builder.vue:65 +#: front/src/components/manage/moderation/ReportCard.vue:210 msgctxt "Content/*/*/Noun" msgid "Actions" msgstr "DziaÅ‚ania" -#: front/src/components/manage/users/UsersTable.vue:53 +#: front/src/components/manage/users/UsersTable.vue:54 msgctxt "Content/Admin/Table" msgid "Active" msgstr "Aktywny" -#: front/src/views/admin/library/AlbumDetail.vue:134 -#: front/src/views/admin/library/ArtistDetail.vue:123 -#: front/src/views/admin/library/LibraryDetail.vue:138 -#: front/src/views/admin/library/TrackDetail.vue:186 +#: front/src/views/admin/library/AlbumDetail.vue:140 +#: front/src/views/admin/library/ArtistDetail.vue:128 +#: front/src/views/admin/library/LibraryDetail.vue:147 +#: front/src/views/admin/library/TagDetail.vue:83 +#: front/src/views/admin/library/TrackDetail.vue:192 #: front/src/views/admin/library/UploadDetail.vue:160 -#: front/src/views/admin/moderation/AccountsDetail.vue:220 -#: front/src/views/admin/moderation/DomainsDetail.vue:136 +#: front/src/views/admin/moderation/AccountsDetail.vue:221 +#: front/src/views/admin/moderation/DomainsDetail.vue:173 msgctxt "Content/Moderation/Title" msgid "Activity" msgstr "Aktywność" @@ -365,7 +443,7 @@ msgctxt "Content/Settings/Dropdown.Label/Noun" msgid "Activity visibility" msgstr "Widoczność aktywnoÅ›ci" -#: front/src/views/admin/moderation/DomainsList.vue:18 +#: front/src/views/admin/moderation/DomainsList.vue:22 msgctxt "Content/Moderation/Button/Verb" msgid "Add" msgstr "" @@ -411,7 +489,21 @@ msgctxt "Content/Radio/Paragraph" msgid "Add filters to customize your radio" msgstr "Dodaj filtry aby dostosować swoje radio" -#: front/src/components/audio/PlayButton.vue:75 +#: front/src/components/manage/moderation/NoteForm.vue:12 +#, fuzzy +msgctxt "Content/Moderation/Button.Label/Verb" +msgid "Add note" +msgstr "Dodaj zawartość" + +#: front/src/components/manage/moderation/DomainsTable.vue:191 +#: front/src/views/admin/moderation/DomainsDetail.vue:46 +#: front/src/views/admin/moderation/DomainsList.vue:18 +#, fuzzy +msgctxt "Content/Moderation/Action/Verb" +msgid "Add to allow-list" +msgstr "Dodaj do playlisty…" + +#: front/src/components/audio/PlayButton.vue:91 msgctxt "*/Queue/Dropdown/Button/Title" msgid "Add to current queue" msgstr "Dodaj do kolejki" @@ -443,7 +535,7 @@ msgctxt "Popup/Playlist/Table.Button.Label/Verb" msgid "Add track" msgstr "Dodaj utwór" -#: front/src/components/manage/users/UsersTable.vue:69 +#: front/src/components/manage/users/UsersTable.vue:70 msgctxt "Content/Admin/Table.User role" msgid "Admin" msgstr "Administrator" @@ -453,49 +545,49 @@ msgctxt "Sidebar/Admin/Title/Noun" msgid "Administration" msgstr "Administracja" -#: front/src/views/admin/library/TrackDetail.vue:107 -msgctxt "*/*/*/Noun" -msgid "Album" -msgstr "Album" - -#: front/src/components/audio/SearchBar.vue:26 +#: front/src/components/audio/SearchBar.vue:33 #: src/components/audio/track/Table.vue:9 -#: front/src/components/library/AlbumBase.vue:152 -#: front/src/components/library/ArtistBase.vue:194 +#: front/src/components/library/AlbumBase.vue:170 +#: front/src/components/library/ArtistBase.vue:212 #: front/src/components/manage/library/TracksTable.vue:40 #: front/src/components/metadata/Search.vue:134 +#: src/components/mixins/Report.vue:41 +#: front/src/views/admin/library/TrackDetail.vue:113 #: front/src/views/content/libraries/FilesTable.vue:57 +#: front/src/components/mixins/Report.vue:42 msgctxt "*/*/*" msgid "Album" msgstr "Album" -#: front/src/views/admin/library/TrackDetail.vue:128 +#: front/src/views/admin/library/TrackDetail.vue:134 msgctxt "*/*/*/Noun" msgid "Album artist" msgstr "Albumy tego wykonawcy" -#: front/src/views/admin/library/AlbumDetail.vue:92 +#: front/src/views/admin/library/AlbumDetail.vue:98 msgctxt "Content/Moderation/Title" msgid "Album data" msgstr "Nazwa albumu" -#: front/src/components/mixins/Translations.vue:51 -#: front/src/components/mixins/Translations.vue:52 +#: front/src/components/mixins/Translations.vue:61 +#: front/src/components/mixins/Translations.vue:62 msgctxt "Content/*/Dropdown/Noun" msgid "Album name" msgstr "Nazwa albumu" #: front/src/components/audio/Search.vue:19 -#: src/components/instance/Stats.vue:48 -#: front/src/components/library/Albums.vue:120 -#: src/components/library/Library.vue:7 +#: src/components/library/Albums.vue:129 +#: front/src/components/library/Library.vue:7 +#: src/components/library/TagDetail.vue:28 #: front/src/components/manage/library/ArtistsTable.vue:41 +#: front/src/components/manage/library/TagsTable.vue:43 #: front/src/views/admin/library/AlbumsList.vue:24 -#: front/src/views/admin/library/ArtistDetail.vue:241 +#: front/src/views/admin/library/ArtistDetail.vue:256 #: front/src/views/admin/library/Base.vue:11 -#: front/src/views/admin/library/LibraryDetail.vue:219 -#: front/src/views/admin/moderation/AccountsDetail.vue:354 -#: front/src/views/admin/moderation/DomainsDetail.vue:264 +#: front/src/views/admin/library/LibraryDetail.vue:238 +#: front/src/views/admin/library/TagDetail.vue:133 +#: front/src/views/admin/moderation/AccountsDetail.vue:366 +#: front/src/views/admin/moderation/DomainsDetail.vue:301 msgctxt "*/*/*" msgid "Albums" msgstr "Albumy" @@ -509,7 +601,10 @@ msgstr "Albumy tego wykonawcy" #: front/src/components/manage/library/LibrariesTable.vue:13 #: front/src/components/manage/library/UploadsTable.vue:13 #: front/src/components/manage/library/UploadsTable.vue:22 +#: front/src/components/manage/moderation/DomainsTable.vue:11 #: front/src/components/manage/users/InvitationsTable.vue:19 +#: front/src/components/moderation/ReportCategoryDropdown.vue:32 +#: front/src/views/admin/moderation/ReportsList.vue:17 #: front/src/views/content/libraries/FilesTable.vue:13 msgctxt "Content/*/Dropdown" msgid "All" @@ -529,40 +624,52 @@ msgctxt "Head/Authorize/Title" msgid "Allow application" msgstr "" +#: front/src/components/About.vue:136 +msgctxt "*/*/*" +msgid "Allow-list" +msgstr "" + +#: front/src/components/About.vue:149 +msgctxt "*/*/*" +msgid "Allowed domains" +msgstr "" + #: front/src/components/library/ImportStatusModal.vue:17 msgctxt "Popup/Import/Message" -msgid "" -"An error occured during upload processing. You will find more information " -"below." +msgid "An error occurred during upload processing. You will find more information below." msgstr "" #: front/src/components/playlists/Editor.vue:13 +#, fuzzy msgctxt "Content/Playlist/Error message.Title" -msgid "An error occured while saving your changes" +msgid "An error occurred while saving your changes" msgstr "WystÄ…piÅ‚ bÅ‚Ä…d podczas zapisywania zmian" #: front/src/components/federation/FetchButton.vue:21 +#, fuzzy msgctxt "Popup/*/Message.Content" -msgid "An error occured while trying to refresh data:" +msgid "An error occurred while trying to refresh data:" msgstr "WystÄ…piÅ‚ bÅ‚Ä…d podczas zapisywania zmian" #: front/src/components/federation/FetchButton.vue:41 +#, fuzzy msgctxt "*/*/Error" -msgid "An HTTP error occured while contacting the remote server" +msgid "An HTTP error occurred while contacting the remote server" msgstr "WystÄ…piÅ‚ bÅ‚Ä…d podczas zapisywania zmian" -#: front/src/components/auth/Login.vue:10 -msgctxt "Content/Login/Error message/List item" -msgid "" -"An unknown error happend, this can mean the server is down or cannot be " -"reached" -msgstr "" -"WystÄ…piÅ‚ nieznany bÅ‚Ä…d, może oznaczać to że serwer jest wyÅ‚Ä…czony lub " -"nieosiÄ…galny" - #: front/src/components/library/ImportStatusModal.vue:145 msgctxt "Popup/Import/Error.Label" -msgid "An unkwown error occured" +msgid "An unknown error occurred" +msgstr "" + +#: front/src/components/About.vue:123 +msgctxt "*/*/*" +msgid "Anonymous access" +msgstr "" + +#: front/src/components/moderation/ReportModal.vue:54 +msgctxt "Popup/Moderation/Error message" +msgid "Anonymous reports are disabled, please sign-in to submit a report." msgstr "" #: front/src/components/auth/Settings.vue:175 @@ -583,9 +690,7 @@ msgstr "" #: front/src/components/auth/ApplicationEdit.vue:16 msgctxt "Content/Application/Paragraph/" -msgid "" -"Application ID and secret are really sensitive values and must be treated " -"like passwords. Do not share those with anyone else." +msgid "Application ID and secret are really sensitive values and must be treated like passwords. Do not share those with anyone else." msgstr "" #: front/src/components/auth/ApplicationEdit.vue:25 @@ -615,29 +720,27 @@ msgctxt "Content/Login/Title" msgid "Are you sure you want to log out?" msgstr "Czy na pewno chcesz siÄ™ wylogować?" +#: front/src/components/audio/SearchBar.vue:32 +#: src/components/audio/track/Table.vue:8 #: front/src/components/manage/library/AlbumsTable.vue:40 #: front/src/components/manage/library/TracksTable.vue:41 -msgctxt "*/*/*" -msgid "Artist" -msgstr "Wykonawca" - -#: front/src/components/audio/SearchBar.vue:25 -#: src/components/audio/track/Table.vue:8 #: front/src/components/metadata/Search.vue:130 -#: front/src/views/admin/library/AlbumDetail.vue:108 -#: front/src/views/admin/library/TrackDetail.vue:118 -#: front/src/views/content/libraries/FilesTable.vue:56 +#: src/components/mixins/Report.vue:55 +#: front/src/views/admin/library/AlbumDetail.vue:114 +#: front/src/views/admin/library/TrackDetail.vue:124 +#: front/src/views/content/libraries/FilesTable.vue:56 src/entities.js:12 +#: front/src/components/mixins/Report.vue:56 msgctxt "*/*/*/Noun" msgid "Artist" msgstr "Wykonawca" -#: front/src/views/admin/library/ArtistDetail.vue:91 +#: front/src/views/admin/library/ArtistDetail.vue:96 msgctxt "Content/Moderation/Title" msgid "Artist data" msgstr "Nazwa wykonawcy" -#: front/src/components/mixins/Translations.vue:52 -#: front/src/components/mixins/Translations.vue:53 +#: front/src/components/mixins/Translations.vue:62 +#: front/src/components/mixins/Translations.vue:63 msgctxt "Content/*/Dropdown/Noun" msgid "Artist name" msgstr "Nazwa wykonawcy" @@ -647,36 +750,36 @@ msgctxt "*/Search/Input.Placeholder" msgid "Artist, album, track…" msgstr "Wykonawca, album, utwór…" +#: front/src/components/audio/Search.vue:10 +#: src/components/library/Artists.vue:117 +#: front/src/components/library/Library.vue:10 +#: front/src/components/library/TagDetail.vue:19 +#: front/src/components/manage/library/TagsTable.vue:42 #: front/src/views/admin/library/ArtistsList.vue:24 #: front/src/views/admin/library/Base.vue:8 -#: front/src/views/admin/library/LibraryDetail.vue:209 -msgctxt "*/*/*" -msgid "Artists" -msgstr "Wykonawcy" - -#: front/src/components/audio/Search.vue:10 -#: src/components/instance/Stats.vue:42 -#: front/src/components/library/Artists.vue:117 -#: src/components/library/Library.vue:10 -#: front/src/views/admin/moderation/AccountsDetail.vue:346 -#: front/src/views/admin/moderation/DomainsDetail.vue:254 +#: front/src/views/admin/library/LibraryDetail.vue:228 +#: front/src/views/admin/library/TagDetail.vue:123 +#: front/src/views/admin/moderation/AccountsDetail.vue:358 +#: front/src/views/admin/moderation/DomainsDetail.vue:291 msgctxt "*/*/*/Noun" msgid "Artists" msgstr "Wykonawcy" #: front/src/components/favorites/List.vue:34 -#: src/components/library/Albums.vue:25 -#: front/src/components/library/Artists.vue:25 +#: src/components/library/Albums.vue:29 +#: front/src/components/library/Artists.vue:29 #: src/components/library/Radios.vue:44 #: front/src/components/manage/library/AlbumsTable.vue:21 #: front/src/components/manage/library/ArtistsTable.vue:21 #: front/src/components/manage/library/EditsCardList.vue:39 #: front/src/components/manage/library/LibrariesTable.vue:30 +#: front/src/components/manage/library/TagsTable.vue:21 #: front/src/components/manage/library/TracksTable.vue:21 #: front/src/components/manage/library/UploadsTable.vue:40 #: front/src/components/manage/moderation/AccountsTable.vue:21 -#: front/src/components/manage/moderation/DomainsTable.vue:19 +#: front/src/components/manage/moderation/DomainsTable.vue:27 #: front/src/components/manage/users/UsersTable.vue:19 +#: front/src/views/admin/moderation/ReportsList.vue:44 #: front/src/views/content/libraries/FilesTable.vue:31 #: front/src/views/playlists/List.vue:27 msgctxt "Content/Search/Dropdown" @@ -688,18 +791,24 @@ msgctxt "Content/Signup/Button.Label/Verb" msgid "Ask for a password reset" msgstr "PoproÅ› o zresetowanie hasÅ‚a" -#: front/src/views/admin/library/AlbumDetail.vue:198 -#: front/src/views/admin/library/ArtistDetail.vue:187 -#: front/src/views/admin/library/LibraryDetail.vue:176 -#: front/src/views/admin/library/TrackDetail.vue:250 +#: front/src/components/manage/moderation/ReportCard.vue:72 +msgctxt "Content/Moderation/*" +msgid "Assigned to" +msgstr "" + +#: front/src/views/admin/library/AlbumDetail.vue:214 +#: front/src/views/admin/library/ArtistDetail.vue:202 +#: front/src/views/admin/library/LibraryDetail.vue:195 +#: front/src/views/admin/library/TagDetail.vue:113 +#: front/src/views/admin/library/TrackDetail.vue:266 #: front/src/views/admin/library/UploadDetail.vue:191 -#: front/src/views/admin/moderation/AccountsDetail.vue:274 -#: front/src/views/admin/moderation/DomainsDetail.vue:202 +#: front/src/views/admin/moderation/AccountsDetail.vue:285 +#: front/src/views/admin/moderation/DomainsDetail.vue:239 msgctxt "Content/Moderation/Title" msgid "Audio content" msgstr "Dodaj zawartość" -#: front/src/components/ShortcutsModal.vue:55 +#: front/src/components/ShortcutsModal.vue:92 msgctxt "Popup/Keyboard shortcuts/Title" msgid "Audio player shortcuts" msgstr "" @@ -742,9 +851,9 @@ msgid "Back to settings" msgstr "Aktualizuj ustawienia" #: front/src/components/library/TrackDetail.vue:48 -#: front/src/components/mixins/Translations.vue:55 +#: front/src/components/mixins/Translations.vue:67 #: front/src/views/admin/library/UploadDetail.vue:227 -#: front/src/components/mixins/Translations.vue:56 +#: front/src/components/mixins/Translations.vue:68 msgctxt "Content/Track/*/Noun" msgid "Bitrate" msgstr "Bitrate" @@ -757,10 +866,7 @@ msgstr "" #: front/src/components/manage/moderation/InstancePolicyForm.vue:112 msgctxt "Content/Moderation/Help text" -msgid "" -"Block everything from this account or domain. This will prevent any " -"interaction with the entity, and purge related content (uploads, libraries, " -"follows, etc.)" +msgid "Block everything from this account or domain. This will prevent any interaction with the entity, and purge related content (uploads, libraries, follows, etc.)" msgstr "" #: front/src/components/Sidebar.vue:18 src/components/library/Library.vue:4 @@ -773,6 +879,11 @@ msgctxt "Sidebar/Library/List item.Link/Verb" msgid "Browse library" msgstr "PrzeglÄ…daj bibliotekÄ™" +#: front/src/components/Home.vue:132 +msgctxt "Content/Home/Link" +msgid "Browse public content" +msgstr "" + #: front/src/components/library/Albums.vue:4 msgctxt "Content/Album/Title" msgid "Browsing albums" @@ -803,40 +914,40 @@ msgctxt "Content/Album/Card" msgid "By %{ artist }" msgstr "Od %{ artist }" -#: front/src/views/content/remote/Card.vue:112 +#: front/src/views/content/remote/Card.vue:125 msgctxt "Popup/Library/Paragraph" msgid "By unfollowing this library, you loose access to its content." -msgstr "" -"Gdy przestaniesz obserwować tÄ™ bibliotekÄ™, stracisz dostÄ™p do jej " -"zawartoÅ›ci." +msgstr "Gdy przestaniesz obserwować tÄ™ bibliotekÄ™, stracisz dostÄ™p do jej zawartoÅ›ci." -#: front/src/views/admin/library/AlbumDetail.vue:214 -#: front/src/views/admin/library/ArtistDetail.vue:203 -#: front/src/views/admin/library/LibraryDetail.vue:192 -#: front/src/views/admin/library/TrackDetail.vue:266 +#: front/src/views/admin/library/AlbumDetail.vue:230 +#: front/src/views/admin/library/ArtistDetail.vue:218 +#: front/src/views/admin/library/LibraryDetail.vue:211 +#: front/src/views/admin/library/TrackDetail.vue:282 #: front/src/views/admin/library/UploadDetail.vue:208 -#: front/src/views/admin/moderation/AccountsDetail.vue:290 -#: front/src/views/admin/moderation/DomainsDetail.vue:217 +#: front/src/views/admin/moderation/AccountsDetail.vue:301 +#: front/src/views/admin/moderation/DomainsDetail.vue:254 msgctxt "Content/Moderation/Table.Label/Noun" msgid "Cached size" msgstr "" #: front/src/components/SetInstanceModal.vue:37 #: front/src/components/common/DangerousButton.vue:17 -#: front/src/components/library/AlbumBase.vue:36 -#: front/src/components/library/ArtistBase.vue:47 -#: front/src/components/library/EditForm.vue:95 -#: front/src/components/library/TrackBase.vue:55 +#: front/src/components/library/AlbumBase.vue:37 +#: front/src/components/library/ArtistBase.vue:48 +#: front/src/components/library/EditForm.vue:107 +#: front/src/components/library/TrackBase.vue:53 #: front/src/components/library/radios/Filter.vue:53 #: front/src/components/manage/moderation/InstancePolicyForm.vue:54 #: front/src/components/moderation/FilterModal.vue:39 +#: front/src/components/moderation/ReportModal.vue:59 #: front/src/components/playlists/PlaylistModal.vue:26 #: front/src/components/playlists/PlaylistModal.vue:77 +#: front/src/views/playlists/Detail.vue:62 msgctxt "*/*/Button.Label/Verb" msgid "Cancel" msgstr "Anuluj" -#: front/src/views/content/remote/Card.vue:97 +#: front/src/views/content/remote/Card.vue:110 #, fuzzy msgctxt "Content/Library/Card.Paragraph" msgid "Cancel follow request" @@ -850,8 +961,15 @@ msgstr "Kandydaci" #: front/src/components/library/FileUpload.vue:261 msgctxt "Content/Library/Help text" msgid "Cannot upload this file, ensure it is not too big" +msgstr "Nie można byÅ‚o zaimportować tego pliku, upewnij siÄ™ że nie jest zbyt duży" + +#: front/src/components/manage/moderation/ReportCard.vue:30 +#: front/src/components/mixins/Translations.vue:42 +#: front/src/components/moderation/ReportCategoryDropdown.vue:2 +#: front/src/components/mixins/Translations.vue:43 +msgctxt "*/*/*" +msgid "Category" msgstr "" -"Nie można byÅ‚o zaimportować tego pliku, upewnij siÄ™ że nie jest zbyt duży" #: front/src/components/Footer.vue:21 msgctxt "Footer/Settings/Dropdown.Label/Short, Verb" @@ -868,6 +986,11 @@ msgctxt "Content/Settings/Button.Label" msgid "Change password" msgstr "ZmieÅ„ hasÅ‚o" +#: front/src/components/Footer.vue:37 +msgctxt "Footer/Settings/Dropdown.Label/Short, Verb" +msgid "Change theme" +msgstr "" + #: front/src/views/auth/PasswordResetConfirm.vue:62 msgctxt "*/Signup/Title" msgid "Change your password" @@ -885,28 +1008,22 @@ msgstr "Zsynchronizowano zmiany z serwerem" #: front/src/components/auth/Settings.vue:71 msgctxt "Content/Settings/Paragraph'" -msgid "" -"Changing your password will also change your Subsonic API password if you " -"have requested one." -msgstr "" -"Zmiana Twojego hasÅ‚a zmieni też Twoje hasÅ‚o API Subsonic, jeżeli " -"uzyskaÅ‚eÅ›(-aÅ›) je." +msgid "Changing your password will also change your Subsonic API password if you have requested one." +msgstr "Zmiana Twojego hasÅ‚a zmieni też Twoje hasÅ‚o API Subsonic, jeżeli uzyskaÅ‚eÅ›(-aÅ›) je." #: front/src/components/auth/Settings.vue:98 msgctxt "Popup/Settings/Paragraph" msgid "Changing your password will have the following consequences:" msgstr "Zmiana hasÅ‚a bÄ™dzie miaÅ‚a nastÄ™pujÄ…ce konsekwencje" -#: front/src/components/Footer.vue:40 +#: front/src/components/Footer.vue:48 msgctxt "Footer/*/List item.Link" msgid "Chat room" msgstr "" #: front/src/components/auth/ApplicationForm.vue:24 msgctxt "Content/Applications/Paragraph/" -msgid "" -"Checking the parent \"Read\" or \"Write\" scopes implies access to all the " -"corresponding children scopes." +msgid "Checking the parent \"Read\" or \"Write\" scopes implies access to all the corresponding children scopes." msgstr "" #: front/src/components/SetInstanceModal.vue:2 @@ -914,12 +1031,9 @@ msgctxt "Popup/Instance/Title" msgid "Choose your instance" msgstr "Wybierz instancjÄ™" -#: front/src/components/manage/users/InvitationForm.vue:37 -msgctxt "Content/Admin/Button.Label/Verb" -msgid "Clear" -msgstr "Wyczyść" - #: front/src/components/library/EditForm.vue:75 +#: front/src/components/library/EditForm.vue:88 +#: front/src/components/manage/users/InvitationForm.vue:37 msgctxt "Content/Library/Button.Label" msgid "Clear" msgstr "Wyczyść" @@ -930,46 +1044,46 @@ msgctxt "*/Playlist/Button.Label/Verb" msgid "Clear playlist" msgstr "Wyczyść listÄ™ odtwarzania" -#: front/src/components/audio/Player.vue:642 +#: front/src/components/ShortcutsModal.vue:144 +#, fuzzy +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Clear queue" +msgstr "Wyczyść swojÄ… kolejkÄ™" + +#: front/src/components/audio/Player.vue:668 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Clear your queue" msgstr "Wyczyść swojÄ… kolejkÄ™" -#: front/src/components/Home.vue:44 -msgctxt "Content/Home/List item/Verb" -msgid "Click once, listen for hours using built-in radios" -msgstr "NaciÅ›nij raz, sÅ‚uchaj godzinami dziÄ™ki wbudowanemu radio" - #: front/src/components/mixins/Translations.vue:21 #: front/src/components/mixins/Translations.vue:22 msgctxt "Content/Library/Link.Title" -msgid "" -"Click to display more information about the import process for this upload" +msgid "Click to display more information about the import process for this upload" msgstr "" #: front/src/components/library/FileUpload.vue:82 msgctxt "Content/Library/Paragraph/Call to action" msgid "Click to select files to upload or drag and drop files or directories" -msgstr "" -"NaciÅ›nij aby wybrać pliki do wysÅ‚ania lub przeciÄ…gnij i upuść pliki lub " -"katalogi" +msgstr "NaciÅ›nij aby wybrać pliki do wysÅ‚ania lub przeciÄ…gnij i upuść pliki lub katalogi" +#: front/src/components/ShortcutsModal.vue:38 #: front/src/components/federation/FetchButton.vue:85 #: front/src/components/library/ImportStatusModal.vue:79 +#: front/src/components/manage/moderation/InstancePolicyModal.vue:34 msgctxt "*/*/Button.Label/Verb" msgid "Close" msgstr "" -#: front/src/components/ShortcutsModal.vue:20 -msgctxt "Popup/Keyboard shortcuts/Button.Label/Verb" -msgid "Close" -msgstr "" - #: front/src/components/federation/FetchButton.vue:88 msgctxt "*/*/Button.Label/Verb" msgid "Close and reload page" msgstr "" +#: front/src/components/About.vue:94 +msgctxt "*/*/*/State of registrations" +msgid "Closed" +msgstr "" + #: front/src/components/manage/users/InvitationForm.vue:26 #: front/src/components/manage/users/InvitationsTable.vue:42 msgctxt "Content/Admin/Table.Label/Noun" @@ -977,8 +1091,9 @@ msgid "Code" msgstr "Kod" #: front/src/components/audio/album/Card.vue:41 -#: front/src/components/audio/artist/Card.vue:33 -msgctxt "Content/*/Card.Link/Verb" +#: front/src/components/common/CollapseLink.vue:3 +#, fuzzy +msgctxt "*/*/Button,Label" msgid "Collapse" msgstr "ZwiÅ„" @@ -1002,26 +1117,26 @@ msgctxt "Content/Signup/Form.Label" msgid "Confirmation code" msgstr "Kod potwierdzajÄ…cy" +#: front/src/components/About.vue:67 src/components/Home.vue:65 +msgctxt "Content/Home/Header/Name" +msgid "Contact" +msgstr "" + #: front/src/components/moderation/FilterModal.vue:90 msgctxt "*/Moderation/Message" msgid "Content filter successfully added" msgstr "" -#: front/src/components/mixins/Translations.vue:96 -#: front/src/components/mixins/Translations.vue:97 -msgctxt "Content/OAuth Scopes/Label" -msgid "Content filters" -msgstr "Zaznacz filtr" - #: front/src/components/auth/Settings.vue:116 +#: front/src/components/mixins/Translations.vue:108 +#: front/src/components/mixins/Translations.vue:109 msgctxt "Content/Settings/Title/Noun" msgid "Content filters" msgstr "Zaznacz filtr" #: front/src/components/auth/Settings.vue:119 msgctxt "Content/Settings/Paragraph" -msgid "" -"Content filters help you hide content you don't want to see on the service." +msgid "Content filters help you hide content you don't want to see on the service." msgstr "" #: front/src/components/common/ActionTable.vue:8 @@ -1029,13 +1144,20 @@ msgctxt "Content/*/Button.Help text.Paragraph" msgid "Content have been updated, click refresh to see up-to-date content" msgstr "" -#: front/src/components/Footer.vue:48 +#: front/src/components/About.vue:46 +#, fuzzy +msgctxt "Content/About/Header" +msgid "Contents" +msgstr "Zaznacz filtr" + +#: front/src/components/Footer.vue:56 msgctxt "Footer/*/List item.Link" msgid "Contribute" msgstr "" -#: front/src/components/audio/EmbedWizard.vue:19 +#: front/src/components/audio/EmbedWizard.vue:29 #: front/src/components/common/CopyInput.vue:8 +#: front/src/components/forms/PasswordInput.vue:43 msgctxt "*/*/Button.Label/Short, Verb" msgid "Copy" msgstr "Kopiuj" @@ -1050,14 +1172,14 @@ msgctxt "Content/Auth/Paragraph" msgid "Copy-paste the following code in the application:" msgstr "" -#: front/src/components/audio/EmbedWizard.vue:21 +#: front/src/components/audio/EmbedWizard.vue:31 msgctxt "Popup/Embed/Paragraph" msgid "Copy/paste this code in your website HTML" msgstr "" #: front/src/components/library/TrackDetail.vue:10 -#: front/src/views/admin/library/TrackDetail.vue:153 -msgctxt "Content/Track/Table.Label/Noun" +#: front/src/views/admin/library/TrackDetail.vue:159 src/edits.js:77 +msgctxt "Content/Track/*/Noun" msgid "Copyright" msgstr "Kopiuj" @@ -1071,29 +1193,20 @@ msgctxt "Content/Library/Error message.Title" msgid "Could not fetch remote library" msgstr "WystÄ…piÅ‚ bÅ‚Ä…d podczas uzyskiwania zdalnej biblioteki" -#: front/src/components/Home.vue:80 -msgctxt "Content/Home/List item" -msgid "Covers, lyrics, our goal is to have them all ;)" -msgstr "Covery, teksty, naszym celem jest mieć je wszystkie ;)" - #: front/src/components/manage/moderation/InstancePolicyForm.vue:58 msgctxt "Content/Moderation/Card.Button.Label/Verb" msgid "Create" msgstr "Utwórz importowanie" -#: front/src/components/auth/Signup.vue:4 +#: front/src/views/auth/Signup.vue:4 msgctxt "Content/Signup/Title" msgid "Create a funkwhale account" msgstr "Utwórz konto funkwhale" -#: front/src/components/auth/Settings.vue:220 -msgctxt "Content/Settings/Button.Label" -msgid "Create a new application" -msgstr "Utwórz nowÄ… listÄ™ odtwarzania" - #: front/src/components/auth/ApplicationNew.vue:8 #: front/src/components/auth/ApplicationNew.vue:41 -msgctxt "Content/Applications/Title" +#: front/src/components/auth/Settings.vue:220 +msgctxt "Content/Settings/Button.Label" msgid "Create a new application" msgstr "Utwórz nowÄ… listÄ™ odtwarzania" @@ -1107,7 +1220,7 @@ msgctxt "Popup/Playlist/Title/Verb" msgid "Create a new playlist" msgstr "Utwórz nowÄ… listÄ™ odtwarzania" -#: front/src/components/Sidebar.vue:57 src/components/auth/Login.vue:17 +#: front/src/components/Sidebar.vue:57 src/components/auth/LoginForm.vue:15 msgctxt "*/Signup/Link/Verb" msgid "Create an account" msgstr "Utwórz konto" @@ -1122,7 +1235,7 @@ msgctxt "Content/Library/Button.Label/Verb" msgid "Create library" msgstr "Utwórz bibliotekÄ™" -#: front/src/components/auth/Signup.vue:53 +#: front/src/components/auth/SignupForm.vue:49 msgctxt "Content/Signup/Button.Label" msgid "Create my account" msgstr "Utwórz konto" @@ -1147,11 +1260,13 @@ msgstr "Utwórz wÅ‚asne radio" #: front/src/components/manage/library/AlbumsTable.vue:44 #: front/src/components/manage/library/ArtistsTable.vue:43 #: front/src/components/manage/library/LibrariesTable.vue:54 +#: front/src/components/manage/library/TagsTable.vue:45 #: front/src/components/manage/library/TracksTable.vue:44 #: front/src/components/manage/library/UploadsTable.vue:66 +#: front/src/components/manage/moderation/ReportCard.vue:43 #: front/src/components/manage/users/InvitationsTable.vue:40 -#: front/src/components/mixins/Translations.vue:43 -#: front/src/components/mixins/Translations.vue:44 +#: front/src/components/mixins/Translations.vue:53 +#: front/src/components/mixins/Translations.vue:54 msgctxt "Content/*/*/Noun" msgid "Creation date" msgstr "Data utworzenia" @@ -1161,6 +1276,12 @@ msgctxt "Content/Settings/Title/Noun" msgid "Current avatar" msgstr "Obecny awatar" +#: front/src/components/admin/SettingsGroup.vue:67 +#, fuzzy +msgctxt "Content/Settings/Title/Noun" +msgid "Current image" +msgstr "Obecne użycie" + #: front/src/views/content/libraries/DetailArea.vue:4 msgctxt "Content/Library/Title" msgid "Current library" @@ -1176,6 +1297,11 @@ msgctxt "Content/Library/Title" msgid "Current usage" msgstr "Obecne użycie" +#: front/src/components/Footer.vue:94 +msgctxt "Footer/Settings/Dropdown.Label/Theme name" +msgid "Dark" +msgstr "" + #: front/src/components/federation/FetchButton.vue:53 msgctxt "*/*/Error" msgid "Data returned by the remote server had invalid or missing attributes" @@ -1196,7 +1322,7 @@ msgctxt "Popup/Import/Table.Label/Noun" msgid "Debug information" msgstr "Informacje o utworze" -#: front/src/components/ShortcutsModal.vue:75 +#: front/src/components/ShortcutsModal.vue:128 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Decrease volume" msgstr "" @@ -1208,23 +1334,29 @@ msgstr "" #: front/src/components/manage/library/AlbumsTable.vue:188 #: front/src/components/manage/library/ArtistsTable.vue:178 #: front/src/components/manage/library/LibrariesTable.vue:205 +#: front/src/components/manage/library/TagsTable.vue:179 #: front/src/components/manage/library/TracksTable.vue:188 #: front/src/components/manage/library/UploadsTable.vue:255 #: front/src/components/manage/moderation/InstancePolicyForm.vue:61 +#: front/src/components/manage/moderation/NotesThread.vue:24 +#: front/src/components/manage/moderation/NotesThread.vue:29 +#: front/src/components/manage/moderation/ReportCard.vue:360 #: front/src/components/manage/users/InvitationsTable.vue:167 -#: front/src/views/admin/library/AlbumDetail.vue:72 -#: front/src/views/admin/library/AlbumDetail.vue:77 -#: front/src/views/admin/library/ArtistDetail.vue:71 +#: front/src/views/admin/library/AlbumDetail.vue:78 +#: front/src/views/admin/library/AlbumDetail.vue:83 #: front/src/views/admin/library/ArtistDetail.vue:76 +#: front/src/views/admin/library/ArtistDetail.vue:81 #: front/src/views/admin/library/LibraryDetail.vue:58 #: front/src/views/admin/library/LibraryDetail.vue:63 -#: front/src/views/admin/library/TrackDetail.vue:71 -#: front/src/views/admin/library/TrackDetail.vue:76 +#: front/src/views/admin/library/TagDetail.vue:41 +#: front/src/views/admin/library/TagDetail.vue:46 +#: front/src/views/admin/library/TrackDetail.vue:77 +#: front/src/views/admin/library/TrackDetail.vue:82 #: front/src/views/admin/library/UploadDetail.vue:65 #: front/src/views/admin/library/UploadDetail.vue:70 #: front/src/views/content/libraries/FilesTable.vue:222 #: front/src/views/content/libraries/Form.vue:29 -#: src/views/playlists/Detail.vue:34 +#: src/views/playlists/Detail.vue:42 msgctxt "*/*/*/Verb" msgid "Delete" msgstr "UsuÅ„" @@ -1249,7 +1381,20 @@ msgctxt "Popup/Moderation/Button.Label/Verb" msgid "Delete moderation rule" msgstr "UsuÅ„ radio" -#: front/src/views/playlists/Detail.vue:39 +#: front/src/components/auth/Settings.vue:274 +#: src/components/auth/Settings.vue:302 +#, fuzzy +msgctxt "*/*/Button.Label" +msgid "Delete my account" +msgstr "Utwórz konto" + +#: front/src/components/auth/Settings.vue:297 +#, fuzzy +msgctxt "*/*/Button.Label" +msgid "Delete my account…" +msgstr "Utwórz konto" + +#: front/src/views/playlists/Detail.vue:47 msgctxt "Popup/Playlist/Button.Label/Verb" msgid "Delete playlist" msgstr "UsuÅ„ listÄ™ odtwarzania" @@ -1259,13 +1404,23 @@ msgctxt "Popup/Radio/Button.Label/Verb" msgid "Delete radio" msgstr "UsuÅ„ radio" -#: front/src/views/admin/library/AlbumDetail.vue:73 -#: front/src/views/admin/library/TrackDetail.vue:72 -msgctxt "Popup/Library/Title" -msgid "Delete this album?" -msgstr "Czy chcesz usunąć tÄ™ bibliotekÄ™?" +#: front/src/components/manage/moderation/ReportCard.vue:357 +msgctxt "Content/Moderation/Button/Verb" +msgid "Delete reported object" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:358 +msgctxt "Content/Moderation/Popup/Header" +msgid "Delete reported object?" +msgstr "" + +#: front/src/views/admin/library/AlbumDetail.vue:79 +#: front/src/views/admin/library/TrackDetail.vue:78 +msgctxt "Popup/Library/Title" +msgid "Delete this album?" +msgstr "Czy chcesz usunąć tÄ™ bibliotekÄ™?" -#: front/src/views/admin/library/ArtistDetail.vue:72 +#: front/src/views/admin/library/ArtistDetail.vue:77 msgctxt "Popup/Library/Title" msgid "Delete this artist?" msgstr "Czy chcesz usunąć tÄ™ bibliotekÄ™?" @@ -1281,60 +1436,71 @@ msgctxt "Popup/Moderation/Title" msgid "Delete this moderation rule?" msgstr "Czy chcesz usunąć tÄ™ bibliotekÄ™?" +#: front/src/components/manage/moderation/NotesThread.vue:25 +#, fuzzy +msgctxt "Popup/Moderation/Title" +msgid "Delete this note?" +msgstr "Czy chcesz usunąć tÄ™ bibliotekÄ™?" + #: front/src/components/library/EditCard.vue:94 msgctxt "Popup/Library/Title" msgid "Delete this suggestion?" msgstr "Czy chcesz usunąć tÄ™ bibliotekÄ™?" +#: front/src/views/admin/library/TagDetail.vue:42 +#, fuzzy +msgctxt "Popup/Library/Title" +msgid "Delete this tag?" +msgstr "Czy chcesz usunąć tÄ™ bibliotekÄ™?" + #: front/src/views/admin/library/UploadDetail.vue:66 msgctxt "Popup/Library/Title" msgid "Delete this upload?" msgstr "Czy chcesz usunąć tÄ™ bibliotekÄ™?" #: front/src/components/favorites/List.vue:35 -#: src/components/library/Albums.vue:26 -#: front/src/components/library/Artists.vue:26 +#: src/components/library/Albums.vue:30 +#: front/src/components/library/Artists.vue:30 #: src/components/library/Radios.vue:47 #: front/src/components/manage/library/AlbumsTable.vue:22 #: front/src/components/manage/library/ArtistsTable.vue:22 #: front/src/components/manage/library/EditsCardList.vue:40 #: front/src/components/manage/library/LibrariesTable.vue:31 +#: front/src/components/manage/library/TagsTable.vue:22 #: front/src/components/manage/library/TracksTable.vue:22 #: front/src/components/manage/library/UploadsTable.vue:41 #: front/src/components/manage/moderation/AccountsTable.vue:22 -#: front/src/components/manage/moderation/DomainsTable.vue:20 +#: front/src/components/manage/moderation/DomainsTable.vue:28 #: front/src/components/manage/users/UsersTable.vue:20 +#: front/src/views/admin/moderation/ReportsList.vue:45 #: front/src/views/content/libraries/FilesTable.vue:32 #: front/src/views/playlists/List.vue:28 msgctxt "Content/Search/Dropdown" msgid "Descending" msgstr "MalejÄ…co" -#: front/src/views/admin/library/LibraryDetail.vue:123 -msgctxt "*/*/*/Noun" -msgid "Description" -msgstr "Opis" +#: front/src/components/manage/moderation/NoteForm.vue:37 +msgctxt "Content/Moderation/Placeholder" +msgid "Describe what actions have been taken, or any other related updates…" +msgstr "" #: front/src/components/library/radios/Builder.vue:25 +#: front/src/views/admin/library/LibraryDetail.vue:132 #: front/src/views/content/libraries/Form.vue:14 -msgctxt "Content/*/Input.Label/Noun" +msgctxt "*/*/*/Noun" msgid "Description" msgstr "Opis" #: front/src/views/content/libraries/Card.vue:48 -#: src/views/content/remote/Card.vue:54 +#: src/views/content/remote/Card.vue:67 msgctxt "Content/Library/Card.Button.Label/Noun" msgid "Details" msgstr "Szczegóły" -#: front/src/views/admin/moderation/AccountsDetail.vue:491 +#: front/src/views/admin/moderation/AccountsDetail.vue:511 msgctxt "Content/Moderation/Help text" -msgid "" -"Determine how much content the user can upload. Leave empty to use the " -"default value of the instance." -msgstr "" -"OkreÅ›l jak dużo zawartoÅ›ci może zaimportować użytkownik. Pozostaw puste, aby" -" użyć domyÅ›lnej wartoÅ›ci instancji" +msgid "Determine how much content the user can upload. Leave empty to use the default value of the instance." +msgstr "OkreÅ›l jak dużo zawartoÅ›ci może zaimportować użytkownik. Pozostaw puste, aby użyć domyÅ›lnej wartoÅ›ci instancji" #: front/src/components/mixins/Translations.vue:8 #: front/src/components/mixins/Translations.vue:9 @@ -1343,38 +1509,51 @@ msgid "Determine the visibility level of your activity" msgstr "Ustal poziom widocznoÅ›ci twojej aktywnoÅ›ci" #: front/src/components/auth/Settings.vue:104 -#: front/src/components/auth/SubsonicTokenForm.vue:51 +#: front/src/components/auth/SubsonicTokenForm.vue:56 msgctxt "Popup/Settings/Button.Label" msgid "Disable access" msgstr "WyÅ‚Ä…cz dostÄ™p" -#: front/src/components/auth/SubsonicTokenForm.vue:48 +#: front/src/components/auth/SubsonicTokenForm.vue:53 msgctxt "Content/Settings/Button.Label/Verb" msgid "Disable Subsonic access" msgstr "WyÅ‚Ä…cz dostÄ™p Subsonic" -#: front/src/components/auth/SubsonicTokenForm.vue:49 +#: front/src/components/auth/SubsonicTokenForm.vue:54 msgctxt "Popup/Settings/Title" msgid "Disable Subsonic API access?" msgstr "WyÅ‚Ä…czyć dostÄ™p do API Subsonic?" +#: front/src/components/About.vue:118 src/components/About.vue:131 +#: front/src/components/About.vue:144 #: front/src/components/manage/moderation/InstancePolicyForm.vue:18 #: front/src/views/admin/moderation/AccountsDetail.vue:157 #: front/src/views/admin/moderation/AccountsDetail.vue:161 -msgctxt "*/*/*" +#, fuzzy +msgctxt "*/*/*/State of feature" msgid "Disabled" msgstr "WyÅ‚Ä…cz dostÄ™p" -#: front/src/views/admin/library/TrackDetail.vue:145 +#: front/src/views/admin/library/TrackDetail.vue:151 msgctxt "*/*/*/Noun" msgid "Disc number" msgstr "" +#: front/src/components/Home.vue:157 +msgctxt "Content/Home/Link" +msgid "Discover everything you need to know about Funkwhale and its features" +msgstr "" + #: front/src/components/auth/SubsonicTokenForm.vue:13 msgctxt "Content/Settings/Link" msgid "Discover how to use Funkwhale from other apps" msgstr "Odkryj, jak korzystać z Funkwhale z innych aplikacji" +#: front/src/views/Notifications.vue:45 +msgctxt "Content/Notifications/Button.Label/Verb" +msgid "Discover other ways to help" +msgstr "" + #: front/src/views/admin/moderation/AccountsDetail.vue:132 msgctxt "'Content/*/*/Noun'" msgid "Display name" @@ -1387,11 +1566,15 @@ msgstr "WyÅ›wietlaj publicznie" #: front/src/components/manage/moderation/InstancePolicyForm.vue:122 msgctxt "Content/Moderation/Help text" -msgid "" -"Do not download any media file (audio, album cover, account avatar…) from " -"this account or domain. This will purge existing content as well." +msgid "Do not download any media file (audio, album cover, account avatar…) from this account or domain. This will purge existing content as well." msgstr "" +#: front/src/views/Notifications.vue:36 +#, fuzzy +msgctxt "Content/Notifications/Header" +msgid "Do you like Funkwhale?" +msgstr "O Funkwhale" + #: front/src/components/playlists/Editor.vue:51 msgctxt "Popup/Playlist/Title" msgid "Do you want to clear the playlist \"%{ playlist }\"?" @@ -1402,7 +1585,7 @@ msgctxt "Modal/*/Title" msgid "Do you want to confirm this action?" msgstr "Czy chcesz potwierdzić to dziaÅ‚anie?" -#: front/src/views/playlists/Detail.vue:35 +#: front/src/views/playlists/Detail.vue:43 msgctxt "Popup/Playlist/Title/Call to action" msgid "Do you want to delete the playlist \"%{ playlist }\"?" msgstr "Czy chcesz usunąć listÄ™ odtwarzania „%{ playlist }â€?" @@ -1412,6 +1595,12 @@ msgctxt "Popup/Radio/Title" msgid "Do you want to delete the radio \"%{ radio }\"?" msgstr "Czy chcesz usunąć radio „%{ radio }â€?" +#: front/src/components/auth/Settings.vue:298 +#, fuzzy +msgctxt "Popup/Settings/Title" +msgid "Do you want to delete your account?" +msgstr "Czy chcesz przywrócić poprzedniÄ… kolejkÄ™?" + #: front/src/components/moderation/FilterModal.vue:3 msgctxt "Popup/Moderation/Title/Verb" msgid "Do you want to hide content from artist \"%{ name }\"?" @@ -1426,7 +1615,13 @@ msgstr[0] "Czy chcesz wykonać dziaÅ‚anie %{ action } na %{ count } elemencie?" msgstr[1] "Czy chcesz wykonać dziaÅ‚anie %{ action } na %{ count } elementach?" msgstr[2] "Czy chcesz wykonać dziaÅ‚anie %{ action } na %{ count } elementach?" -#: front/src/components/Sidebar.vue:118 +#: front/src/components/moderation/ReportModal.vue:3 +#, fuzzy +msgctxt "Popup/Moderation/Title/Verb" +msgid "Do you want to report this object?" +msgstr "Czy chcesz potwierdzić to dziaÅ‚anie?" + +#: front/src/components/Sidebar.vue:122 msgctxt "Sidebar/Queue/Message" msgid "Do you want to restore your previous queue?" msgstr "Czy chcesz przywrócić poprzedniÄ… kolejkÄ™?" @@ -1442,26 +1637,33 @@ msgstr "Dokumentacja" #: front/src/components/manage/library/TracksTable.vue:42 #: front/src/components/manage/library/UploadsTable.vue:62 #: front/src/components/manage/moderation/AccountsTable.vue:40 -#: front/src/components/mixins/Translations.vue:60 -#: front/src/views/admin/library/AlbumDetail.vue:118 -#: front/src/views/admin/library/ArtistDetail.vue:107 -#: front/src/views/admin/library/LibraryDetail.vue:114 -#: front/src/views/admin/library/TrackDetail.vue:170 +#: front/src/components/manage/moderation/ReportCard.vue:169 +#: front/src/components/manage/moderation/ReportCard.vue:179 +#: front/src/components/mixins/Translations.vue:72 +#: front/src/views/admin/library/AlbumDetail.vue:124 +#: front/src/views/admin/library/ArtistDetail.vue:112 +#: front/src/views/admin/library/LibraryDetail.vue:123 +#: front/src/views/admin/library/TrackDetail.vue:176 #: front/src/views/admin/library/UploadDetail.vue:121 #: front/src/views/admin/moderation/AccountsDetail.vue:123 -#: front/src/components/mixins/Translations.vue:61 +#: front/src/components/mixins/Translations.vue:73 msgctxt "Content/Moderation/*/Noun" msgid "Domain" msgstr "" -#: front/src/views/admin/moderation/Base.vue:5 +#: front/src/views/admin/moderation/Base.vue:8 #: front/src/views/admin/moderation/DomainsList.vue:3 -#: front/src/views/admin/moderation/DomainsList.vue:48 +#: front/src/views/admin/moderation/DomainsList.vue:54 msgctxt "*/Moderation/*/Noun" msgid "Domains" msgstr "" -#: front/src/components/library/TrackBase.vue:39 +#: front/src/views/Notifications.vue:42 +msgctxt "Content/Notifications/Button.Label/Verb" +msgid "Donate" +msgstr "" + +#: front/src/components/library/TrackBase.vue:37 #: front/src/views/admin/library/UploadDetail.vue:58 msgctxt "Content/Track/Link/Verb" msgid "Download" @@ -1470,15 +1672,14 @@ msgstr "Pobierz" #: front/src/components/playlists/Editor.vue:59 msgctxt "Content/Playlist/Paragraph/Call to action" msgid "Drag and drop rows to reorder tracks in the playlist" -msgstr "" -"PrzeciÄ…gnij i upuść aby zmienić kolejność utworów w liÅ›cie odtwarzania" +msgstr "PrzeciÄ…gnij i upuść aby zmienić kolejność utworów w liÅ›cie odtwarzania" #: front/src/components/audio/track/Table.vue:10 #: front/src/components/library/TrackDetail.vue:30 -#: front/src/components/mixins/Translations.vue:56 +#: front/src/components/mixins/Translations.vue:68 #: front/src/views/admin/library/UploadDetail.vue:238 #: front/src/views/content/libraries/FilesTable.vue:60 -#: front/src/components/mixins/Translations.vue:57 +#: front/src/components/mixins/Translations.vue:69 msgctxt "Content/*/*" msgid "Duration" msgstr "DÅ‚ugość" @@ -1488,41 +1689,27 @@ msgctxt "Content/Signup/Message" msgid "E-mail address confirmed" msgstr "Potwierdzono e-mail" -#: front/src/components/Home.vue:88 -msgctxt "Content/Home/Title" -msgid "Easy to use" -msgstr "Prosty w użyciu" - -#: front/src/components/library/AlbumBase.vue:68 -#: front/src/components/library/ArtistBase.vue:79 -#: front/src/components/library/TrackBase.vue:87 +#: front/src/components/auth/Settings.vue:246 +#: src/components/library/AlbumBase.vue:73 +#: front/src/components/library/ArtistBase.vue:84 +#: front/src/components/library/TrackBase.vue:89 #: front/src/components/manage/moderation/InstancePolicyCard.vue:45 #: front/src/components/radios/Card.vue:23 -#: src/views/admin/library/AlbumDetail.vue:65 -#: front/src/views/admin/library/ArtistDetail.vue:64 -#: front/src/views/admin/library/TrackDetail.vue:64 +#: src/views/admin/library/AlbumDetail.vue:71 +#: front/src/views/admin/library/ArtistDetail.vue:69 +#: front/src/views/admin/library/TrackDetail.vue:70 #: front/src/views/content/libraries/Detail.vue:9 #: src/views/playlists/Detail.vue:31 msgctxt "Content/*/Button.Label/Verb" msgid "Edit" msgstr "Edytuj" -#: front/src/components/auth/Settings.vue:246 -msgctxt "Content/Settings/Button.Label" -msgid "Edit" -msgstr "Edytuj" - #: front/src/components/auth/ApplicationEdit.vue:30 #: front/src/components/auth/ApplicationEdit.vue:75 msgctxt "Content/Applications/Title" msgid "Edit application" msgstr "BÅ‚Ä…d podczas zastosowywania dziaÅ‚ania" -#: front/src/components/About.vue:22 -msgctxt "Content/Settings/Button.Label/Verb" -msgid "Edit instance info" -msgstr "Edytuj informacje o instancji" - #: front/src/components/manage/moderation/InstancePolicyForm.vue:3 msgctxt "Content/Moderation/Card.Title/Verb" msgid "Edit moderation rule" @@ -1543,23 +1730,20 @@ msgctxt "Content/*/Title" msgid "Edit this track" msgstr "Odtwórz utwór" -#: front/src/views/admin/library/AlbumDetail.vue:182 -#: front/src/views/admin/library/ArtistDetail.vue:171 +#: front/src/components/mixins/Translations.vue:116 +#: front/src/views/admin/library/AlbumDetail.vue:198 +#: front/src/views/admin/library/ArtistDetail.vue:186 #: front/src/views/admin/library/Base.vue:5 #: src/views/admin/library/EditsList.vue:24 -#: front/src/views/admin/library/TrackDetail.vue:234 +#: front/src/views/admin/library/TrackDetail.vue:250 +#: front/src/components/mixins/Translations.vue:117 msgctxt "*/Admin/*/Noun" msgid "Edits" msgstr "Edytuj" -#: front/src/components/mixins/Translations.vue:104 -#: front/src/components/mixins/Translations.vue:105 -msgctxt "Content/OAuth Scopes/Label" -msgid "Edits" -msgstr "Edytuj" - -#: front/src/components/auth/Signup.vue:30 +#: front/src/components/auth/SignupForm.vue:26 #: front/src/components/manage/users/UsersTable.vue:38 +#: front/src/components/moderation/ReportModal.vue:31 msgctxt "Content/*/*/Noun" msgid "Email" msgstr "E-mail" @@ -1569,50 +1753,59 @@ msgctxt "Content/*/*" msgid "Email address" msgstr "Adres e-mail" -#: front/src/components/library/AlbumBase.vue:53 -#: front/src/components/library/ArtistBase.vue:64 -#: front/src/components/library/TrackBase.vue:72 +#: front/src/components/library/AlbumBase.vue:54 +#: front/src/components/library/ArtistBase.vue:65 +#: front/src/components/library/TrackBase.vue:70 +#: src/views/playlists/Detail.vue:38 msgctxt "Content/*/Button.Label/Verb" msgid "Embed" msgstr "" -#: front/src/components/audio/EmbedWizard.vue:20 +#: front/src/components/audio/EmbedWizard.vue:30 msgctxt "Popup/Embed/Input.Label/Noun" msgid "Embed code" msgstr "" -#: front/src/components/library/AlbumBase.vue:26 +#: front/src/components/library/AlbumBase.vue:27 msgctxt "Popup/Album/Title/Verb" msgid "Embed this album on your website" msgstr "" -#: front/src/components/library/ArtistBase.vue:37 +#: front/src/components/library/ArtistBase.vue:38 msgctxt "Popup/Artist/Title/Verb" msgid "Embed this artist work on your website" msgstr "" -#: front/src/components/library/TrackBase.vue:45 +#: front/src/views/playlists/Detail.vue:52 +msgctxt "Popup/Album/Title/Verb" +msgid "Embed this playlist on your website" +msgstr "" + +#: front/src/components/library/TrackBase.vue:43 msgctxt "Popup/Track/Title" msgid "Embed this track on your website" msgstr "" -#: front/src/views/admin/moderation/AccountsDetail.vue:259 -#: front/src/views/admin/moderation/DomainsDetail.vue:187 +#: front/src/views/admin/moderation/AccountsDetail.vue:260 +#: front/src/views/admin/moderation/DomainsDetail.vue:224 msgctxt "Content/Moderation/Table.Label/Noun" msgid "Emitted library follows" msgstr "Wprowadź adres URL biblioteki" -#: front/src/views/admin/moderation/AccountsDetail.vue:243 -#: front/src/views/admin/moderation/DomainsDetail.vue:171 +#: front/src/views/admin/moderation/AccountsDetail.vue:244 +#: front/src/views/admin/moderation/DomainsDetail.vue:208 msgctxt "Content/Moderation/Table.Label/Noun" msgid "Emitted messages" msgstr "" +#: front/src/components/About.vue:114 src/components/About.vue:127 +#: front/src/components/About.vue:140 #: front/src/components/manage/moderation/InstancePolicyCard.vue:8 #: front/src/components/manage/moderation/InstancePolicyForm.vue:17 #: front/src/views/admin/moderation/AccountsDetail.vue:156 #: front/src/views/admin/moderation/AccountsDetail.vue:160 -msgctxt "*/*/*" +#, fuzzy +msgctxt "*/*/*/State of feature" msgid "Enabled" msgstr "WyÅ‚Ä…cz dostÄ™p" @@ -1631,9 +1824,9 @@ msgctxt "Content/Search/Input.Placeholder" msgid "Enter a radio name…" msgstr "Wprowadź nazwÄ™ radia…" -#: front/src/components/library/Albums.vue:119 +#: front/src/components/library/Albums.vue:128 msgctxt "Content/Search/Input.Placeholder" -msgid "Enter album title..." +msgid "Enter album title…" msgstr "" #: front/src/components/library/Artists.vue:116 @@ -1648,15 +1841,16 @@ msgstr "Wprowadź nazwÄ™ listy odtwarzania…" #: front/src/views/auth/PasswordReset.vue:54 msgctxt "Content/Signup/Input.Placeholder" -msgid "Enter the email address binded to your account" +msgid "Enter the email address linked to your account" msgstr "" -#: front/src/components/auth/Signup.vue:103 +#: front/src/components/auth/SignupForm.vue:96 msgctxt "Content/Signup/Form/Placeholder" msgid "Enter your email" msgstr "Wprowadź swój e-mail" -#: front/src/components/auth/Signup.vue:98 src/components/auth/Signup.vue:100 +#: front/src/components/auth/SignupForm.vue:91 +#: src/components/auth/SignupForm.vue:93 msgctxt "Content/Signup/Form/Placeholder" msgid "Enter your invitation code (case insensitive)" msgstr "Wprowadź swój kod zapraszajÄ…cy (wielkość znaków nie ma znaczenia)" @@ -1666,12 +1860,12 @@ msgctxt "Content/Library/Input.Placeholder/Verb" msgid "Enter your search query…" msgstr "Wprowadź swoje kryterium wyszukiwania…" -#: front/src/components/auth/Signup.vue:102 +#: front/src/components/auth/SignupForm.vue:95 msgctxt "Content/Signup/Form/Placeholder" msgid "Enter your username" msgstr "Wprowadź swojÄ… nazwÄ™ użytkownika" -#: front/src/components/auth/Login.vue:83 +#: front/src/components/auth/LoginForm.vue:81 msgctxt "Content/Login/Input.Placeholder" msgid "Enter your username or email" msgstr "Wprowadź swojÄ… nazwÄ™ użytkownika lub e-mail" @@ -1688,7 +1882,7 @@ msgctxt "Popup/Import/Table.Label/Noun" msgid "Error detail" msgstr "ZgÅ‚aszanie bÅ‚Ä™dów" -#: front/src/views/admin/Settings.vue:87 +#: front/src/views/admin/Settings.vue:89 msgctxt "Content/Admin/Menu" msgid "Error reporting" msgstr "ZgÅ‚aszanie bÅ‚Ä™dów" @@ -1744,16 +1938,12 @@ msgctxt "Popup/Moderation/Error message" msgid "Error while fetching application data" msgstr "WystÄ…piÅ‚ bÅ‚Ä…d podczas tworzenia zaproszenia" -#: front/src/views/admin/moderation/DomainsDetail.vue:118 +#: front/src/views/admin/moderation/DomainsDetail.vue:155 msgctxt "Content/Moderation/Table" msgid "Error while fetching node info" msgstr "WystÄ…piÅ‚ bÅ‚Ä…d podczas uzyskiwania zdalnej biblioteki" #: front/src/components/admin/SettingsGroup.vue:5 -msgctxt "Content/Settings/Error message.Title" -msgid "Error while saving settings" -msgstr "WystÄ…piÅ‚ bÅ‚Ä…d podczas zapisywania ustawieÅ„" - #: front/src/components/federation/FetchButton.vue:73 msgctxt "Content/*/Error message.Title" msgid "Error while saving settings" @@ -1764,6 +1954,18 @@ msgctxt "Content/Library/Error message.Title" msgid "Error while submitting edit" msgstr "WystÄ…piÅ‚ bÅ‚Ä…d podczas zapisywania ustawieÅ„" +#: front/src/components/manage/moderation/NoteForm.vue:3 +#, fuzzy +msgctxt "Content/Moderation/Error message.Title" +msgid "Error while submitting note" +msgstr "WystÄ…piÅ‚ bÅ‚Ä…d podczas zapisywania ustawieÅ„" + +#: front/src/components/moderation/ReportModal.vue:11 +#, fuzzy +msgctxt "Popup/Moderation/Error message" +msgid "Error while submitting report" +msgstr "WystÄ…piÅ‚ bÅ‚Ä…d podczas zapisywania ustawieÅ„" + #: front/src/components/mixins/Translations.vue:32 #: front/src/components/mixins/Translations.vue:33 msgctxt "Content/Library/Table/Short" @@ -1798,9 +2000,14 @@ msgctxt "Content/Radio/Table.Label/Verb" msgid "Exclude" msgstr "WyÅ‚Ä…cz" +#: front/src/components/common/CollapseLink.vue:2 +msgctxt "*/*/Button,Label" +msgid "Expand" +msgstr "" + #: front/src/components/manage/users/InvitationsTable.vue:41 -#: front/src/components/mixins/Translations.vue:49 -#: front/src/components/mixins/Translations.vue:50 +#: front/src/components/mixins/Translations.vue:59 +#: front/src/components/mixins/Translations.vue:60 msgctxt "Content/Admin/Table.Label/Noun" msgid "Expiration date" msgstr "Data wygaÅ›niÄ™cia" @@ -1817,11 +2024,7 @@ msgstr "Wyczerpany/zużyty" #: front/src/components/manage/moderation/InstancePolicyForm.vue:110 msgctxt "Content/Moderation/Help text" -msgid "" -"Explain why you're applying this policy. Depending on your instance " -"configuration, this will help you remember why you acted on this account or " -"domain, and may be displayed publicly to help users understand what " -"moderation rules are in place." +msgid "Explain why you're applying this policy. Depending on your instance configuration, this will help you remember why you acted on this account or domain, and may be displayed publicly to help users understand what moderation rules are in place." msgstr "" #: front/src/components/manage/library/UploadsTable.vue:25 @@ -1830,31 +2033,28 @@ msgctxt "Content/Library/Dropdown" msgid "Failed" msgstr "Sfederowane utwory" -#: front/src/views/content/remote/Card.vue:62 +#: front/src/views/content/remote/Card.vue:75 msgctxt "Content/Library/Card.List item/Noun" msgid "Failed tracks:" msgstr "Sfederowane utwory" -#: front/src/views/admin/library/AlbumDetail.vue:165 -#: front/src/views/admin/library/ArtistDetail.vue:154 -#: front/src/views/admin/library/TrackDetail.vue:217 +#: front/src/views/admin/library/AlbumDetail.vue:171 +#: front/src/views/admin/library/ArtistDetail.vue:159 +#: front/src/views/admin/library/TrackDetail.vue:223 msgctxt "*/*/*" msgid "Favorited tracks" msgstr "Sfederowane utwory" #: front/src/components/Sidebar.vue:66 +#: src/components/mixins/Translations.vue:88 +#: front/src/components/mixins/Translations.vue:89 msgctxt "Sidebar/Favorites/List item.Link/Noun" msgid "Favorites" msgstr "Ulubione" -#: front/src/components/mixins/Translations.vue:76 -#: front/src/components/mixins/Translations.vue:77 -msgctxt "Content/OAuth Scopes/Label" -msgid "Favorites" -msgstr "Ulubione" - -#: front/src/views/admin/Settings.vue:84 -msgctxt "Content/Admin/Menu" +#: front/src/components/About.vue:110 src/views/admin/Settings.vue:84 +#, fuzzy +msgctxt "*/*/*" msgid "Federation" msgstr "Federacja" @@ -1878,6 +2078,11 @@ msgctxt "Content/Radio/Table.Label/Noun" msgid "Filter name" msgstr "Filtruj nazwÄ™" +#: front/src/components/Home.vue:118 +msgctxt "Content/Home/Link" +msgid "Find another pod" +msgstr "" + #: front/src/components/manage/library/UploadsTable.vue:26 #: front/src/components/mixins/Translations.vue:36 #: front/src/views/content/libraries/FilesTable.vue:17 @@ -1887,25 +2092,31 @@ msgid "Finished" msgstr "UkoÅ„czono" #: front/src/components/manage/moderation/AccountsTable.vue:42 -#: front/src/components/manage/moderation/DomainsTable.vue:41 -#: front/src/views/admin/library/AlbumDetail.vue:149 -#: front/src/views/admin/library/ArtistDetail.vue:138 -#: front/src/views/admin/library/LibraryDetail.vue:153 -#: front/src/views/admin/library/TrackDetail.vue:201 +#: front/src/components/manage/moderation/DomainsTable.vue:49 +#: front/src/views/admin/library/AlbumDetail.vue:155 +#: front/src/views/admin/library/ArtistDetail.vue:143 +#: front/src/views/admin/library/LibraryDetail.vue:162 +#: front/src/views/admin/library/TagDetail.vue:98 +#: front/src/views/admin/library/TrackDetail.vue:207 #: front/src/views/admin/library/UploadDetail.vue:167 -#: front/src/views/admin/moderation/AccountsDetail.vue:235 -#: front/src/views/admin/moderation/DomainsDetail.vue:151 +#: front/src/views/admin/moderation/AccountsDetail.vue:236 +#: front/src/views/admin/moderation/DomainsDetail.vue:188 msgctxt "Content/Moderation/Table.Label/Short (Value is a date)" msgid "First seen" msgstr "Data wygaÅ›niÄ™cia" -#: front/src/components/mixins/Translations.vue:46 -#: front/src/components/mixins/Translations.vue:47 +#: front/src/components/mixins/Translations.vue:56 +#: front/src/components/mixins/Translations.vue:57 msgctxt "Content/Moderation/Dropdown/Noun" msgid "First seen date" msgstr "Data wygaÅ›niÄ™cia" -#: front/src/views/content/remote/Card.vue:87 +#: front/src/components/ShortcutsModal.vue:64 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Focus searchbar" +msgstr "" + +#: front/src/views/content/remote/Card.vue:100 msgctxt "Content/Library/Card.Button.Label/Verb" msgid "Follow" msgstr "Åšledź" @@ -1915,40 +2126,34 @@ msgctxt "Content/Library/Title/Verb" msgid "Follow remote libraries" msgstr "Åšledź zdalne biblioteki" -#: front/src/views/content/remote/Card.vue:92 +#: front/src/views/content/remote/Card.vue:105 msgctxt "Content/Library/Card.Paragraph" msgid "Follow request pending approval" msgstr "Åšledzenie oczekuje na zatwierdzenie" -#: front/src/components/mixins/Translations.vue:64 -#: front/src/views/admin/library/LibraryDetail.vue:161 +#: front/src/components/manage/library/LibrariesTable.vue:53 +#: front/src/components/mixins/Translations.vue:76 +#: front/src/views/admin/library/LibraryDetail.vue:170 #: front/src/views/content/libraries/Detail.vue:7 -#: front/src/components/mixins/Translations.vue:65 +#: front/src/components/mixins/Translations.vue:77 msgctxt "Content/Federation/*/Noun" msgid "Followers" msgstr "ÅšledzÄ…cy" -#: front/src/components/manage/library/LibrariesTable.vue:53 -msgctxt "Content/*/*/Noun" -msgid "Followers" -msgstr "ÅšledzÄ…cy" - -#: front/src/views/content/remote/Card.vue:103 +#: front/src/views/content/remote/Card.vue:116 msgctxt "Content/Library/Card.Paragraph" msgid "Following" msgstr "Åšledzisz" -#: front/src/components/mixins/Translations.vue:84 -#: front/src/components/mixins/Translations.vue:85 +#: front/src/components/mixins/Translations.vue:96 +#: front/src/components/mixins/Translations.vue:97 msgctxt "Content/OAuth Scopes/Label" msgid "Follows" msgstr "Åšledź" -#: front/src/components/library/TrackBase.vue:17 +#: front/src/components/library/TrackBase.vue:245 msgctxt "Content/Track/Paragraph" -msgid "" -"From album <a class=\"internal\" href=\"%{ albumUrl }\">%{ album }</a> by <a" -" class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" +msgid "From album <a class=\"internal\" href=\"%{ albumUrl }\">%{ album }</a> by <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" msgstr "" #: front/src/components/auth/Authorize.vue:28 @@ -1958,38 +2163,21 @@ msgstr "WyÅ‚Ä…cz dostÄ™p" #: front/src/components/auth/SubsonicTokenForm.vue:7 msgctxt "Content/Settings/Paragraph'" -msgid "" -"Funkwhale is compatible with other music players that support the Subsonic " -"API." -msgstr "" -"Funkwhale jest kompatybilny z innymi odtwarzaczami muzycznymi obsÅ‚ugujÄ…cymi " -"API Subsonic." - -#: front/src/components/Home.vue:90 -msgctxt "Content/Home/Paragraph" -msgid "Funkwhale is dead simple to use." -msgstr "Funkwhale jest niezwykle prosty w użyciu." - -#: front/src/components/Home.vue:39 -msgctxt "Content/Home/Paragraph" -msgid "" -"Funkwhale is designed to make it easy to listen to music you like, or to " -"discover new artists." -msgstr "" -"Funkwhale zostaÅ‚ zaprojektowany, aby uczynić sÅ‚uchanie muzyki którÄ… lubisz i" -" poznawanie nowych wykonawców prostym." +msgid "Funkwhale is compatible with other music players that support the Subsonic API." +msgstr "Funkwhale jest kompatybilny z innymi odtwarzaczami muzycznymi obsÅ‚ugujÄ…cymi API Subsonic." -#: front/src/components/Home.vue:111 +#: front/src/components/Home.vue:88 +#, fuzzy msgctxt "Content/Home/Paragraph" -msgid "Funkwhale is free and gives you control on your music." +msgid "Funkwhale is free and developped by a friendly community of volunteers." msgstr "Funkwhale jest wolny i oddaje Ci kontrolÄ™ nad TwojÄ… muzykÄ…." -#: front/src/components/Home.vue:66 -msgctxt "Content/Home/Paragraph" -msgid "Funkwhale takes care of handling your music" -msgstr "Funkwhale dba o TwojÄ… bibliotekÄ™ muzycznÄ…" +#: front/src/components/About.vue:78 +msgctxt "*/*/*" +msgid "Funkwhale version" +msgstr "" -#: front/src/components/ShortcutsModal.vue:38 +#: front/src/components/ShortcutsModal.vue:56 msgctxt "Popup/Keyboard shortcuts/Title" msgid "General shortcuts" msgstr "" @@ -1999,35 +2187,17 @@ msgctxt "Content/Admin/Button.Label/Verb" msgid "Get a new invitation" msgstr "Uzyskaj nowe zaproszenie" -#: front/src/components/Home.vue:13 -msgctxt "Content/Home/Button.Label/Verb" -msgid "Get me to the library" -msgstr "Pokaż mi bibliotekÄ™" - -#: front/src/components/Home.vue:70 -msgctxt "Content/Home/List item/Verb" -msgid "" -"Get quality metadata about your music thanks to <a href=\"%{ url }\" " -"target=\"_blank\">MusicBrainz</a>" -msgstr "" -"Uzyskaj dobrej jakoÅ›ci metadane o Twojej muzyce dziÄ™ki <a href=\"%{ url }\" " -"target=\"_blank\">MusicBrainz</a>" - #: front/src/views/content/Home.vue:12 src/views/content/Home.vue:19 msgctxt "Content/Library/Button.Label/Verb" msgid "Get started" msgstr "Rozpocznij" -#: front/src/components/Footer.vue:37 +#: front/src/components/Footer.vue:45 +#: src/components/library/ImportStatusModal.vue:45 msgctxt "Footer/*/Link" msgid "Getting help" msgstr "Ustawienia" -#: front/src/components/library/ImportStatusModal.vue:45 -msgctxt "Popup/Import/Table.Label/Noun" -msgid "Getting help" -msgstr "Ustawienia" - #: front/src/components/common/ActionTable.vue:35 #: front/src/components/common/ActionTable.vue:56 msgctxt "Content/*/Button.Label/Short, Verb" @@ -2039,11 +2209,21 @@ msgctxt "Content/*/Button.Label/Verb" msgid "Go to home page" msgstr "Przejdź na stronÄ™ głównÄ…" +#: front/src/views/Notifications.vue:27 src/views/Notifications.vue:61 +msgctxt "Content/Notifications/Button.Label" +msgid "Got it!" +msgstr "" + #: front/src/components/auth/Settings.vue:128 msgctxt "Content/Settings/Title" msgid "Hidden artists" msgstr "PrzeglÄ…danie wykonawców" +#: front/src/components/About.vue:155 +msgctxt "*/*/*/Verb" +msgid "Hide" +msgstr "" + #: front/src/components/manage/moderation/InstancePolicyForm.vue:114 msgctxt "Content/Moderation/Help text" msgid "Hide account or domain content, except from followers." @@ -2054,12 +2234,12 @@ msgctxt "Popup/*/Button.Label" msgid "Hide content" msgstr "Dodaj zawartość" -#: front/src/components/audio/PlayButton.vue:26 +#: front/src/components/audio/PlayButton.vue:31 msgctxt "*/Queue/Dropdown/Button/Label/Short" msgid "Hide content from this artist" msgstr "" -#: front/src/components/audio/Player.vue:643 +#: front/src/components/audio/Player.vue:669 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Hide content from this artist…" msgstr "" @@ -2069,38 +2249,29 @@ msgctxt "Head/Home/Title" msgid "Home" msgstr "Strona główna" -#: front/src/components/instance/Stats.vue:36 -msgctxt "Content/About/Paragraph/Unit" -msgid "Hours of music" -msgstr "Godziny muzyki" - #: front/src/components/auth/SubsonicTokenForm.vue:10 msgctxt "Content/Settings/Paragraph" -msgid "" -"However, accessing Funkwhale from those clients require a separate password " -"you can set below." -msgstr "" -"Korzystanie z Funkwhale z tych klientów wymaga jednak oddzielnego hasÅ‚a, " -"które możesz ustawić poniżej." +msgid "However, accessing Funkwhale from those clients require a separate password you can set below." +msgstr "Korzystanie z Funkwhale z tych klientów wymaga jednak oddzielnego hasÅ‚a, które możesz ustawić poniżej." #: front/src/views/auth/PasswordResetConfirm.vue:24 +#, fuzzy msgctxt "Content/Signup/Paragraph" -msgid "" -"If the email address provided in the previous step is valid and binded to a " -"user account, you should receive an email with reset instructions in the " -"next couple of minutes." -msgstr "" -"Jeżeli adres e-mail podany w poprzednim kroku jest prawidÅ‚owy i przypisany " -"do konta użytkownika, powinieneÅ› dostać wiadomość z instrukcjami resetowania" -" hasÅ‚a w przeciÄ…gu kilku minut." +msgid "If the email address provided in the previous step is valid and linked to a user account, you should receive an email with reset instructions in the next couple of minutes." +msgstr "Jeżeli adres e-mail podany w poprzednim kroku jest prawidÅ‚owy i przypisany do konta użytkownika, powinieneÅ› dostać wiadomość z instrukcjami resetowania hasÅ‚a w przeciÄ…gu kilku minut." #: front/src/components/auth/Settings.vue:205 msgctxt "Content/Applications/Paragraph" -msgid "" -"If you authorize third-party applications to access your data, those " -"applications will be listed here." +msgid "If you authorize third-party applications to access your data, those applications will be listed here." msgstr "" +#: front/src/components/mixins/Translations.vue:46 +#: front/src/components/mixins/Translations.vue:47 +#, fuzzy +msgctxt "Content/Moderation/Dropdown" +msgid "Illegal content" +msgstr "Dodaj zawartość" + #: front/src/components/library/ImportStatusModal.vue:3 msgctxt "Popup/Import/Title" msgid "Import detail" @@ -2112,14 +2283,10 @@ msgid "Import reference" msgstr "Importuj źródÅ‚o" #: front/src/components/manage/library/UploadsTable.vue:20 -#: front/src/views/content/libraries/FilesTable.vue:11 -#: front/src/views/content/libraries/FilesTable.vue:59 -msgctxt "Content/Library/*/Noun" -msgid "Import status" -msgstr "Stan importu" - #: front/src/components/manage/library/UploadsTable.vue:64 #: front/src/views/admin/library/UploadDetail.vue:131 +#: front/src/views/content/libraries/FilesTable.vue:11 +#: front/src/views/content/libraries/FilesTable.vue:59 msgctxt "Content/*/*/Noun" msgid "Import status" msgstr "Stan importu" @@ -2160,12 +2327,12 @@ msgctxt "Popup/Moderation/List item" msgid "In radio suggestions" msgstr "" -#: front/src/components/manage/users/UsersTable.vue:54 +#: front/src/components/manage/users/UsersTable.vue:55 msgctxt "Content/Admin/Table" msgid "Inactive" msgstr "Nieaktywny" -#: front/src/components/ShortcutsModal.vue:71 +#: front/src/components/ShortcutsModal.vue:124 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Increase volume" msgstr "" @@ -2185,7 +2352,7 @@ msgctxt "Content/Settings/Dropdown/Short" msgid "Instance" msgstr "Radia instancji" -#: front/src/views/admin/moderation/DomainsDetail.vue:71 +#: front/src/views/admin/moderation/DomainsDetail.vue:99 msgctxt "Content/Moderation/Title" msgid "Instance data" msgstr "Radia instancji" @@ -2210,19 +2377,25 @@ msgctxt "Popup/Instance/Input.Label/Noun" msgid "Instance URL" msgstr "Radia instancji" +#: front/src/components/manage/moderation/ReportCard.vue:92 +#: front/src/components/manage/moderation/ReportCard.vue:203 +msgctxt "Content/*/*/Noun" +msgid "Internal notes" +msgstr "" + #: front/src/components/library/FileUpload.vue:268 msgctxt "Content/Library/Help text" -msgid "" -"Invalid file type, ensure you are uploading an audio file. Supported file " -"extensions are %{ extensions }" +msgid "Invalid file type, ensure you are uploading an audio file. Supported file extensions are %{ extensions }" msgstr "" #: front/src/components/library/ImportStatusModal.vue:139 +#: front/src/components/mixins/Translations.vue:45 +#: front/src/components/mixins/Translations.vue:46 msgctxt "Popup/Import/Error.Label" msgid "Invalid metadata" msgstr "" -#: front/src/components/auth/Signup.vue:44 +#: front/src/components/auth/SignupForm.vue:40 #: front/src/components/manage/users/InvitationForm.vue:11 msgctxt "Content/*/Input.Label" msgid "Invitation code" @@ -2234,7 +2407,13 @@ msgctxt "*/Admin/*/Noun" msgid "Invitations" msgstr "Zaproszenia" -#: front/src/components/Footer.vue:41 +#: front/src/components/manage/moderation/DomainsTable.vue:9 +#: front/src/views/admin/moderation/DomainsDetail.vue:106 +msgctxt "Content/Moderation/*/Adjective" +msgid "Is present on allow-list" +msgstr "" + +#: front/src/components/Footer.vue:49 msgctxt "Footer/*/List item.Link" msgid "Issue tracker" msgstr "Åšledzenie bÅ‚Ä™dów" @@ -2244,17 +2423,18 @@ msgctxt "Popup/Instance/Error message.Title" msgid "It is not possible to connect to the given URL" msgstr "" -#: front/src/components/Home.vue:50 -msgctxt "Content/Home/List item/Verb" -msgid "Keep a track of your favorite songs" -msgstr "Zachowaj kontrolÄ™ nad ulubionymi utworami" +#: front/src/components/mixins/Translations.vue:65 +#: front/src/components/mixins/Translations.vue:66 +msgctxt "*/*/*/Noun" +msgid "Items" +msgstr "" #: front/src/components/Footer.vue:33 src/components/ShortcutsModal.vue:3 msgctxt "*/*/*/Noun" msgid "Keyboard shortcuts" msgstr "" -#: front/src/views/admin/moderation/DomainsDetail.vue:161 +#: front/src/views/admin/moderation/DomainsDetail.vue:198 msgctxt "Content/Moderation/Table.Label.Link" msgid "Known accounts" msgstr "Moje konto" @@ -2265,15 +2445,15 @@ msgid "Known libraries" msgstr "Znane biblioteki" #: front/src/components/manage/users/UsersTable.vue:41 -#: front/src/components/mixins/Translations.vue:58 -#: front/src/views/admin/moderation/AccountsDetail.vue:205 -#: front/src/components/mixins/Translations.vue:59 +#: front/src/components/mixins/Translations.vue:70 +#: front/src/views/admin/moderation/AccountsDetail.vue:206 +#: front/src/components/mixins/Translations.vue:71 msgctxt "Content/Profile/Table.Label/Short, Noun (Value is a date)" msgid "Last activity" msgstr "Ostatnia aktywność" -#: front/src/views/admin/moderation/AccountsDetail.vue:188 -#: front/src/views/admin/moderation/DomainsDetail.vue:78 +#: front/src/views/admin/moderation/AccountsDetail.vue:189 +#: front/src/views/admin/moderation/DomainsDetail.vue:115 msgctxt "Content/*/Table.Label" msgid "Last checked" msgstr "Ostatnia aktualizacja:" @@ -2288,13 +2468,13 @@ msgctxt "Content/Moderation/Table.Label/Noun" msgid "Last seen" msgstr "Ostatnia aktualizacja:" -#: front/src/components/mixins/Translations.vue:47 -#: front/src/components/mixins/Translations.vue:48 +#: front/src/components/mixins/Translations.vue:57 +#: front/src/components/mixins/Translations.vue:58 msgctxt "Content/Moderation/Dropdown/Noun" msgid "Last seen date" msgstr "Ostatnia aktualizacja:" -#: front/src/views/content/remote/Card.vue:60 +#: front/src/views/content/remote/Card.vue:73 msgctxt "Content/Library/Card.List item/Noun" msgid "Last update:" msgstr "Ostatnia aktualizacja:" @@ -2304,60 +2484,60 @@ msgctxt "Modal/*/Button.Label/Short, Verb" msgid "Launch" msgstr "Uruchom" -#: front/src/components/Home.vue:10 -msgctxt "Content/Home/Button.Label/Verb" -msgid "Learn more about this instance" -msgstr "Dowiedz siÄ™ wiÄ™cej o tej instancji" +#: front/src/components/Home.vue:35 +#, fuzzy +msgctxt "Content/Home/Link" +msgid "Learn more" +msgstr "Åadowanie Å›ledzÄ…cych…" #: front/src/components/manage/users/InvitationForm.vue:58 msgctxt "Content/Admin/Input.Placeholder" msgid "Leave empty for a random code" msgstr "Pozostaw puste, aby wygenerować kod" -#: front/src/components/audio/EmbedWizard.vue:7 +#: front/src/components/audio/EmbedWizard.vue:17 msgctxt "Popup/Embed/Paragraph" msgid "Leave empty for a responsive widget" msgstr "Pozostaw puste, aby wygenerować kod" -#: front/src/views/admin/library/AlbumDetail.vue:232 -#: front/src/views/admin/library/ArtistDetail.vue:221 -#: front/src/views/admin/library/TrackDetail.vue:284 -#: front/src/views/admin/moderation/AccountsDetail.vue:327 -#: front/src/views/admin/moderation/DomainsDetail.vue:234 -#: front/src/views/content/Base.vue:5 +#: front/src/components/mixins/Translations.vue:64 +#: front/src/components/mixins/Translations.vue:65 msgctxt "*/*/*/Noun" -msgid "Libraries" -msgstr "Biblioteki" +msgid "Length" +msgstr "" +#: front/src/views/admin/library/AlbumDetail.vue:248 +#: front/src/views/admin/library/ArtistDetail.vue:236 #: front/src/views/admin/library/Base.vue:17 #: front/src/views/admin/library/LibrariesList.vue:24 -msgctxt "*/*/*" +#: front/src/views/admin/library/TrackDetail.vue:300 +#: front/src/views/admin/moderation/AccountsDetail.vue:339 +#: front/src/views/admin/moderation/DomainsDetail.vue:271 +#: front/src/views/content/Base.vue:5 +msgctxt "*/*/*/Noun" msgid "Libraries" msgstr "Biblioteki" -#: front/src/components/mixins/Translations.vue:72 -#: front/src/components/mixins/Translations.vue:73 +#: front/src/components/mixins/Translations.vue:84 +#: front/src/components/mixins/Translations.vue:85 msgctxt "Content/OAuth Scopes/Label" msgid "Libraries and uploads" msgstr "Zaktualizowano bibliotekÄ™" #: front/src/views/content/libraries/Form.vue:2 msgctxt "Content/Library/Paragraph" -msgid "" -"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." -msgstr "" -"Biblioteki pomagajÄ… organizować i udostÄ™pniać kolekcje muzyki. Możesz wysÅ‚ać" -" wÅ‚asnÄ… kolekcjÄ™ muzyki na Funkwhale i dzielić siÄ™ niÄ… z rodzinÄ… i " -"znajomymi." +msgid "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." +msgstr "Biblioteki pomagajÄ… organizować i udostÄ™pniać kolekcje muzyki. Możesz wysÅ‚ać wÅ‚asnÄ… kolekcjÄ™ muzyki na Funkwhale i dzielić siÄ™ niÄ… z rodzinÄ… i znajomymi." -#: front/src/components/Sidebar.vue:85 src/components/instance/Stats.vue:30 +#: front/src/components/Sidebar.vue:85 #: front/src/components/manage/library/UploadsTable.vue:60 -#: front/src/components/manage/users/UsersTable.vue:173 +#: front/src/components/manage/users/UsersTable.vue:174 +#: front/src/components/mixins/Report.vue:77 #: front/src/views/admin/library/UploadDetail.vue:144 -#: front/src/views/admin/moderation/AccountsDetail.vue:498 -msgctxt "*/*/*" +#: front/src/views/admin/moderation/AccountsDetail.vue:518 src/entities.js:132 +#: front/src/components/mixins/Report.vue:78 +#, fuzzy +msgctxt "*/*/*/Noun" msgid "Library" msgstr "Biblioteka" @@ -2388,21 +2568,37 @@ msgstr "Zaktualizowano bibliotekÄ™" #: front/src/components/library/TrackDetail.vue:19 #: front/src/components/manage/library/TracksTable.vue:43 -#: front/src/views/admin/library/TrackDetail.vue:159 src/edits.js:61 +#: front/src/views/admin/library/TrackDetail.vue:165 src/edits.js:84 +#: front/src/entities.js:115 msgctxt "Content/*/*/Noun" msgid "License" msgstr "" -#: front/src/views/admin/library/AlbumDetail.vue:157 -#: front/src/views/admin/library/ArtistDetail.vue:146 -#: front/src/views/admin/library/TrackDetail.vue:209 -msgctxt "*/*/*/Noun" -msgid "Listenings" +#: front/src/components/Footer.vue:90 +msgctxt "Footer/Settings/Dropdown.Label/Theme name" +msgid "Light" msgstr "" -#: front/src/components/mixins/Translations.vue:80 -#: front/src/components/mixins/Translations.vue:81 -msgctxt "Content/OAuth Scopes/Label" +#: front/src/views/admin/library/AlbumDetail.vue:188 +#: front/src/views/admin/library/ArtistDetail.vue:176 +#: front/src/views/admin/library/LibraryDetail.vue:179 +#: front/src/views/admin/library/TrackDetail.vue:240 +#: front/src/views/admin/moderation/AccountsDetail.vue:269 +msgctxt "Content/Moderation/Table.Label/Noun" +msgid "Linked reports" +msgstr "" + +#: front/src/components/Home.vue:135 +msgctxt "Content/Home/Link" +msgid "Listen to public albums and playlists shared on this pod" +msgstr "" + +#: front/src/components/mixins/Translations.vue:92 +#: front/src/views/admin/library/AlbumDetail.vue:163 +#: front/src/views/admin/library/ArtistDetail.vue:151 +#: front/src/views/admin/library/TrackDetail.vue:215 +#: front/src/components/mixins/Translations.vue:93 +msgctxt "*/*/*/Noun" msgid "Listenings" msgstr "" @@ -2428,7 +2624,7 @@ msgctxt "Content/Library/Paragraph" msgid "Loading library data…" msgstr "Åadowanie danych biblioteki…" -#: front/src/views/Notifications.vue:19 +#: front/src/views/Notifications.vue:84 msgctxt "Content/Notifications/Paragraph" msgid "Loading notifications…" msgstr "Åadowanie powiadomień…" @@ -2453,6 +2649,7 @@ msgstr "Åadowanie Twoich ulubionych…" #: front/src/components/manage/library/LibrariesTable.vue:75 #: front/src/components/manage/library/TracksTable.vue:71 #: front/src/components/manage/library/UploadsTable.vue:99 +#: front/src/components/manage/moderation/ReportCard.vue:173 #: front/src/views/admin/library/AlbumDetail.vue:19 #: front/src/views/admin/library/ArtistDetail.vue:18 #: front/src/views/admin/library/LibraryDetail.vue:18 @@ -2468,12 +2665,12 @@ msgctxt "Content/Moderation/*/Short, Noun" msgid "Local account" msgstr "Moje konto" -#: front/src/components/auth/Login.vue:84 +#: front/src/components/Home.vue:96 src/views/auth/Login.vue:29 msgctxt "Head/Login/Title" msgid "Log In" msgstr "Zaloguj siÄ™" -#: front/src/components/auth/Login.vue:4 +#: front/src/views/auth/Login.vue:4 msgctxt "Content/Login/Title/Verb" msgid "Log in to your Funkwhale account" msgstr "Zaloguj siÄ™ na swoje konto Funkwhale" @@ -2488,7 +2685,7 @@ msgctxt "Sidebar/Profile/List item.Link" msgid "Logged in as %{ username }" msgstr "Zalogowano jako %{ username }" -#: front/src/components/Sidebar.vue:54 src/components/auth/Login.vue:42 +#: front/src/components/Sidebar.vue:54 src/components/auth/LoginForm.vue:41 msgctxt "*/Login/*/Verb" msgid "Login" msgstr "Logowanie" @@ -2506,43 +2703,42 @@ msgstr "Wyloguj siÄ™" #: front/src/views/content/libraries/Home.vue:9 msgctxt "Content/Library/Paragraph" msgid "Looks like you don't have a library, it's time to create one." -msgstr "" -"WyglÄ…da na to, że nie masz jeszcze żadnej biblioteki — czas na jej " -"utworzenie!" +msgstr "WyglÄ…da na to, że nie masz jeszcze żadnej biblioteki — czas na jej utworzenie!" -#: front/src/components/audio/Player.vue:632 -#: src/components/audio/Player.vue:633 +#: front/src/components/audio/Player.vue:658 +#: src/components/audio/Player.vue:659 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Looping disabled. Click to switch to single-track looping." -msgstr "" -"ZapÄ™tlanie jest wyÅ‚Ä…czone. NaciÅ›nij, aby przeÅ‚Ä…czyć na powtarzanie jednego " -"utworu." +msgstr "ZapÄ™tlanie jest wyÅ‚Ä…czone. NaciÅ›nij, aby przeÅ‚Ä…czyć na powtarzanie jednego utworu." -#: front/src/components/audio/Player.vue:635 -#: src/components/audio/Player.vue:636 +#: front/src/components/audio/Player.vue:661 +#: src/components/audio/Player.vue:662 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Looping on a single track. Click to switch to whole queue looping." -msgstr "" -"ZapÄ™tlanie jednego utworu jest wÅ‚Ä…czone. NaciÅ›nij, aby przeÅ‚Ä…czyć na " -"powtarzanie caÅ‚ej kolejki." +msgstr "ZapÄ™tlanie jednego utworu jest wÅ‚Ä…czone. NaciÅ›nij, aby przeÅ‚Ä…czyć na powtarzanie caÅ‚ej kolejki." -#: front/src/components/audio/Player.vue:638 -#: src/components/audio/Player.vue:639 +#: front/src/components/audio/Player.vue:664 +#: src/components/audio/Player.vue:665 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Looping on whole queue. Click to disable looping." -msgstr "" -"ZapÄ™tlanie caÅ‚ej kolejki jest wÅ‚Ä…czone. NaciÅ›nij, aby wyÅ‚Ä…czyć zapÄ™tlanie." +msgstr "ZapÄ™tlanie caÅ‚ej kolejki jest wÅ‚Ä…czone. NaciÅ›nij, aby wyÅ‚Ä…czyć zapÄ™tlanie." -#: front/src/components/Sidebar.vue:223 +#: front/src/components/Sidebar.vue:230 msgctxt "Sidebar/*/Hidden text" msgid "Main menu" msgstr "" -#: front/src/views/admin/library/Base.vue:31 +#: front/src/views/admin/library/Base.vue:34 msgctxt "Head/Admin/Title" msgid "Manage library" msgstr "ZarzÄ…dzaj bibliotekÄ…" +#: front/src/components/manage/moderation/InstancePolicyModal.vue:8 +#, fuzzy +msgctxt "Popup/Moderation/Title/Verb" +msgid "Manage moderation rules for %{ obj }" +msgstr "UsuÅ„ radio" + #: front/src/components/playlists/PlaylistModal.vue:3 msgctxt "Popup/Playlist/Title/Verb" msgid "Manage playlists" @@ -2558,7 +2754,7 @@ msgctxt "Content/Playlist/Button.Label/Verb" msgid "Manage your playlists" msgstr "ZarzÄ…dzaj swoimi listami odtwarzania" -#: front/src/views/Notifications.vue:14 +#: front/src/views/Notifications.vue:79 msgctxt "Content/Notifications/Button.Label/Verb" msgid "Mark all as read" msgstr "Oznacz wszystko jako przeczytane" @@ -2573,12 +2769,12 @@ msgctxt "Content/Notifications/Button.Tooltip/Verb" msgid "Mark as unread" msgstr "Oznacz wszystko jako przeczytane" -#: front/src/views/admin/moderation/AccountsDetail.vue:310 +#: front/src/views/admin/moderation/AccountsDetail.vue:321 msgctxt "Content/*/*/Unit" msgid "MB" msgstr "MB" -#: front/src/components/audio/Player.vue:625 +#: front/src/components/audio/Player.vue:651 msgctxt "Sidebar/Player/Hidden text" msgid "Media player" msgstr "" @@ -2588,41 +2784,58 @@ msgctxt "Content/Profile/Paragraph" msgid "Member since %{ date }" msgstr "Zarejestrowany od %{ date }" +#: front/src/components/manage/moderation/ReportCard.vue:109 +#: front/src/components/moderation/ReportModal.vue:41 +msgctxt "*/*/Field.Label/Noun" +msgid "Message" +msgstr "" + #: front/src/components/Footer.vue:32 msgctxt "Footer/*/List item.Link" msgid "Mobile and desktop apps" msgstr "" +#: front/src/components/Home.vue:143 +msgctxt "Content/Home/Link" +msgid "Mobile apps" +msgstr "" + #: front/src/components/Sidebar.vue:96 -#: src/components/manage/users/UsersTable.vue:177 -#: front/src/views/admin/moderation/AccountsDetail.vue:502 -#: front/src/views/admin/moderation/Base.vue:21 +#: src/components/manage/users/UsersTable.vue:178 +#: front/src/views/admin/Settings.vue:85 +#: front/src/views/admin/moderation/AccountsDetail.vue:522 +#: front/src/views/admin/moderation/Base.vue:43 msgctxt "*/Moderation/*" msgid "Moderation" msgstr "Federacja" #: front/src/views/admin/moderation/AccountsDetail.vue:78 -#: front/src/views/admin/moderation/DomainsDetail.vue:42 +#: front/src/views/admin/moderation/DomainsDetail.vue:70 msgctxt "Content/Moderation/Card.Paragraph" -msgid "" -"Moderation policies help you control how your instance interact with a given" -" domain or account." +msgid "Moderation policies help you control how your instance interact with a given domain or account." msgstr "" +#: front/src/components/manage/moderation/InstancePolicyModal.vue:4 +#, fuzzy +msgctxt "Content/Moderation/Button.Label" +msgid "Moderation rules…" +msgstr "UsuÅ„ radio" + #: front/src/components/library/EditCard.vue:5 msgctxt "Content/Library/Card/Short" msgid "Modification %{ id }" msgstr "Data modyfikacji" -#: front/src/components/mixins/Translations.vue:48 -#: front/src/components/mixins/Translations.vue:49 +#: front/src/components/mixins/Translations.vue:58 +#: front/src/components/mixins/Translations.vue:59 msgctxt "Content/Playlist/Dropdown/Noun" msgid "Modification date" msgstr "Data modyfikacji" -#: front/src/components/library/AlbumBase.vue:42 -#: front/src/components/library/ArtistBase.vue:53 -#: front/src/components/library/TrackBase.vue:61 +#: front/src/components/audio/PlayButton.vue:100 +#: front/src/components/library/AlbumBase.vue:43 +#: front/src/components/library/ArtistBase.vue:54 +#: front/src/components/library/TrackBase.vue:59 msgctxt "*/*/Button.Label/Noun" msgid "More…" msgstr "" @@ -2632,7 +2845,7 @@ msgctxt "*/*/*/Noun" msgid "Music" msgstr "Muzyka" -#: front/src/components/audio/Player.vue:631 +#: front/src/components/audio/Player.vue:657 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Mute" msgstr "Wycisz" @@ -2679,8 +2892,8 @@ msgctxt "Content/Library/Title" msgid "My libraries" msgstr "Moje biblioteki" -#: front/src/components/audio/track/Row.vue:40 -#: src/components/library/EditCard.vue:60 +#: front/src/components/About.vue:105 src/components/audio/track/Row.vue:40 +#: front/src/components/library/EditCard.vue:60 #: front/src/components/library/EditForm.vue:70 #: front/src/components/library/TrackDetail.vue:34 #: front/src/components/library/TrackDetail.vue:43 @@ -2690,54 +2903,56 @@ msgstr "Moje biblioteki" #: front/src/components/manage/library/TracksTable.vue:76 #: front/src/components/manage/library/UploadsTable.vue:121 #: front/src/components/manage/library/UploadsTable.vue:128 -#: front/src/components/manage/users/UsersTable.vue:61 +#: front/src/components/manage/moderation/ReportCard.vue:78 +#: front/src/components/manage/moderation/ReportCard.vue:87 +#: front/src/components/manage/moderation/ReportCard.vue:193 +#: front/src/components/manage/users/UsersTable.vue:62 #: front/src/views/admin/library/UploadDetail.vue:179 #: front/src/views/admin/library/UploadDetail.vue:214 #: front/src/views/admin/library/UploadDetail.vue:233 #: front/src/views/admin/library/UploadDetail.vue:244 #: front/src/views/admin/library/UploadDetail.vue:257 -#: front/src/views/admin/moderation/AccountsDetail.vue:192 -#: front/src/views/admin/moderation/DomainsDetail.vue:82 +#: front/src/views/admin/moderation/AccountsDetail.vue:193 +#: front/src/views/admin/moderation/DomainsDetail.vue:119 #: front/src/views/content/libraries/FilesTable.vue:95 #: front/src/views/content/libraries/FilesTable.vue:101 msgctxt "*/*/*" msgid "N/A" msgstr "N/A" -#: front/src/components/manage/library/LibrariesTable.vue:48 -#: front/src/components/manage/library/UploadsTable.vue:59 -msgctxt "*/*/*" -msgid "Name" -msgstr "Nazwa" - #: front/src/components/auth/ApplicationForm.vue:9 -msgctxt "Content/Applications/Input.Label/Noun" -msgid "Name" -msgstr "Nazwa" - #: front/src/components/auth/Settings.vue:133 #: front/src/components/manage/library/ArtistsTable.vue:39 +#: front/src/components/manage/library/LibrariesTable.vue:48 +#: front/src/components/manage/library/TagsTable.vue:41 +#: front/src/components/manage/library/UploadsTable.vue:59 #: front/src/components/manage/moderation/AccountsTable.vue:39 -#: front/src/components/manage/moderation/DomainsTable.vue:38 -#: front/src/components/mixins/Translations.vue:53 +#: front/src/components/manage/moderation/DomainsTable.vue:46 +#: front/src/components/mixins/Translations.vue:63 #: front/src/components/playlists/PlaylistModal.vue:45 -#: front/src/views/admin/library/ArtistDetail.vue:98 +#: front/src/views/admin/library/ArtistDetail.vue:103 #: front/src/views/admin/library/LibraryDetail.vue:85 +#: front/src/views/admin/library/TagDetail.vue:68 #: front/src/views/admin/library/UploadDetail.vue:92 -#: front/src/views/admin/moderation/DomainsDetail.vue:97 -#: front/src/views/content/libraries/Form.vue:10 src/edits.js:10 -#: front/src/components/mixins/Translations.vue:54 +#: front/src/views/admin/moderation/DomainsDetail.vue:134 +#: front/src/views/content/libraries/Form.vue:10 src/edits.js:17 +#: front/src/components/mixins/Translations.vue:64 msgctxt "*/*/*/Noun" msgid "Name" msgstr "Nazwa" +#: front/src/views/Notifications.vue:24 src/views/Notifications.vue:58 +msgctxt "*/*/*" +msgid "Never" +msgstr "" + #: front/src/components/auth/Settings.vue:88 #: front/src/views/auth/PasswordResetConfirm.vue:14 msgctxt "Content/Settings/Input.Label" msgid "New password" msgstr "Nowe hasÅ‚o" -#: front/src/components/Sidebar.vue:173 +#: front/src/components/Sidebar.vue:177 msgctxt "Sidebar/Player/Paragraph" msgid "New tracks will be appended here automatically." msgstr "Nowe utwory automatycznie pojawiÄ… siÄ™ tutaj." @@ -2747,21 +2962,18 @@ msgctxt "Content/Library/Card.Table.Header/Short" msgid "New value" msgstr "" -#: front/src/components/audio/Player.vue:629 +#: front/src/components/audio/Player.vue:655 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Next track" msgstr "NastÄ™pny utwór" -#: front/src/components/Sidebar.vue:130 +#: front/src/components/Sidebar.vue:134 +#: front/src/components/manage/moderation/DomainsTable.vue:13 +#: front/src/views/admin/moderation/DomainsDetail.vue:110 msgctxt "*/*/*" msgid "No" msgstr "Nie" -#: front/src/components/Home.vue:95 -msgctxt "Content/Home/List item" -msgid "No add-ons, no plugins : you only need a web library" -msgstr "Brak wtyczek, brak dodatków: potrzebujesz tylko biblioteki sieciowej" - #: front/src/components/audio/Search.vue:25 msgctxt "Content/Search/Paragraph" msgid "No album matched your query" @@ -2777,6 +2989,11 @@ msgctxt "Content/Track/Table.Paragraph" msgid "No copyright information available for this track" msgstr "Tekst nie jest dostÄ™pny dla tego utworu." +#: front/src/components/About.vue:25 src/components/Home.vue:25 +msgctxt "Content/Home/Paragraph" +msgid "No description available." +msgstr "" + #: front/src/components/library/TrackDetail.vue:25 msgctxt "Content/Track/Table.Paragraph" msgid "No licensing information for this track" @@ -2787,7 +3004,7 @@ msgctxt "Content/Federation/Paragraph" msgid "No matching library." msgstr "Brak pasujÄ…cej biblioteki." -#: front/src/views/Notifications.vue:28 +#: front/src/views/Notifications.vue:93 msgctxt "Content/Notifications/Paragraph" msgid "No notification to show." msgstr "Twoje powiadomienia" @@ -2797,6 +3014,16 @@ msgctxt "Content/*/Paragraph" msgid "No results were found." msgstr "" +#: front/src/components/About.vue:32 +msgctxt "Content/Home/Paragraph" +msgid "No rules available." +msgstr "" + +#: front/src/components/About.vue:39 +msgctxt "Content/Home/Paragraph" +msgid "No terms available." +msgstr "" + #: front/src/components/mixins/Translations.vue:10 #: front/src/components/mixins/Translations.vue:11 msgctxt "Content/Settings/Dropdown" @@ -2813,18 +3040,22 @@ msgctxt "Content/Admin/Table" msgid "Not used" msgstr "Nie użyty" -#: front/src/components/mixins/Translations.vue:100 -#: front/src/components/mixins/Translations.vue:101 -msgctxt "Content/OAuth Scopes/Label" -msgid "Notifications" -msgstr "Powiadomienia" - -#: front/src/components/Sidebar.vue:46 src/views/Notifications.vue:76 +#: front/src/components/Sidebar.vue:46 +#: src/components/mixins/Translations.vue:112 +#: front/src/views/Notifications.vue:151 +#: src/components/mixins/Translations.vue:113 msgctxt "*/Notifications/*" msgid "Notifications" msgstr "Powiadomienia" -#: front/src/components/Footer.vue:47 +#: front/src/components/mixins/Translations.vue:47 +#: front/src/components/mixins/Translations.vue:48 +#, fuzzy +msgctxt "Content/Moderation/Dropdown" +msgid "Offensive content" +msgstr "Dodaj zawartość" + +#: front/src/components/Footer.vue:55 msgctxt "Footer/*/List item.Link" msgid "Official website" msgstr "Oficjalna strona" @@ -2839,6 +3070,12 @@ msgctxt "Content/Library/Card.Table.Header/Short" msgid "Old value" msgstr "" +#: front/src/components/About.vue:90 +#, fuzzy +msgctxt "*/*/*/State of registrations" +msgid "Open" +msgstr "Otwórz" + #: front/src/components/manage/users/InvitationsTable.vue:20 msgctxt "Content/Admin/Dropdown/Adjective" msgid "Open" @@ -2846,27 +3083,29 @@ msgstr "Otwórz" #: front/src/components/library/ImportStatusModal.vue:56 msgctxt "Popup/Import/Table.Label/Value" -msgid "" -"Open a support thread (include the debug information below in your message)" +msgid "Open a support thread (include the debug information below in your message)" msgstr "" -#: front/src/components/library/AlbumBase.vue:73 -#: front/src/components/library/ArtistBase.vue:84 -#: front/src/components/library/TrackBase.vue:92 +#: front/src/components/library/AlbumBase.vue:87 +#: front/src/components/library/ArtistBase.vue:99 +#: front/src/components/library/TagDetail.vue:11 +#: front/src/components/library/TrackBase.vue:103 +#: front/src/components/manage/moderation/ReportCard.vue:128 msgctxt "Content/Moderation/Link" msgid "Open in moderation interface" msgstr "UsuÅ„ radio" -#: front/src/views/admin/library/AlbumDetail.vue:31 -#: front/src/views/admin/library/ArtistDetail.vue:30 -#: front/src/views/admin/library/TrackDetail.vue:30 +#: front/src/views/admin/library/AlbumDetail.vue:37 +#: front/src/views/admin/library/ArtistDetail.vue:35 +#: front/src/views/admin/library/TagDetail.vue:21 +#: front/src/views/admin/library/TrackDetail.vue:36 msgctxt "Content/Moderation/Link/Verb" msgid "Open local profile" msgstr "" -#: front/src/views/admin/library/AlbumDetail.vue:46 -#: front/src/views/admin/library/ArtistDetail.vue:45 -#: front/src/views/admin/library/TrackDetail.vue:45 +#: front/src/views/admin/library/AlbumDetail.vue:52 +#: front/src/views/admin/library/ArtistDetail.vue:50 +#: front/src/views/admin/library/TrackDetail.vue:51 msgctxt "Content/Moderation/Link/Verb" msgid "Open on MusicBrainz" msgstr "WyÅ›wietl na MusicBrainz" @@ -2876,10 +3115,10 @@ msgctxt "Content/Moderation/Link/Verb" msgid "Open profile" msgstr "" -#: front/src/views/admin/library/AlbumDetail.vue:54 -#: front/src/views/admin/library/ArtistDetail.vue:53 +#: front/src/views/admin/library/AlbumDetail.vue:60 +#: front/src/views/admin/library/ArtistDetail.vue:58 #: front/src/views/admin/library/LibraryDetail.vue:49 -#: front/src/views/admin/library/TrackDetail.vue:53 +#: front/src/views/admin/library/TrackDetail.vue:59 #: front/src/views/admin/library/UploadDetail.vue:50 #: front/src/views/admin/moderation/AccountsDetail.vue:52 msgctxt "Content/Moderation/Link/Verb" @@ -2900,6 +3139,7 @@ msgstr "Dodaj filtry aby dostosować swoje radio" #: src/components/library/Radios.vue:41 #: front/src/components/manage/library/EditsCardList.vue:37 #: front/src/components/manage/users/UsersTable.vue:17 +#: front/src/views/admin/moderation/ReportsList.vue:42 #: front/src/views/playlists/List.vue:25 msgctxt "Content/Search/Dropdown.Label/Noun" msgid "Order" @@ -2907,40 +3147,51 @@ msgstr "PorzÄ…dkowanie" #: front/src/components/favorites/List.vue:24 #: src/components/library/Albums.vue:15 -#: front/src/components/library/Artists.vue:15 +#: front/src/components/library/Artists.vue:19 #: src/components/library/Radios.vue:33 #: front/src/components/manage/library/AlbumsTable.vue:11 #: front/src/components/manage/library/ArtistsTable.vue:11 #: front/src/components/manage/library/EditsCardList.vue:29 #: front/src/components/manage/library/LibrariesTable.vue:20 +#: front/src/components/manage/library/TagsTable.vue:11 #: front/src/components/manage/library/TracksTable.vue:11 #: front/src/components/manage/library/UploadsTable.vue:30 #: front/src/components/manage/moderation/AccountsTable.vue:11 -#: front/src/components/manage/moderation/DomainsTable.vue:9 +#: front/src/components/manage/moderation/DomainsTable.vue:17 #: front/src/components/manage/users/InvitationsTable.vue:9 #: front/src/components/manage/users/UsersTable.vue:9 +#: front/src/views/admin/moderation/ReportsList.vue:34 #: front/src/views/content/libraries/FilesTable.vue:21 #: front/src/views/playlists/List.vue:17 msgctxt "Content/Search/Dropdown.Label/Noun" msgid "Ordering" msgstr "PorzÄ…dkowanie" -#: front/src/components/library/Albums.vue:23 -#: src/components/library/Artists.vue:23 +#: front/src/components/library/Albums.vue:27 +#: src/components/library/Artists.vue:27 #: front/src/components/manage/library/AlbumsTable.vue:19 #: front/src/components/manage/library/ArtistsTable.vue:19 #: front/src/components/manage/library/LibrariesTable.vue:28 +#: front/src/components/manage/library/TagsTable.vue:19 #: front/src/components/manage/library/TracksTable.vue:19 #: front/src/components/manage/library/UploadsTable.vue:38 #: front/src/components/manage/moderation/AccountsTable.vue:19 -#: front/src/components/manage/moderation/DomainsTable.vue:17 +#: front/src/components/manage/moderation/DomainsTable.vue:25 #: front/src/views/content/libraries/FilesTable.vue:29 msgctxt "Content/Search/Dropdown.Label/Noun" msgid "Ordering direction" msgstr "Kolejność porzÄ…dkowania" +#: front/src/components/mixins/Translations.vue:48 +#: front/src/components/mixins/Translations.vue:49 +msgctxt "Content/Moderation/Dropdown" +msgid "Other" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:143 #: front/src/components/manage/users/InvitationsTable.vue:38 -msgctxt "Content/Admin/Table.Label" +#, fuzzy +msgctxt "*/*/*" msgid "Owner" msgstr "WÅ‚aÅ›ciciel" @@ -2959,12 +3210,15 @@ msgctxt "Content/*/Hidden text/Noun" msgid "Pagination" msgstr "" -#: front/src/components/auth/Login.vue:33 src/components/auth/Signup.vue:40 -msgctxt "Content/*/Input.Label" +#: front/src/components/auth/LoginForm.vue:32 +#: src/components/auth/Settings.vue:291 +#: front/src/components/auth/SignupForm.vue:36 +#, fuzzy +msgctxt "*/*/*" msgid "Password" msgstr "Haslo" -#: front/src/components/auth/SubsonicTokenForm.vue:94 +#: front/src/components/auth/SubsonicTokenForm.vue:100 msgctxt "Content/Settings/Message" msgid "Password updated" msgstr "Zmieniono hasÅ‚o" @@ -2974,12 +3228,12 @@ msgctxt "Content/Signup/Card.Title" msgid "Password updated successfully" msgstr "PomyÅ›lnie zmieniono hasÅ‚o" -#: front/src/components/audio/Player.vue:628 +#: front/src/components/audio/Player.vue:654 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Pause track" msgstr "Wstrzymaj utwór" -#: front/src/components/ShortcutsModal.vue:59 +#: front/src/components/ShortcutsModal.vue:96 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Pause/play the current track" msgstr "Odtwórz utwór" @@ -3008,7 +3262,7 @@ msgctxt "Content/Library/Label" msgid "Pending files" msgstr "OczekujÄ…ce pliki" -#: front/src/components/Sidebar.vue:225 +#: front/src/components/Sidebar.vue:232 msgctxt "Sidebar/Notifications/Hidden text" msgid "Pending follow requests" msgstr "OczekujÄ…ce proÅ›by o możliwość Å›ledzenia" @@ -3019,84 +3273,76 @@ msgctxt "Content/Admin/*/Noun" msgid "Pending review" msgstr "OczekujÄ…ce pliki" -#: front/src/components/Sidebar.vue:226 +#: front/src/components/Sidebar.vue:233 msgctxt "Sidebar/Moderation/Hidden text" msgid "Pending review edits" msgstr "OczekujÄ…ce pliki" +#: front/src/components/auth/Settings.vue:176 #: front/src/components/manage/users/UsersTable.vue:42 #: front/src/views/admin/moderation/AccountsDetail.vue:166 -msgctxt "Content/Admin/Table.Label/Noun" -msgid "Permissions" -msgstr "Uprawnienia" - -#: front/src/components/auth/Settings.vue:176 msgctxt "Content/*/*/Noun" msgid "Permissions" msgstr "Uprawnienia" #: front/src/components/audio/PlayButton.vue:9 -#: front/src/components/library/TrackBase.vue:26 +#: front/src/components/library/TrackBase.vue:24 msgctxt "*/Queue/Button.Label/Short, Verb" msgid "Play" msgstr "Odtwórz" #: front/src/components/audio/album/Card.vue:48 -#: front/src/components/audio/artist/Card.vue:44 -#: front/src/components/library/AlbumBase.vue:20 +#: front/src/components/library/AlbumBase.vue:21 #: front/src/components/library/AlbumDetail.vue:11 #: src/views/playlists/Detail.vue:24 msgctxt "Content/Queue/Button.Label/Short, Verb" msgid "Play all" msgstr "Odtwórz wszystkie" -#: front/src/components/library/ArtistBase.vue:31 +#: front/src/components/library/ArtistBase.vue:32 msgctxt "Content/Artist/Button.Label/Verb" msgid "Play all albums" msgstr "Odtwórz wszystkie albumy" -#: front/src/components/audio/PlayButton.vue:76 +#: front/src/components/audio/PlayButton.vue:92 msgctxt "*/Queue/Dropdown/Button/Title" msgid "Play next" msgstr "Odtwórz nastÄ™pny" -#: front/src/components/ShortcutsModal.vue:67 +#: front/src/components/ShortcutsModal.vue:120 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Play next track" msgstr "Odtwórz utwór" -#: front/src/components/audio/PlayButton.vue:74 +#: front/src/components/audio/PlayButton.vue:90 msgctxt "*/Queue/Dropdown/Button/Title" msgid "Play now" msgstr "Odtwórz teraz" -#: front/src/components/ShortcutsModal.vue:63 +#: front/src/components/ShortcutsModal.vue:116 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Play previous track" msgstr "Poprzedni utwór" -#: front/src/components/audio/PlayButton.vue:77 +#: front/src/components/audio/PlayButton.vue:93 msgctxt "*/Queue/Dropdown/Button/Title" msgid "Play similar songs" msgstr "" -#: front/src/components/Sidebar.vue:224 +#: front/src/components/Sidebar.vue:231 msgctxt "Sidebar/Player/Hidden text" msgid "Play this track" msgstr "Odtwórz utwór" -#: front/src/components/audio/Player.vue:627 +#: front/src/components/audio/Player.vue:653 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Play track" msgstr "Odtwórz utwór" -#: front/src/components/audio/PlayButton.vue:82 -msgctxt "*/Queue/Button/Title" -msgid "Play..." -msgstr "Odtwórz" - -#: front/src/views/playlists/Detail.vue:91 -msgctxt "Head/Playlist/Title" +#: front/src/components/mixins/Report.vue:66 src/views/playlists/Detail.vue:121 +#: front/src/components/mixins/Report.vue:67 +#, fuzzy +msgctxt "*/*/*" msgid "Playlist" msgstr "Lista odtwarzania" @@ -3134,62 +3380,60 @@ msgctxt "Content/Playlist/Dropdown.Label" msgid "Playlist visibility" msgstr "Widoczność listy odtwarzania" -#: front/src/components/mixins/Translations.vue:88 -#: front/src/components/mixins/Translations.vue:89 -msgctxt "Content/OAuth Scopes/Label" -msgid "Playlists" -msgstr "Listy odtwarzania" - #: front/src/components/Sidebar.vue:71 src/components/library/Home.vue:16 -#: front/src/components/library/Library.vue:16 src/views/admin/Settings.vue:83 -#: front/src/views/admin/library/AlbumDetail.vue:173 -#: front/src/views/admin/library/ArtistDetail.vue:162 -#: front/src/views/admin/library/TrackDetail.vue:225 +#: front/src/components/library/Library.vue:16 +#: front/src/components/mixins/Translations.vue:100 +#: src/views/admin/Settings.vue:83 +#: front/src/views/admin/library/AlbumDetail.vue:179 +#: front/src/views/admin/library/ArtistDetail.vue:167 +#: front/src/views/admin/library/TrackDetail.vue:231 #: src/views/playlists/List.vue:106 +#: front/src/components/mixins/Translations.vue:101 msgctxt "*/*/*" msgid "Playlists" msgstr "Listy odtwarzania" -#: front/src/components/Home.vue:56 -msgctxt "Content/Home/List item" -msgid "Playlists? We got them" -msgstr "Listy odtwarzania? Mamy je" +#: front/src/components/audio/EmbedWizard.vue:9 +msgctxt "Content/Embed/Message" +msgid "Please contact your admins and ask them to update the corresponding setting." +msgstr "" #: front/src/components/auth/Settings.vue:79 msgctxt "Content/Settings/Error message.List item/Call to action" msgid "Please double-check your password is correct" msgstr "Sprawdź dwukrotnie, czy Twoje hasÅ‚o jest poprawne" -#: front/src/components/auth/Login.vue:9 +#: front/src/components/auth/LoginForm.vue:5 msgctxt "Content/Login/Error message.List item/Call to action" msgid "Please double-check your username/password couple is correct" -msgstr "" -"Sprawdź dwukrotnie, czy poÅ‚Ä…czenie nazwy użytkownika i hasÅ‚a jest poprawne" +msgstr "Sprawdź dwukrotnie, czy poÅ‚Ä…czenie nazwy użytkownika i hasÅ‚a jest poprawne" #: front/src/components/auth/Settings.vue:46 msgctxt "Content/Settings/Paragraph" msgid "PNG, GIF or JPG. At most 2MB. Will be downscaled to 400x400px." +msgstr "PNG, GIF lub JPG. Maksymalnie 2MB. Zostanie pomniejszony do 400x400 pikseli." + +#: front/src/components/About.vue:72 +msgctxt "Content/About/Header/Name" +msgid "Pod configuration" msgstr "" -"PNG, GIF lub JPG. Maksymalnie 2MB. Zostanie pomniejszony do 400x400 pikseli." -#: front/src/views/admin/library/TrackDetail.vue:137 -msgctxt "*/*/*/Noun" +#: front/src/views/admin/library/TrackDetail.vue:143 src/edits.js:70 +msgctxt "*/*/*/Short, Noun" msgid "Position" msgstr "Opis" #: front/src/components/manage/moderation/InstancePolicyForm.vue:118 msgctxt "Content/Moderation/Help text" -msgid "" -"Prevent account or domain from triggering notifications, except from " -"followers." +msgid "Prevent account or domain from triggering notifications, except from followers." msgstr "" -#: front/src/components/audio/EmbedWizard.vue:33 +#: front/src/components/audio/EmbedWizard.vue:43 msgctxt "Popup/Embed/Title/Noun" msgid "Preview" msgstr "" -#: front/src/components/audio/Player.vue:626 +#: front/src/components/audio/Player.vue:652 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Previous track" msgstr "Poprzedni utwór" @@ -3200,7 +3444,7 @@ msgctxt "Content/Settings/Dropdown/Short" msgid "Private" msgstr "" -#: front/src/views/content/remote/Card.vue:43 +#: front/src/views/content/remote/Card.vue:56 msgctxt "Content/Library/Card.List item" msgid "Problem during scanning" msgstr "BÅ‚Ä…d podczas skanowania" @@ -3221,14 +3465,20 @@ msgctxt "Content/Library/Tab.Title/Short" msgid "Processing" msgstr "Przetwarzanie" -#: front/src/components/mixins/Translations.vue:68 -#: front/src/components/mixins/Translations.vue:69 +#: front/src/components/mixins/Translations.vue:80 +#: front/src/components/mixins/Translations.vue:81 msgctxt "Content/OAuth Scopes/Label" msgid "Profile" msgstr "" +#: front/src/components/auth/SignupForm.vue:5 +#, fuzzy +msgctxt "Content/Signup/Form/Paragraph" +msgid "Public registrations are not possible on this instance. You will need an invitation code to sign up." +msgstr "Rejestracja na tej instancji jest wyÅ‚Ä…czona, potrzebujesz kodu zapraszajÄ…cego aby zarejestrować siÄ™." + #: front/src/components/manage/moderation/AccountsTable.vue:188 -#: front/src/components/manage/moderation/DomainsTable.vue:168 +#: front/src/components/manage/moderation/DomainsTable.vue:186 #: front/src/views/content/libraries/Quota.vue:36 #: front/src/views/content/libraries/Quota.vue:39 #: front/src/views/content/libraries/Quota.vue:62 @@ -3259,7 +3509,7 @@ msgctxt "Sidebar/Queue/Tab.Title/Noun" msgid "Queue" msgstr "Kolejka" -#: front/src/components/audio/Player.vue:322 +#: front/src/components/audio/Player.vue:329 msgctxt "Content/Queue/Message" msgid "Queue shuffled!" msgstr "Wymieszano kolejkÄ™!" @@ -3291,16 +3541,12 @@ msgstr "Zaktualizowano radio" #: front/src/components/library/Library.vue:13 #: src/components/library/Radios.vue:142 +#: front/src/components/mixins/Translations.vue:104 +#: front/src/components/mixins/Translations.vue:105 msgctxt "*/*/*" msgid "Radios" msgstr "Radia" -#: front/src/components/mixins/Translations.vue:92 -#: front/src/components/mixins/Translations.vue:93 -msgctxt "Content/OAuth Scopes/Label" -msgid "Radios" -msgstr "Radia" - #: front/src/components/auth/ApplicationForm.vue:151 msgctxt "Content/OAuth Scopes/Label/Verb" msgid "Read" @@ -3327,15 +3573,15 @@ msgctxt "Content/Moderation/*/Noun" msgid "Reason" msgstr "" -#: front/src/views/admin/moderation/AccountsDetail.vue:251 -#: front/src/views/admin/moderation/DomainsDetail.vue:179 +#: front/src/views/admin/moderation/AccountsDetail.vue:252 +#: front/src/views/admin/moderation/DomainsDetail.vue:216 msgctxt "Content/Moderation/Table.Label/Noun" msgid "Received library follows" msgstr "Wprowadź adres URL biblioteki" -#: front/src/components/manage/moderation/DomainsTable.vue:40 -#: front/src/components/mixins/Translations.vue:62 -#: front/src/components/mixins/Translations.vue:63 +#: front/src/components/manage/moderation/DomainsTable.vue:48 +#: front/src/components/mixins/Translations.vue:74 +#: front/src/components/mixins/Translations.vue:75 msgctxt "Content/Moderation/*/Noun" msgid "Received messages" msgstr "" @@ -3355,6 +3601,12 @@ msgctxt "Content/Home/Title" msgid "Recently added" msgstr "Ostatnio dodane" +#: front/src/components/Home.vue:167 +#, fuzzy +msgctxt "Content/Home/Title" +msgid "Recently added albums" +msgstr "Ostatnio dodane" + #: front/src/components/library/Home.vue:11 msgctxt "Content/Home/Title" msgid "Recently favorited" @@ -3383,14 +3635,14 @@ msgctxt "Popup/*/Message.Title" msgid "Refresh error" msgstr "OdÅ›wież" -#: front/src/views/admin/library/AlbumDetail.vue:50 -#: front/src/views/admin/library/ArtistDetail.vue:49 -#: front/src/views/admin/library/TrackDetail.vue:49 +#: front/src/views/admin/library/AlbumDetail.vue:56 +#: front/src/views/admin/library/ArtistDetail.vue:54 +#: front/src/views/admin/library/TrackDetail.vue:55 msgctxt "Content/Moderation/Button/Verb" msgid "Refresh from remote server" msgstr "" -#: front/src/views/admin/moderation/DomainsDetail.vue:127 +#: front/src/views/admin/moderation/DomainsDetail.vue:164 msgctxt "Content/Moderation/Button.Label/Verb" msgid "Refresh node info" msgstr "" @@ -3402,9 +3654,7 @@ msgstr "MalejÄ…co" #: front/src/components/federation/FetchButton.vue:80 msgctxt "Popup/*/Message.Content" -msgid "" -"Refresh request wasn't proceed in time by our server. It will be processed " -"later." +msgid "Refresh request wasn't proceed in time by our server. It will be processed later." msgstr "" #: front/src/components/federation/FetchButton.vue:16 @@ -3427,16 +3677,13 @@ msgctxt "Popup/*/Title" msgid "Refreshing object from remote…" msgstr "" -#: front/src/components/auth/Signup.vue:9 -msgctxt "Content/Signup/Form/Paragraph" -msgid "" -"Registration are closed on this instance, you will need an invitation code " -"to signup." -msgstr "" -"Rejestracja na tej instancji jest wyÅ‚Ä…czona, potrzebujesz kodu " -"zapraszajÄ…cego aby zarejestrować siÄ™." +#: front/src/components/About.vue:86 +#, fuzzy +msgctxt "*/*/*" +msgid "Registrations" +msgstr "Administracja" -#: front/src/components/manage/users/UsersTable.vue:71 +#: front/src/components/manage/users/UsersTable.vue:72 msgctxt "Content/Admin/Table, User role" msgid "Regular user" msgstr "zwykÅ‚y użytkownik" @@ -3461,8 +3708,8 @@ msgid "Rejected" msgstr "Odrzucono" #: front/src/components/manage/library/AlbumsTable.vue:43 -#: front/src/components/mixins/Translations.vue:44 src/edits.js:28 -#: front/src/components/mixins/Translations.vue:45 +#: front/src/components/mixins/Translations.vue:54 src/edits.js:43 +#: front/src/components/mixins/Translations.vue:55 msgctxt "Content/*/*/Noun" msgid "Release date" msgstr "Ostatnia aktualizacja:" @@ -3472,6 +3719,11 @@ msgctxt "Content/Library/Paragraph" msgid "Remaining storage space" msgstr "" +#: front/src/views/Notifications.vue:18 src/views/Notifications.vue:52 +msgctxt "Content/Notifications/Label" +msgid "Remind me in:" +msgstr "" + #: front/src/views/content/remote/Home.vue:6 msgctxt "Content/Library/Title/Noun" msgid "Remote libraries" @@ -3479,12 +3731,8 @@ msgstr "Zdalne biblioteki" #: front/src/views/content/remote/Home.vue:7 msgctxt "Content/Library/Paragraph" -msgid "" -"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." -msgstr "" -"Zdalne biblioteki należą do innych użytkowników sieci. Możesz uzyskać do " -"nich dostÄ™p jeżeli sÄ… publiczne lub zostaÅ‚ Ci on przyznany." +msgid "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." +msgstr "Zdalne biblioteki należą do innych użytkowników sieci. Możesz uzyskać do nich dostÄ™p jeżeli sÄ… publiczne lub zostaÅ‚ Ci on przyznany." #: front/src/components/library/radios/Filter.vue:59 msgctxt "Content/Radio/Button.Label/Verb" @@ -3501,6 +3749,13 @@ msgctxt "Content/Moderation/Button.Label" msgid "Remove filter" msgstr "UsuÅ„ awatar" +#: front/src/components/manage/moderation/DomainsTable.vue:198 +#: front/src/views/admin/moderation/DomainsDetail.vue:39 +#, fuzzy +msgctxt "Content/Moderation/Action/Verb" +msgid "Remove from allow-list" +msgstr "UsuÅ„ z ulubionych" + #: front/src/components/favorites/TrackFavoriteIcon.vue:26 msgctxt "Content/Track/Icon.Tooltip/Verb" msgid "Remove from favorites" @@ -3508,46 +3763,104 @@ msgstr "UsuÅ„ z ulubionych" #: front/src/views/content/libraries/Quota.vue:38 msgctxt "Popup/Library/Paragraph" -msgid "" -"Removes uploaded but yet to be processed tracks completely, adding the " -"corresponding data to your quota." -msgstr "" -"Ta opcja usunie utwory które zostaÅ‚y wysÅ‚ane, ale nie zostaÅ‚y jeszcze " -"przetworzone. Bezpowrotnie usunie te pliki i zostanie Ci przywrócona " -"odpowiednia przestrzeÅ„." +msgid "Removes uploaded but yet to be processed tracks completely, adding the corresponding data to your quota." +msgstr "Ta opcja usunie utwory które zostaÅ‚y wysÅ‚ane, ale nie zostaÅ‚y jeszcze przetworzone. Bezpowrotnie usunie te pliki i zostanie Ci przywrócona odpowiednia przestrzeÅ„." #: front/src/views/content/libraries/Quota.vue:64 msgctxt "Popup/Library/Paragraph" -msgid "" -"Removes uploaded tracks skipped during the import processes completely, " -"adding the corresponding data to your quota." -msgstr "" -"Ta opcja usunie utwory które zostaÅ‚y wysÅ‚ane, lecz zostaÅ‚y z jakiegoÅ› powodu" -" pominiÄ™te w procesie importowania. Bezpowrotnie usunie te pliki i zostanie " -"Ci przywrócona odpowiednia przestrzeÅ„." +msgid "Removes uploaded tracks skipped during the import processes completely, adding the corresponding data to your quota." +msgstr "Ta opcja usunie utwory które zostaÅ‚y wysÅ‚ane, lecz zostaÅ‚y z jakiegoÅ› powodu pominiÄ™te w procesie importowania. Bezpowrotnie usunie te pliki i zostanie Ci przywrócona odpowiednia przestrzeÅ„." #: front/src/views/content/libraries/Quota.vue:90 msgctxt "Popup/Library/Paragraph" -msgid "" -"Removes uploaded tracks that could not be processed by the server " -"completely, adding the corresponding data to your quota." +msgid "Removes uploaded tracks that could not be processed by the server completely, adding the corresponding data to your quota." +msgstr "Ta opcja usunie utwory które zostaÅ‚y wysÅ‚ane, ale nie zostaÅ‚y jeszcze przetworzone. Bezpowrotnie usunie te pliki i zostanie Ci przywrócona odpowiednia przestrzeÅ„." + +#: front/src/components/audio/PlayButton.vue:94 +#, fuzzy +msgctxt "*/Queue/Dropdown/Button/Title" +msgid "Replace current queue" +msgstr "Dodaj do kolejki" + +#: front/src/components/mixins/Report.vue:6 src/components/mixins/Report.vue:7 +msgctxt "*/Moderation/*/Verb" +msgid "Report @%{ username }…" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:5 +msgctxt "Content/Moderation/Card/Short" +msgid "Report %{ id }" +msgstr "" + +#: front/src/components/moderation/ReportModal.vue:139 +msgctxt "*/Moderation/Message" +msgid "Report successfully submitted, thank you" +msgstr "" + +#: front/src/components/mixins/Report.vue:36 +#: src/components/mixins/Report.vue:37 +#, fuzzy +msgctxt "*/Moderation/*/Verb" +msgid "Report this album…" +msgstr "Odtwórz utwór" + +#: front/src/components/mixins/Report.vue:50 +#: src/components/mixins/Report.vue:51 +#, fuzzy +msgctxt "*/Moderation/*/Verb" +msgid "Report this artist…" +msgstr "Odtwórz utwór" + +#: front/src/components/mixins/Report.vue:72 +#: src/components/mixins/Report.vue:73 +#, fuzzy +msgctxt "*/Moderation/*/Verb" +msgid "Report this library…" +msgstr "Czy chcesz usunąć tÄ™ bibliotekÄ™?" + +#: front/src/components/mixins/Report.vue:61 +#: src/components/mixins/Report.vue:62 +#, fuzzy +msgctxt "*/Moderation/*/Verb" +msgid "Report this playlist…" +msgstr "Dodaj do tej playlisty" + +#: front/src/components/mixins/Report.vue:23 +#: src/components/mixins/Report.vue:24 +#, fuzzy +msgctxt "*/Moderation/*/Verb" +msgid "Report this track…" +msgstr "Odtwórz utwór" + +#: front/src/components/audio/PlayButton.vue:95 +msgctxt "*/Moderation/*/Button/Label,Verb" +msgid "Report…" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:117 +msgctxt "Content/*/*/Short" +msgid "Reported object" msgstr "" -"Ta opcja usunie utwory które zostaÅ‚y wysÅ‚ane, ale nie zostaÅ‚y jeszcze " -"przetworzone. Bezpowrotnie usunie te pliki i zostanie Ci przywrócona " -"odpowiednia przestrzeÅ„." -#: front/src/components/auth/SubsonicTokenForm.vue:33 -#: front/src/components/auth/SubsonicTokenForm.vue:36 +#: front/src/views/admin/moderation/Base.vue:5 +#: front/src/views/admin/moderation/ReportsList.vue:3 +#: front/src/views/admin/moderation/ReportsList.vue:208 +msgctxt "*/Moderation/*/Noun" +msgid "Reports" +msgstr "" + +#: front/src/components/auth/SubsonicTokenForm.vue:38 +#: front/src/components/auth/SubsonicTokenForm.vue:41 msgctxt "*/Settings/Button.Label/Verb" msgid "Request a new password" msgstr "PoproÅ› o nowe hasÅ‚o" -#: front/src/components/auth/SubsonicTokenForm.vue:34 +#: front/src/components/auth/SubsonicTokenForm.vue:39 msgctxt "Popup/Settings/Title" msgid "Request a new Subsonic API password?" msgstr "Poprosić o nowe hasÅ‚o API Subsonic?" -#: front/src/components/auth/SubsonicTokenForm.vue:42 +#: front/src/components/auth/SubsonicTokenForm.vue:47 msgctxt "Content/Settings/Button.Label/Verb" msgid "Request a password" msgstr "PoproÅ› o nowe hasÅ‚o" @@ -3557,35 +3870,52 @@ msgctxt "Popup/*/Loading.Title" msgid "Requesting a fetch…" msgstr "" -#: front/src/components/library/EditForm.vue:82 +#: front/src/components/library/EditForm.vue:94 msgctxt "Content/Library/Button.Label" -msgid "Reset to initial value: %{ value }" +msgid "Reset to initial value" msgstr "" -#: front/src/components/auth/Login.vue:35 src/views/auth/PasswordReset.vue:4 -#: front/src/views/auth/PasswordReset.vue:53 +#: front/src/components/auth/LoginForm.vue:34 +#: src/views/auth/PasswordReset.vue:4 front/src/views/auth/PasswordReset.vue:53 msgctxt "*/Login/*/Verb" msgid "Reset your password" msgstr "Ustaw nowe hasÅ‚o" +#: front/src/components/manage/moderation/ReportCard.vue:83 +#, fuzzy +msgctxt "Content/*/*/Noun" +msgid "Resolution date" +msgstr "Data utworzenia" + +#: front/src/components/manage/moderation/ReportCard.vue:218 +msgctxt "Content/*/Button.Label/Verb" +msgid "Resolve" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:62 +#: front/src/views/admin/moderation/ReportsList.vue:20 +msgctxt "Content/*/*/Short" +msgid "Resolved" +msgstr "" + #: front/src/views/content/libraries/FilesTable.vue:223 msgctxt "Content/Library/Dropdown/Verb" msgid "Restart import" msgstr "Uruchom importowanie ponownie" +#: front/src/components/library/EditForm.vue:31 +msgctxt "Content/Library/Button.Label" +msgid "Restrict to unreviewed edits" +msgstr "" + #: front/src/components/favorites/List.vue:39 -#: src/components/library/Albums.vue:30 -#: front/src/components/library/Artists.vue:30 +#: src/components/library/Albums.vue:34 +#: front/src/components/library/Artists.vue:34 #: src/components/library/Radios.vue:52 front/src/views/playlists/List.vue:32 msgctxt "Content/Search/Dropdown.Label/Noun" msgid "Results per page" msgstr "Wyniki na stronÄ™" -#: front/src/components/library/EditForm.vue:31 -msgctxt "Content/Library/Button.Label" -msgid "Retrict to unreviewed edits" -msgstr "" - #: front/src/views/auth/EmailConfirm.vue:17 msgctxt "Content/Signup/Link/Verb" msgid "Return to login" @@ -3616,52 +3946,53 @@ msgctxt "Content/Moderation/Card.Title/Noun" msgid "Rule" msgstr "" -#: front/src/components/admin/SettingsGroup.vue:67 +#: front/src/components/About.vue:28 src/components/About.vue:56 +msgctxt "Content/About/Header" +msgid "Rules" +msgstr "" + +#: front/src/components/admin/SettingsGroup.vue:75 #: front/src/components/library/radios/Builder.vue:34 msgctxt "Content/*/Button.Label/Verb" msgid "Save" msgstr "Zapisz" -#: front/src/views/content/remote/Card.vue:175 +#: front/src/views/content/remote/Card.vue:203 msgctxt "Content/Library/Message" msgid "Scan launched" msgstr "Uruchomiono skanowanie" -#: front/src/views/content/remote/Card.vue:67 +#: front/src/views/content/remote/Card.vue:80 msgctxt "Content/Library/Card.Button.Label/Verb" msgid "Scan now" msgstr "Odtwórz teraz" -#: front/src/views/content/remote/Card.vue:35 +#: front/src/views/content/remote/Card.vue:48 msgctxt "Content/Library/Card.List item" msgid "Scan pending" msgstr "RosnÄ…co" -#: front/src/views/content/remote/Card.vue:176 +#: front/src/views/content/remote/Card.vue:204 msgctxt "Content/Library/Message" msgid "Scan skipped (previous scan is too recent)" msgstr "Skanowanie pominÄ™te (poprzednie skanowanie byÅ‚o zbyt wczeÅ›nie)" -#: front/src/views/content/remote/Card.vue:47 +#: front/src/views/content/remote/Card.vue:60 msgctxt "Content/Library/Card.List item" msgid "Scanned" msgstr "Uruchomiono skanowanie" -#: front/src/views/content/remote/Card.vue:51 +#: front/src/views/content/remote/Card.vue:64 msgctxt "Content/Library/Card.List item" msgid "Scanned with errors" msgstr "Zeskanowano z bÅ‚Ä™dami" -#: front/src/views/content/remote/Card.vue:39 +#: front/src/views/content/remote/Card.vue:52 msgctxt "Content/Library/Card.List item" msgid "Scanning… (%{ progress }%)" -msgstr "Skanowanie... (%{ progress }%)" +msgstr "Skanowanie… (%{ progress }%)" #: front/src/components/auth/ApplicationForm.vue:22 -msgctxt "Content/Applications/Input.Label/Noun" -msgid "Scopes" -msgstr "" - #: front/src/components/auth/Settings.vue:226 msgctxt "Content/*/*/Noun" msgid "Scopes" @@ -3674,12 +4005,14 @@ msgstr "" #: front/src/components/manage/library/ArtistsTable.vue:5 #: front/src/components/manage/library/EditsCardList.vue:6 #: front/src/components/manage/library/LibrariesTable.vue:5 +#: front/src/components/manage/library/TagsTable.vue:5 #: front/src/components/manage/library/TracksTable.vue:5 #: front/src/components/manage/library/UploadsTable.vue:5 #: front/src/components/manage/moderation/AccountsTable.vue:5 #: front/src/components/manage/moderation/DomainsTable.vue:5 #: front/src/components/manage/users/InvitationsTable.vue:5 #: front/src/components/manage/users/UsersTable.vue:5 +#: front/src/views/admin/moderation/ReportsList.vue:8 #: front/src/views/content/libraries/FilesTable.vue:5 #: src/views/playlists/List.vue:13 msgctxt "Content/Search/Input.Label/Noun" @@ -3692,6 +4025,7 @@ msgid "Search a remote library" msgstr "Wyszukaj w zdalnej bibliotece" #: front/src/components/manage/library/EditsCardList.vue:211 +#: front/src/views/admin/moderation/ReportsList.vue:207 msgctxt "Content/Search/Input.Placeholder" msgid "Search by account, summary, domain…" msgstr "Szukaj wedÅ‚ug tytuÅ‚u, wykonawcy, domeny…" @@ -3726,7 +4060,13 @@ msgctxt "Content/Search/Input.Placeholder" msgid "Search by domain, username, bio…" msgstr "Szukaj wedÅ‚ug nazwy użytkownika, adresu e-mail, kodu…" -#: front/src/components/manage/moderation/DomainsTable.vue:151 +#: front/src/components/manage/library/TagsTable.vue:165 +#, fuzzy +msgctxt "Content/Search/Input.Placeholder" +msgid "Search by name" +msgstr "Szukaj wedÅ‚ug nazwy użytkownika, adresu e-mail, nazwy…" + +#: front/src/components/manage/moderation/DomainsTable.vue:168 msgctxt "Content/Search/Input.Placeholder" msgid "Search by name…" msgstr "Szukaj wedÅ‚ug nazwy użytkownika, adresu e-mail, nazwy…" @@ -3741,12 +4081,12 @@ msgctxt "Content/Admin/Input.Placeholder/Verb" msgid "Search by username, e-mail address, code…" msgstr "Szukaj wedÅ‚ug nazwy użytkownika, adresu e-mail, kodu…" -#: front/src/components/manage/users/UsersTable.vue:163 +#: front/src/components/manage/users/UsersTable.vue:164 msgctxt "Content/Search/Input.Placeholder" msgid "Search by username, e-mail address, name…" msgstr "Szukaj wedÅ‚ug nazwy użytkownika, adresu e-mail, nazwy…" -#: front/src/components/audio/SearchBar.vue:20 +#: front/src/components/audio/SearchBar.vue:27 msgctxt "Sidebar/Search/Input.Placeholder" msgid "Search for artists, albums, tracks…" msgstr "Szukaj wykonawców, albumów, utworów…" @@ -3756,16 +4096,30 @@ msgctxt "Content/Search/Title" msgid "Search for some music" msgstr "Wyszukaj trochÄ™ muzyki" -#: front/src/components/library/AlbumBase.vue:57 -#: front/src/components/library/ArtistBase.vue:68 -#: front/src/components/library/TrackBase.vue:76 +#: front/src/components/library/TagsSelector.vue:6 +#, fuzzy +msgctxt "*/Dropdown/Placeholder/Verb" +msgid "Search for tags…" +msgstr "Szukaj wedÅ‚ug nazwy użytkownika, adresu e-mail, nazwy…" + +#: front/src/components/library/AlbumBase.vue:66 +#: front/src/components/library/ArtistBase.vue:77 +#: front/src/components/library/TrackBase.vue:82 +#, fuzzy +msgctxt "Content/*/Button.Label/Verb" +msgid "Search on Discogs" +msgstr "Wyszukaj trochÄ™ muzyki" + +#: front/src/components/library/AlbumBase.vue:58 +#: front/src/components/library/ArtistBase.vue:69 +#: front/src/components/library/TrackBase.vue:74 msgctxt "Content/*/Button.Label/Verb" msgid "Search on Wikipedia" msgstr "Szukaj na Wikipedii" #: front/src/components/library/Library.vue:35 -#: src/views/admin/library/Base.vue:32 -#: front/src/views/admin/moderation/Base.vue:22 +#: src/views/admin/library/Base.vue:35 +#: front/src/views/admin/moderation/Base.vue:44 #: src/views/admin/users/Base.vue:21 front/src/views/content/Base.vue:19 msgctxt "Menu/*/Hidden text" msgid "Secondary menu" @@ -3776,6 +4130,26 @@ msgctxt "Content/Admin/Menu.Title" msgid "Sections" msgstr "Sekcje" +#: front/src/components/ShortcutsModal.vue:108 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek backwards 30s" +msgstr "" + +#: front/src/components/ShortcutsModal.vue:100 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek backwards 5s" +msgstr "" + +#: front/src/components/ShortcutsModal.vue:112 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek forwards 30s" +msgstr "" + +#: front/src/components/ShortcutsModal.vue:104 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek forwards 5s" +msgstr "" + #: front/src/components/library/radios/Builder.vue:46 msgctxt "Content/Radio/Dropdown.Placeholder/Verb" msgid "Select a filter" @@ -3795,9 +4169,14 @@ msgctxt "Content/*/Link/Verb" msgid "Select only current page" msgstr "Zaznacz tylko obecnÄ… stronÄ™" -#: front/src/components/Sidebar.vue:43 src/components/Sidebar.vue:108 -#: front/src/components/manage/users/UsersTable.vue:181 -#: front/src/views/admin/moderation/AccountsDetail.vue:506 +#: front/src/components/Home.vue:43 +msgctxt "Content/Home/Link" +msgid "Server rules" +msgstr "" + +#: front/src/components/Sidebar.vue:43 src/components/Sidebar.vue:112 +#: front/src/components/manage/users/UsersTable.vue:182 +#: front/src/views/admin/moderation/AccountsDetail.vue:526 msgctxt "*/*/*/Noun" msgid "Settings" msgstr "Ustawienia" @@ -3819,18 +4198,25 @@ msgstr "UdostÄ™pnij odnoÅ›nik" #: front/src/views/content/libraries/Detail.vue:15 msgctxt "Content/Library/Paragraph" -msgid "" -"Share this link with other users so they can request access to your library." -msgstr "" -"Podziel siÄ™ tym odnoÅ›nikiem z innymi użytkownikami, aby mogli poprosić od " -"dostÄ™p do Twojej biblioteki." +msgid "Share this link with other users so they can request access to your library." +msgstr "Podziel siÄ™ tym odnoÅ›nikiem z innymi użytkownikami, aby mogli poprosić od dostÄ™p do Twojej biblioteki." #: front/src/views/content/libraries/Detail.vue:14 -#: front/src/views/content/remote/Card.vue:77 +#: front/src/views/content/remote/Card.vue:90 msgctxt "Content/Library/Title" msgid "Sharing link" msgstr "OdnoÅ›nik do udostÄ™pnienia" +#: front/src/components/audio/EmbedWizard.vue:5 +msgctxt "Content/Embed/Message" +msgid "Sharing will not work because this pod doesn't allow anonymous users to access content." +msgstr "" + +#: front/src/components/About.vue:156 +msgctxt "*/*/*/Verb" +msgid "Show" +msgstr "" + #: front/src/components/audio/album/Card.vue:38 #, fuzzy msgctxt "Content/Album/Card.Link/Verb" @@ -3840,11 +4226,11 @@ msgstr[0] "Pokaż %{ count } utwór wiÄ™cej" msgstr[1] "Pokaż %{ count } utwory wiÄ™cej" msgstr[2] "Pokaż %{ count } utworów wiÄ™cej" -#: front/src/components/audio/artist/Card.vue:30 +#: front/src/components/tags/List.vue:11 #, fuzzy -msgctxt "Content/Artist/Card.Link" -msgid "Show 1 more album" -msgid_plural "Show %{ count } more albums" +msgctxt "Content/*/Button/Label/Verb" +msgid "Show 1 more tag" +msgid_plural "Show %{ count } more tags" msgstr[0] "Pokaż 1 kolejny album" msgstr[1] "Pokaż %{ count } kolejne albumy" msgstr[2] "Pokaż %{ count } kolejnych albumów" @@ -3854,17 +4240,28 @@ msgctxt "Content/Library/Button.Label" msgid "Show all edits" msgstr "" -#: front/src/components/ShortcutsModal.vue:42 +#: front/src/components/ShortcutsModal.vue:60 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Show available keyboard shortcuts" msgstr "" -#: front/src/views/Notifications.vue:7 +#: front/src/components/common/ExpandableDiv.vue:7 +msgctxt "*/*/Button,Label" +msgid "Show less" +msgstr "" + +#: front/src/components/common/ExpandableDiv.vue:8 +#, fuzzy +msgctxt "*/*/Button,Label" +msgid "Show more" +msgstr "Pokaż 1 kolejny album" + +#: front/src/views/Notifications.vue:72 msgctxt "Content/Notifications/Form.Label/Verb" msgid "Show read notifications" msgstr "Pokaż przeczytane powiadomienia" -#: front/src/components/forms/PasswordInput.vue:26 +#: front/src/components/forms/PasswordInput.vue:42 msgctxt "Content/Settings/Button.Tooltip/Verb" msgid "Show/hide password" msgstr "Pokaż/ukryj hasÅ‚o" @@ -3873,59 +4270,67 @@ msgstr "Pokaż/ukryj hasÅ‚o" #: front/src/components/manage/library/ArtistsTable.vue:84 #: front/src/components/manage/library/EditsCardList.vue:72 #: front/src/components/manage/library/LibrariesTable.vue:110 +#: front/src/components/manage/library/TagsTable.vue:79 #: front/src/components/manage/library/TracksTable.vue:95 #: front/src/components/manage/library/UploadsTable.vue:144 #: front/src/components/manage/moderation/AccountsTable.vue:88 -#: front/src/components/manage/moderation/DomainsTable.vue:74 +#: front/src/components/manage/moderation/DomainsTable.vue:85 #: front/src/components/manage/users/InvitationsTable.vue:76 -#: front/src/components/manage/users/UsersTable.vue:87 +#: front/src/components/manage/users/UsersTable.vue:88 #: front/src/views/content/libraries/FilesTable.vue:117 msgctxt "Content/*/Paragraph" msgid "Showing results %{ start }-%{ end } on %{ total }" msgstr "WyÅ›wietlanie wyników %{ start }-%{ end } z %{ total }" -#: front/src/components/ShortcutsModal.vue:83 +#: front/src/components/ShortcutsModal.vue:140 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Shuffle queue" msgstr "Wymieszaj kolejkÄ™" -#: front/src/components/audio/Player.vue:641 +#: front/src/components/audio/Player.vue:667 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Shuffle your queue" msgstr "Wymieszaj kolejkÄ™" -#: front/src/components/auth/Signup.vue:97 +#: front/src/components/Home.vue:103 +#, fuzzy +msgctxt "*/Signup/Title" +msgid "Sign up" +msgstr "Rejestracja" + +#: front/src/views/auth/Signup.vue:37 msgctxt "*/Signup/Title" msgid "Sign Up" msgstr "Rejestracja" +#: front/src/components/Home.vue:107 +msgctxt "Content/Home/Paragraph" +msgid "Sign up now to keep a track of your favorites, create playlists, discover new content and much more!" +msgstr "" + #: front/src/components/manage/users/UsersTable.vue:40 msgctxt "Content/Admin/Table.Label/Short, Noun (Value is a date)" msgid "Sign-up" msgstr "Rejestracja" -#: front/src/components/mixins/Translations.vue:57 -#: front/src/views/admin/moderation/AccountsDetail.vue:197 -#: front/src/components/mixins/Translations.vue:58 +#: front/src/components/mixins/Translations.vue:69 +#: front/src/views/admin/moderation/AccountsDetail.vue:198 +#: front/src/components/mixins/Translations.vue:70 msgctxt "Content/Admin/Table.Label/Noun" msgid "Sign-up date" msgstr "Data rejestracji" +#: front/src/components/library/FileUpload.vue:94 +#: front/src/components/library/TrackDetail.vue:39 #: front/src/components/manage/library/UploadsTable.vue:65 +#: front/src/components/mixins/Translations.vue:66 #: front/src/views/admin/library/UploadDetail.vue:219 +#: front/src/views/content/libraries/FilesTable.vue:61 +#: front/src/components/mixins/Translations.vue:67 msgctxt "Content/*/*/Noun" msgid "Size" msgstr "Rozmiar" -#: front/src/components/library/FileUpload.vue:94 -#: front/src/components/library/TrackDetail.vue:39 -#: front/src/components/mixins/Translations.vue:54 -#: front/src/views/content/libraries/FilesTable.vue:61 -#: front/src/components/mixins/Translations.vue:55 -msgctxt "Content/Library/*/in MB" -msgid "Size" -msgstr "Rozmiar" - #: front/src/components/manage/library/UploadsTable.vue:24 #: front/src/components/mixins/Translations.vue:24 #: front/src/views/content/libraries/FilesTable.vue:15 @@ -3939,7 +4344,7 @@ msgctxt "Content/Library/Label" msgid "Skipped files" msgstr "PominiÄ™te pliki" -#: front/src/views/admin/moderation/DomainsDetail.vue:89 +#: front/src/views/admin/moderation/DomainsDetail.vue:126 msgctxt "Content/Moderation/Table.Label" msgid "Software" msgstr "" @@ -3954,87 +4359,65 @@ msgctxt "Content/*/Paragraph" msgid "Sorry, the page you asked for does not exist:" msgstr "Przepraszamy, strona której szukasz nie istnieje:" -#: front/src/components/Footer.vue:49 +#: front/src/components/Footer.vue:57 msgctxt "Footer/*/List item.Link" msgid "Source code" msgstr "Kod źródÅ‚owy" #: front/src/components/auth/Profile.vue:23 -#: front/src/components/manage/users/UsersTable.vue:70 +#: front/src/components/manage/users/UsersTable.vue:71 msgctxt "Content/Profile/User role" msgid "Staff member" msgstr "CzÅ‚onek administracji" -#: front/src/components/audio/PlayButton.vue:23 +#: front/src/components/audio/PlayButton.vue:27 #: src/components/radios/Button.vue:4 msgctxt "*/Queue/Button.Label/Short, Verb" msgid "Start radio" msgstr "Zatrzymaj radio" -#: front/src/views/admin/Settings.vue:86 -msgctxt "Content/Admin/Menu" +#: front/src/components/About.vue:170 src/components/Home.vue:53 +#: front/src/views/admin/Settings.vue:87 +#, fuzzy +msgctxt "Content/Home/Header" msgid "Statistics" msgstr "Statystyki" -#: front/src/views/admin/moderation/AccountsDetail.vue:490 +#: front/src/views/admin/moderation/AccountsDetail.vue:510 msgctxt "Content/Moderation/Help text" -msgid "" -"Statistics are computed from known activity and content on your instance, " -"and do not reflect general activity for this account" +msgid "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this account" msgstr "" -#: front/src/views/admin/moderation/DomainsDetail.vue:371 +#: front/src/views/admin/moderation/DomainsDetail.vue:418 msgctxt "Content/Moderation/Help text" -msgid "" -"Statistics are computed from known activity and content on your instance, " -"and do not reflect general activity for this domain" +msgid "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this domain" msgstr "" -#: front/src/views/admin/library/AlbumDetail.vue:329 -#: front/src/views/admin/library/ArtistDetail.vue:328 -#: front/src/views/admin/library/LibraryDetail.vue:316 -#: front/src/views/admin/library/TrackDetail.vue:371 +#: front/src/views/admin/library/AlbumDetail.vue:346 +#: front/src/views/admin/library/ArtistDetail.vue:345 +#: front/src/views/admin/library/LibraryDetail.vue:356 +#: front/src/views/admin/library/TagDetail.vue:210 +#: front/src/views/admin/library/TrackDetail.vue:389 #: front/src/views/admin/library/UploadDetail.vue:335 msgctxt "Content/Moderation/Help text" -msgid "" -"Statistics are computed from known activity and content on your instance, " -"and do not reflect general activity for this object" +msgid "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" msgstr "" -#: front/src/views/admin/moderation/DomainsDetail.vue:115 -msgctxt "Content/Moderation/Table.Label (Value is Error message)" -msgid "Status" -msgstr "Stan" - #: front/src/components/library/FileUpload.vue:95 -msgctxt "Content/Library/Table.Label (Value is Uploading/Uploaded/Error)" -msgid "Status" -msgstr "Stan" - -#: front/src/views/content/libraries/Detail.vue:28 -msgctxt "Content/Library.Federation/Table.Label (Value is Approved/Rejected)" -msgid "Status" -msgstr "Stan" - +#: front/src/components/manage/library/EditsCardList.vue:12 +#: front/src/components/manage/moderation/ReportCard.vue:57 #: front/src/components/manage/users/InvitationsTable.vue:17 #: front/src/components/manage/users/InvitationsTable.vue:39 -msgctxt "Content/Admin/*/Noun (Value is Used/Not used)" -msgid "Status" -msgstr "Stan" - #: front/src/components/manage/users/UsersTable.vue:43 -msgctxt "Content/Admin/Table.Label/Noun (Value is Regular user/Admin)" -msgid "Status" -msgstr "Stan" - -#: front/src/components/manage/library/EditsCardList.vue:12 -msgctxt "" -"Content/Search/Dropdown.Label (Value is All/Pending " -"review/Approved/Rejected)" +#: front/src/views/admin/moderation/DomainsDetail.vue:152 +#: front/src/views/admin/moderation/ReportsList.vue:14 +#: front/src/views/content/libraries/Detail.vue:28 +#, fuzzy +msgctxt "*/*/*" msgid "Status" msgstr "Stan" -#: front/src/components/Sidebar.vue:174 src/components/radios/Button.vue:3 +#: front/src/components/Sidebar.vue:178 src/components/radios/Button.vue:3 msgctxt "*/Player/Button.Label/Short, Verb" msgid "Stop radio" msgstr "Zatrzymaj radio" @@ -4044,7 +4427,7 @@ msgctxt "*/*/Button.Label/Verb" msgid "Submit" msgstr "WyÅ›lij" -#: front/src/components/library/EditForm.vue:98 +#: front/src/components/library/EditForm.vue:110 msgctxt "Content/Library/Button.Label/Verb" msgid "Submit and apply edit" msgstr "" @@ -4054,12 +4437,24 @@ msgctxt "Content/Library/Button.Label" msgid "Submit another edit" msgstr "" -#: front/src/components/library/EditForm.vue:99 +#: front/src/components/moderation/ReportModal.vue:64 +#, fuzzy +msgctxt "Popup/*/Button.Label" +msgid "Submit report" +msgstr "WyÅ›lij" + +#: front/src/components/library/EditForm.vue:111 msgctxt "Content/Library/Button.Label/Verb" msgid "Submit suggestion" msgstr "" -#: front/src/views/admin/Settings.vue:85 +#: front/src/components/manage/moderation/ReportCard.vue:17 +#, fuzzy +msgctxt "Content/Moderation/*" +msgid "Submitted by" +msgstr "WyÅ›lij" + +#: front/src/views/admin/Settings.vue:86 msgctxt "Content/Admin/Menu" msgid "Subsonic" msgstr "Subsonic" @@ -4099,16 +4494,21 @@ msgctxt "Content/Library/Tab.Title/Short" msgid "Summary" msgstr "Podsumowanie" -#: front/src/components/library/EditForm.vue:87 +#: front/src/components/library/EditForm.vue:99 msgctxt "*/*/*" msgid "Summary (optional)" msgstr "" -#: front/src/components/Footer.vue:39 +#: front/src/components/Footer.vue:47 msgctxt "Footer/*/Listitem.Link" msgid "Support forum" msgstr "" +#: front/src/views/Notifications.vue:10 +msgctxt "Content/Notifications/Header" +msgid "Support this Funkwhale pod" +msgstr "" + #: front/src/components/library/FileUpload.vue:85 msgctxt "Content/Library/Paragraph" msgid "Supported extensions: %{ extensions }" @@ -4119,25 +4519,47 @@ msgctxt "Content/Playlist/Paragraph" msgid "Syncing changes to server…" msgstr "Synchronizowanie zmian z serwerem…" -#: front/src/components/audio/EmbedWizard.vue:25 +#: front/src/components/audio/SearchBar.vue:35 +msgctxt "*/*/*/Noun" +msgid "Tag" +msgstr "" + +#: front/src/views/admin/library/TagDetail.vue:61 +#, fuzzy +msgctxt "Content/Moderation/Title" +msgid "Tag data" +msgstr "TytuÅ‚ utworu" + +#: front/src/components/library/Albums.vue:23 +#: src/components/library/Artists.vue:15 +#: front/src/views/admin/library/Base.vue:23 +#: src/views/admin/library/TagsList.vue:24 front/src/edits.js:24 +#: src/edits.js:50 src/edits.js:91 src/entities.js:120 +msgctxt "*/*/*/Noun" +msgid "Tags" +msgstr "" + +#: front/src/components/mixins/Translations.vue:44 +#: front/src/components/mixins/Translations.vue:45 +#, fuzzy +msgctxt "Content/Moderation/Dropdown" +msgid "Takedown request" +msgstr "OczekujÄ…ce proÅ›by o możliwość Å›ledzenia" + +#: front/src/components/About.vue:35 src/components/About.vue:61 +msgctxt "Content/About/Header" +msgid "Terms and privacy policy" +msgstr "" + +#: front/src/components/audio/EmbedWizard.vue:35 #: front/src/components/common/CopyInput.vue:3 msgctxt "Content/*/Paragraph" msgid "Text copied to clipboard!" msgstr "Skopiowano tekst do schowka!" -#: front/src/components/Home.vue:26 -msgctxt "Content/Home/Paragraph" -msgid "" -"That's simple: we loved Grooveshark and we want to build something even " -"better." -msgstr "" -"To proste: kochamy Grooveshark i chcemy utworzyć coÅ› jeszcze lepszego." - -#: front/src/views/admin/library/AlbumDetail.vue:75 +#: front/src/views/admin/library/AlbumDetail.vue:81 msgctxt "Content/Moderation/Paragraph" -msgid "" -"The album will be removed, as well as associated uploads, tracks, favorites " -"and listening history. This action is irreversible." +msgid "The album will be removed, as well as associated uploads, tracks, favorites and listening history. This action is irreversible." msgstr "" #: front/src/components/auth/Authorize.vue:39 @@ -4145,18 +4567,15 @@ msgctxt "Content/Auth/Paragraph" msgid "The application is also requesting the following unknown permissions:" msgstr "" -#: front/src/views/admin/library/ArtistDetail.vue:74 +#: front/src/views/admin/library/ArtistDetail.vue:79 msgctxt "Content/Moderation/Paragraph" -msgid "" -"The artist will be removed, as well as associated uploads, tracks, albums, " -"favorites and listening history. This action is irreversible." +msgid "The artist will be removed, as well as associated uploads, tracks, albums, favorites and listening history. This action is irreversible." msgstr "" -#: front/src/components/Footer.vue:53 +#: front/src/components/Footer.vue:61 msgctxt "Footer/*/List item.Link" msgid "The funkwhale logo was kindly designed and provided by Francis Gading." -msgstr "" -"Logo Funkwhale zostaÅ‚o zaprojektowane i dostarczone przez Francisa Gadinga." +msgstr "Logo Funkwhale zostaÅ‚o zaprojektowane i dostarczone przez Francisa Gadinga." #: front/src/components/SetInstanceModal.vue:8 msgctxt "Popup/Instance/Error message.List item" @@ -4165,24 +4584,17 @@ msgstr "" #: front/src/views/content/libraries/Form.vue:34 msgctxt "Popup/Library/Paragraph" -msgid "" -"The library and all its tracks will be deleted. This can not be undone." -msgstr "" -"Biblioteka i wszystkie utwory z niej zostanÄ… usuniÄ™te. To dziaÅ‚anie jest " -"nieodwracalne." +msgid "The library and all its tracks will be deleted. This can not be undone." +msgstr "Biblioteka i wszystkie utwory z niej zostanÄ… usuniÄ™te. To dziaÅ‚anie jest nieodwracalne." #: front/src/views/admin/library/LibraryDetail.vue:61 msgctxt "Content/Moderation/Paragraph" -msgid "" -"The library will be removed, as well as associated uploads, and follows. " -"This action is irreversible." +msgid "The library will be removed, as well as associated uploads, and follows. This action is irreversible." msgstr "" #: front/src/components/library/ImportStatusModal.vue:140 msgctxt "Popup/Import/Error.Label" -msgid "" -"The metadata included in the file is invalid or some mandatory fields are " -"missing." +msgid "The metadata included in the file is invalid or some mandatory fields are missing." msgstr "" #: front/src/components/library/FileUpload.vue:38 @@ -4195,14 +4607,15 @@ msgctxt "Sidebar/Player/Error message.Paragraph" msgid "The next track will play automatically in a few seconds…" msgstr "" -#: front/src/components/Home.vue:116 -msgctxt "Content/Home/List item" -msgid "" -"The plaform is free and open-source, you can install it and modify it " -"without worries" +#: front/src/components/manage/moderation/NotesThread.vue:27 +msgctxt "Content/Moderation/Paragraph" +msgid "The note will be removed. This action is irreversible." +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:120 +msgctxt "Content/Moderation/Message" +msgid "The object associated with this report was deleted." msgstr "" -"Platforma jest wolna i otwartoźródÅ‚owa, każdy może bez zmartwieÅ„ " -"zainstalować i modyfikować jÄ…" #: front/src/components/playlists/Form.vue:14 msgctxt "Content/Playlist/Error message.Title" @@ -4216,46 +4629,42 @@ msgstr "" #: front/src/components/federation/FetchButton.vue:13 msgctxt "Popup/*/Message.Content" -msgid "" -"The remote server answered, but returned data was unsupported by Funkwhale." +msgid "The remote server answered, but returned data was unsupported by Funkwhale." msgstr "" #: front/src/components/federation/FetchButton.vue:44 msgctxt "*/*/Error" -msgid "The remote server didn't answered fast enough" +msgid "The remote server didn't respond quickly enough" msgstr "" #: front/src/components/federation/FetchButton.vue:50 msgctxt "*/*/Error" -msgid "The return server returned invalid JSON or JSON-LD data" +msgid "The remote server returned invalid JSON or JSON-LD data" msgstr "" #: front/src/components/manage/library/AlbumsTable.vue:189 msgctxt "Popup/*/Paragraph" -msgid "" -"The selected albums will be removed, as well as associated tracks, uploads, " -"favorites and listening history. This action is irreversible." +msgid "The selected albums will be removed, as well as associated tracks, uploads, favorites and listening history. This action is irreversible." msgstr "" #: front/src/components/manage/library/ArtistsTable.vue:179 msgctxt "Popup/*/Paragraph" -msgid "" -"The selected artist will be removed, as well as associated uploads, tracks, " -"albums, favorites and listening history. This action is irreversible." +msgid "The selected artist will be removed, as well as associated uploads, tracks, albums, favorites and listening history. This action is irreversible." msgstr "" #: front/src/components/manage/library/LibrariesTable.vue:206 msgctxt "Popup/*/Paragraph" -msgid "" -"The selected library will be removed, as well as associated uploads and " -"follows. This action is irreversible." +msgid "The selected library will be removed, as well as associated uploads and follows. This action is irreversible." +msgstr "" + +#: front/src/components/manage/library/TagsTable.vue:180 +msgctxt "Popup/*/Paragraph" +msgid "The selected tag will be removed and unlinked with existing content, if any. This action is irreversible." msgstr "" #: front/src/components/manage/library/TracksTable.vue:189 msgctxt "Popup/*/Paragraph" -msgid "" -"The selected tracks will be removed, as well as associated uploads, " -"favorites and listening history. This action is irreversible." +msgid "The selected tracks will be removed, as well as associated uploads, favorites and listening history. This action is irreversible." msgstr "" #: front/src/components/manage/library/UploadsTable.vue:256 @@ -4275,8 +4684,12 @@ msgstr "API Subsonic nie jest dostÄ™pne na tej instancji Funkwhale." #: front/src/components/library/EditCard.vue:96 msgctxt "Popup/Library/Paragraph" -msgid "" -"The suggestion will be completely removed, this action is irreversible." +msgid "The suggestion will be completely removed, this action is irreversible." +msgstr "" + +#: front/src/views/admin/library/TagDetail.vue:44 +msgctxt "Content/Moderation/Paragraph" +msgid "The tag will be removed and unlinked from any existing entity. This action is irreversible." msgstr "" #: front/src/components/playlists/PlaylistModal.vue:34 @@ -4289,11 +4702,9 @@ msgctxt "Sidebar/Player/Error message.Title" msgid "The track cannot be loaded" msgstr "" -#: front/src/views/admin/library/TrackDetail.vue:74 +#: front/src/views/admin/library/TrackDetail.vue:80 msgctxt "Content/Moderation/Paragraph" -msgid "" -"The track will be removed, as well as associated uploads, favorites and " -"listening history. This action is irreversible." +msgid "The track will be removed, as well as associated uploads, favorites and listening history. This action is irreversible." msgstr "" #: front/src/views/admin/library/UploadDetail.vue:68 @@ -4309,9 +4720,7 @@ msgstr "WysyÅ‚ane pliki muzyczne sÄ… w formacie OGG, FLAC lub MP3" #: front/src/views/content/Home.vue:4 msgctxt "Content/Library/Paragraph" msgid "There are various ways to grab new content and make it available here." -msgstr "" -"Oferujemy różne sposoby zdobywania nowej zawartoÅ›ci i udostÄ™pniania jej " -"tutaj" +msgstr "Oferujemy różne sposoby zdobywania nowej zawartoÅ›ci i udostÄ™pniania jej tutaj" #: front/src/components/manage/moderation/InstancePolicyForm.vue:66 msgctxt "Popup/Moderation/Paragraph" @@ -4328,23 +4737,36 @@ msgctxt "Content/Artist/Paragraph" msgid "This artist is present in the following libraries:" msgstr "Ten artysta wystÄ™puje w nastÄ™pujÄ…cych bibliotekach:" +#: front/src/components/manage/moderation/DomainsTable.vue:169 +#, fuzzy +msgctxt "Content/Moderation/Popup" +msgid "This domain is present in your allow-list" +msgstr "Ten artysta wystÄ™puje w nastÄ™pujÄ…cych bibliotekach:" + #: front/src/views/admin/moderation/AccountsDetail.vue:84 -#: front/src/views/admin/moderation/DomainsDetail.vue:48 +#: front/src/views/admin/moderation/DomainsDetail.vue:76 msgctxt "Content/Moderation/Card.Title" msgid "This domain is subject to specific moderation rules" msgstr "" +#: front/src/components/manage/moderation/InstancePolicyModal.vue:16 +msgctxt "Content/Moderation/Card.Title" +msgid "This entity is subject to specific moderation rules" +msgstr "" + #: front/src/views/content/Home.vue:9 msgctxt "Content/Library/Paragraph" msgid "This instance offers up to %{quota} of storage space for every user." +msgstr "Ta instancja oferuje maksymalnie %{quota} przestrzeni dla każdego użytkownika." + +#: front/src/components/auth/Settings.vue:300 +msgctxt "Popup/Settings/Paragraph" +msgid "This is irreversible and will permanently remove your data from our servers. You will we immediatly logged out." msgstr "" -"Ta instancja oferuje maksymalnie %{quota} przestrzeni dla każdego " -"użytkownika." #: front/src/components/auth/Settings.vue:165 msgctxt "Content/Settings/Paragraph" -msgid "" -"This is the list of applications that have access to your account data." +msgid "This is the list of applications that have access to your account data." msgstr "" #: front/src/components/auth/Settings.vue:218 @@ -4360,30 +4782,22 @@ msgstr "To Ty!" #: front/src/views/content/libraries/Form.vue:73 msgctxt "Content/Library/Input.Placeholder" msgid "This library contains my personal music, I hope you like it." -msgstr "" -"Ta instancja zawiera mojÄ… personalnÄ… bibliotekÄ™, mam nadziejÄ™ że jÄ… " -"polubisz!" +msgstr "Ta instancja zawiera mojÄ… personalnÄ… bibliotekÄ™, mam nadziejÄ™ że jÄ… polubisz!" -#: front/src/views/content/remote/Card.vue:141 +#: front/src/views/content/remote/Card.vue:169 msgctxt "Content/Library/Card.Help text" -msgid "" -"This library is private and your approval from its owner is needed to access" -" its content" +msgid "This library is private and your approval from its owner is needed to access its content" msgstr "" -#: front/src/views/content/remote/Card.vue:142 +#: front/src/views/content/remote/Card.vue:170 msgctxt "Content/Library/Card.Help text" msgid "This library is public and you can access its content freely" msgstr "" #: front/src/components/common/ActionTable.vue:47 msgctxt "Modal/*/Paragraph" -msgid "" -"This may affect a lot of elements or have irreversible consequences, please " -"double check this is really what you want." -msgstr "" -"Może to wpÅ‚ywać na wiele rzeczy, sprawdź dwukrotnie czy to na pewno to, " -"czego chcesz." +msgid "This may affect a lot of elements or have irreversible consequences, please double check this is really what you want." +msgstr "Może to wpÅ‚ywać na wiele rzeczy, sprawdź dwukrotnie czy to na pewno to, czego chcesz." #: front/src/components/library/AlbumEdit.vue:8 #: front/src/components/library/ArtistEdit.vue:8 @@ -4392,6 +4806,11 @@ msgctxt "Content/*/Message" msgid "This object is managed by another server, you cannot edit it." msgstr "" +#: front/src/components/Home.vue:87 +msgctxt "Content/Home/Paragraph" +msgid "This pod runs Funkwhale, a community-driven project that lets you listen and share music and audio within a decentralized, open network." +msgstr "" + #: front/src/components/library/FileUpload.vue:51 msgctxt "Content/Library/Paragraph" msgid "This reference will be used to group imported files together." @@ -4399,19 +4818,16 @@ msgstr "Te źródÅ‚a zostanÄ… wykorzystane, aby pogrubować zaimportowane pliki" #: front/src/components/mixins/Translations.vue:33 #: front/src/components/mixins/Translations.vue:34 +#, fuzzy msgctxt "Content/Library/Help text" -msgid "This track could not be processed, please it is tagged correctly" -msgstr "" -"WystÄ…piÅ‚ bÅ‚Ä…d w trakcie przetwarzania tego utworu, upewnij siÄ™ że posiada on" -" poprawne metadane" +msgid "This track could not be processed, please make sure it is tagged correctly" +msgstr "WystÄ…piÅ‚ bÅ‚Ä…d w trakcie przetwarzania tego utworu, upewnij siÄ™ że posiada on poprawne metadane" #: front/src/components/mixins/Translations.vue:29 #: front/src/components/mixins/Translations.vue:30 msgctxt "Content/Library/Help text" -msgid "" -"This track has been uploaded, but hasn't been processed by the server yet" -msgstr "" -"Utwór zostaÅ‚ zaimportowany, ale jeszcze nie jest przetworzony przez serwer" +msgid "This track has been uploaded, but hasn't been processed by the server yet" +msgstr "Utwór zostaÅ‚ zaimportowany, ale jeszcze nie jest przetworzony przez serwer" #: front/src/components/mixins/Translations.vue:25 #: front/src/components/mixins/Translations.vue:26 @@ -4419,7 +4835,7 @@ msgctxt "Content/Library/Help text" msgid "This track is already present in one of your libraries" msgstr "Utwór jest już w jednej z twoich bibliotek" -#: front/src/components/audio/PlayButton.vue:85 +#: front/src/components/audio/PlayButton.vue:103 msgctxt "*/Queue/Button/Title" msgid "This track is not available in any library you have access to" msgstr "" @@ -4429,7 +4845,7 @@ msgctxt "Content/Track/Paragraph" msgid "This track is present in the following libraries:" msgstr "Ten utwór wystÄ™puje w nastÄ™pujÄ…cych bibliotekach:" -#: front/src/views/playlists/Detail.vue:38 +#: front/src/views/playlists/Detail.vue:46 msgctxt "Popup/Playlist/Paragraph" msgid "This will completely delete this playlist and cannot be undone." msgstr "To caÅ‚kowicie usunie listÄ™ odtwarzania i nie może zostać cofniÄ™te." @@ -4439,29 +4855,29 @@ msgctxt "Popup/Radio/Paragraph" msgid "This will completely delete this radio and cannot be undone." msgstr "To bezpowrotnie usunie radio." -#: front/src/components/auth/SubsonicTokenForm.vue:50 +#: front/src/components/auth/SubsonicTokenForm.vue:55 msgctxt "Popup/Settings/Paragraph" -msgid "" -"This will completely disable access to the Subsonic API using from account." +msgid "This will completely disable access to the Subsonic API using from account." msgstr "To caÅ‚kowicie wyÅ‚Ä…czy dostÄ™p do API Subsonic z tego konta." -#: front/src/components/auth/SubsonicTokenForm.vue:35 +#: front/src/components/manage/moderation/ReportCard.vue:359 +msgctxt "Content/Moderation/Popup,Paragraph" +msgid "This will delete the object associated with this report and mark the report as resolved. The deletion is irreversible." +msgstr "" + +#: front/src/components/auth/SubsonicTokenForm.vue:40 msgctxt "Popup/Settings/Paragraph" -msgid "" -"This will log you out from existing devices that use the current password." +msgid "This will log you out from existing devices that use the current password." msgstr "To wyloguje CiÄ™ z urzÄ…dzeÅ„ na których jesteÅ› obecnie zalogowany." #: front/src/components/auth/Settings.vue:253 msgctxt "Popup/Settings/Paragraph" -msgid "" -"This will permanently delete the application and all the associated tokens." +msgid "This will permanently delete the application and all the associated tokens." msgstr "To caÅ‚kowicie usunie listÄ™ odtwarzania i nie może zostać cofniÄ™te." #: front/src/components/auth/Settings.vue:194 msgctxt "Popup/Settings/Paragraph" -msgid "" -"This will prevent this application from accessing the service on your " -"behalf." +msgid "This will prevent this application from accessing the service on your behalf." msgstr "" #: front/src/components/playlists/Editor.vue:54 @@ -4469,43 +4885,44 @@ msgctxt "Popup/Playlist/Paragraph" msgid "This will remove all tracks from this playlist and cannot be undone." msgstr "To bezpowrotnie usunie wszystkie utwory z tej listy odtwarzania." -#: front/src/views/admin/library/AlbumDetail.vue:99 -#: front/src/views/admin/library/TrackDetail.vue:98 src/edits.js:21 -#: src/edits.js:39 -msgctxt "*/*/*/Noun" -msgid "Title" -msgstr "TytuÅ‚" - #: front/src/components/audio/track/Table.vue:7 -#: front/src/views/content/libraries/FilesTable.vue:55 -msgctxt "Content/Track/*/Noun" -msgid "Title" -msgstr "TytuÅ‚" - #: front/src/components/manage/library/AlbumsTable.vue:39 #: front/src/components/manage/library/TracksTable.vue:39 -msgctxt "*/*/*" +#: front/src/views/admin/library/AlbumDetail.vue:105 +#: front/src/views/admin/library/TrackDetail.vue:104 +#: front/src/views/content/libraries/FilesTable.vue:55 src/edits.js:36 +#: front/src/edits.js:62 +msgctxt "*/*/*/Noun" msgid "Title" msgstr "TytuÅ‚" #: front/src/components/SetInstanceModal.vue:16 msgctxt "Popup/Instance/Paragraph" -msgid "" -"To continue, please select the Funkwhale instance you want to connect to. " -"Enter the address directly, or select one of the suggested choices." +msgid "To continue, please select the Funkwhale instance you want to connect to. Enter the address directly, or select one of the suggested choices." msgstr "" -#: front/src/components/ShortcutsModal.vue:79 +#: front/src/components/ShortcutsModal.vue:148 +#, fuzzy +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Toggle favorite" +msgstr "1 polubienie" + +#: front/src/components/ShortcutsModal.vue:132 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Toggle mute" +msgstr "" + +#: front/src/components/ShortcutsModal.vue:136 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Toggle queue looping" msgstr "" -#: front/src/views/admin/library/AlbumDetail.vue:222 -#: front/src/views/admin/library/ArtistDetail.vue:211 -#: front/src/views/admin/library/LibraryDetail.vue:200 -#: front/src/views/admin/library/TrackDetail.vue:274 -#: front/src/views/admin/moderation/AccountsDetail.vue:317 -#: front/src/views/admin/moderation/DomainsDetail.vue:225 +#: front/src/views/admin/library/AlbumDetail.vue:238 +#: front/src/views/admin/library/ArtistDetail.vue:226 +#: front/src/views/admin/library/LibraryDetail.vue:219 +#: front/src/views/admin/library/TrackDetail.vue:290 +#: front/src/views/admin/moderation/AccountsDetail.vue:329 +#: front/src/views/admin/moderation/DomainsDetail.vue:262 msgctxt "Content/Moderation/Table.Label" msgid "Total size" msgstr "Nie użyty" @@ -4515,20 +4932,18 @@ msgctxt "Content/Library/Card.Help text" msgid "Total size of the files in this library" msgstr "ÅÄ…czny rozmiar wszystkich plików w tej bibliotece" -#: front/src/views/admin/moderation/DomainsDetail.vue:105 +#: front/src/views/admin/moderation/DomainsDetail.vue:142 msgctxt "Content/*/*" msgid "Total users" msgstr "Nie użyty" -#: front/src/views/admin/library/UploadDetail.vue:199 -msgctxt "*/*/*" -msgid "Track" -msgstr "Utwór" - -#: front/src/components/audio/SearchBar.vue:27 -#: front/src/components/library/TrackBase.vue:173 +#: front/src/components/audio/SearchBar.vue:34 +#: front/src/components/library/TrackBase.vue:188 #: front/src/components/library/TrackDetail.vue:128 #: front/src/components/metadata/Search.vue:138 +#: src/components/mixins/Report.vue:28 +#: front/src/views/admin/library/UploadDetail.vue:199 +#: front/src/components/mixins/Report.vue:29 msgctxt "*/*/*/Noun" msgid "Track" msgstr "Utwór" @@ -4538,7 +4953,7 @@ msgctxt "Content/Library/Card/Short" msgid "Track #%{ id } - %{ name }" msgstr "" -#: front/src/views/admin/library/TrackDetail.vue:91 +#: front/src/views/admin/library/TrackDetail.vue:97 msgctxt "Content/Moderation/Title" msgid "Track data" msgstr "TytuÅ‚ utworu" @@ -4548,30 +4963,28 @@ msgctxt "Content/Track/Title/Noun" msgid "Track information" msgstr "Informacje o utworze" -#: front/src/components/mixins/Translations.vue:50 -#: front/src/components/mixins/Translations.vue:51 +#: front/src/components/mixins/Translations.vue:60 +#: front/src/components/mixins/Translations.vue:61 msgctxt "Content/*/Dropdown/Noun" msgid "Track name" msgstr "TytuÅ‚ utworu" -#: front/src/components/instance/Stats.vue:54 #: front/src/components/library/AlbumDetail.vue:19 -#: front/src/components/playlists/PlaylistModal.vue:47 -#: front/src/views/admin/moderation/AccountsDetail.vue:362 -#: front/src/views/admin/moderation/DomainsDetail.vue:274 -#: front/src/views/content/Base.vue:8 src/views/content/libraries/Detail.vue:8 -#: front/src/views/playlists/Detail.vue:51 src/views/radios/Detail.vue:34 -msgctxt "*/*/*/Noun" -msgid "Tracks" -msgstr "Utwory" - +#: front/src/components/library/TagDetail.vue:36 #: front/src/components/manage/library/AlbumsTable.vue:42 #: front/src/components/manage/library/ArtistsTable.vue:42 -#: front/src/views/admin/library/AlbumDetail.vue:252 -#: front/src/views/admin/library/ArtistDetail.vue:251 +#: front/src/components/manage/library/TagsTable.vue:44 +#: front/src/components/playlists/PlaylistModal.vue:47 +#: front/src/views/admin/library/AlbumDetail.vue:268 +#: front/src/views/admin/library/ArtistDetail.vue:266 #: front/src/views/admin/library/Base.vue:14 -#: front/src/views/admin/library/LibraryDetail.vue:229 +#: front/src/views/admin/library/LibraryDetail.vue:248 +#: front/src/views/admin/library/TagDetail.vue:143 #: front/src/views/admin/library/TracksList.vue:24 +#: front/src/views/admin/moderation/AccountsDetail.vue:374 +#: front/src/views/admin/moderation/DomainsDetail.vue:311 +#: front/src/views/content/Base.vue:8 src/views/content/libraries/Detail.vue:8 +#: front/src/views/playlists/Detail.vue:76 src/views/radios/Detail.vue:34 msgctxt "*/*/*" msgid "Tracks" msgstr "Utwory" @@ -4581,79 +4994,64 @@ msgctxt "Content/Artist/Title" msgid "Tracks by this artist" msgstr "Utwory tego wykonawcy" -#: front/src/components/instance/Stats.vue:25 -msgctxt "Content/About/Paragraph/Unit" -msgid "Tracks favorited" -msgstr "Ulubione utwory" - -#: front/src/components/instance/Stats.vue:19 -msgctxt "Content/About/Paragraph/Unit" -msgid "tracks listened" -msgstr "wysÅ‚uchane utwory" - #: front/src/components/library/radios/Filter.vue:44 msgctxt "Popup/Radio/Title/Noun" msgid "Tracks matching filter" msgstr "Utwór zgodny z filtrem" #: front/src/components/library/TrackDetail.vue:57 +#: front/src/components/manage/moderation/ReportCard.vue:134 #: front/src/views/admin/library/UploadDetail.vue:250 +#: front/src/views/admin/moderation/AccountsDetail.vue:181 msgctxt "Content/Track/Table.Label/Noun" msgid "Type" msgstr "Rodzaj" -#: front/src/views/admin/moderation/AccountsDetail.vue:180 -msgctxt "Content/Moderation/Table.Label/Noun" -msgid "Type" -msgstr "Rodzaj" - #: front/src/components/manage/moderation/AccountsTable.vue:44 -#: front/src/components/manage/moderation/DomainsTable.vue:42 +#: front/src/components/manage/moderation/DomainsTable.vue:50 msgctxt "Content/Moderation/Table.Label/Short" msgid "Under moderation rule" msgstr "UsuÅ„ radio" -#: front/src/views/content/remote/Card.vue:109 -#: src/views/content/remote/Card.vue:114 +#: front/src/components/ShortcutsModal.vue:68 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Unfocus searchbar" +msgstr "" + +#: front/src/views/content/remote/Card.vue:122 +#: src/views/content/remote/Card.vue:127 msgctxt "*/Library/Button.Label/Verb" msgid "Unfollow" msgstr "PrzestaÅ„ Å›ledzić" -#: front/src/views/content/remote/Card.vue:110 +#: front/src/views/content/remote/Card.vue:123 msgctxt "Popup/Library/Title" msgid "Unfollow this library?" msgstr "Czy chcesz przestać Å›ledzić tÄ™ bibliotekÄ™?" -#: front/src/components/About.vue:17 -msgctxt "Content/About/Paragraph" -msgid "" -"Unfortunately, the owners of this instance did not yet take the time to " -"complete this page." -msgstr "" -"Niestety, wÅ‚aÅ›ciciele tej instancji nie znaleźli czasu na wypeÅ‚nienie tej " -"strony." - #: front/src/components/federation/FetchButton.vue:54 #: front/src/components/federation/FetchButton.vue:55 -msgctxt "*/*/Error" -msgid "Unknowkn error" -msgstr "" - #: front/src/components/library/ImportStatusModal.vue:144 -msgctxt "Popup/Import/Error.Label" -msgid "Unkwown error" +msgctxt "*/*/Error" +msgid "Unknown error" msgstr "" -#: front/src/components/Home.vue:37 -msgctxt "Content/Home/Title" -msgid "Unlimited music" -msgstr "Nieograniczona muzyka" - -#: front/src/components/audio/Player.vue:630 +#: front/src/components/audio/Player.vue:656 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Unmute" msgstr "Cofnij wyciszenie" +#: front/src/components/manage/moderation/ReportCard.vue:225 +msgctxt "Content/*/Button.Label" +msgid "Unresolve" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:67 +#: front/src/views/admin/moderation/ReportsList.vue:23 +msgctxt "Content/*/*/Short" +msgid "Unresolved" +msgstr "" + #: front/src/components/manage/moderation/InstancePolicyForm.vue:57 msgctxt "Content/Moderation/Card.Button.Label/Verb" msgid "Update" @@ -4717,12 +5115,8 @@ msgstr "Data wysyÅ‚ania" #: front/src/components/library/FileUpload.vue:258 msgctxt "Content/Library/Help text" -msgid "" -"Upload denied, ensure the file is not too big and that you have not reached " -"your quota" -msgstr "" -"BÅ‚Ä…d wysyÅ‚ania, upewnij siÄ™ że plik nie jest zbyt duży i że nie " -"przekroczyÅ‚eÅ› swojego limitu" +msgid "Upload denied, ensure the file is not too big and that you have not reached your quota" +msgstr "BÅ‚Ä…d wysyÅ‚ania, upewnij siÄ™ że plik nie jest zbyt duży i że nie przekroczyÅ‚eÅ› swojego limitu" #: front/src/components/library/ImportStatusModal.vue:8 msgctxt "Popup/Import/Message" @@ -4731,20 +5125,18 @@ msgstr "" #: front/src/views/content/Home.vue:7 msgctxt "Content/Library/Paragraph" -msgid "" -"Upload music files (MP3, OGG, FLAC, etc.) from your personal library " -"directly from your browser to enjoy them here." -msgstr "" -"WyÅ›lij pliki muzyczne (mp3, ogg, flac itp.) ze swojej biblioteki " -"bezpoÅ›rednio z przeglÄ…darki, aby cieszyć siÄ™ nimi tutaj." +msgid "Upload music files (MP3, OGG, FLAC, etc.) from your personal library directly from your browser to enjoy them here." +msgstr "WyÅ›lij pliki muzyczne (mp3, ogg, flac itp.) ze swojej biblioteki bezpoÅ›rednio z przeglÄ…darki, aby cieszyć siÄ™ nimi tutaj." #: front/src/components/library/FileUpload.vue:30 msgctxt "Content/Library/Title/Verb" msgid "Upload new tracks" msgstr "WyÅ›lij nowe utwory" -#: front/src/views/admin/moderation/AccountsDetail.vue:298 -msgctxt "Content/Moderation/Table.Label/Noun" +#: front/src/components/About.vue:99 +#: front/src/views/admin/moderation/AccountsDetail.vue:309 +#, fuzzy +msgctxt "*/*/*" msgid "Upload quota" msgstr "Powierzchnia dyskowa" @@ -4755,9 +5147,7 @@ msgstr "Importowanie zajęło zbyt dÅ‚ugo, spróbuj jeszcze raz" #: front/src/components/library/ImportStatusModal.vue:14 msgctxt "Popup/Import/Message" -msgid "" -"Upload was skipped because a similar one is already available in one of your" -" libraries." +msgid "Upload was skipped because a similar one is already available in one of your libraries." msgstr "" #: front/src/components/library/ImportStatusModal.vue:11 @@ -4780,35 +5170,25 @@ msgctxt "Content/Library/Table" msgid "Uploading…" msgstr "WysyÅ‚anie" +#: front/src/components/manage/library/LibrariesTable.vue:52 +#: front/src/components/manage/moderation/AccountsTable.vue:41 +#: front/src/components/mixins/Translations.vue:75 +#: front/src/views/admin/library/AlbumDetail.vue:258 +#: front/src/views/admin/library/ArtistDetail.vue:246 #: front/src/views/admin/library/Base.vue:20 +#: front/src/views/admin/library/LibraryDetail.vue:258 +#: front/src/views/admin/library/TrackDetail.vue:310 #: front/src/views/admin/library/UploadsList.vue:24 +#: front/src/views/admin/moderation/AccountsDetail.vue:349 +#: front/src/views/admin/moderation/DomainsDetail.vue:281 +#: front/src/components/mixins/Translations.vue:76 msgctxt "*/*/*" msgid "Uploads" msgstr "WyÅ›lij" -#: front/src/components/manage/moderation/AccountsTable.vue:41 -#: front/src/components/mixins/Translations.vue:63 -#: front/src/views/admin/library/AlbumDetail.vue:242 -#: front/src/views/admin/library/ArtistDetail.vue:231 -#: front/src/views/admin/library/LibraryDetail.vue:239 -#: front/src/views/admin/library/TrackDetail.vue:294 -#: front/src/views/admin/moderation/AccountsDetail.vue:337 -#: front/src/views/admin/moderation/DomainsDetail.vue:244 -#: front/src/components/mixins/Translations.vue:64 -msgctxt "Content/Moderation/Table.Label/Noun" -msgid "Uploads" -msgstr "WyÅ›lij" - -#: front/src/components/manage/library/LibrariesTable.vue:52 -msgctxt "Content/*/*/Noun" -msgid "Uploads" -msgstr "WyÅ›lij" - #: front/src/components/auth/ApplicationForm.vue:16 msgctxt "Content/Applications/Help Text" -msgid "" -"Use \"urn:ietf:wg:oauth:2.0:oob\" as a redirect URI if your application is " -"not served on the web." +msgid "Use \"urn:ietf:wg:oauth:2.0:oob\" as a redirect URI if your application is not served on the web." msgstr "" #: front/src/components/Footer.vue:16 @@ -4816,20 +5196,29 @@ msgctxt "Footer/*/List item.Link" msgid "Use another instance" msgstr "Skorzystaj z innej instancji" +#: front/src/components/Home.vue:146 +msgctxt "Content/Home/Link" +msgid "Use Funkwhale on other devices with our apps" +msgstr "" + +#: front/src/components/moderation/ReportModal.vue:44 +msgctxt "*/*/Field,Help" +msgid "Use this field to provide additional context to the moderator that will handle your report." +msgstr "" + #: front/src/views/auth/PasswordReset.vue:12 msgctxt "Content/Signup/Paragraph" -msgid "" -"Use this form to request a password reset. We will send an email to the " -"given address with instructions to reset your password." +msgid "Use this form to request a password reset. We will send an email to the given address with instructions to reset your password." +msgstr "Użyj tego formularza aby poprosić o zresetowanie hasÅ‚a. Otrzymasz e-mail z instrukcjami resetowania hasÅ‚a na podany adres." + +#: front/src/components/moderation/ReportModal.vue:18 +msgctxt "*/Moderation/Popup,Paragraph" +msgid "Use this form to submit a report to our moderation team." msgstr "" -"Użyj tego formularza aby poprosić o zresetowanie hasÅ‚a. Otrzymasz e-mail z " -"instrukcjami resetowania hasÅ‚a na podany adres." #: front/src/components/manage/moderation/InstancePolicyForm.vue:111 msgctxt "Content/Moderation/Help text" -msgid "" -"Use this setting to temporarily enable/disable the policy without completely" -" removing it." +msgid "Use this setting to temporarily enable/disable the policy without completely removing it." msgstr "" #: front/src/components/manage/users/InvitationsTable.vue:49 @@ -4837,15 +5226,27 @@ msgctxt "Content/Admin/Table" msgid "Used" msgstr "Zużyty" +#: front/src/components/Home.vue:125 +msgctxt "Content/Home/Header" +msgid "Useful links" +msgstr "" + #: front/src/views/content/libraries/Detail.vue:26 msgctxt "Content/Library/Table.Label" msgid "User" msgstr "Użytkownik" -#: front/src/components/instance/Stats.vue:5 -msgctxt "Content/About/Title/Noun" -msgid "User activity" -msgstr "Aktywność użytkownika" +#: front/src/components/Home.vue:154 +#, fuzzy +msgctxt "Content/Home/Link" +msgid "User guides" +msgstr "Biblioteki użytkownika" + +#: front/src/views/admin/Settings.vue:88 +#, fuzzy +msgctxt "Content/Admin/Menu" +msgid "User Interface" +msgstr "Nazwa użytkownika" #: front/src/components/library/AlbumDetail.vue:26 #: front/src/components/library/ArtistDetail.vue:39 @@ -4859,35 +5260,35 @@ msgctxt "Content/Radio/Title" msgid "User radios" msgstr "Radia użytkownika" -#: front/src/components/auth/Signup.vue:19 +#: front/src/components/auth/SignupForm.vue:15 #: front/src/components/manage/users/UsersTable.vue:37 -#: front/src/components/mixins/Translations.vue:59 +#: front/src/components/mixins/Translations.vue:71 #: front/src/views/admin/moderation/AccountsDetail.vue:114 -#: front/src/components/mixins/Translations.vue:60 +#: front/src/components/mixins/Translations.vue:72 msgctxt "Content/*/*" msgid "Username" msgstr "Nazwa użytkownika" -#: front/src/components/auth/Login.vue:15 +#: front/src/components/auth/LoginForm.vue:11 msgctxt "Content/Login/Input.Label/Noun" msgid "Username or email" msgstr "Nazwa użytkownika lub adres e-mail" -#: front/src/components/instance/Stats.vue:13 -msgctxt "Content/About/Paragraph/Unit" -msgid "users" -msgstr "użytkownicy" - -#: front/src/components/Sidebar.vue:102 -#: front/src/components/manage/moderation/DomainsTable.vue:39 -#: front/src/components/mixins/Translations.vue:61 +#: front/src/components/Sidebar.vue:106 +#: front/src/components/manage/moderation/DomainsTable.vue:47 +#: front/src/components/mixins/Translations.vue:73 #: src/views/admin/Settings.vue:81 front/src/views/admin/users/Base.vue:5 #: src/views/admin/users/UsersList.vue:21 -#: front/src/components/mixins/Translations.vue:62 +#: front/src/components/mixins/Translations.vue:74 msgctxt "*/*/*/Noun" msgid "Users" msgstr "Użytkownicy" +#: front/src/components/Home.vue:110 +msgctxt "Content/Home/Paragraph" +msgid "Users on this pod also get %{ quota } of free storage to upload their own content!" +msgstr "" + #: front/src/components/Footer.vue:29 msgctxt "Footer/*/Title" msgid "Using Funkwhale" @@ -4905,45 +5306,60 @@ msgctxt "Content/Library/Link/Verb" msgid "View files" msgstr "Zobacz pliki" -#: front/src/components/library/AlbumBase.vue:81 -#: front/src/components/library/ArtistBase.vue:92 -#: front/src/components/library/TrackBase.vue:100 -#: front/src/views/admin/library/AlbumDetail.vue:42 -#: front/src/views/admin/library/ArtistDetail.vue:41 +#: front/src/components/library/AlbumBase.vue:95 +#: front/src/components/library/ArtistBase.vue:107 +#: front/src/components/library/TrackBase.vue:111 +#: front/src/views/admin/library/AlbumDetail.vue:48 +#: front/src/views/admin/library/ArtistDetail.vue:46 #: front/src/views/admin/library/LibraryDetail.vue:34 #: front/src/views/admin/library/LibraryDetail.vue:45 -#: front/src/views/admin/library/TrackDetail.vue:41 +#: front/src/views/admin/library/TagDetail.vue:32 +#: front/src/views/admin/library/TrackDetail.vue:47 #: front/src/views/admin/library/UploadDetail.vue:35 #: front/src/views/admin/library/UploadDetail.vue:46 #: front/src/views/admin/moderation/AccountsDetail.vue:37 #: front/src/views/admin/moderation/AccountsDetail.vue:45 +#: front/src/views/admin/moderation/DomainsDetail.vue:30 msgctxt "Content/Moderation/Link/Verb" msgid "View in Django's admin" msgstr "" -#: front/src/components/library/AlbumBase.vue:61 -#: front/src/components/library/ArtistBase.vue:72 -#: front/src/components/library/TrackBase.vue:80 +#: front/src/components/Home.vue:169 +#, fuzzy +msgctxt "Content/Home/Link" +msgid "View more…" +msgstr "Åadowanie Å›ledzÄ…cych…" + +#: front/src/components/library/AlbumBase.vue:62 +#: front/src/components/library/ArtistBase.vue:73 +#: front/src/components/library/TrackBase.vue:78 #: front/src/components/metadata/ArtistCard.vue:49 #: front/src/components/metadata/ReleaseCard.vue:53 msgctxt "Content/*/*/Clickable, Verb" msgid "View on MusicBrainz" msgstr "WyÅ›wietl na MusicBrainz" +#: front/src/components/manage/moderation/ReportCard.vue:124 +msgctxt "Content/Moderation/Link" +msgid "View public page" +msgstr "" + #: front/src/components/manage/library/LibrariesTable.vue:11 #: front/src/components/manage/library/LibrariesTable.vue:51 #: front/src/components/manage/library/UploadsTable.vue:11 #: front/src/components/manage/library/UploadsTable.vue:63 #: front/src/views/admin/library/LibraryDetail.vue:94 #: front/src/views/admin/library/UploadDetail.vue:101 +#: front/src/views/content/libraries/Form.vue:18 msgctxt "*/*/*" msgid "Visibility" msgstr "Widoczność" -#: front/src/views/content/libraries/Form.vue:18 -msgctxt "Content/Library/Dropdown.Label" -msgid "Visibility" -msgstr "Widoczność" +#: front/src/components/Home.vue:91 +#, fuzzy +msgctxt "Content/Home/Link" +msgid "Visit funkwhale.audio" +msgstr "O Funkwhale" #: front/src/components/library/AlbumDetail.vue:4 msgctxt "Content/Album/" @@ -4955,7 +5371,13 @@ msgctxt "Popup/*/Loading.Title" msgid "Waiting for result…" msgstr "Åadowanie Twoich ulubionych…" -#: front/src/components/auth/Login.vue:7 +#: front/src/components/auth/Settings.vue:285 +#, fuzzy +msgctxt "Content/Settings/Error message.Title" +msgid "We cannot delete your account" +msgstr "Nie udaÅ‚o siÄ™ zalogować CiÄ™" + +#: front/src/components/auth/LoginForm.vue:3 msgctxt "Content/Login/Error message.Title" msgid "We cannot log you in" msgstr "Nie udaÅ‚o siÄ™ zalogować CiÄ™" @@ -4965,42 +5387,37 @@ msgctxt "Content/*/Error message.Title" msgid "We cannot save your changes" msgstr "Nie udaÅ‚o siÄ™ utworzyć Ci konta" -#: front/src/components/Home.vue:122 -msgctxt "Content/Home/List item" -msgid "We do not track you or bother you with ads" -msgstr "Nie Å›ledzimy CiÄ™ i nie wyÅ›wietlamy Ci reklam" +#: front/src/views/Notifications.vue:39 +msgctxt "Content/Notifications/Paragraph" +msgid "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!" +msgstr "" #: front/src/components/library/FileUpload.vue:39 msgctxt "Content/Library/Link" msgid "We recommend using Picard for that purpose." msgstr "polecamy używać do tego Picarda" -#: front/src/components/Home.vue:7 -msgctxt "Content/Home/Title" -msgid "We think listening to music should be simple." -msgstr "Uważamy, że sÅ‚uchanie muzyki powinno być proste." +#: front/src/components/moderation/ReportModal.vue:35 +msgctxt "*/*/Field,Help" +msgid "We'll use this email if we need to contact you regarding this report." +msgstr "" -#: front/src/components/Home.vue:148 +#: front/src/components/Home.vue:207 msgctxt "Head/Home/Title" msgid "Welcome" msgstr "Witaj" #: front/src/components/Home.vue:5 -msgctxt "Content/Home/Title/Verb" -msgid "Welcome on Funkwhale" -msgstr "Witamy na Funkwhale" - -#: front/src/components/Home.vue:24 -msgctxt "Content/Home/Title" -msgid "Why funkwhale?" -msgstr "Dlaczego funkwhale?" +msgctxt "Content/Home/Header" +msgid "Welcome to %{ podName }!" +msgstr "" -#: front/src/components/audio/EmbedWizard.vue:13 +#: front/src/components/audio/EmbedWizard.vue:23 msgctxt "Popup/Embed/Input.Label" msgid "Widget height" msgstr "" -#: front/src/components/audio/EmbedWizard.vue:6 +#: front/src/components/audio/EmbedWizard.vue:16 msgctxt "Popup/Embed/Input.Label" msgid "Widget width" msgstr "" @@ -5020,9 +5437,11 @@ msgctxt "Content/OAuth Scopes/Help Text" msgid "Write-only access to user data" msgstr "" -#: front/src/components/Sidebar.vue:129 +#: front/src/components/Sidebar.vue:133 #: front/src/components/manage/moderation/AccountsTable.vue:72 -#: front/src/components/manage/moderation/DomainsTable.vue:58 +#: front/src/components/manage/moderation/DomainsTable.vue:12 +#: front/src/components/manage/moderation/DomainsTable.vue:69 +#: front/src/views/admin/moderation/DomainsDetail.vue:109 msgctxt "*/*/*" msgid "Yes" msgstr "Tak" @@ -5034,29 +5453,17 @@ msgstr "Tak, wyloguj mnie!" #: front/src/views/content/libraries/Form.vue:19 msgctxt "Content/Library/Paragraph" -msgid "" -"You are able to share your library with other people, regardless of its " -"visibility." -msgstr "" -"BÄ™dziesz mógÅ‚ udostÄ™pniać swojÄ… bibliotekÄ™ innym, nie zważajÄ…c na jej " -"widoczność." +msgid "You are able to share your library with other people, regardless of its visibility." +msgstr "BÄ™dziesz mógÅ‚ udostÄ™pniać swojÄ… bibliotekÄ™ innym, nie zważajÄ…c na jej widoczność." #: front/src/components/library/FileUpload.vue:32 msgctxt "Content/Library/Paragraph" -msgid "" -"You are about to upload music to your library. Before proceeding, please " -"ensure that:" -msgstr "" -"Za chwilÄ™ dodasz utwory do swojej biblioteki. Zanim kontynuujesz, upewnij " -"siÄ™ że:" +msgid "You are about to upload music to your library. Before proceeding, please ensure that:" +msgstr "Za chwilÄ™ dodasz utwory do swojej biblioteki. Zanim kontynuujesz, upewnij siÄ™ że:" #: front/src/components/SetInstanceModal.vue:12 msgctxt "Popup/Login/Paragraph" -msgid "" -"You are currently connected to <a href=\"%{ url }\" target=\"_blank\">%{ " -"hostname } <i class=\"external icon\"/></a>. If you continue, you will " -"be disconnected from your current instance and all your local data will be " -"deleted." +msgid "You are currently connected to <a href=\"%{ url }\" target=\"_blank\">%{ hostname } <i class=\"external icon\"/></a>. If you continue, you will be disconnected from your current instance and all your local data will be deleted." msgstr "" #: front/src/components/library/ArtistDetail.vue:6 @@ -5071,9 +5478,7 @@ msgstr "JesteÅ› obecnie zalogowany jako %{ username }" #: front/src/components/library/FileUpload.vue:35 msgctxt "Content/Library/List item" -msgid "" -"You are not uploading copyrighted content in a public library, otherwise you" -" may be infringing the law" +msgid "You are not uploading copyrighted content in a public library, otherwise you may be infringing the law" msgstr "" #: front/src/components/SetInstanceModal.vue:98 @@ -5082,55 +5487,35 @@ msgid "You are now using the Funkwhale instance at %{ url }" msgstr "" #: front/src/views/content/Home.vue:17 +#, fuzzy msgctxt "Content/Library/Paragraph" -msgid "" -"You can follow libraries from other users to get access to new music. Public" -" libraries can be followed immediatly, while following a private library " -"requires approval from its owner." -msgstr "" -"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." - -#: front/src/components/Home.vue:128 -msgctxt "Content/Home/List item" -msgid "" -"You can invite friends and family to your instance so they can enjoy your " -"music" -msgstr "" -"Możesz zaprosić znajomych i rodzinÄ™ na swojÄ… instancjÄ™, aby mogli siÄ™ " -"cieszyć dodanÄ… przez Ciebie muzykÄ…" +msgid "You can 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." +msgstr "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." #: front/src/components/moderation/FilterModal.vue:31 msgctxt "Popup/Moderation/Paragraph" -msgid "" -"You can manage and update your filters anytime from your account settings." +msgid "You can manage and update your filters any time from your account settings." msgstr "" #: front/src/views/auth/EmailConfirm.vue:24 msgctxt "Content/Signup/Paragraph" msgid "You can now use the service without limitations." +msgstr "Twój adres e-mail zostaÅ‚ potwierdzony, możesz używać usÅ‚ugi bez ograniczeÅ„." + +#: front/src/components/auth/Settings.vue:278 +msgctxt "Content/Settings/Paragraph'" +msgid "You can permanently and irreversibly delete your account and all the associated data using the form below. You will be asked for confirmation." msgstr "" -"Twój adres e-mail zostaÅ‚ potwierdzony, możesz używać usÅ‚ugi bez ograniczeÅ„." #: front/src/components/library/radios/Builder.vue:7 msgctxt "Content/Radio/Paragraph" -msgid "" -"You can use this interface to build your own custom radio, which will play " -"tracks according to your criteria." -msgstr "" -"Możesz używać tego interfejsu aby utworzyć wÅ‚asne radio, które bÄ™dzie " -"odtwarzać utwory pasujÄ…ce do Twoich kryteriów." +msgid "You can use this interface to build your own custom radio, which will play tracks according to your criteria." +msgstr "Możesz używać tego interfejsu aby utworzyć wÅ‚asne radio, które bÄ™dzie odtwarzać utwory pasujÄ…ce do Twoich kryteriów." #: front/src/components/auth/SubsonicTokenForm.vue:7 msgctxt "Content/Settings/Paragraph" -msgid "" -"You can use those to enjoy your playlist and music in offline mode, on your " -"smartphone or tablet, for instance." -msgstr "" -"Możesz używać tego, aby cieszyć siÄ™ muzykÄ… i swojÄ… listÄ… odtwarzania w " -"trybie offline, na przykÅ‚ad na smartfonie i tablecie." +msgid "You can use those to enjoy your playlist and music in offline mode, on your smartphone or tablet, for instance." +msgstr "Możesz używać tego, aby cieszyć siÄ™ muzykÄ… i swojÄ… listÄ… odtwarzania w trybie offline, na przykÅ‚ad na smartfonie i tablecie." #: front/src/components/auth/Settings.vue:202 msgctxt "Content/Applications/Paragraph" @@ -5147,19 +5532,17 @@ msgctxt "Content/Moderation/Card.Title" msgid "You don't have any rule in place for this account." msgstr "Brak powiadomieÅ„ do wyÅ›wietlenia!" -#: front/src/views/admin/moderation/DomainsDetail.vue:39 +#: front/src/views/admin/moderation/DomainsDetail.vue:67 msgctxt "Content/Moderation/Card.Title" msgid "You don't have any rule in place for this domain." msgstr "Brak powiadomieÅ„ do wyÅ›wietlenia!" #: front/src/components/library/EditForm.vue:52 msgctxt "Content/Library/Paragraph" -msgid "" -"You don't have the permission to edit this object, but you can suggest " -"changes. Once submitted, suggestions will be reviewed before approval." +msgid "You don't have the permission to edit this object, but you can suggest changes. Once submitted, suggestions will be reviewed before approval." msgstr "" -#: front/src/components/Sidebar.vue:171 +#: front/src/components/Sidebar.vue:175 msgctxt "Sidebar/Player/Title" msgid "You have a radio playing" msgstr "Odtwarzasz radio" @@ -5171,8 +5554,7 @@ msgstr "" #: front/src/components/auth/Settings.vue:100 msgctxt "Popup/Settings/List item" -msgid "" -"You will be logged out from this session and have to log in with the new one" +msgid "You will be logged out from this session and have to log in with the new one" msgstr "Zostaniesz wylogowany z tej sesji i musisz zalogować siÄ™ nowym hasÅ‚em" #: front/src/components/auth/Authorize.vue:51 @@ -5187,23 +5569,24 @@ msgstr "" #: front/src/components/auth/Settings.vue:71 msgctxt "Content/Settings/Paragraph" -msgid "" -"You will have to update your password on your clients that use this " -"password." +msgid "You will have to update your password on your clients that use this password." msgstr "BÄ™dziesz musiaÅ‚ zmienić hasÅ‚o na klientach używajÄ…cych tego hasÅ‚a." #: front/src/components/moderation/FilterModal.vue:20 msgctxt "Popup/Moderation/Paragraph" -msgid "" -"You will not see tracks, albums and user activity linked to this artist " -"anymore:" +msgid "You will not see tracks, albums and user activity linked to this artist any more:" msgstr "" -#: front/src/components/auth/Signup.vue:13 +#: front/src/components/auth/SignupForm.vue:9 msgctxt "Content/Signup/Form/Paragraph" msgid "Your account cannot be created." msgstr "Utworzono listÄ™ odtwarzania" +#: front/src/components/auth/Settings.vue:281 +msgctxt "Content/Settings/Paragraph'" +msgid "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." +msgstr "" + #: front/src/components/auth/Settings.vue:215 msgctxt "Content/Settings/Title/Noun" msgid "Your applications" @@ -5214,6 +5597,11 @@ msgctxt "Content/Settings/Error message.Title" msgid "Your avatar cannot be saved" msgstr "" +#: front/src/components/auth/Settings.vue:527 +msgctxt "*/Auth/Message" +msgid "Your deletion request was submitted, your account and content will be deleted shortly" +msgstr "" + #: front/src/components/library/EditForm.vue:3 msgctxt "Content/Library/Paragraph" msgid "Your edit was successfully submitted." @@ -5224,12 +5612,12 @@ msgctxt "Head/Favorites/Title" msgid "Your Favorites" msgstr "Twoje ulubione" -#: front/src/components/Home.vue:109 -msgctxt "Content/Home/Title" -msgid "Your music, your way" -msgstr "Twoja muzyka, po Twojemu" +#: front/src/views/Notifications.vue:5 +msgctxt "Content/Notifications/Title" +msgid "Your messages" +msgstr "" -#: front/src/views/Notifications.vue:4 +#: front/src/views/Notifications.vue:69 msgctxt "Content/Notifications/Title" msgid "Your notifications" msgstr "Twoje powiadomienia" @@ -5245,43 +5633,42 @@ msgid "Your password has been updated successfully." msgstr "Twoje hasÅ‚o zostaÅ‚o pomyÅ›lnie zmienione." #: front/src/components/auth/Settings.vue:14 +#, fuzzy msgctxt "Content/Settings/Error message.Title" -msgid "Your settings can't be updateds" +msgid "Your settings can't be updated" msgstr "Zaktualizowano ustawienia" #: front/src/components/auth/Settings.vue:101 msgctxt "Popup/Settings/List item" -msgid "" -"Your Subsonic password will be changed to a new, random one, logging you out" -" from devices that used the old Subsonic password" -msgstr "" -"Twoje hasÅ‚o Subsonic zostanie zmienione na nowe, losowe i zostaniesz " -"wylogowany z urzÄ…dzeÅ„ korzystajÄ…cych ze starego hasÅ‚a Subsonic" +msgid "Your Subsonic password will be changed to a new, random one, logging you out from devices that used the old Subsonic password" +msgstr "Twoje hasÅ‚o Subsonic zostanie zmienione na nowe, losowe i zostaniesz wylogowany z urzÄ…dzeÅ„ korzystajÄ…cych ze starego hasÅ‚a Subsonic" -#: front/src/edits.js:47 -msgctxt "*/*/*/Short, Noun" -msgid "Position" -msgstr "Opis" +#: front/src/entities.js:126 +#, fuzzy +msgctxt "*/*/*/Noun" +msgid "MusicBrainz ID" +msgstr "WyÅ›wietl na MusicBrainz" -#: front/src/edits.js:54 -msgctxt "Content/Track/*/Noun" -msgid "Copyright" -msgstr "Kopiuj" +#: front/src/main.js:110 +msgctxt "*/Error/Paragraph" +msgid "You sent too many requests and have been rate limited, please try again in %{ delay }" +msgstr "" + +#: front/src/main.js:113 +msgctxt "*/Error/Paragraph" +msgid "You sent too many requests and have been rate limited, please try again later" +msgstr "" -#: front/src/components/library/AlbumBase.vue:183 +#: front/src/components/library/AlbumBase.vue:208 #, fuzzy msgctxt "Content/Album/Header.Title" -msgid "" -"Album containing %{ count } track, by <a class=\"internal\" href=\"%{ " -"artistUrl }\">%{ artist }</a>" -msgid_plural "" -"Album containing %{ count } tracks, by <a class=\"internal\" href=\"%{ " -"artistUrl }\">%{ artist }</a>" +msgid "Album containing %{ count } track, by <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" +msgid_plural "Album containing %{ count } tracks, by <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" msgstr[0] "Album zawiera %{ count } utwór od %{ artist }" msgstr[1] "Album zawiera %{ count } utwory od %{ artist }" msgstr[2] "Album zawiera %{ count } utworów od %{ artist }" -#: front/src/components/audio/PlayButton.vue:220 +#: front/src/components/audio/PlayButton.vue:246 #, fuzzy msgctxt "*/Queue/Message" msgid "%{ count } track was added to your queue" diff --git a/front/locales/pt_BR/LC_MESSAGES/app.po b/front/locales/pt_BR/LC_MESSAGES/app.po index 181c3e8dde290ec0a07053371da6394439b29d44..42d2ca05779ca17b84f93807d531e6e99160425c 100644 --- a/front/locales/pt_BR/LC_MESSAGES/app.po +++ b/front/locales/pt_BR/LC_MESSAGES/app.po @@ -7,9 +7,9 @@ msgid "" msgstr "" "Project-Id-Version: front 0.1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-05-16 10:35+0200\n" -"PO-Revision-Date: 2019-05-16 07:47+0000\n" -"Last-Translator: Daniele Lira Mereb <dlmereb@inf.ufpel.edu.br>\n" +"POT-Creation-Date: 2019-10-01 15:15+0200\n" +"PO-Revision-Date: 2019-06-06 09:17+0000\n" +"Last-Translator: Nitai Bezerra da Silva <nitaibezerra@protonmail.com>\n" "Language-Team: none\n" "Language: pt_BR\n" "MIME-Version: 1.0\n" @@ -34,23 +34,67 @@ msgid "(empty)" msgstr "(vazio)" #: front/src/components/auth/Authorize.vue:16 -#, fuzzy msgctxt "Content/Auth/Title" msgid "%{ app } wants to access your Funkwhale account" -msgstr "Entrar com sua conta Funkwhale" +msgstr "%{ app } quer acessar sua conta Funkwhale" -#: front/src/components/common/ActionTable.vue:68 +#: front/src/components/About.vue:173 src/components/Home.vue:56 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } active user" +msgid_plural "%{ count } active users" +msgstr[0] "%{ count } faixa" +msgstr[1] "%{ count } faixas" + +#: front/src/components/About.vue:182 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } albums" +msgid_plural "%{ count } albums" +msgstr[0] "%{ count } faixa" +msgstr[1] "%{ count } faixas" + +#: front/src/components/About.vue:152 +msgctxt "*/*/*" +msgid "%{ count } allowed domains" +msgid_plural "%{ count } allowed domains" +msgstr[0] "" +msgstr[1] "" + +#: front/src/components/About.vue:179 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } artists" +msgid_plural "%{ count } artists" +msgstr[0] "%{ count } faixa" +msgstr[1] "%{ count } faixas" + +#: front/src/components/About.vue:176 src/components/Home.vue:59 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } hour of music" +msgid_plural "%{ count } hours of music" +msgstr[0] "%{ count } faixa" +msgstr[1] "%{ count } faixas" + +#: front/src/components/About.vue:188 #, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } listenings" +msgid_plural "%{ count } listenings" +msgstr[0] "%{ count } faixa" +msgstr[1] "%{ count } faixas" + +#: front/src/components/common/ActionTable.vue:68 msgctxt "Content/*/Paragraph" msgid "%{ count } on %{ total } selected" msgid_plural "%{ count } on %{ total } selected" msgstr[0] "%{ count } de %{ total } selecionado" msgstr[1] "%{ count } de %{ total } selecionados" -#: front/src/components/Sidebar.vue:121 src/components/audio/album/Card.vue:52 +#: front/src/components/Sidebar.vue:125 src/components/audio/album/Card.vue:52 #: front/src/views/content/libraries/Card.vue:40 -#: src/views/content/remote/Card.vue:30 -#, fuzzy +#: src/views/content/remote/Card.vue:43 msgctxt "*/*/*" msgid "%{ count } track" msgid_plural "%{ count } tracks" @@ -58,7 +102,6 @@ msgstr[0] "%{ count } faixa" msgstr[1] "%{ count } faixas" #: front/src/components/library/ArtistBase.vue:13 -#, fuzzy msgctxt "Content/Artist/Paragraph" msgid "%{ count } track in %{ albumsCount } albums" msgid_plural "%{ count } tracks in %{ albumsCount } albums" @@ -66,15 +109,21 @@ msgstr[0] "%{ count } faixa em %{ albumsCount } álbuns" msgstr[1] "%{ count } faixas em %{ albumsCount } álbuns" #: front/src/components/library/radios/Builder.vue:81 -#, fuzzy msgctxt "Content/Radio/Table.Paragraph/Short" msgid "%{ count } track matching combined filters" msgid_plural "%{ count } tracks matching combined filters" msgstr[0] "%{ count } faixa encontrada com os filtros" msgstr[1] "%{ count } faixas encontradas com os filtros" -#: front/src/components/playlists/Card.vue:18 +#: front/src/components/About.vue:185 #, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } tracks" +msgid_plural "%{ count } tracks" +msgstr[0] "%{ count } faixa" +msgstr[1] "%{ count } faixas" + +#: front/src/components/playlists/Card.vue:28 msgctxt "Content/*/Card/List item" msgid "%{ count} track" msgid_plural "%{ count } tracks" @@ -99,9 +148,7 @@ msgstr "%{ minutes } min" #: front/src/components/notifications/NotificationRow.vue:40 msgctxt "Content/Notifications/Paragraph" msgid "%{ username } accepted your follow on library \"%{ library }\"" -msgstr "" -"%{ username } aceitou sua solicitação para seguir a biblioteca \"%{ library " -"}\"" +msgstr "%{ username } aceitou sua solicitação para seguir a biblioteca \"%{ library }\"" #: front/src/components/notifications/NotificationRow.vue:39 msgctxt "Content/Notifications/Paragraph" @@ -109,7 +156,6 @@ msgid "%{ username } followed your library \"%{ library }\"" msgstr "%{ username } seguiu sua biblioteca \"%{ library }\"" #: front/src/components/notifications/NotificationRow.vue:41 -#, fuzzy msgctxt "Content/Notifications/Paragraph" msgid "%{ username } wants to follow your library \"%{ library }\"" msgstr "%{ username } seguiu sua biblioteca \"%{ library }\"" @@ -121,12 +167,10 @@ msgstr "Perfil de %{ username }" #: front/src/components/playlists/PlaylistModal.vue:21 msgctxt "Popup/Playlist/Paragraph" -msgid "" -"<strong>%{ track }</strong> is already in <strong>%{ playlist }</strong>." -msgstr "" +msgid "<strong>%{ track }</strong> is already in <strong>%{ playlist }</strong>." +msgstr "<strong>%{ track }</strong> já está em <strong>%{ playlist }</strong>." -#: front/src/components/audio/artist/Card.vue:41 -#, fuzzy +#: front/src/components/audio/artist/Card.vue:11 msgctxt "Content/Artist/Card" msgid "1 album" msgid_plural "%{ count } albums" @@ -134,33 +178,50 @@ msgstr[0] "1 álbum" msgstr[1] "%{ count } álbuns" #: front/src/components/favorites/List.vue:10 -#, fuzzy msgctxt "Content/Favorites/Title" msgid "1 favorite" msgid_plural "%{ count } favorites" msgstr[0] "1 favorito" msgstr[1] "%{ count } favoritos" -#: front/src/components/Home.vue:64 +#: front/src/components/audio/artist/Card.vue:15 #, fuzzy -msgctxt "Content/Home/Title" -msgid "A clean library" -msgstr "Biblioteca limpa" +msgctxt "Content/Artist/Card" +msgid "1 track" +msgid_plural "%{ count } tracks" +msgstr[0] "Adicionar faixa" +msgstr[1] "Adicionar faixa" + +#: front/src/views/Notifications.vue:21 src/views/Notifications.vue:55 +msgctxt "*/*/*" +msgid "30 days" +msgstr "" + +#: front/src/views/Notifications.vue:22 src/views/Notifications.vue:56 +msgctxt "*/*/*" +msgid "60 days" +msgstr "" + +#: front/src/views/Notifications.vue:23 src/views/Notifications.vue:57 +msgctxt "*/*/*" +msgid "90 days" +msgstr "" #: front/src/components/library/FileUpload.vue:264 +#, fuzzy msgctxt "Content/Library/Help text" -msgid "A network error occured while uploading this file" +msgid "A network error occurred while uploading this file" msgstr "Ocorreu um erro de rede ao enviar este arquivo" -#: front/src/components/library/EditForm.vue:145 -#, fuzzy +#: front/src/components/library/EditForm.vue:161 msgctxt "*/*/Placeholder" msgid "A short summary describing your changes." -msgstr "Ocorreu um erro ao salvar suas alterações" +msgstr "Ocorreu um erro ao salvar suas alterações." #: front/src/components/About.vue:5 -msgctxt "Content/About/Title/Short, Noun" -msgid "About %{ instance }" +#, fuzzy +msgctxt "Content/Home/Header" +msgid "About %{ podName }" msgstr "Sobre %{ instance }" #: front/src/components/Footer.vue:6 @@ -168,7 +229,7 @@ msgctxt "Footer/About/Title" msgid "About %{instanceName}" msgstr "Sobre %{instanceName}" -#: front/src/components/Footer.vue:45 +#: front/src/components/Footer.vue:53 src/components/Home.vue:85 msgctxt "Footer/*/Title/Short" msgid "About Funkwhale" msgstr "Sobre o Funkwhale" @@ -178,9 +239,16 @@ msgctxt "Footer/About/List item.Link" msgid "About page" msgstr "Sobre" -#: front/src/components/About.vue:8 src/components/About.vue:67 -msgctxt "Content/About/Title" -msgid "About this instance" +#: front/src/components/Home.vue:19 +#, fuzzy +msgctxt "Content/Home/Header" +msgid "About this Funkwhale pod" +msgstr "Sobre o Funkwhale" + +#: front/src/components/About.vue:21 src/components/About.vue:51 +#, fuzzy +msgctxt "Content/About/Header" +msgid "About this pod" msgstr "Sobre esta instância" #: front/src/views/content/libraries/Detail.vue:48 @@ -193,105 +261,89 @@ msgctxt "Content/Library/Table/Short" msgid "Accepted" msgstr "Aceito" -#: front/src/components/auth/SubsonicTokenForm.vue:110 +#: front/src/components/auth/SubsonicTokenForm.vue:117 msgctxt "Content/Settings/Message" msgid "Access disabled" msgstr "Acesso desativado" -#: front/src/components/mixins/Translations.vue:73 -#: front/src/components/mixins/Translations.vue:74 +#: front/src/components/mixins/Translations.vue:85 +#: front/src/components/mixins/Translations.vue:86 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to audio files, libraries, artists, albums and tracks" -msgstr "" +msgstr "Ver arquivos de áudio, bibliotecas, artistas, álbuns e faixas" -#: front/src/components/mixins/Translations.vue:97 -#: front/src/components/mixins/Translations.vue:98 +#: front/src/components/mixins/Translations.vue:109 +#: front/src/components/mixins/Translations.vue:110 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to content filters" -msgstr "" +msgstr "Ver filtros" -#: front/src/components/mixins/Translations.vue:105 -#: front/src/components/mixins/Translations.vue:106 -#, fuzzy +#: front/src/components/mixins/Translations.vue:117 +#: front/src/components/mixins/Translations.vue:118 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to edits" -msgstr "Acesso desativado" +msgstr "Ver edições" -#: front/src/components/mixins/Translations.vue:69 -#: front/src/components/mixins/Translations.vue:70 +#: front/src/components/mixins/Translations.vue:81 +#: front/src/components/mixins/Translations.vue:82 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to email, username, and profile information" -msgstr "" +msgstr "Ver e-mail, nome de usuário e informações de perfil" -#: front/src/components/mixins/Translations.vue:77 -#: front/src/components/mixins/Translations.vue:78 -#, fuzzy +#: front/src/components/mixins/Translations.vue:89 +#: front/src/components/mixins/Translations.vue:90 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to favorites" -msgstr "Favoritar" +msgstr "Ver favoritos" -#: front/src/components/mixins/Translations.vue:85 -#: front/src/components/mixins/Translations.vue:86 +#: front/src/components/mixins/Translations.vue:97 +#: front/src/components/mixins/Translations.vue:98 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to follows" -msgstr "" +msgstr "Ver seguidos" -#: front/src/components/mixins/Translations.vue:81 -#: front/src/components/mixins/Translations.vue:82 +#: front/src/components/mixins/Translations.vue:93 +#: front/src/components/mixins/Translations.vue:94 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to listening history" -msgstr "" +msgstr "Ver histórico de escutadas" -#: front/src/components/mixins/Translations.vue:101 -#: front/src/components/mixins/Translations.vue:102 -#, fuzzy +#: front/src/components/mixins/Translations.vue:113 +#: front/src/components/mixins/Translations.vue:114 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to notifications" -msgstr "Suas notificações" +msgstr "Ver notificações" -#: front/src/components/mixins/Translations.vue:89 -#: front/src/components/mixins/Translations.vue:90 -#, fuzzy +#: front/src/components/mixins/Translations.vue:101 +#: front/src/components/mixins/Translations.vue:102 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to playlists" -msgstr "Adicionar à lista…" +msgstr "Ver listas" -#: front/src/components/mixins/Translations.vue:93 -#: front/src/components/mixins/Translations.vue:94 -#, fuzzy +#: front/src/components/mixins/Translations.vue:105 +#: front/src/components/mixins/Translations.vue:106 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to radios" -msgstr "Acesso desativado" - -#: front/src/components/Home.vue:101 -#, fuzzy -msgctxt "Content/Home/List item" -msgid "" -"Access your music from a clean interface that focuses on what really matters" -msgstr "" -"Ouça suas músicas numa interface limpa e focada no que realmente importa" +msgstr "Ver rádios" #: front/src/components/manage/library/UploadsTable.vue:67 -#: front/src/components/mixins/Translations.vue:45 +#: front/src/components/mixins/Translations.vue:55 #: front/src/views/admin/library/UploadDetail.vue:175 -#: front/src/components/mixins/Translations.vue:46 +#: front/src/components/mixins/Translations.vue:56 msgctxt "Content/*/*/Noun" msgid "Accessed date" msgstr "Data de acesso" -#: front/src/views/admin/library/LibraryDetail.vue:104 -#: front/src/views/admin/library/UploadDetail.vue:111 -#, fuzzy -msgctxt "*/*/*/Noun" -msgid "Account" -msgstr "Contas" - #: front/src/components/manage/library/LibrariesTable.vue:49 #: front/src/components/manage/library/UploadsTable.vue:61 -#, fuzzy -msgctxt "*/*/*" +#: front/src/components/manage/moderation/ReportCard.vue:156 +#: front/src/components/mixins/Report.vue:13 +#: front/src/views/admin/library/LibraryDetail.vue:113 +#: front/src/views/admin/library/UploadDetail.vue:111 +#: front/src/components/mixins/Report.vue:14 +msgctxt "*/*/*/Noun" msgid "Account" -msgstr "Contas" +msgstr "Conta" #: front/src/views/admin/moderation/AccountsDetail.vue:107 msgctxt "Content/Moderation/Title" @@ -303,10 +355,10 @@ msgctxt "Content/Settings/Title" msgid "Account settings" msgstr "Configurações da conta" -#: front/src/components/auth/Settings.vue:479 +#: front/src/components/auth/Settings.vue:544 msgctxt "Head/Settings/Title" msgid "Account Settings" -msgstr "Configurações de Conta" +msgstr "Configurações da conta" #: front/src/components/manage/users/UsersTable.vue:39 msgctxt "Content/Admin/Table.Label/Short, Noun" @@ -320,7 +372,7 @@ msgstr "E-mail da conta" #: front/src/views/admin/moderation/AccountsList.vue:3 #: front/src/views/admin/moderation/AccountsList.vue:24 -#: front/src/views/admin/moderation/Base.vue:8 +#: front/src/views/admin/moderation/Base.vue:11 msgctxt "*/Moderation/Title" msgid "Accounts" msgstr "Contas" @@ -331,32 +383,32 @@ msgid "Action" msgstr "Ação" #: front/src/components/common/ActionTable.vue:101 -#, fuzzy msgctxt "Content/*/Paragraph" msgid "Action %{ action } was launched successfully on %{ count } element" -msgid_plural "" -"Action %{ action } was launched successfully on %{ count } elements" +msgid_plural "Action %{ action } was launched successfully on %{ count } elements" msgstr[0] "Ação %{ action } aplicada com sucesso em %{ count } elemento" msgstr[1] "Ação %{ action } aplicada com sucesso em %{ count } elementos" #: front/src/components/common/ActionTable.vue:22 #: front/src/components/library/radios/Builder.vue:65 +#: front/src/components/manage/moderation/ReportCard.vue:210 msgctxt "Content/*/*/Noun" msgid "Actions" msgstr "Ações" -#: front/src/components/manage/users/UsersTable.vue:53 +#: front/src/components/manage/users/UsersTable.vue:54 msgctxt "Content/Admin/Table" msgid "Active" msgstr "Ativo" -#: front/src/views/admin/library/AlbumDetail.vue:134 -#: front/src/views/admin/library/ArtistDetail.vue:123 -#: front/src/views/admin/library/LibraryDetail.vue:138 -#: front/src/views/admin/library/TrackDetail.vue:186 +#: front/src/views/admin/library/AlbumDetail.vue:140 +#: front/src/views/admin/library/ArtistDetail.vue:128 +#: front/src/views/admin/library/LibraryDetail.vue:147 +#: front/src/views/admin/library/TagDetail.vue:83 +#: front/src/views/admin/library/TrackDetail.vue:192 #: front/src/views/admin/library/UploadDetail.vue:160 -#: front/src/views/admin/moderation/AccountsDetail.vue:220 -#: front/src/views/admin/moderation/DomainsDetail.vue:136 +#: front/src/views/admin/moderation/AccountsDetail.vue:221 +#: front/src/views/admin/moderation/DomainsDetail.vue:173 msgctxt "Content/Moderation/Title" msgid "Activity" msgstr "Atividade" @@ -367,7 +419,7 @@ msgctxt "Content/Settings/Dropdown.Label/Noun" msgid "Activity visibility" msgstr "Visibilidade da atividade" -#: front/src/views/admin/moderation/DomainsList.vue:18 +#: front/src/views/admin/moderation/DomainsList.vue:22 msgctxt "Content/Moderation/Button/Verb" msgid "Add" msgstr "Adicionar" @@ -378,10 +430,9 @@ msgid "Add a domain" msgstr "Adicionar domÃnio" #: front/src/views/admin/moderation/AccountsDetail.vue:79 -#, fuzzy msgctxt "Content/Moderation/Button/Verb" msgid "Add a moderation policy" -msgstr "Adicionar nova regra de moderação" +msgstr "Adicionar regra de moderação" #: front/src/components/manage/moderation/InstancePolicyForm.vue:4 msgctxt "Content/Moderation/Card.Button.Label/Verb" @@ -397,7 +448,7 @@ msgstr "Adicionar e gerenciar conteúdo" #: front/src/components/playlists/PlaylistModal.vue:31 msgctxt "*/Playlist/Button.Label/Verb" msgid "Add anyways" -msgstr "" +msgstr "Adicionar assim mesmo" #: front/src/components/Sidebar.vue:75 src/views/content/Base.vue:18 msgctxt "*/Library/*/Verb" @@ -414,7 +465,21 @@ msgctxt "Content/Radio/Paragraph" msgid "Add filters to customize your radio" msgstr "Adicionar filtros para personalizar sua rádio" -#: front/src/components/audio/PlayButton.vue:75 +#: front/src/components/manage/moderation/NoteForm.vue:12 +#, fuzzy +msgctxt "Content/Moderation/Button.Label/Verb" +msgid "Add note" +msgstr "Adicionar conteúdo" + +#: front/src/components/manage/moderation/DomainsTable.vue:191 +#: front/src/views/admin/moderation/DomainsDetail.vue:46 +#: front/src/views/admin/moderation/DomainsList.vue:18 +#, fuzzy +msgctxt "Content/Moderation/Action/Verb" +msgid "Add to allow-list" +msgstr "Adicionar à lista…" + +#: front/src/components/audio/PlayButton.vue:91 msgctxt "*/Queue/Dropdown/Button/Title" msgid "Add to current queue" msgstr "Adicionar à fila atual" @@ -446,7 +511,7 @@ msgctxt "Popup/Playlist/Table.Button.Label/Verb" msgid "Add track" msgstr "Adicionar faixa" -#: front/src/components/manage/users/UsersTable.vue:69 +#: front/src/components/manage/users/UsersTable.vue:70 msgctxt "Content/Admin/Table.User role" msgid "Admin" msgstr "Administrador(a)" @@ -456,51 +521,49 @@ msgctxt "Sidebar/Admin/Title/Noun" msgid "Administration" msgstr "Administração" -#: front/src/views/admin/library/TrackDetail.vue:107 -msgctxt "*/*/*/Noun" -msgid "Album" -msgstr "Ãlbum" - -#: front/src/components/audio/SearchBar.vue:26 +#: front/src/components/audio/SearchBar.vue:33 #: src/components/audio/track/Table.vue:9 -#: front/src/components/library/AlbumBase.vue:152 -#: front/src/components/library/ArtistBase.vue:194 +#: front/src/components/library/AlbumBase.vue:170 +#: front/src/components/library/ArtistBase.vue:212 #: front/src/components/manage/library/TracksTable.vue:40 #: front/src/components/metadata/Search.vue:134 +#: src/components/mixins/Report.vue:41 +#: front/src/views/admin/library/TrackDetail.vue:113 #: front/src/views/content/libraries/FilesTable.vue:57 +#: front/src/components/mixins/Report.vue:42 msgctxt "*/*/*" msgid "Album" msgstr "Ãlbum" -#: front/src/views/admin/library/TrackDetail.vue:128 -#, fuzzy +#: front/src/views/admin/library/TrackDetail.vue:134 msgctxt "*/*/*/Noun" msgid "Album artist" msgstr "Ãlbuns deste artista" -#: front/src/views/admin/library/AlbumDetail.vue:92 -#, fuzzy +#: front/src/views/admin/library/AlbumDetail.vue:98 msgctxt "Content/Moderation/Title" msgid "Album data" -msgstr "Nome do álbum" +msgstr "Dados do álbum" -#: front/src/components/mixins/Translations.vue:51 -#: front/src/components/mixins/Translations.vue:52 +#: front/src/components/mixins/Translations.vue:61 +#: front/src/components/mixins/Translations.vue:62 msgctxt "Content/*/Dropdown/Noun" msgid "Album name" msgstr "Nome do álbum" #: front/src/components/audio/Search.vue:19 -#: src/components/instance/Stats.vue:48 -#: front/src/components/library/Albums.vue:120 -#: src/components/library/Library.vue:7 +#: src/components/library/Albums.vue:129 +#: front/src/components/library/Library.vue:7 +#: src/components/library/TagDetail.vue:28 #: front/src/components/manage/library/ArtistsTable.vue:41 +#: front/src/components/manage/library/TagsTable.vue:43 #: front/src/views/admin/library/AlbumsList.vue:24 -#: front/src/views/admin/library/ArtistDetail.vue:241 +#: front/src/views/admin/library/ArtistDetail.vue:256 #: front/src/views/admin/library/Base.vue:11 -#: front/src/views/admin/library/LibraryDetail.vue:219 -#: front/src/views/admin/moderation/AccountsDetail.vue:354 -#: front/src/views/admin/moderation/DomainsDetail.vue:264 +#: front/src/views/admin/library/LibraryDetail.vue:238 +#: front/src/views/admin/library/TagDetail.vue:133 +#: front/src/views/admin/moderation/AccountsDetail.vue:366 +#: front/src/views/admin/moderation/DomainsDetail.vue:301 msgctxt "*/*/*" msgid "Albums" msgstr "Ãlbuns" @@ -514,91 +577,103 @@ msgstr "Ãlbuns deste artista" #: front/src/components/manage/library/LibrariesTable.vue:13 #: front/src/components/manage/library/UploadsTable.vue:13 #: front/src/components/manage/library/UploadsTable.vue:22 +#: front/src/components/manage/moderation/DomainsTable.vue:11 #: front/src/components/manage/users/InvitationsTable.vue:19 +#: front/src/components/moderation/ReportCategoryDropdown.vue:32 +#: front/src/views/admin/moderation/ReportsList.vue:17 #: front/src/views/content/libraries/FilesTable.vue:13 msgctxt "Content/*/Dropdown" msgid "All" msgstr "Todos" #: front/src/components/common/ActionTable.vue:59 -#, fuzzy msgctxt "Content/*/Paragraph" msgid "All %{ count } element selected" msgid_plural "All %{ count } elements selected" -msgstr[0] "%{ count } de %{ total } selecionado" -msgstr[1] "%{ count } de %{ total } selecionados" +msgstr[0] "%{ count } elemento selecionado" +msgstr[1] "%{ count } elementos selecionados" #: front/src/components/auth/Authorize.vue:107 msgctxt "Head/Authorize/Title" msgid "Allow application" +msgstr "Permitir aplicativo" + +#: front/src/components/About.vue:136 +msgctxt "*/*/*" +msgid "Allow-list" msgstr "" +#: front/src/components/About.vue:149 +#, fuzzy +msgctxt "*/*/*" +msgid "Allowed domains" +msgstr "Adicionar domÃnio" + #: front/src/components/library/ImportStatusModal.vue:17 +#, fuzzy msgctxt "Popup/Import/Message" -msgid "" -"An error occured during upload processing. You will find more information " -"below." -msgstr "" +msgid "An error occurred during upload processing. You will find more information below." +msgstr "Ocorreu um erro durante o envio. Veja mais sobre abaixo." #: front/src/components/playlists/Editor.vue:13 +#, fuzzy msgctxt "Content/Playlist/Error message.Title" -msgid "An error occured while saving your changes" +msgid "An error occurred while saving your changes" msgstr "Ocorreu um erro ao salvar suas alterações" #: front/src/components/federation/FetchButton.vue:21 #, fuzzy msgctxt "Popup/*/Message.Content" -msgid "An error occured while trying to refresh data:" -msgstr "Ocorreu um erro ao salvar suas alterações" +msgid "An error occurred while trying to refresh data:" +msgstr "Ocorreu um erro ao salvar suas alterações:" #: front/src/components/federation/FetchButton.vue:41 #, fuzzy msgctxt "*/*/Error" -msgid "An HTTP error occured while contacting the remote server" -msgstr "Ocorreu um erro ao salvar suas alterações" - -#: front/src/components/auth/Login.vue:10 -msgctxt "Content/Login/Error message/List item" -msgid "" -"An unknown error happend, this can mean the server is down or cannot be " -"reached" -msgstr "" -"Ocorreu um erro desconhecido, o servidor pode ter caÃdo ou estar inacessÃvel" +msgid "An HTTP error occurred while contacting the remote server" +msgstr "Ocorreu um erro no HTTP ao contatar o servidor remoto" #: front/src/components/library/ImportStatusModal.vue:145 +#, fuzzy msgctxt "Popup/Import/Error.Label" -msgid "An unkwown error occured" +msgid "An unknown error occurred" +msgstr "Ocorreu um erro desconhecido" + +#: front/src/components/About.vue:123 +msgctxt "*/*/*" +msgid "Anonymous access" +msgstr "" + +#: front/src/components/moderation/ReportModal.vue:54 +msgctxt "Popup/Moderation/Error message" +msgid "Anonymous reports are disabled, please sign-in to submit a report." msgstr "" #: front/src/components/auth/Settings.vue:175 #: src/components/auth/Settings.vue:225 -#, fuzzy msgctxt "*/*/*/Noun" msgid "Application" -msgstr "Ação" +msgstr "Aplicativo" #: front/src/components/auth/ApplicationEdit.vue:12 msgctxt "Content/Applications/Title" msgid "Application details" -msgstr "" +msgstr "Detalhes do aplicativo" #: front/src/components/auth/ApplicationEdit.vue:21 -#, fuzzy msgctxt "Content/Applications/Label" msgid "Application ID" -msgstr "Ação" +msgstr "ID do aplicativo" #: front/src/components/auth/ApplicationEdit.vue:16 msgctxt "Content/Application/Paragraph/" -msgid "" -"Application ID and secret are really sensitive values and must be treated " -"like passwords. Do not share those with anyone else." -msgstr "" +msgid "Application ID and secret are really sensitive values and must be treated like passwords. Do not share those with anyone else." +msgstr "A ID e o segredo do aplicativo são valores realmente sensÃveis e devem ser tratados como senhas. Não compartilhe isso com mais ninguém." #: front/src/components/auth/ApplicationEdit.vue:25 msgctxt "Content/Applications/Label" msgid "Application secret" -msgstr "" +msgstr "Segredo do aplicativo" #: front/src/components/library/EditCard.vue:81 #: front/src/components/notifications/NotificationRow.vue:66 @@ -608,45 +683,41 @@ msgstr "Aprovar" #: front/src/components/library/EditCard.vue:25 #: front/src/components/manage/library/EditsCardList.vue:21 -#, fuzzy msgctxt "Content/*/*/Short" msgid "Approved" -msgstr "Aprovar" +msgstr "Aprovado" #: front/src/components/library/EditCard.vue:21 msgctxt "Content/Library/Card/Short" msgid "Approved and applied" -msgstr "" +msgstr "Aprovado e aplicado" #: front/src/components/auth/Logout.vue:5 msgctxt "Content/Login/Title" msgid "Are you sure you want to log out?" msgstr "Tem certeza de que deseja sair?" +#: front/src/components/audio/SearchBar.vue:32 +#: src/components/audio/track/Table.vue:8 #: front/src/components/manage/library/AlbumsTable.vue:40 #: front/src/components/manage/library/TracksTable.vue:41 -msgctxt "*/*/*" -msgid "Artist" -msgstr "Artista" - -#: front/src/components/audio/SearchBar.vue:25 -#: src/components/audio/track/Table.vue:8 #: front/src/components/metadata/Search.vue:130 -#: front/src/views/admin/library/AlbumDetail.vue:108 -#: front/src/views/admin/library/TrackDetail.vue:118 -#: front/src/views/content/libraries/FilesTable.vue:56 +#: src/components/mixins/Report.vue:55 +#: front/src/views/admin/library/AlbumDetail.vue:114 +#: front/src/views/admin/library/TrackDetail.vue:124 +#: front/src/views/content/libraries/FilesTable.vue:56 src/entities.js:12 +#: front/src/components/mixins/Report.vue:56 msgctxt "*/*/*/Noun" msgid "Artist" msgstr "Artista" -#: front/src/views/admin/library/ArtistDetail.vue:91 -#, fuzzy +#: front/src/views/admin/library/ArtistDetail.vue:96 msgctxt "Content/Moderation/Title" msgid "Artist data" -msgstr "Nome do(a) artista" +msgstr "Dados do(a) artista" -#: front/src/components/mixins/Translations.vue:52 -#: front/src/components/mixins/Translations.vue:53 +#: front/src/components/mixins/Translations.vue:62 +#: front/src/components/mixins/Translations.vue:63 msgctxt "Content/*/Dropdown/Noun" msgid "Artist name" msgstr "Nome do(a) artista" @@ -656,36 +727,36 @@ msgctxt "*/Search/Input.Placeholder" msgid "Artist, album, track…" msgstr "Artista, álbum, faixa…" +#: front/src/components/audio/Search.vue:10 +#: src/components/library/Artists.vue:117 +#: front/src/components/library/Library.vue:10 +#: front/src/components/library/TagDetail.vue:19 +#: front/src/components/manage/library/TagsTable.vue:42 #: front/src/views/admin/library/ArtistsList.vue:24 #: front/src/views/admin/library/Base.vue:8 -#: front/src/views/admin/library/LibraryDetail.vue:209 -msgctxt "*/*/*" -msgid "Artists" -msgstr "Artistas" - -#: front/src/components/audio/Search.vue:10 -#: src/components/instance/Stats.vue:42 -#: front/src/components/library/Artists.vue:117 -#: src/components/library/Library.vue:10 -#: front/src/views/admin/moderation/AccountsDetail.vue:346 -#: front/src/views/admin/moderation/DomainsDetail.vue:254 +#: front/src/views/admin/library/LibraryDetail.vue:228 +#: front/src/views/admin/library/TagDetail.vue:123 +#: front/src/views/admin/moderation/AccountsDetail.vue:358 +#: front/src/views/admin/moderation/DomainsDetail.vue:291 msgctxt "*/*/*/Noun" msgid "Artists" msgstr "Artistas" #: front/src/components/favorites/List.vue:34 -#: src/components/library/Albums.vue:25 -#: front/src/components/library/Artists.vue:25 +#: src/components/library/Albums.vue:29 +#: front/src/components/library/Artists.vue:29 #: src/components/library/Radios.vue:44 #: front/src/components/manage/library/AlbumsTable.vue:21 #: front/src/components/manage/library/ArtistsTable.vue:21 #: front/src/components/manage/library/EditsCardList.vue:39 #: front/src/components/manage/library/LibrariesTable.vue:30 +#: front/src/components/manage/library/TagsTable.vue:21 #: front/src/components/manage/library/TracksTable.vue:21 #: front/src/components/manage/library/UploadsTable.vue:40 #: front/src/components/manage/moderation/AccountsTable.vue:21 -#: front/src/components/manage/moderation/DomainsTable.vue:19 +#: front/src/components/manage/moderation/DomainsTable.vue:27 #: front/src/components/manage/users/UsersTable.vue:19 +#: front/src/views/admin/moderation/ReportsList.vue:44 #: front/src/views/content/libraries/FilesTable.vue:31 #: front/src/views/playlists/List.vue:27 msgctxt "Content/Search/Dropdown" @@ -697,18 +768,24 @@ msgctxt "Content/Signup/Button.Label/Verb" msgid "Ask for a password reset" msgstr "Solicitar redefinição de senha" -#: front/src/views/admin/library/AlbumDetail.vue:198 -#: front/src/views/admin/library/ArtistDetail.vue:187 -#: front/src/views/admin/library/LibraryDetail.vue:176 -#: front/src/views/admin/library/TrackDetail.vue:250 +#: front/src/components/manage/moderation/ReportCard.vue:72 +msgctxt "Content/Moderation/*" +msgid "Assigned to" +msgstr "" + +#: front/src/views/admin/library/AlbumDetail.vue:214 +#: front/src/views/admin/library/ArtistDetail.vue:202 +#: front/src/views/admin/library/LibraryDetail.vue:195 +#: front/src/views/admin/library/TagDetail.vue:113 +#: front/src/views/admin/library/TrackDetail.vue:266 #: front/src/views/admin/library/UploadDetail.vue:191 -#: front/src/views/admin/moderation/AccountsDetail.vue:274 -#: front/src/views/admin/moderation/DomainsDetail.vue:202 +#: front/src/views/admin/moderation/AccountsDetail.vue:285 +#: front/src/views/admin/moderation/DomainsDetail.vue:239 msgctxt "Content/Moderation/Title" msgid "Audio content" -msgstr "Conteúdo do áudio" +msgstr "Conteúdo de áudio" -#: front/src/components/ShortcutsModal.vue:55 +#: front/src/components/ShortcutsModal.vue:92 msgctxt "Popup/Keyboard shortcuts/Title" msgid "Audio player shortcuts" msgstr "Atalhos do reprodutor de áudio" @@ -716,17 +793,17 @@ msgstr "Atalhos do reprodutor de áudio" #: front/src/components/auth/Authorize.vue:47 msgctxt "Content/Signup/Button.Label/Verb" msgid "Authorize %{ app }" -msgstr "" +msgstr "Permitir %{ app }" #: front/src/components/auth/Authorize.vue:4 msgctxt "Content/Auth/Title/Verb" msgid "Authorize third-party app" -msgstr "" +msgstr "Permitir aplicativo de terceiros" #: front/src/components/auth/Settings.vue:162 msgctxt "Content/Settings/Title/Noun" msgid "Authorized apps" -msgstr "" +msgstr "Aplicativos permitidos" #: front/src/components/playlists/PlaylistModal.vue:40 msgctxt "Popup/Playlist/Title" @@ -746,15 +823,14 @@ msgstr "Voltar à entrada" #: front/src/components/auth/ApplicationEdit.vue:9 #: front/src/components/auth/ApplicationNew.vue:5 -#, fuzzy msgctxt "Content/Applications/Link" msgid "Back to settings" -msgstr "Atualizar configurações" +msgstr "Voltar à configurações" #: front/src/components/library/TrackDetail.vue:48 -#: front/src/components/mixins/Translations.vue:55 +#: front/src/components/mixins/Translations.vue:67 #: front/src/views/admin/library/UploadDetail.vue:227 -#: front/src/components/mixins/Translations.vue:56 +#: front/src/components/mixins/Translations.vue:68 msgctxt "Content/Track/*/Noun" msgid "Bitrate" msgstr "Taxa de bits" @@ -767,13 +843,8 @@ msgstr "Bloquear tudo" #: front/src/components/manage/moderation/InstancePolicyForm.vue:112 msgctxt "Content/Moderation/Help text" -msgid "" -"Block everything from this account or domain. This will prevent any " -"interaction with the entity, and purge related content (uploads, libraries, " -"follows, etc.)" -msgstr "" -"Bloquear tudo desta conta ou domÃnio. Isso impedirá a interação e eliminará " -"conteúdos relacionados (envios, bibliotecas, seguidos, etc.)" +msgid "Block everything from this account or domain. This will prevent any interaction with the entity, and purge related content (uploads, libraries, follows, etc.)" +msgstr "Bloquear tudo desta conta ou domÃnio. Isso impedirá a interação e eliminará conteúdos relacionados (envios, bibliotecas, seguidos, etc.)" #: front/src/components/Sidebar.vue:18 src/components/library/Library.vue:4 msgctxt "*/Library/*/Verb" @@ -785,11 +856,16 @@ msgctxt "Sidebar/Library/List item.Link/Verb" msgid "Browse library" msgstr "Explorar biblioteca" -#: front/src/components/library/Albums.vue:4 +#: front/src/components/Home.vue:132 #, fuzzy +msgctxt "Content/Home/Link" +msgid "Browse public content" +msgstr "Atualizar tabela de conteúdo" + +#: front/src/components/library/Albums.vue:4 msgctxt "Content/Album/Title" msgid "Browsing albums" -msgstr "Explorando rádios" +msgstr "Explorando álbums" #: front/src/components/library/Artists.vue:4 msgctxt "Content/Artist/Title" @@ -816,43 +892,43 @@ msgctxt "Content/Album/Card" msgid "By %{ artist }" msgstr "De %{ artist }" -#: front/src/views/content/remote/Card.vue:112 +#: front/src/views/content/remote/Card.vue:125 msgctxt "Popup/Library/Paragraph" msgid "By unfollowing this library, you loose access to its content." -msgstr "" -"Ao deixar de seguir esta biblioteca, você perderá o acesso ao seu conteúdo." +msgstr "Ao deixar de seguir esta biblioteca, você não poderá mais ver o seu conteúdo." -#: front/src/views/admin/library/AlbumDetail.vue:214 -#: front/src/views/admin/library/ArtistDetail.vue:203 -#: front/src/views/admin/library/LibraryDetail.vue:192 -#: front/src/views/admin/library/TrackDetail.vue:266 +#: front/src/views/admin/library/AlbumDetail.vue:230 +#: front/src/views/admin/library/ArtistDetail.vue:218 +#: front/src/views/admin/library/LibraryDetail.vue:211 +#: front/src/views/admin/library/TrackDetail.vue:282 #: front/src/views/admin/library/UploadDetail.vue:208 -#: front/src/views/admin/moderation/AccountsDetail.vue:290 -#: front/src/views/admin/moderation/DomainsDetail.vue:217 +#: front/src/views/admin/moderation/AccountsDetail.vue:301 +#: front/src/views/admin/moderation/DomainsDetail.vue:254 msgctxt "Content/Moderation/Table.Label/Noun" msgid "Cached size" msgstr "Tamanho em cache" #: front/src/components/SetInstanceModal.vue:37 #: front/src/components/common/DangerousButton.vue:17 -#: front/src/components/library/AlbumBase.vue:36 -#: front/src/components/library/ArtistBase.vue:47 -#: front/src/components/library/EditForm.vue:95 -#: front/src/components/library/TrackBase.vue:55 +#: front/src/components/library/AlbumBase.vue:37 +#: front/src/components/library/ArtistBase.vue:48 +#: front/src/components/library/EditForm.vue:107 +#: front/src/components/library/TrackBase.vue:53 #: front/src/components/library/radios/Filter.vue:53 #: front/src/components/manage/moderation/InstancePolicyForm.vue:54 #: front/src/components/moderation/FilterModal.vue:39 +#: front/src/components/moderation/ReportModal.vue:59 #: front/src/components/playlists/PlaylistModal.vue:26 #: front/src/components/playlists/PlaylistModal.vue:77 +#: front/src/views/playlists/Detail.vue:62 msgctxt "*/*/Button.Label/Verb" msgid "Cancel" msgstr "Cancelar" -#: front/src/views/content/remote/Card.vue:97 -#, fuzzy +#: front/src/views/content/remote/Card.vue:110 msgctxt "Content/Library/Card.Paragraph" msgid "Cancel follow request" -msgstr "Solicitações de seguidor pendentes" +msgstr "Cancelar solicitação para seguir" #: front/src/components/library/radios/Builder.vue:64 msgctxt "Content/Radio/Table.Label/Noun (Value is a number of Tracks)" @@ -862,8 +938,15 @@ msgstr "Candidatos(as)" #: front/src/components/library/FileUpload.vue:261 msgctxt "Content/Library/Help text" msgid "Cannot upload this file, ensure it is not too big" +msgstr "Não é possÃvel enviar este arquivo, certifique-se de que não é grande demais" + +#: front/src/components/manage/moderation/ReportCard.vue:30 +#: front/src/components/mixins/Translations.vue:42 +#: front/src/components/moderation/ReportCategoryDropdown.vue:2 +#: front/src/components/mixins/Translations.vue:43 +msgctxt "*/*/*" +msgid "Category" msgstr "" -"Não é possÃvel enviar este arquivo, certifique-se de que não é grande demais" #: front/src/components/Footer.vue:21 msgctxt "Footer/Settings/Dropdown.Label/Short, Verb" @@ -880,6 +963,11 @@ msgctxt "Content/Settings/Button.Label" msgid "Change password" msgstr "Alterar senha" +#: front/src/components/Footer.vue:37 +msgctxt "Footer/Settings/Dropdown.Label/Short, Verb" +msgid "Change theme" +msgstr "" + #: front/src/views/auth/PasswordResetConfirm.vue:62 msgctxt "*/Signup/Title" msgid "Change your password" @@ -897,42 +985,32 @@ msgstr "Alterações sincronizadas com o servidor" #: front/src/components/auth/Settings.vue:71 msgctxt "Content/Settings/Paragraph'" -msgid "" -"Changing your password will also change your Subsonic API password if you " -"have requested one." -msgstr "" -"A alteração de sua senha também modificará - caso use - a senha da API " -"Subsonic." +msgid "Changing your password will also change your Subsonic API password if you have requested one." +msgstr "A alteração de sua senha também modificará - caso use - a senha da API Subsonic." #: front/src/components/auth/Settings.vue:98 -#, fuzzy msgctxt "Popup/Settings/Paragraph" msgid "Changing your password will have the following consequences:" -msgstr "A alteração da senha terá as seguintes consequências" +msgstr "Alterar a senha terá as seguintes consequências:" -#: front/src/components/Footer.vue:40 +#: front/src/components/Footer.vue:48 msgctxt "Footer/*/List item.Link" msgid "Chat room" msgstr "Sala de chat" #: front/src/components/auth/ApplicationForm.vue:24 msgctxt "Content/Applications/Paragraph/" -msgid "" -"Checking the parent \"Read\" or \"Write\" scopes implies access to all the " -"corresponding children scopes." -msgstr "" +msgid "Checking the parent \"Read\" or \"Write\" scopes implies access to all the corresponding children scopes." +msgstr "Verificar \"Ler\" e \"Escrever\" implica em verificar também todos os seus dependentes." #: front/src/components/SetInstanceModal.vue:2 msgctxt "Popup/Instance/Title" msgid "Choose your instance" msgstr "Escolha sua instância" -#: front/src/components/manage/users/InvitationForm.vue:37 -msgctxt "Content/Admin/Button.Label/Verb" -msgid "Clear" -msgstr "Limpar" - #: front/src/components/library/EditForm.vue:75 +#: front/src/components/library/EditForm.vue:88 +#: front/src/components/manage/users/InvitationForm.vue:37 msgctxt "Content/Library/Button.Label" msgid "Clear" msgstr "Limpar" @@ -943,45 +1021,46 @@ msgctxt "*/Playlist/Button.Label/Verb" msgid "Clear playlist" msgstr "Limpar lista" -#: front/src/components/audio/Player.vue:642 -msgctxt "Sidebar/Player/Icon.Tooltip/Verb" -msgid "Clear your queue" +#: front/src/components/ShortcutsModal.vue:144 +#, fuzzy +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Clear queue" msgstr "Limpar sua fila" -#: front/src/components/Home.vue:44 -msgctxt "Content/Home/List item/Verb" -msgid "Click once, listen for hours using built-in radios" -msgstr "Clique uma vez e ouça as rádios nativas por horas" +#: front/src/components/audio/Player.vue:668 +msgctxt "Sidebar/Player/Icon.Tooltip/Verb" +msgid "Clear your queue" +msgstr "Limpar sua fila" #: front/src/components/mixins/Translations.vue:21 #: front/src/components/mixins/Translations.vue:22 msgctxt "Content/Library/Link.Title" -msgid "" -"Click to display more information about the import process for this upload" -msgstr "" +msgid "Click to display more information about the import process for this upload" +msgstr "Clique para mostrar mais informações sobre o processo de importação desse envio" #: front/src/components/library/FileUpload.vue:82 msgctxt "Content/Library/Paragraph/Call to action" msgid "Click to select files to upload or drag and drop files or directories" -msgstr "" -"Clique para selecionar arquivos para enviar ou arraste e solte arquivos ou " -"pastas" +msgstr "Clique para selecionar arquivos para enviar ou arraste e solte arquivos ou pastas" +#: front/src/components/ShortcutsModal.vue:38 #: front/src/components/federation/FetchButton.vue:85 #: front/src/components/library/ImportStatusModal.vue:79 +#: front/src/components/manage/moderation/InstancePolicyModal.vue:34 msgctxt "*/*/Button.Label/Verb" msgid "Close" msgstr "Fechar" -#: front/src/components/ShortcutsModal.vue:20 -msgctxt "Popup/Keyboard shortcuts/Button.Label/Verb" -msgid "Close" -msgstr "Fechar" - #: front/src/components/federation/FetchButton.vue:88 msgctxt "*/*/Button.Label/Verb" msgid "Close and reload page" -msgstr "" +msgstr "Fechar e atualizar a página" + +#: front/src/components/About.vue:94 +#, fuzzy +msgctxt "*/*/*/State of registrations" +msgid "Closed" +msgstr "Fechar" #: front/src/components/manage/users/InvitationForm.vue:26 #: front/src/components/manage/users/InvitationsTable.vue:42 @@ -990,8 +1069,9 @@ msgid "Code" msgstr "Código" #: front/src/components/audio/album/Card.vue:41 -#: front/src/components/audio/artist/Card.vue:33 -msgctxt "Content/*/Card.Link/Verb" +#: front/src/components/common/CollapseLink.vue:3 +#, fuzzy +msgctxt "*/*/Button,Label" msgid "Collapse" msgstr "Ocultar" @@ -1015,48 +1095,52 @@ msgctxt "Content/Signup/Form.Label" msgid "Confirmation code" msgstr "Código de confirmação" +#: front/src/components/About.vue:67 src/components/Home.vue:65 +msgctxt "Content/Home/Header/Name" +msgid "Contact" +msgstr "" + #: front/src/components/moderation/FilterModal.vue:90 msgctxt "*/Moderation/Message" msgid "Content filter successfully added" -msgstr "" - -#: front/src/components/mixins/Translations.vue:96 -#: front/src/components/mixins/Translations.vue:97 -#, fuzzy -msgctxt "Content/OAuth Scopes/Label" -msgid "Content filters" -msgstr "Selecione um filtro" +msgstr "Filtro adicionado" #: front/src/components/auth/Settings.vue:116 -#, fuzzy +#: front/src/components/mixins/Translations.vue:108 +#: front/src/components/mixins/Translations.vue:109 msgctxt "Content/Settings/Title/Noun" msgid "Content filters" -msgstr "Selecione um filtro" +msgstr "Filtros" #: front/src/components/auth/Settings.vue:119 msgctxt "Content/Settings/Paragraph" -msgid "" -"Content filters help you hide content you don't want to see on the service." -msgstr "" +msgid "Content filters help you hide content you don't want to see on the service." +msgstr "Filtros ajudam você a ocultar o que você não quer ver no Funkwhale." #: front/src/components/common/ActionTable.vue:8 msgctxt "Content/*/Button.Help text.Paragraph" msgid "Content have been updated, click refresh to see up-to-date content" -msgstr "Conteúdo modificado, atualize a página para ver o conteúdo atual" +msgstr "Conteúdo alterado, atualize a página" -#: front/src/components/Footer.vue:48 +#: front/src/components/About.vue:46 +#, fuzzy +msgctxt "Content/About/Header" +msgid "Contents" +msgstr "Filtros" + +#: front/src/components/Footer.vue:56 msgctxt "Footer/*/List item.Link" msgid "Contribute" msgstr "Colaborar" -#: front/src/components/audio/EmbedWizard.vue:19 +#: front/src/components/audio/EmbedWizard.vue:29 #: front/src/components/common/CopyInput.vue:8 +#: front/src/components/forms/PasswordInput.vue:43 msgctxt "*/*/Button.Label/Short, Verb" msgid "Copy" msgstr "Copiar" #: front/src/components/playlists/Editor.vue:194 -#, fuzzy msgctxt "Content/Playlist/Button.Tooltip/Verb" msgid "Copy queued tracks to playlist" msgstr "Copiar faixas da fila atual para lista" @@ -1064,16 +1148,16 @@ msgstr "Copiar faixas da fila atual para lista" #: front/src/components/auth/Authorize.vue:55 msgctxt "Content/Auth/Paragraph" msgid "Copy-paste the following code in the application:" -msgstr "" +msgstr "Copie e cole no aplicativo o seguinte código:" -#: front/src/components/audio/EmbedWizard.vue:21 +#: front/src/components/audio/EmbedWizard.vue:31 msgctxt "Popup/Embed/Paragraph" msgid "Copy/paste this code in your website HTML" msgstr "Copie e cole este código HTML em seu site" #: front/src/components/library/TrackDetail.vue:10 -#: front/src/views/admin/library/TrackDetail.vue:153 -msgctxt "Content/Track/Table.Label/Noun" +#: front/src/views/admin/library/TrackDetail.vue:159 src/edits.js:77 +msgctxt "Content/Track/*/Noun" msgid "Copyright" msgstr "Direitos autorais" @@ -1087,33 +1171,22 @@ msgctxt "Content/Library/Error message.Title" msgid "Could not fetch remote library" msgstr "Não foi possÃvel obter a biblioteca remota" -#: front/src/components/Home.vue:80 -msgctxt "Content/Home/List item" -msgid "Covers, lyrics, our goal is to have them all ;)" -msgstr "Capas, letras, nosso objetivo é ter tudo isso! ;)" - #: front/src/components/manage/moderation/InstancePolicyForm.vue:58 msgctxt "Content/Moderation/Card.Button.Label/Verb" msgid "Create" msgstr "Criar" -#: front/src/components/auth/Signup.vue:4 +#: front/src/views/auth/Signup.vue:4 msgctxt "Content/Signup/Title" msgid "Create a funkwhale account" msgstr "Criar conta Funkwhale" -#: front/src/components/auth/Settings.vue:220 -#, fuzzy -msgctxt "Content/Settings/Button.Label" -msgid "Create a new application" -msgstr "Criar nova lista" - #: front/src/components/auth/ApplicationNew.vue:8 #: front/src/components/auth/ApplicationNew.vue:41 -#, fuzzy -msgctxt "Content/Applications/Title" +#: front/src/components/auth/Settings.vue:220 +msgctxt "Content/Settings/Button.Label" msgid "Create a new application" -msgstr "Criar nova lista" +msgstr "Criar novo aplicativo" #: front/src/views/content/libraries/Home.vue:14 msgctxt "Content/Library/Link/Verb" @@ -1125,23 +1198,22 @@ msgctxt "Popup/Playlist/Title/Verb" msgid "Create a new playlist" msgstr "Criar nova lista" -#: front/src/components/Sidebar.vue:57 src/components/auth/Login.vue:17 +#: front/src/components/Sidebar.vue:57 src/components/auth/LoginForm.vue:15 msgctxt "*/Signup/Link/Verb" msgid "Create an account" msgstr "Criar conta" #: front/src/components/auth/ApplicationForm.vue:65 -#, fuzzy msgctxt "Content/Applications/Button.Label/Verb" msgid "Create application" -msgstr "Criar lista" +msgstr "Criar aplicativo" #: front/src/views/content/libraries/Form.vue:26 msgctxt "Content/Library/Button.Label/Verb" msgid "Create library" msgstr "Criar biblioteca" -#: front/src/components/auth/Signup.vue:53 +#: front/src/components/auth/SignupForm.vue:49 msgctxt "Content/Signup/Button.Label" msgid "Create my account" msgstr "Criar minha conta" @@ -1149,7 +1221,7 @@ msgstr "Criar minha conta" #: front/src/components/auth/Settings.vue:264 msgctxt "Content/Applications/Paragraph" msgid "Create one to integrate Funkwhale with third-party applications." -msgstr "" +msgstr "Crie um para integrar o Funkwhale com aplicativos de terceiros." #: front/src/components/playlists/Form.vue:34 msgctxt "Content/Playlist/Button.Label/Verb" @@ -1166,11 +1238,13 @@ msgstr "Criar sua própria rádio" #: front/src/components/manage/library/AlbumsTable.vue:44 #: front/src/components/manage/library/ArtistsTable.vue:43 #: front/src/components/manage/library/LibrariesTable.vue:54 +#: front/src/components/manage/library/TagsTable.vue:45 #: front/src/components/manage/library/TracksTable.vue:44 #: front/src/components/manage/library/UploadsTable.vue:66 +#: front/src/components/manage/moderation/ReportCard.vue:43 #: front/src/components/manage/users/InvitationsTable.vue:40 -#: front/src/components/mixins/Translations.vue:43 -#: front/src/components/mixins/Translations.vue:44 +#: front/src/components/mixins/Translations.vue:53 +#: front/src/components/mixins/Translations.vue:54 msgctxt "Content/*/*/Noun" msgid "Creation date" msgstr "Data de criação" @@ -1180,6 +1254,12 @@ msgctxt "Content/Settings/Title/Noun" msgid "Current avatar" msgstr "Imagem de perfil atual" +#: front/src/components/admin/SettingsGroup.vue:67 +#, fuzzy +msgctxt "Content/Settings/Title/Noun" +msgid "Current image" +msgstr "Uso atual" + #: front/src/views/content/libraries/DetailArea.vue:4 msgctxt "Content/Library/Title" msgid "Current library" @@ -1195,15 +1275,20 @@ msgctxt "Content/Library/Title" msgid "Current usage" msgstr "Uso atual" +#: front/src/components/Footer.vue:94 +msgctxt "Footer/Settings/Dropdown.Label/Theme name" +msgid "Dark" +msgstr "" + #: front/src/components/federation/FetchButton.vue:53 msgctxt "*/*/Error" msgid "Data returned by the remote server had invalid or missing attributes" -msgstr "" +msgstr "Dados retornados pelo servidor remoto tinham atributos inválidos ou ausentes" #: front/src/components/federation/FetchButton.vue:17 msgctxt "Popup/*/Message.Content" msgid "Data was refreshed successfully from remote server." -msgstr "" +msgstr "Os dados foram atualizados no servidor remoto." #: front/src/views/content/libraries/Detail.vue:27 msgctxt "Content/Library/Table.Label" @@ -1211,12 +1296,11 @@ msgid "Date" msgstr "Data" #: front/src/components/library/ImportStatusModal.vue:64 -#, fuzzy msgctxt "Popup/Import/Table.Label/Noun" msgid "Debug information" -msgstr "Informações da faixa" +msgstr "Informação de depuração" -#: front/src/components/ShortcutsModal.vue:75 +#: front/src/components/ShortcutsModal.vue:128 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Decrease volume" msgstr "Diminuir volume" @@ -1228,37 +1312,42 @@ msgstr "Diminuir volume" #: front/src/components/manage/library/AlbumsTable.vue:188 #: front/src/components/manage/library/ArtistsTable.vue:178 #: front/src/components/manage/library/LibrariesTable.vue:205 +#: front/src/components/manage/library/TagsTable.vue:179 #: front/src/components/manage/library/TracksTable.vue:188 #: front/src/components/manage/library/UploadsTable.vue:255 #: front/src/components/manage/moderation/InstancePolicyForm.vue:61 +#: front/src/components/manage/moderation/NotesThread.vue:24 +#: front/src/components/manage/moderation/NotesThread.vue:29 +#: front/src/components/manage/moderation/ReportCard.vue:360 #: front/src/components/manage/users/InvitationsTable.vue:167 -#: front/src/views/admin/library/AlbumDetail.vue:72 -#: front/src/views/admin/library/AlbumDetail.vue:77 -#: front/src/views/admin/library/ArtistDetail.vue:71 +#: front/src/views/admin/library/AlbumDetail.vue:78 +#: front/src/views/admin/library/AlbumDetail.vue:83 #: front/src/views/admin/library/ArtistDetail.vue:76 +#: front/src/views/admin/library/ArtistDetail.vue:81 #: front/src/views/admin/library/LibraryDetail.vue:58 #: front/src/views/admin/library/LibraryDetail.vue:63 -#: front/src/views/admin/library/TrackDetail.vue:71 -#: front/src/views/admin/library/TrackDetail.vue:76 +#: front/src/views/admin/library/TagDetail.vue:41 +#: front/src/views/admin/library/TagDetail.vue:46 +#: front/src/views/admin/library/TrackDetail.vue:77 +#: front/src/views/admin/library/TrackDetail.vue:82 #: front/src/views/admin/library/UploadDetail.vue:65 #: front/src/views/admin/library/UploadDetail.vue:70 #: front/src/views/content/libraries/FilesTable.vue:222 #: front/src/views/content/libraries/Form.vue:29 -#: src/views/playlists/Detail.vue:34 +#: src/views/playlists/Detail.vue:42 msgctxt "*/*/*/Verb" msgid "Delete" msgstr "Excluir" #: front/src/components/auth/Settings.vue:254 -#, fuzzy msgctxt "*/Settings/Button.Label/Verb" msgid "Delete application" -msgstr "Excluir lista" +msgstr "Excluir aplicativo" #: front/src/components/auth/Settings.vue:252 msgctxt "Popup/Settings/Title" msgid "Delete application \"%{ application }\"?" -msgstr "" +msgstr "Excluir aplicativo \"%{ application }\"?" #: front/src/views/content/libraries/Form.vue:39 msgctxt "Popup/Library/Button.Label/Verb" @@ -1270,7 +1359,20 @@ msgctxt "Popup/Moderation/Button.Label/Verb" msgid "Delete moderation rule" msgstr "Excluir regra de moderação" -#: front/src/views/playlists/Detail.vue:39 +#: front/src/components/auth/Settings.vue:274 +#: src/components/auth/Settings.vue:302 +#, fuzzy +msgctxt "*/*/Button.Label" +msgid "Delete my account" +msgstr "Criar minha conta" + +#: front/src/components/auth/Settings.vue:297 +#, fuzzy +msgctxt "*/*/Button.Label" +msgid "Delete my account…" +msgstr "Criar minha conta" + +#: front/src/views/playlists/Detail.vue:47 msgctxt "Popup/Playlist/Button.Label/Verb" msgid "Delete playlist" msgstr "Excluir lista" @@ -1280,18 +1382,26 @@ msgctxt "Popup/Radio/Button.Label/Verb" msgid "Delete radio" msgstr "Excluir rádio" -#: front/src/views/admin/library/AlbumDetail.vue:73 -#: front/src/views/admin/library/TrackDetail.vue:72 -#, fuzzy +#: front/src/components/manage/moderation/ReportCard.vue:357 +msgctxt "Content/Moderation/Button/Verb" +msgid "Delete reported object" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:358 +msgctxt "Content/Moderation/Popup/Header" +msgid "Delete reported object?" +msgstr "" + +#: front/src/views/admin/library/AlbumDetail.vue:79 +#: front/src/views/admin/library/TrackDetail.vue:78 msgctxt "Popup/Library/Title" msgid "Delete this album?" -msgstr "Excluir esta biblioteca?" +msgstr "Excluir este álbum?" -#: front/src/views/admin/library/ArtistDetail.vue:72 -#, fuzzy +#: front/src/views/admin/library/ArtistDetail.vue:77 msgctxt "Popup/Library/Title" msgid "Delete this artist?" -msgstr "Excluir esta biblioteca?" +msgstr "Excluir este artista?" #: front/src/views/admin/library/LibraryDetail.vue:59 #: front/src/views/content/libraries/Form.vue:31 @@ -1304,62 +1414,71 @@ msgctxt "Popup/Moderation/Title" msgid "Delete this moderation rule?" msgstr "Excluir esta regra de moderação?" -#: front/src/components/library/EditCard.vue:94 +#: front/src/components/manage/moderation/NotesThread.vue:25 #, fuzzy +msgctxt "Popup/Moderation/Title" +msgid "Delete this note?" +msgstr "Excluir este artista?" + +#: front/src/components/library/EditCard.vue:94 msgctxt "Popup/Library/Title" msgid "Delete this suggestion?" -msgstr "Excluir esta regra de moderação?" +msgstr "Excluir esta sugestão?" -#: front/src/views/admin/library/UploadDetail.vue:66 +#: front/src/views/admin/library/TagDetail.vue:42 #, fuzzy msgctxt "Popup/Library/Title" +msgid "Delete this tag?" +msgstr "Excluir este álbum?" + +#: front/src/views/admin/library/UploadDetail.vue:66 +msgctxt "Popup/Library/Title" msgid "Delete this upload?" -msgstr "Excluir esta biblioteca?" +msgstr "Excluir este envio?" #: front/src/components/favorites/List.vue:35 -#: src/components/library/Albums.vue:26 -#: front/src/components/library/Artists.vue:26 +#: src/components/library/Albums.vue:30 +#: front/src/components/library/Artists.vue:30 #: src/components/library/Radios.vue:47 #: front/src/components/manage/library/AlbumsTable.vue:22 #: front/src/components/manage/library/ArtistsTable.vue:22 #: front/src/components/manage/library/EditsCardList.vue:40 #: front/src/components/manage/library/LibrariesTable.vue:31 +#: front/src/components/manage/library/TagsTable.vue:22 #: front/src/components/manage/library/TracksTable.vue:22 #: front/src/components/manage/library/UploadsTable.vue:41 #: front/src/components/manage/moderation/AccountsTable.vue:22 -#: front/src/components/manage/moderation/DomainsTable.vue:20 +#: front/src/components/manage/moderation/DomainsTable.vue:28 #: front/src/components/manage/users/UsersTable.vue:20 +#: front/src/views/admin/moderation/ReportsList.vue:45 #: front/src/views/content/libraries/FilesTable.vue:32 #: front/src/views/playlists/List.vue:28 msgctxt "Content/Search/Dropdown" msgid "Descending" msgstr "Descendente" -#: front/src/views/admin/library/LibraryDetail.vue:123 -msgctxt "*/*/*/Noun" -msgid "Description" -msgstr "Descrição" +#: front/src/components/manage/moderation/NoteForm.vue:37 +msgctxt "Content/Moderation/Placeholder" +msgid "Describe what actions have been taken, or any other related updates…" +msgstr "" #: front/src/components/library/radios/Builder.vue:25 +#: front/src/views/admin/library/LibraryDetail.vue:132 #: front/src/views/content/libraries/Form.vue:14 -msgctxt "Content/*/Input.Label/Noun" +msgctxt "*/*/*/Noun" msgid "Description" msgstr "Descrição" #: front/src/views/content/libraries/Card.vue:48 -#: src/views/content/remote/Card.vue:54 +#: src/views/content/remote/Card.vue:67 msgctxt "Content/Library/Card.Button.Label/Noun" msgid "Details" msgstr "Detalhes" -#: front/src/views/admin/moderation/AccountsDetail.vue:491 +#: front/src/views/admin/moderation/AccountsDetail.vue:511 msgctxt "Content/Moderation/Help text" -msgid "" -"Determine how much content the user can upload. Leave empty to use the " -"default value of the instance." -msgstr "" -"Determine quanto conteúdo o usuário pode enviar. Deixe em branco para " -"utilizar o valor padrão da instância." +msgid "Determine how much content the user can upload. Leave empty to use the default value of the instance." +msgstr "Determine quanto conteúdo o usuário pode enviar. Deixe em branco para usar o valor padrão da instância." #: front/src/components/mixins/Translations.vue:8 #: front/src/components/mixins/Translations.vue:9 @@ -1368,31 +1487,39 @@ msgid "Determine the visibility level of your activity" msgstr "Determine o nÃvel de visibilidade de sua atividade" #: front/src/components/auth/Settings.vue:104 -#: front/src/components/auth/SubsonicTokenForm.vue:51 +#: front/src/components/auth/SubsonicTokenForm.vue:56 msgctxt "Popup/Settings/Button.Label" msgid "Disable access" msgstr "Desativar acesso" -#: front/src/components/auth/SubsonicTokenForm.vue:48 +#: front/src/components/auth/SubsonicTokenForm.vue:53 msgctxt "Content/Settings/Button.Label/Verb" msgid "Disable Subsonic access" msgstr "Desativar acesso Subsonic" -#: front/src/components/auth/SubsonicTokenForm.vue:49 +#: front/src/components/auth/SubsonicTokenForm.vue:54 msgctxt "Popup/Settings/Title" msgid "Disable Subsonic API access?" -msgstr "Desativar acesso da API Subsonic?" +msgstr "Desativar acesso à API Subsonic?" +#: front/src/components/About.vue:118 src/components/About.vue:131 +#: front/src/components/About.vue:144 #: front/src/components/manage/moderation/InstancePolicyForm.vue:18 #: front/src/views/admin/moderation/AccountsDetail.vue:157 #: front/src/views/admin/moderation/AccountsDetail.vue:161 -msgctxt "*/*/*" +#, fuzzy +msgctxt "*/*/*/State of feature" msgid "Disabled" msgstr "Desativado" -#: front/src/views/admin/library/TrackDetail.vue:145 +#: front/src/views/admin/library/TrackDetail.vue:151 msgctxt "*/*/*/Noun" msgid "Disc number" +msgstr "Número do disco" + +#: front/src/components/Home.vue:157 +msgctxt "Content/Home/Link" +msgid "Discover everything you need to know about Funkwhale and its features" msgstr "" #: front/src/components/auth/SubsonicTokenForm.vue:13 @@ -1400,6 +1527,11 @@ msgctxt "Content/Settings/Link" msgid "Discover how to use Funkwhale from other apps" msgstr "Aprenda a usar o Funkwhale em outros aplicativos" +#: front/src/views/Notifications.vue:45 +msgctxt "Content/Notifications/Button.Label/Verb" +msgid "Discover other ways to help" +msgstr "" + #: front/src/views/admin/moderation/AccountsDetail.vue:132 msgctxt "'Content/*/*/Noun'" msgid "Display name" @@ -1412,13 +1544,14 @@ msgstr "Mostrar publicamente" #: front/src/components/manage/moderation/InstancePolicyForm.vue:122 msgctxt "Content/Moderation/Help text" -msgid "" -"Do not download any media file (audio, album cover, account avatar…) from " -"this account or domain. This will purge existing content as well." -msgstr "" -"Não baixar nenhum arquivo de mÃdia (áudio, capa de álbum, imagem de " -"exibição...) desta conta ou domÃnio. Esta ação também excluirá o conteúdo já" -" existente." +msgid "Do not download any media file (audio, album cover, account avatar…) from this account or domain. This will purge existing content as well." +msgstr "Não baixar nenhum arquivo de mÃdia (áudio, capa de álbum, imagem de exibição…) desta conta ou domÃnio. Esta ação também excluirá o conteúdo já existente." + +#: front/src/views/Notifications.vue:36 +#, fuzzy +msgctxt "Content/Notifications/Header" +msgid "Do you like Funkwhale?" +msgstr "Sobre o Funkwhale" #: front/src/components/playlists/Editor.vue:51 msgctxt "Popup/Playlist/Title" @@ -1430,7 +1563,7 @@ msgctxt "Modal/*/Title" msgid "Do you want to confirm this action?" msgstr "Você deseja confirmar esta ação?" -#: front/src/views/playlists/Detail.vue:35 +#: front/src/views/playlists/Detail.vue:43 msgctxt "Popup/Playlist/Title/Call to action" msgid "Do you want to delete the playlist \"%{ playlist }\"?" msgstr "Você deseja excluir a lista \"%{ playlist }\"?" @@ -1440,21 +1573,31 @@ msgctxt "Popup/Radio/Title" msgid "Do you want to delete the radio \"%{ radio }\"?" msgstr "Você deseja excluir a rádio \"%{ radio }\"?" -#: front/src/components/moderation/FilterModal.vue:3 +#: front/src/components/auth/Settings.vue:298 #, fuzzy +msgctxt "Popup/Settings/Title" +msgid "Do you want to delete your account?" +msgstr "Você deseja restaurar sua fila anterior?" + +#: front/src/components/moderation/FilterModal.vue:3 msgctxt "Popup/Moderation/Title/Verb" msgid "Do you want to hide content from artist \"%{ name }\"?" -msgstr "Você deseja excluir a rádio \"%{ radio }\"?" +msgstr "Você deseja ocultar o conteúdo do(a) artista \"%{ name }\"?" #: front/src/components/common/ActionTable.vue:37 -#, fuzzy msgctxt "Modal/*/Title" msgid "Do you want to launch %{ action } on %{ count } element?" msgid_plural "Do you want to launch %{ action } on %{ count } elements?" msgstr[0] "Você deseja executar %{ action } em %{ count } elemento?" msgstr[1] "Você deseja executar %{ action } em %{ count } elementos?" -#: front/src/components/Sidebar.vue:118 +#: front/src/components/moderation/ReportModal.vue:3 +#, fuzzy +msgctxt "Popup/Moderation/Title/Verb" +msgid "Do you want to report this object?" +msgstr "Você deseja confirmar esta ação?" + +#: front/src/components/Sidebar.vue:122 msgctxt "Sidebar/Queue/Message" msgid "Do you want to restore your previous queue?" msgstr "Você deseja restaurar sua fila anterior?" @@ -1470,26 +1613,33 @@ msgstr "Documentação" #: front/src/components/manage/library/TracksTable.vue:42 #: front/src/components/manage/library/UploadsTable.vue:62 #: front/src/components/manage/moderation/AccountsTable.vue:40 -#: front/src/components/mixins/Translations.vue:60 -#: front/src/views/admin/library/AlbumDetail.vue:118 -#: front/src/views/admin/library/ArtistDetail.vue:107 -#: front/src/views/admin/library/LibraryDetail.vue:114 -#: front/src/views/admin/library/TrackDetail.vue:170 +#: front/src/components/manage/moderation/ReportCard.vue:169 +#: front/src/components/manage/moderation/ReportCard.vue:179 +#: front/src/components/mixins/Translations.vue:72 +#: front/src/views/admin/library/AlbumDetail.vue:124 +#: front/src/views/admin/library/ArtistDetail.vue:112 +#: front/src/views/admin/library/LibraryDetail.vue:123 +#: front/src/views/admin/library/TrackDetail.vue:176 #: front/src/views/admin/library/UploadDetail.vue:121 #: front/src/views/admin/moderation/AccountsDetail.vue:123 -#: front/src/components/mixins/Translations.vue:61 +#: front/src/components/mixins/Translations.vue:73 msgctxt "Content/Moderation/*/Noun" msgid "Domain" msgstr "DomÃnio" -#: front/src/views/admin/moderation/Base.vue:5 +#: front/src/views/admin/moderation/Base.vue:8 #: front/src/views/admin/moderation/DomainsList.vue:3 -#: front/src/views/admin/moderation/DomainsList.vue:48 +#: front/src/views/admin/moderation/DomainsList.vue:54 msgctxt "*/Moderation/*/Noun" msgid "Domains" msgstr "DomÃnios" -#: front/src/components/library/TrackBase.vue:39 +#: front/src/views/Notifications.vue:42 +msgctxt "Content/Notifications/Button.Label/Verb" +msgid "Donate" +msgstr "" + +#: front/src/components/library/TrackBase.vue:37 #: front/src/views/admin/library/UploadDetail.vue:58 msgctxt "Content/Track/Link/Verb" msgid "Download" @@ -1502,10 +1652,10 @@ msgstr "Arraste as faixas para reorganizá-las na lista" #: front/src/components/audio/track/Table.vue:10 #: front/src/components/library/TrackDetail.vue:30 -#: front/src/components/mixins/Translations.vue:56 +#: front/src/components/mixins/Translations.vue:68 #: front/src/views/admin/library/UploadDetail.vue:238 #: front/src/views/content/libraries/FilesTable.vue:60 -#: front/src/components/mixins/Translations.vue:57 +#: front/src/components/mixins/Translations.vue:69 msgctxt "Content/*/*" msgid "Duration" msgstr "Duração" @@ -1515,84 +1665,61 @@ msgctxt "Content/Signup/Message" msgid "E-mail address confirmed" msgstr "Endereço de e-mail confirmado" -#: front/src/components/Home.vue:88 -msgctxt "Content/Home/Title" -msgid "Easy to use" -msgstr "Fácil de usar" - -#: front/src/components/library/AlbumBase.vue:68 -#: front/src/components/library/ArtistBase.vue:79 -#: front/src/components/library/TrackBase.vue:87 +#: front/src/components/auth/Settings.vue:246 +#: src/components/library/AlbumBase.vue:73 +#: front/src/components/library/ArtistBase.vue:84 +#: front/src/components/library/TrackBase.vue:89 #: front/src/components/manage/moderation/InstancePolicyCard.vue:45 #: front/src/components/radios/Card.vue:23 -#: src/views/admin/library/AlbumDetail.vue:65 -#: front/src/views/admin/library/ArtistDetail.vue:64 -#: front/src/views/admin/library/TrackDetail.vue:64 +#: src/views/admin/library/AlbumDetail.vue:71 +#: front/src/views/admin/library/ArtistDetail.vue:69 +#: front/src/views/admin/library/TrackDetail.vue:70 #: front/src/views/content/libraries/Detail.vue:9 #: src/views/playlists/Detail.vue:31 msgctxt "Content/*/Button.Label/Verb" msgid "Edit" msgstr "Editar" -#: front/src/components/auth/Settings.vue:246 -msgctxt "Content/Settings/Button.Label" -msgid "Edit" -msgstr "Editar" - #: front/src/components/auth/ApplicationEdit.vue:30 #: front/src/components/auth/ApplicationEdit.vue:75 -#, fuzzy msgctxt "Content/Applications/Title" msgid "Edit application" -msgstr "Erro ao executar esta ação" - -#: front/src/components/About.vue:22 -msgctxt "Content/Settings/Button.Label/Verb" -msgid "Edit instance info" -msgstr "Editar informações da instância" +msgstr "Editar aplicativo" #: front/src/components/manage/moderation/InstancePolicyForm.vue:3 -#, fuzzy msgctxt "Content/Moderation/Card.Title/Verb" msgid "Edit moderation rule" -msgstr "Atualizar regra de moderação" +msgstr "Editar regra de moderação" #: front/src/components/library/AlbumEdit.vue:4 msgctxt "Content/*/Title" msgid "Edit this album" -msgstr "" +msgstr "Editar álbum" #: front/src/components/library/ArtistEdit.vue:4 -#, fuzzy msgctxt "Content/*/Title" msgid "Edit this artist" -msgstr "Adicionar a esta lista" +msgstr "Editar artista" #: front/src/components/library/TrackEdit.vue:4 -#, fuzzy msgctxt "Content/*/Title" msgid "Edit this track" -msgstr "Reproduzir esta faixa" +msgstr "Editar faixa" -#: front/src/views/admin/library/AlbumDetail.vue:182 -#: front/src/views/admin/library/ArtistDetail.vue:171 +#: front/src/components/mixins/Translations.vue:116 +#: front/src/views/admin/library/AlbumDetail.vue:198 +#: front/src/views/admin/library/ArtistDetail.vue:186 #: front/src/views/admin/library/Base.vue:5 #: src/views/admin/library/EditsList.vue:24 -#: front/src/views/admin/library/TrackDetail.vue:234 -#, fuzzy +#: front/src/views/admin/library/TrackDetail.vue:250 +#: front/src/components/mixins/Translations.vue:117 msgctxt "*/Admin/*/Noun" msgid "Edits" -msgstr "Editar" - -#: front/src/components/mixins/Translations.vue:104 -#: front/src/components/mixins/Translations.vue:105 -#, fuzzy -msgctxt "Content/OAuth Scopes/Label" -msgid "Edits" -msgstr "Editar" +msgstr "Edições" -#: front/src/components/auth/Signup.vue:30 +#: front/src/components/auth/SignupForm.vue:26 #: front/src/components/manage/users/UsersTable.vue:38 +#: front/src/components/moderation/ReportModal.vue:31 msgctxt "Content/*/*/Noun" msgid "Email" msgstr "E-mail" @@ -1602,51 +1729,60 @@ msgctxt "Content/*/*" msgid "Email address" msgstr "Endereço de e-mail" -#: front/src/components/library/AlbumBase.vue:53 -#: front/src/components/library/ArtistBase.vue:64 -#: front/src/components/library/TrackBase.vue:72 +#: front/src/components/library/AlbumBase.vue:54 +#: front/src/components/library/ArtistBase.vue:65 +#: front/src/components/library/TrackBase.vue:70 +#: src/views/playlists/Detail.vue:38 msgctxt "Content/*/Button.Label/Verb" msgid "Embed" msgstr "Incorporar" -#: front/src/components/audio/EmbedWizard.vue:20 +#: front/src/components/audio/EmbedWizard.vue:30 msgctxt "Popup/Embed/Input.Label/Noun" msgid "Embed code" msgstr "Código para incorporar" -#: front/src/components/library/AlbumBase.vue:26 +#: front/src/components/library/AlbumBase.vue:27 msgctxt "Popup/Album/Title/Verb" msgid "Embed this album on your website" msgstr "Incorpore este álbum em seu site" -#: front/src/components/library/ArtistBase.vue:37 -#, fuzzy +#: front/src/components/library/ArtistBase.vue:38 msgctxt "Popup/Artist/Title/Verb" msgid "Embed this artist work on your website" -msgstr "Incorpore esta faixa em seu site" +msgstr "Incorpore a obra do(a) artista em seu site" + +#: front/src/views/playlists/Detail.vue:52 +#, fuzzy +msgctxt "Popup/Album/Title/Verb" +msgid "Embed this playlist on your website" +msgstr "Incorpore este álbum em seu site" -#: front/src/components/library/TrackBase.vue:45 +#: front/src/components/library/TrackBase.vue:43 msgctxt "Popup/Track/Title" msgid "Embed this track on your website" msgstr "Incorpore esta faixa em seu site" -#: front/src/views/admin/moderation/AccountsDetail.vue:259 -#: front/src/views/admin/moderation/DomainsDetail.vue:187 +#: front/src/views/admin/moderation/AccountsDetail.vue:260 +#: front/src/views/admin/moderation/DomainsDetail.vue:224 msgctxt "Content/Moderation/Table.Label/Noun" msgid "Emitted library follows" msgstr "Biblioteca enviada segue" -#: front/src/views/admin/moderation/AccountsDetail.vue:243 -#: front/src/views/admin/moderation/DomainsDetail.vue:171 +#: front/src/views/admin/moderation/AccountsDetail.vue:244 +#: front/src/views/admin/moderation/DomainsDetail.vue:208 msgctxt "Content/Moderation/Table.Label/Noun" msgid "Emitted messages" msgstr "Mensagens enviadas" +#: front/src/components/About.vue:114 src/components/About.vue:127 +#: front/src/components/About.vue:140 #: front/src/components/manage/moderation/InstancePolicyCard.vue:8 #: front/src/components/manage/moderation/InstancePolicyForm.vue:17 #: front/src/views/admin/moderation/AccountsDetail.vue:156 #: front/src/views/admin/moderation/AccountsDetail.vue:160 -msgctxt "*/*/*" +#, fuzzy +msgctxt "*/*/*/State of feature" msgid "Enabled" msgstr "Ativado" @@ -1665,10 +1801,10 @@ msgctxt "Content/Search/Input.Placeholder" msgid "Enter a radio name…" msgstr "Insira o nome de uma rádio…" -#: front/src/components/library/Albums.vue:119 +#: front/src/components/library/Albums.vue:128 msgctxt "Content/Search/Input.Placeholder" -msgid "Enter album title..." -msgstr "" +msgid "Enter album title…" +msgstr "Insira o tÃtulo do álbum…" #: front/src/components/library/Artists.vue:116 msgctxt "Content/Search/Input.Placeholder" @@ -1683,31 +1819,31 @@ msgstr "Insira o nome da lista…" #: front/src/views/auth/PasswordReset.vue:54 #, fuzzy msgctxt "Content/Signup/Input.Placeholder" -msgid "Enter the email address binded to your account" +msgid "Enter the email address linked to your account" msgstr "Insira o endereço de e-mail associado à sua conta" -#: front/src/components/auth/Signup.vue:103 +#: front/src/components/auth/SignupForm.vue:96 msgctxt "Content/Signup/Form/Placeholder" msgid "Enter your email" msgstr "Insira seu e-mail" -#: front/src/components/auth/Signup.vue:98 src/components/auth/Signup.vue:100 +#: front/src/components/auth/SignupForm.vue:91 +#: src/components/auth/SignupForm.vue:93 msgctxt "Content/Signup/Form/Placeholder" msgid "Enter your invitation code (case insensitive)" -msgstr "" -"Insira seu código de convite (não diferencia maiúsculas de minúsculas)" +msgstr "Insira seu código de convite (não diferencia maiúsculas de minúsculas)" #: front/src/components/metadata/Search.vue:114 msgctxt "Content/Library/Input.Placeholder/Verb" msgid "Enter your search query…" msgstr "Insira palavras-chave…" -#: front/src/components/auth/Signup.vue:102 +#: front/src/components/auth/SignupForm.vue:95 msgctxt "Content/Signup/Form/Placeholder" msgid "Enter your username" msgstr "Insira seu nome de usuário" -#: front/src/components/auth/Login.vue:83 +#: front/src/components/auth/LoginForm.vue:81 msgctxt "Content/Login/Input.Placeholder" msgid "Enter your username or email" msgstr "Insira seu nome de usuário ou e-mail" @@ -1720,22 +1856,20 @@ msgstr "Erro" #: front/src/components/federation/FetchButton.vue:34 #: front/src/components/library/ImportStatusModal.vue:32 -#, fuzzy msgctxt "Popup/Import/Table.Label/Noun" msgid "Error detail" -msgstr "Relatório de erros" +msgstr "Detalhe do erro" -#: front/src/views/admin/Settings.vue:87 +#: front/src/views/admin/Settings.vue:89 msgctxt "Content/Admin/Menu" msgid "Error reporting" msgstr "Relatório de erros" #: front/src/components/federation/FetchButton.vue:26 #: front/src/components/library/ImportStatusModal.vue:24 -#, fuzzy msgctxt "Popup/Import/Table.Label/Noun" msgid "Error type" -msgstr "Com erro" +msgstr "Tipo do erro" #: front/src/components/common/ActionTable.vue:94 msgctxt "Content/*/Error message/Header" @@ -1748,10 +1882,9 @@ msgid "Error while asking for a password reset" msgstr "Erro ao solicitar redefinição de senha" #: front/src/components/auth/Authorize.vue:6 -#, fuzzy msgctxt "Popup/Moderation/Error message" msgid "Error while authorizing application" -msgstr "Erro ao executar esta ação" +msgstr "Erro ao permitir aplicativo" #: front/src/views/auth/PasswordResetConfirm.vue:7 msgctxt "Content/Signup/Card.Title" @@ -1764,10 +1897,9 @@ msgid "Error while creating domain" msgstr "Erro ao criar domÃnio" #: front/src/components/moderation/FilterModal.vue:13 -#, fuzzy msgctxt "Popup/Moderation/Error message" msgid "Error while creating filter" -msgstr "Erro ao criar regra" +msgstr "Erro ao criar filtro" #: front/src/components/manage/users/InvitationForm.vue:4 msgctxt "Content/Admin/Error message.Title" @@ -1780,31 +1912,37 @@ msgid "Error while creating rule" msgstr "Erro ao criar regra" #: front/src/components/auth/Authorize.vue:7 -#, fuzzy msgctxt "Popup/Moderation/Error message" msgid "Error while fetching application data" -msgstr "Erro ao gerar convite" +msgstr "Erro ao ver dados do aplicativo" -#: front/src/views/admin/moderation/DomainsDetail.vue:118 +#: front/src/views/admin/moderation/DomainsDetail.vue:155 msgctxt "Content/Moderation/Table" msgid "Error while fetching node info" msgstr "Erro ao obter node info" #: front/src/components/admin/SettingsGroup.vue:5 -msgctxt "Content/Settings/Error message.Title" -msgid "Error while saving settings" -msgstr "Erro ao salvar configurações" - #: front/src/components/federation/FetchButton.vue:73 msgctxt "Content/*/Error message.Title" msgid "Error while saving settings" msgstr "Erro ao salvar configurações" #: front/src/components/library/EditForm.vue:46 -#, fuzzy msgctxt "Content/Library/Error message.Title" msgid "Error while submitting edit" -msgstr "Erro ao salvar configurações" +msgstr "Erro ao editar" + +#: front/src/components/manage/moderation/NoteForm.vue:3 +#, fuzzy +msgctxt "Content/Moderation/Error message.Title" +msgid "Error while submitting note" +msgstr "Erro ao editar" + +#: front/src/components/moderation/ReportModal.vue:11 +#, fuzzy +msgctxt "Popup/Moderation/Error message" +msgid "Error while submitting report" +msgstr "Erro ao editar" #: front/src/components/mixins/Translations.vue:32 #: front/src/components/mixins/Translations.vue:33 @@ -1840,9 +1978,14 @@ msgctxt "Content/Radio/Table.Label/Verb" msgid "Exclude" msgstr "Excluir" +#: front/src/components/common/CollapseLink.vue:2 +msgctxt "*/*/Button,Label" +msgid "Expand" +msgstr "" + #: front/src/components/manage/users/InvitationsTable.vue:41 -#: front/src/components/mixins/Translations.vue:49 -#: front/src/components/mixins/Translations.vue:50 +#: front/src/components/mixins/Translations.vue:59 +#: front/src/components/mixins/Translations.vue:60 msgctxt "Content/Admin/Table.Label/Noun" msgid "Expiration date" msgstr "Data de expiração" @@ -1859,16 +2002,8 @@ msgstr "Expirado/usado" #: front/src/components/manage/moderation/InstancePolicyForm.vue:110 msgctxt "Content/Moderation/Help text" -msgid "" -"Explain why you're applying this policy. Depending on your instance " -"configuration, this will help you remember why you acted on this account or " -"domain, and may be displayed publicly to help users understand what " -"moderation rules are in place." -msgstr "" -"Explique por que está aplicando esta regra. Dependendo da configuração de " -"sua instância, a descrição te ajudará a se lembrar o motivo da ação e também" -" será exposta publicamente para que os usuários possam saber quais regras de" -" moderação estão ativas." +msgid "Explain why you're applying this policy. Depending on your instance configuration, this will help you remember why you acted on this account or domain, and may be displayed publicly to help users understand what moderation rules are in place." +msgstr "Explique por que está aplicando esta regra. Dependendo da configuração de sua instância, a descrição te ajudará a se lembrar o motivo da ação e também será exposta publicamente para que os usuários possam saber quais regras de moderação estão ativas." #: front/src/components/manage/library/UploadsTable.vue:25 #: front/src/views/content/libraries/FilesTable.vue:16 @@ -1876,45 +2011,40 @@ msgctxt "Content/Library/Dropdown" msgid "Failed" msgstr "Falhou" -#: front/src/views/content/remote/Card.vue:62 +#: front/src/views/content/remote/Card.vue:75 msgctxt "Content/Library/Card.List item/Noun" msgid "Failed tracks:" msgstr "Faixas que falharam:" -#: front/src/views/admin/library/AlbumDetail.vue:165 -#: front/src/views/admin/library/ArtistDetail.vue:154 -#: front/src/views/admin/library/TrackDetail.vue:217 -#, fuzzy +#: front/src/views/admin/library/AlbumDetail.vue:171 +#: front/src/views/admin/library/ArtistDetail.vue:159 +#: front/src/views/admin/library/TrackDetail.vue:223 msgctxt "*/*/*" msgid "Favorited tracks" -msgstr "Faixas que falharam:" +msgstr "Faixas favoritadas" #: front/src/components/Sidebar.vue:66 +#: src/components/mixins/Translations.vue:88 +#: front/src/components/mixins/Translations.vue:89 msgctxt "Sidebar/Favorites/List item.Link/Noun" msgid "Favorites" msgstr "Favoritos" -#: front/src/components/mixins/Translations.vue:76 -#: front/src/components/mixins/Translations.vue:77 -msgctxt "Content/OAuth Scopes/Label" -msgid "Favorites" -msgstr "Favoritos" - -#: front/src/views/admin/Settings.vue:84 -msgctxt "Content/Admin/Menu" +#: front/src/components/About.vue:110 src/views/admin/Settings.vue:84 +#, fuzzy +msgctxt "*/*/*" msgid "Federation" msgstr "Federação" #: front/src/components/library/TrackDetail.vue:66 -#, fuzzy msgctxt "Content/*/*/Noun" msgid "Federation ID" -msgstr "Federação" +msgstr "ID da federação" #: front/src/components/library/EditCard.vue:45 msgctxt "Content/Library/Card.Table.Header/Short" msgid "Field" -msgstr "" +msgstr "Campo" #: front/src/components/library/FileUpload.vue:93 msgctxt "Content/Library/Table.Label" @@ -1926,6 +2056,12 @@ msgctxt "Content/Radio/Table.Label/Noun" msgid "Filter name" msgstr "Nome do filtro" +#: front/src/components/Home.vue:118 +#, fuzzy +msgctxt "Content/Home/Link" +msgid "Find another pod" +msgstr "Enviar outra edição" + #: front/src/components/manage/library/UploadsTable.vue:26 #: front/src/components/mixins/Translations.vue:36 #: front/src/views/content/libraries/FilesTable.vue:17 @@ -1935,25 +2071,31 @@ msgid "Finished" msgstr "Finalizado" #: front/src/components/manage/moderation/AccountsTable.vue:42 -#: front/src/components/manage/moderation/DomainsTable.vue:41 -#: front/src/views/admin/library/AlbumDetail.vue:149 -#: front/src/views/admin/library/ArtistDetail.vue:138 -#: front/src/views/admin/library/LibraryDetail.vue:153 -#: front/src/views/admin/library/TrackDetail.vue:201 +#: front/src/components/manage/moderation/DomainsTable.vue:49 +#: front/src/views/admin/library/AlbumDetail.vue:155 +#: front/src/views/admin/library/ArtistDetail.vue:143 +#: front/src/views/admin/library/LibraryDetail.vue:162 +#: front/src/views/admin/library/TagDetail.vue:98 +#: front/src/views/admin/library/TrackDetail.vue:207 #: front/src/views/admin/library/UploadDetail.vue:167 -#: front/src/views/admin/moderation/AccountsDetail.vue:235 -#: front/src/views/admin/moderation/DomainsDetail.vue:151 +#: front/src/views/admin/moderation/AccountsDetail.vue:236 +#: front/src/views/admin/moderation/DomainsDetail.vue:188 msgctxt "Content/Moderation/Table.Label/Short (Value is a date)" msgid "First seen" msgstr "Visto primeiro" -#: front/src/components/mixins/Translations.vue:46 -#: front/src/components/mixins/Translations.vue:47 +#: front/src/components/mixins/Translations.vue:56 +#: front/src/components/mixins/Translations.vue:57 msgctxt "Content/Moderation/Dropdown/Noun" msgid "First seen date" msgstr "Data do primeiro acesso" -#: front/src/views/content/remote/Card.vue:87 +#: front/src/components/ShortcutsModal.vue:64 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Focus searchbar" +msgstr "" + +#: front/src/views/content/remote/Card.vue:100 msgctxt "Content/Library/Card.Button.Label/Verb" msgid "Follow" msgstr "Seguir" @@ -1963,83 +2105,58 @@ msgctxt "Content/Library/Title/Verb" msgid "Follow remote libraries" msgstr "Seguir bibliotecas remotas" -#: front/src/views/content/remote/Card.vue:92 +#: front/src/views/content/remote/Card.vue:105 msgctxt "Content/Library/Card.Paragraph" msgid "Follow request pending approval" -msgstr "Solicitação de seguidor pendente" +msgstr "Solicitação para seguir pendente" -#: front/src/components/mixins/Translations.vue:64 -#: front/src/views/admin/library/LibraryDetail.vue:161 +#: front/src/components/manage/library/LibrariesTable.vue:53 +#: front/src/components/mixins/Translations.vue:76 +#: front/src/views/admin/library/LibraryDetail.vue:170 #: front/src/views/content/libraries/Detail.vue:7 -#: front/src/components/mixins/Translations.vue:65 +#: front/src/components/mixins/Translations.vue:77 msgctxt "Content/Federation/*/Noun" msgid "Followers" msgstr "Seguidores" -#: front/src/components/manage/library/LibrariesTable.vue:53 -msgctxt "Content/*/*/Noun" -msgid "Followers" -msgstr "Seguidores" - -#: front/src/views/content/remote/Card.vue:103 +#: front/src/views/content/remote/Card.vue:116 msgctxt "Content/Library/Card.Paragraph" msgid "Following" msgstr "Seguindo" -#: front/src/components/mixins/Translations.vue:84 -#: front/src/components/mixins/Translations.vue:85 -#, fuzzy +#: front/src/components/mixins/Translations.vue:96 +#: front/src/components/mixins/Translations.vue:97 msgctxt "Content/OAuth Scopes/Label" msgid "Follows" -msgstr "Seguir" +msgstr "Seguidos" -#: front/src/components/library/TrackBase.vue:17 +#: front/src/components/library/TrackBase.vue:245 msgctxt "Content/Track/Paragraph" -msgid "" -"From album <a class=\"internal\" href=\"%{ albumUrl }\">%{ album }</a> by <a" -" class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" -msgstr "" +msgid "From album <a class=\"internal\" href=\"%{ albumUrl }\">%{ album }</a> by <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" +msgstr "Do álbum <a class=\"internal\" href=\"%{ albumUrl }\">%{ album }</a> por <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" #: front/src/components/auth/Authorize.vue:28 -#, fuzzy msgctxt "Content/Auth/Label/Noun" msgid "Full access" -msgstr "Desativar acesso" +msgstr "Acesso total" #: front/src/components/auth/SubsonicTokenForm.vue:7 msgctxt "Content/Settings/Paragraph'" -msgid "" -"Funkwhale is compatible with other music players that support the Subsonic " -"API." -msgstr "" -"O Funkwhale funciona em outros reprodutores de música compatÃveis com a API " -"Subsonic." - -#: front/src/components/Home.vue:90 -msgctxt "Content/Home/Paragraph" -msgid "Funkwhale is dead simple to use." -msgstr "O Funkwhale é muito fácil de usar." - -#: front/src/components/Home.vue:39 -msgctxt "Content/Home/Paragraph" -msgid "" -"Funkwhale is designed to make it easy to listen to music you like, or to " -"discover new artists." -msgstr "" -"O Funkwhale foi feito para ser fácil de ouvir as músicas que você curte ou " -"conhecer novos(as) artistas." +msgid "Funkwhale is compatible with other music players that support the Subsonic API." +msgstr "O Funkwhale funciona em outros reprodutores de música compatÃveis com a API Subsonic." -#: front/src/components/Home.vue:111 +#: front/src/components/Home.vue:88 +#, fuzzy msgctxt "Content/Home/Paragraph" -msgid "Funkwhale is free and gives you control on your music." +msgid "Funkwhale is free and developped by a friendly community of volunteers." msgstr "O Funkwhale é gratuito e te coloca no controle de suas músicas." -#: front/src/components/Home.vue:66 -msgctxt "Content/Home/Paragraph" -msgid "Funkwhale takes care of handling your music" -msgstr "O Funkwhale cuida da organização de suas músicas" +#: front/src/components/About.vue:78 +msgctxt "*/*/*" +msgid "Funkwhale version" +msgstr "" -#: front/src/components/ShortcutsModal.vue:38 +#: front/src/components/ShortcutsModal.vue:56 msgctxt "Popup/Keyboard shortcuts/Title" msgid "General shortcuts" msgstr "Atalhos gerais" @@ -2049,35 +2166,17 @@ msgctxt "Content/Admin/Button.Label/Verb" msgid "Get a new invitation" msgstr "Solicitar novo convite" -#: front/src/components/Home.vue:13 -msgctxt "Content/Home/Button.Label/Verb" -msgid "Get me to the library" -msgstr "Me leve à biblioteca" - -#: front/src/components/Home.vue:70 -msgctxt "Content/Home/List item/Verb" -msgid "" -"Get quality metadata about your music thanks to <a href=\"%{ url }\" " -"target=\"_blank\">MusicBrainz</a>" -msgstr "" -"Tenha metadados de qualidade sobre suas músicas graças ao <a href=\"%{ url " -"}\" target=\"_blank\">MusicBrainz</a>" - #: front/src/views/content/Home.vue:12 src/views/content/Home.vue:19 msgctxt "Content/Library/Button.Label/Verb" msgid "Get started" msgstr "Comece agora" -#: front/src/components/Footer.vue:37 +#: front/src/components/Footer.vue:45 +#: src/components/library/ImportStatusModal.vue:45 msgctxt "Footer/*/Link" msgid "Getting help" msgstr "Procurar ajuda" -#: front/src/components/library/ImportStatusModal.vue:45 -msgctxt "Popup/Import/Table.Label/Noun" -msgid "Getting help" -msgstr "Procurar ajuda" - #: front/src/components/common/ActionTable.vue:35 #: front/src/components/common/ActionTable.vue:56 msgctxt "Content/*/Button.Label/Short, Verb" @@ -2089,11 +2188,20 @@ msgctxt "Content/*/Button.Label/Verb" msgid "Go to home page" msgstr "Ir à página inicial" +#: front/src/views/Notifications.vue:27 src/views/Notifications.vue:61 +msgctxt "Content/Notifications/Button.Label" +msgid "Got it!" +msgstr "" + #: front/src/components/auth/Settings.vue:128 -#, fuzzy msgctxt "Content/Settings/Title" msgid "Hidden artists" -msgstr "Explorando artistas" +msgstr "Artistas ocultados" + +#: front/src/components/About.vue:155 +msgctxt "*/*/*/Verb" +msgid "Hide" +msgstr "" #: front/src/components/manage/moderation/InstancePolicyForm.vue:114 msgctxt "Content/Moderation/Help text" @@ -2101,63 +2209,52 @@ msgid "Hide account or domain content, except from followers." msgstr "Ocultar conteúdo da conta ou domÃnio, exceto de seguidores." #: front/src/components/moderation/FilterModal.vue:40 -#, fuzzy msgctxt "Popup/*/Button.Label" msgid "Hide content" -msgstr "Adicionar conteúdo" +msgstr "Ocultar conteúdo" -#: front/src/components/audio/PlayButton.vue:26 +#: front/src/components/audio/PlayButton.vue:31 msgctxt "*/Queue/Dropdown/Button/Label/Short" msgid "Hide content from this artist" -msgstr "" +msgstr "Ocultar conteúdo deste(a) artista" -#: front/src/components/audio/Player.vue:643 +#: front/src/components/audio/Player.vue:669 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Hide content from this artist…" -msgstr "" +msgstr "Ocultar conteúdo deste(a) artista…" #: front/src/components/library/Home.vue:65 msgctxt "Head/Home/Title" msgid "Home" msgstr "InÃcio" -#: front/src/components/instance/Stats.vue:36 -msgctxt "Content/About/Paragraph/Unit" -msgid "Hours of music" -msgstr "Horas de música" - #: front/src/components/auth/SubsonicTokenForm.vue:10 msgctxt "Content/Settings/Paragraph" -msgid "" -"However, accessing Funkwhale from those clients require a separate password " -"you can set below." -msgstr "" -"Porém, para acessar o Funkwhale a partir desses clientes você precisa de uma" -" senha que pode ser configurada abaixo." +msgid "However, accessing Funkwhale from those clients require a separate password you can set below." +msgstr "Porém, para acessar o Funkwhale a partir desses clientes você precisa de uma senha que pode ser configurada abaixo." #: front/src/views/auth/PasswordResetConfirm.vue:24 +#, fuzzy msgctxt "Content/Signup/Paragraph" -msgid "" -"If the email address provided in the previous step is valid and binded to a " -"user account, you should receive an email with reset instructions in the " -"next couple of minutes." -msgstr "" -"Se o endereço de e-mail inserido anteriormente for válido e associado a uma " -"conta de usuário, você receberá um e-mail com as instruções de redefinição " -"nos próximos minutos." +msgid "If the email address provided in the previous step is valid and linked to a user account, you should receive an email with reset instructions in the next couple of minutes." +msgstr "Se o endereço de e-mail inserido anteriormente for válido e associado a uma conta de usuário, você receberá um e-mail com as instruções de redefinição nos próximos minutos." #: front/src/components/auth/Settings.vue:205 msgctxt "Content/Applications/Paragraph" -msgid "" -"If you authorize third-party applications to access your data, those " -"applications will be listed here." -msgstr "" +msgid "If you authorize third-party applications to access your data, those applications will be listed here." +msgstr "Se você permitir que aplicativos de terceiros acessem seus dados, eles aparecerão aqui." -#: front/src/components/library/ImportStatusModal.vue:3 +#: front/src/components/mixins/Translations.vue:46 +#: front/src/components/mixins/Translations.vue:47 #, fuzzy +msgctxt "Content/Moderation/Dropdown" +msgid "Illegal content" +msgstr "Ocultar conteúdo" + +#: front/src/components/library/ImportStatusModal.vue:3 msgctxt "Popup/Import/Title" msgid "Import detail" -msgstr "Data de importação" +msgstr "Detalhe da importação" #: front/src/components/library/FileUpload.vue:50 msgctxt "Content/Library/Input.Label/Noun" @@ -2165,14 +2262,10 @@ msgid "Import reference" msgstr "Importar referência" #: front/src/components/manage/library/UploadsTable.vue:20 -#: front/src/views/content/libraries/FilesTable.vue:11 -#: front/src/views/content/libraries/FilesTable.vue:59 -msgctxt "Content/Library/*/Noun" -msgid "Import status" -msgstr "Importar status" - #: front/src/components/manage/library/UploadsTable.vue:64 #: front/src/views/admin/library/UploadDetail.vue:131 +#: front/src/views/content/libraries/FilesTable.vue:11 +#: front/src/views/content/libraries/FilesTable.vue:59 msgctxt "Content/*/*/Noun" msgid "Import status" msgstr "Importar status" @@ -2186,18 +2279,17 @@ msgstr "Importado" #: front/src/components/federation/FetchButton.vue:47 msgctxt "*/*/Error" msgid "Impossible to connect to the remote server" -msgstr "" +msgstr "não foi possÃvel se conectar com o servidor remoto" #: front/src/components/moderation/FilterModal.vue:26 -#, fuzzy msgctxt "Popup/Moderation/List item" msgid "In \"Recently added\" widget" -msgstr "Adicionado recentemente" +msgstr "No widget \"Recentemente adicionado\"" #: front/src/components/moderation/FilterModal.vue:27 msgctxt "Popup/Moderation/List item" msgid "In artists and album listings" -msgstr "" +msgstr "Em listas de artistas e álbuns" #: front/src/components/favorites/TrackFavoriteIcon.vue:3 msgctxt "Content/Track/Button.Message" @@ -2207,25 +2299,24 @@ msgstr "Nos favoritos" #: front/src/components/moderation/FilterModal.vue:25 msgctxt "Popup/Moderation/List item" msgid "In other users favorites and listening history" -msgstr "" +msgstr "Nos favoritos e histórico de escutadas de outros usuários" #: front/src/components/moderation/FilterModal.vue:28 msgctxt "Popup/Moderation/List item" msgid "In radio suggestions" -msgstr "" +msgstr "Nas sugestões de rádios" -#: front/src/components/manage/users/UsersTable.vue:54 +#: front/src/components/manage/users/UsersTable.vue:55 msgctxt "Content/Admin/Table" msgid "Inactive" msgstr "Inativo" -#: front/src/components/ShortcutsModal.vue:71 +#: front/src/components/ShortcutsModal.vue:124 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Increase volume" msgstr "Aumentar volume" #: front/src/components/playlists/Editor.vue:41 -#, fuzzy msgctxt "Content/Playlist/Button.Label/Verb" msgid "Insert from queue (%{ count } track)" msgid_plural "Insert from queue (%{ count } tracks)" @@ -2234,12 +2325,11 @@ msgstr[1] "Inserir da fila (%{ count } faixas)" #: front/src/components/mixins/Translations.vue:16 #: front/src/components/mixins/Translations.vue:17 -#, fuzzy msgctxt "Content/Settings/Dropdown/Short" msgid "Instance" -msgstr "Dados da instância" +msgstr "Instância" -#: front/src/views/admin/moderation/DomainsDetail.vue:71 +#: front/src/views/admin/moderation/DomainsDetail.vue:99 msgctxt "Content/Moderation/Title" msgid "Instance data" msgstr "Dados da instância" @@ -2260,26 +2350,29 @@ msgid "Instance settings" msgstr "Configurações da instância" #: front/src/components/SetInstanceModal.vue:19 -#, fuzzy msgctxt "Popup/Instance/Input.Label/Noun" msgid "Instance URL" -msgstr "Dados da instância" +msgstr "Link da instância" + +#: front/src/components/manage/moderation/ReportCard.vue:92 +#: front/src/components/manage/moderation/ReportCard.vue:203 +msgctxt "Content/*/*/Noun" +msgid "Internal notes" +msgstr "" #: front/src/components/library/FileUpload.vue:268 msgctxt "Content/Library/Help text" -msgid "" -"Invalid file type, ensure you are uploading an audio file. Supported file " -"extensions are %{ extensions }" -msgstr "" -"Formato de arquivo inválido. Certifique-se de estar enviando um arquivo de " -"áudio. As extensões suportadas são %{ extensions }" +msgid "Invalid file type, ensure you are uploading an audio file. Supported file extensions are %{ extensions }" +msgstr "Formato de arquivo inválido. Certifique-se de estar enviando um arquivo de áudio. As extensões suportadas são %{ extensions }" #: front/src/components/library/ImportStatusModal.vue:139 +#: front/src/components/mixins/Translations.vue:45 +#: front/src/components/mixins/Translations.vue:46 msgctxt "Popup/Import/Error.Label" msgid "Invalid metadata" -msgstr "" +msgstr "Metadado inválido" -#: front/src/components/auth/Signup.vue:44 +#: front/src/components/auth/SignupForm.vue:40 #: front/src/components/manage/users/InvitationForm.vue:11 msgctxt "Content/*/Input.Label" msgid "Invitation code" @@ -2291,7 +2384,13 @@ msgctxt "*/Admin/*/Noun" msgid "Invitations" msgstr "Convites" -#: front/src/components/Footer.vue:41 +#: front/src/components/manage/moderation/DomainsTable.vue:9 +#: front/src/views/admin/moderation/DomainsDetail.vue:106 +msgctxt "Content/Moderation/*/Adjective" +msgid "Is present on allow-list" +msgstr "" + +#: front/src/components/Footer.vue:49 msgctxt "Footer/*/List item.Link" msgid "Issue tracker" msgstr "Registro de bugs" @@ -2299,19 +2398,20 @@ msgstr "Registro de bugs" #: front/src/components/SetInstanceModal.vue:5 msgctxt "Popup/Instance/Error message.Title" msgid "It is not possible to connect to the given URL" -msgstr "" +msgstr "Não foi possÃvel entrar neste link" -#: front/src/components/Home.vue:50 -msgctxt "Content/Home/List item/Verb" -msgid "Keep a track of your favorite songs" -msgstr "Acompanhe suas músicas favoritas" +#: front/src/components/mixins/Translations.vue:65 +#: front/src/components/mixins/Translations.vue:66 +msgctxt "*/*/*/Noun" +msgid "Items" +msgstr "" #: front/src/components/Footer.vue:33 src/components/ShortcutsModal.vue:3 msgctxt "*/*/*/Noun" msgid "Keyboard shortcuts" msgstr "Atalhos de teclado" -#: front/src/views/admin/moderation/DomainsDetail.vue:161 +#: front/src/views/admin/moderation/DomainsDetail.vue:198 msgctxt "Content/Moderation/Table.Label.Link" msgid "Known accounts" msgstr "Contas conhecidas" @@ -2322,15 +2422,15 @@ msgid "Known libraries" msgstr "Bibliotecas conhecidas" #: front/src/components/manage/users/UsersTable.vue:41 -#: front/src/components/mixins/Translations.vue:58 -#: front/src/views/admin/moderation/AccountsDetail.vue:205 -#: front/src/components/mixins/Translations.vue:59 +#: front/src/components/mixins/Translations.vue:70 +#: front/src/views/admin/moderation/AccountsDetail.vue:206 +#: front/src/components/mixins/Translations.vue:71 msgctxt "Content/Profile/Table.Label/Short, Noun (Value is a date)" msgid "Last activity" msgstr "Última atividade" -#: front/src/views/admin/moderation/AccountsDetail.vue:188 -#: front/src/views/admin/moderation/DomainsDetail.vue:78 +#: front/src/views/admin/moderation/AccountsDetail.vue:189 +#: front/src/views/admin/moderation/DomainsDetail.vue:115 msgctxt "Content/*/Table.Label" msgid "Last checked" msgstr "Última verificação" @@ -2345,13 +2445,13 @@ msgctxt "Content/Moderation/Table.Label/Noun" msgid "Last seen" msgstr "Última visualização" -#: front/src/components/mixins/Translations.vue:47 -#: front/src/components/mixins/Translations.vue:48 +#: front/src/components/mixins/Translations.vue:57 +#: front/src/components/mixins/Translations.vue:58 msgctxt "Content/Moderation/Dropdown/Noun" msgid "Last seen date" msgstr "Data da última visualização" -#: front/src/views/content/remote/Card.vue:60 +#: front/src/views/content/remote/Card.vue:73 msgctxt "Content/Library/Card.List item/Noun" msgid "Last update:" msgstr "Última atualização:" @@ -2361,61 +2461,60 @@ msgctxt "Modal/*/Button.Label/Short, Verb" msgid "Launch" msgstr "Executar" -#: front/src/components/Home.vue:10 -msgctxt "Content/Home/Button.Label/Verb" -msgid "Learn more about this instance" -msgstr "Veja mais sobre esta instância" +#: front/src/components/Home.vue:35 +#, fuzzy +msgctxt "Content/Home/Link" +msgid "Learn more" +msgstr "Ver mais…" #: front/src/components/manage/users/InvitationForm.vue:58 msgctxt "Content/Admin/Input.Placeholder" msgid "Leave empty for a random code" msgstr "Deixe vazio para um código aleatório" -#: front/src/components/audio/EmbedWizard.vue:7 +#: front/src/components/audio/EmbedWizard.vue:17 msgctxt "Popup/Embed/Paragraph" msgid "Leave empty for a responsive widget" msgstr "Deixar vazio para um widget responsivo" -#: front/src/views/admin/library/AlbumDetail.vue:232 -#: front/src/views/admin/library/ArtistDetail.vue:221 -#: front/src/views/admin/library/TrackDetail.vue:284 -#: front/src/views/admin/moderation/AccountsDetail.vue:327 -#: front/src/views/admin/moderation/DomainsDetail.vue:234 -#: front/src/views/content/Base.vue:5 +#: front/src/components/mixins/Translations.vue:64 +#: front/src/components/mixins/Translations.vue:65 msgctxt "*/*/*/Noun" -msgid "Libraries" -msgstr "Bibliotecas" +msgid "Length" +msgstr "" +#: front/src/views/admin/library/AlbumDetail.vue:248 +#: front/src/views/admin/library/ArtistDetail.vue:236 #: front/src/views/admin/library/Base.vue:17 #: front/src/views/admin/library/LibrariesList.vue:24 -msgctxt "*/*/*" +#: front/src/views/admin/library/TrackDetail.vue:300 +#: front/src/views/admin/moderation/AccountsDetail.vue:339 +#: front/src/views/admin/moderation/DomainsDetail.vue:271 +#: front/src/views/content/Base.vue:5 +msgctxt "*/*/*/Noun" msgid "Libraries" msgstr "Bibliotecas" -#: front/src/components/mixins/Translations.vue:72 -#: front/src/components/mixins/Translations.vue:73 -#, fuzzy +#: front/src/components/mixins/Translations.vue:84 +#: front/src/components/mixins/Translations.vue:85 msgctxt "Content/OAuth Scopes/Label" msgid "Libraries and uploads" -msgstr "Biblioteca atualizada" +msgstr "Bibliotecas e envios" #: front/src/views/content/libraries/Form.vue:2 msgctxt "Content/Library/Paragraph" -msgid "" -"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." -msgstr "" -"Bibliotecas ajudam você a organizar e compartilhar suas coleções de músicas." -" Você pode enviar sua própria coleção de músicas ao Funkwhale e compartilhar" -" com seus amigos e famÃlia." +msgid "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." +msgstr "Bibliotecas ajudam você a organizar e compartilhar suas coleções de músicas. Você pode enviar sua própria coleção de músicas ao Funkwhale e compartilhar com seus amigos e famÃlia." -#: front/src/components/Sidebar.vue:85 src/components/instance/Stats.vue:30 +#: front/src/components/Sidebar.vue:85 #: front/src/components/manage/library/UploadsTable.vue:60 -#: front/src/components/manage/users/UsersTable.vue:173 +#: front/src/components/manage/users/UsersTable.vue:174 +#: front/src/components/mixins/Report.vue:77 #: front/src/views/admin/library/UploadDetail.vue:144 -#: front/src/views/admin/moderation/AccountsDetail.vue:498 -msgctxt "*/*/*" +#: front/src/views/admin/moderation/AccountsDetail.vue:518 src/entities.js:132 +#: front/src/components/mixins/Report.vue:78 +#, fuzzy +msgctxt "*/*/*/Noun" msgid "Library" msgstr "Biblioteca" @@ -2425,10 +2524,9 @@ msgid "Library created" msgstr "Bibliloteca criada" #: front/src/views/admin/library/LibraryDetail.vue:78 -#, fuzzy msgctxt "Content/Moderation/Title" msgid "Library data" -msgstr "Biblioteca atualizada" +msgstr "Dados da biblioteca" #: front/src/views/content/libraries/Form.vue:123 msgctxt "Content/Library/Message" @@ -2436,10 +2534,9 @@ msgid "Library deleted" msgstr "Biblioteca excluÃda" #: front/src/views/admin/library/EditsList.vue:4 -#, fuzzy msgctxt "Content/Admin/Title/Noun" msgid "Library edits" -msgstr "Arquivos da biblioteca" +msgstr "Edições na biblioteca" #: front/src/views/content/libraries/Form.vue:100 msgctxt "Content/Library/Message" @@ -2448,30 +2545,45 @@ msgstr "Biblioteca atualizada" #: front/src/components/library/TrackDetail.vue:19 #: front/src/components/manage/library/TracksTable.vue:43 -#: front/src/views/admin/library/TrackDetail.vue:159 src/edits.js:61 +#: front/src/views/admin/library/TrackDetail.vue:165 src/edits.js:84 +#: front/src/entities.js:115 msgctxt "Content/*/*/Noun" msgid "License" msgstr "Licença" -#: front/src/views/admin/library/AlbumDetail.vue:157 -#: front/src/views/admin/library/ArtistDetail.vue:146 -#: front/src/views/admin/library/TrackDetail.vue:209 -msgctxt "*/*/*/Noun" -msgid "Listenings" +#: front/src/components/Footer.vue:90 +msgctxt "Footer/Settings/Dropdown.Label/Theme name" +msgid "Light" msgstr "" -#: front/src/components/mixins/Translations.vue:80 -#: front/src/components/mixins/Translations.vue:81 -msgctxt "Content/OAuth Scopes/Label" -msgid "Listenings" +#: front/src/views/admin/library/AlbumDetail.vue:188 +#: front/src/views/admin/library/ArtistDetail.vue:176 +#: front/src/views/admin/library/LibraryDetail.vue:179 +#: front/src/views/admin/library/TrackDetail.vue:240 +#: front/src/views/admin/moderation/AccountsDetail.vue:269 +msgctxt "Content/Moderation/Table.Label/Noun" +msgid "Linked reports" msgstr "" +#: front/src/components/Home.vue:135 +msgctxt "Content/Home/Link" +msgid "Listen to public albums and playlists shared on this pod" +msgstr "" + +#: front/src/components/mixins/Translations.vue:92 +#: front/src/views/admin/library/AlbumDetail.vue:163 +#: front/src/views/admin/library/ArtistDetail.vue:151 +#: front/src/views/admin/library/TrackDetail.vue:215 +#: front/src/components/mixins/Translations.vue:93 +msgctxt "*/*/*/Noun" +msgid "Listenings" +msgstr "Escutadas" + #: front/src/components/audio/track/Table.vue:25 #: front/src/components/library/ArtistDetail.vue:28 -#, fuzzy msgctxt "Content/*/Button.Label" msgid "Load more…" -msgstr "Carregando seguidores…" +msgstr "Ver mais…" #: front/src/views/content/libraries/Detail.vue:21 msgctxt "Content/Library/Paragraph" @@ -2489,16 +2601,15 @@ msgctxt "Content/Library/Paragraph" msgid "Loading library data…" msgstr "Carregando dados da biblioteca…" -#: front/src/views/Notifications.vue:19 +#: front/src/views/Notifications.vue:84 msgctxt "Content/Notifications/Paragraph" msgid "Loading notifications…" msgstr "Carregando notificações…" #: front/src/views/content/remote/Home.vue:3 -#, fuzzy msgctxt "Content/Library/Paragraph" msgid "Loading remote libraries…" -msgstr "Carregando bibliotecas remotas..." +msgstr "Carregando bibliotecas remotas…" #: front/src/views/content/libraries/Quota.vue:4 msgctxt "Content/Library/Paragraph" @@ -2515,6 +2626,7 @@ msgstr "Carregando seus favoritos…" #: front/src/components/manage/library/LibrariesTable.vue:75 #: front/src/components/manage/library/TracksTable.vue:71 #: front/src/components/manage/library/UploadsTable.vue:99 +#: front/src/components/manage/moderation/ReportCard.vue:173 #: front/src/views/admin/library/AlbumDetail.vue:19 #: front/src/views/admin/library/ArtistDetail.vue:18 #: front/src/views/admin/library/LibraryDetail.vue:18 @@ -2522,7 +2634,7 @@ msgstr "Carregando seus favoritos…" #: front/src/views/admin/library/UploadDetail.vue:19 msgctxt "Content/Moderation/*/Short, Noun" msgid "Local" -msgstr "" +msgstr "Local" #: front/src/components/manage/moderation/AccountsTable.vue:59 #: front/src/views/admin/moderation/AccountsDetail.vue:18 @@ -2530,12 +2642,12 @@ msgctxt "Content/Moderation/*/Short, Noun" msgid "Local account" msgstr "Conta local" -#: front/src/components/auth/Login.vue:84 +#: front/src/components/Home.vue:96 src/views/auth/Login.vue:29 msgctxt "Head/Login/Title" msgid "Log In" msgstr "Entrar" -#: front/src/components/auth/Login.vue:4 +#: front/src/views/auth/Login.vue:4 msgctxt "Content/Login/Title/Verb" msgid "Log in to your Funkwhale account" msgstr "Entrar com sua conta Funkwhale" @@ -2550,7 +2662,7 @@ msgctxt "Sidebar/Profile/List item.Link" msgid "Logged in as %{ username }" msgstr "Entrou como %{ username }" -#: front/src/components/Sidebar.vue:54 src/components/auth/Login.vue:42 +#: front/src/components/Sidebar.vue:54 src/components/auth/LoginForm.vue:41 msgctxt "*/Login/*/Verb" msgid "Login" msgstr "Entrada" @@ -2570,34 +2682,40 @@ msgctxt "Content/Library/Paragraph" msgid "Looks like you don't have a library, it's time to create one." msgstr "Parece que você não possui nenhuma biblioteca. É hora de criar uma." -#: front/src/components/audio/Player.vue:632 -#: src/components/audio/Player.vue:633 +#: front/src/components/audio/Player.vue:658 +#: src/components/audio/Player.vue:659 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Looping disabled. Click to switch to single-track looping." msgstr "Repetição desativada. Clique para repetir uma única faixa." -#: front/src/components/audio/Player.vue:635 -#: src/components/audio/Player.vue:636 +#: front/src/components/audio/Player.vue:661 +#: src/components/audio/Player.vue:662 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Looping on a single track. Click to switch to whole queue looping." msgstr "Repetindo uma única faixa. Clique para repetir a fila inteira." -#: front/src/components/audio/Player.vue:638 -#: src/components/audio/Player.vue:639 +#: front/src/components/audio/Player.vue:664 +#: src/components/audio/Player.vue:665 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Looping on whole queue. Click to disable looping." msgstr "Repetindo a fila inteira. Clique para desativar a repetição." -#: front/src/components/Sidebar.vue:223 +#: front/src/components/Sidebar.vue:230 msgctxt "Sidebar/*/Hidden text" msgid "Main menu" msgstr "Menu principal" -#: front/src/views/admin/library/Base.vue:31 +#: front/src/views/admin/library/Base.vue:34 msgctxt "Head/Admin/Title" msgid "Manage library" msgstr "Gerenciar biblioteca" +#: front/src/components/manage/moderation/InstancePolicyModal.vue:8 +#, fuzzy +msgctxt "Popup/Moderation/Title/Verb" +msgid "Manage moderation rules for %{ obj }" +msgstr "Sob regra de moderação" + #: front/src/components/playlists/PlaylistModal.vue:3 msgctxt "Popup/Playlist/Title/Verb" msgid "Manage playlists" @@ -2613,7 +2731,7 @@ msgctxt "Content/Playlist/Button.Label/Verb" msgid "Manage your playlists" msgstr "Gerenciar suas listas de reprodução" -#: front/src/views/Notifications.vue:14 +#: front/src/views/Notifications.vue:79 msgctxt "Content/Notifications/Button.Label/Verb" msgid "Mark all as read" msgstr "Marcar tudo como lido" @@ -2628,87 +2746,99 @@ msgctxt "Content/Notifications/Button.Tooltip/Verb" msgid "Mark as unread" msgstr "Marcar como não lido" -#: front/src/views/admin/moderation/AccountsDetail.vue:310 +#: front/src/views/admin/moderation/AccountsDetail.vue:321 msgctxt "Content/*/*/Unit" msgid "MB" msgstr "MB" -#: front/src/components/audio/Player.vue:625 +#: front/src/components/audio/Player.vue:651 msgctxt "Sidebar/Player/Hidden text" msgid "Media player" msgstr "Reprodutor de mÃdia" #: front/src/components/auth/Profile.vue:12 -#, fuzzy msgctxt "Content/Profile/Paragraph" msgid "Member since %{ date }" -msgstr "Registrado desde %{ date }" +msgstr "Membro desde %{ date }" + +#: front/src/components/manage/moderation/ReportCard.vue:109 +#: front/src/components/moderation/ReportModal.vue:41 +msgctxt "*/*/Field.Label/Noun" +msgid "Message" +msgstr "" #: front/src/components/Footer.vue:32 msgctxt "Footer/*/List item.Link" msgid "Mobile and desktop apps" -msgstr "Aplicativos móvel e de desktop" +msgstr "Aplicativos móveis e de desktop" + +#: front/src/components/Home.vue:143 +#, fuzzy +msgctxt "Content/Home/Link" +msgid "Mobile apps" +msgstr "Aplicativos móveis e de desktop" #: front/src/components/Sidebar.vue:96 -#: src/components/manage/users/UsersTable.vue:177 -#: front/src/views/admin/moderation/AccountsDetail.vue:502 -#: front/src/views/admin/moderation/Base.vue:21 +#: src/components/manage/users/UsersTable.vue:178 +#: front/src/views/admin/Settings.vue:85 +#: front/src/views/admin/moderation/AccountsDetail.vue:522 +#: front/src/views/admin/moderation/Base.vue:43 msgctxt "*/Moderation/*" msgid "Moderation" msgstr "Moderação" #: front/src/views/admin/moderation/AccountsDetail.vue:78 -#: front/src/views/admin/moderation/DomainsDetail.vue:42 +#: front/src/views/admin/moderation/DomainsDetail.vue:70 msgctxt "Content/Moderation/Card.Paragraph" -msgid "" -"Moderation policies help you control how your instance interact with a given" -" domain or account." -msgstr "" -"Regras de moderação ajudam você a controlar como sua instância interage com " -"um determinado domÃnio ou conta." +msgid "Moderation policies help you control how your instance interact with a given domain or account." +msgstr "Regras de moderação ajudam você a controlar como sua instância interage com um determinado domÃnio ou conta." -#: front/src/components/library/EditCard.vue:5 +#: front/src/components/manage/moderation/InstancePolicyModal.vue:4 #, fuzzy +msgctxt "Content/Moderation/Button.Label" +msgid "Moderation rules…" +msgstr "Editar regra de moderação" + +#: front/src/components/library/EditCard.vue:5 msgctxt "Content/Library/Card/Short" msgid "Modification %{ id }" -msgstr "Data de modificação" +msgstr "Modificação %{ id }" -#: front/src/components/mixins/Translations.vue:48 -#: front/src/components/mixins/Translations.vue:49 +#: front/src/components/mixins/Translations.vue:58 +#: front/src/components/mixins/Translations.vue:59 msgctxt "Content/Playlist/Dropdown/Noun" msgid "Modification date" msgstr "Data de modificação" -#: front/src/components/library/AlbumBase.vue:42 -#: front/src/components/library/ArtistBase.vue:53 -#: front/src/components/library/TrackBase.vue:61 +#: front/src/components/audio/PlayButton.vue:100 +#: front/src/components/library/AlbumBase.vue:43 +#: front/src/components/library/ArtistBase.vue:54 +#: front/src/components/library/TrackBase.vue:59 msgctxt "*/*/Button.Label/Noun" msgid "More…" -msgstr "" +msgstr "Mais…" #: front/src/components/Sidebar.vue:63 src/views/admin/Settings.vue:82 msgctxt "*/*/*/Noun" msgid "Music" msgstr "Músicas" -#: front/src/components/audio/Player.vue:631 +#: front/src/components/audio/Player.vue:657 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Mute" msgstr "Silenciar" #: front/src/components/manage/moderation/InstancePolicyCard.vue:24 #: front/src/components/manage/moderation/InstancePolicyForm.vue:115 -#, fuzzy msgctxt "Content/Moderation/*/Verb" msgid "Mute activity" -msgstr "Última atividade" +msgstr "Silenciar atividade" #: front/src/components/manage/moderation/InstancePolicyCard.vue:28 #: front/src/components/manage/moderation/InstancePolicyForm.vue:119 -#, fuzzy msgctxt "Content/Moderation/*/Verb" msgid "Mute notifications" -msgstr "Suas notificações" +msgstr "Silenciar notificações" #: front/src/components/Sidebar.vue:34 msgctxt "Sidebar/Profile/Title" @@ -2740,8 +2870,8 @@ msgctxt "Content/Library/Title" msgid "My libraries" msgstr "Minhas bibliotecas" -#: front/src/components/audio/track/Row.vue:40 -#: src/components/library/EditCard.vue:60 +#: front/src/components/About.vue:105 src/components/audio/track/Row.vue:40 +#: front/src/components/library/EditCard.vue:60 #: front/src/components/library/EditForm.vue:70 #: front/src/components/library/TrackDetail.vue:34 #: front/src/components/library/TrackDetail.vue:43 @@ -2751,54 +2881,56 @@ msgstr "Minhas bibliotecas" #: front/src/components/manage/library/TracksTable.vue:76 #: front/src/components/manage/library/UploadsTable.vue:121 #: front/src/components/manage/library/UploadsTable.vue:128 -#: front/src/components/manage/users/UsersTable.vue:61 +#: front/src/components/manage/moderation/ReportCard.vue:78 +#: front/src/components/manage/moderation/ReportCard.vue:87 +#: front/src/components/manage/moderation/ReportCard.vue:193 +#: front/src/components/manage/users/UsersTable.vue:62 #: front/src/views/admin/library/UploadDetail.vue:179 #: front/src/views/admin/library/UploadDetail.vue:214 #: front/src/views/admin/library/UploadDetail.vue:233 #: front/src/views/admin/library/UploadDetail.vue:244 #: front/src/views/admin/library/UploadDetail.vue:257 -#: front/src/views/admin/moderation/AccountsDetail.vue:192 -#: front/src/views/admin/moderation/DomainsDetail.vue:82 +#: front/src/views/admin/moderation/AccountsDetail.vue:193 +#: front/src/views/admin/moderation/DomainsDetail.vue:119 #: front/src/views/content/libraries/FilesTable.vue:95 #: front/src/views/content/libraries/FilesTable.vue:101 msgctxt "*/*/*" msgid "N/A" msgstr "N/A" -#: front/src/components/manage/library/LibrariesTable.vue:48 -#: front/src/components/manage/library/UploadsTable.vue:59 -msgctxt "*/*/*" -msgid "Name" -msgstr "Nome" - #: front/src/components/auth/ApplicationForm.vue:9 -msgctxt "Content/Applications/Input.Label/Noun" -msgid "Name" -msgstr "Nome" - #: front/src/components/auth/Settings.vue:133 #: front/src/components/manage/library/ArtistsTable.vue:39 +#: front/src/components/manage/library/LibrariesTable.vue:48 +#: front/src/components/manage/library/TagsTable.vue:41 +#: front/src/components/manage/library/UploadsTable.vue:59 #: front/src/components/manage/moderation/AccountsTable.vue:39 -#: front/src/components/manage/moderation/DomainsTable.vue:38 -#: front/src/components/mixins/Translations.vue:53 +#: front/src/components/manage/moderation/DomainsTable.vue:46 +#: front/src/components/mixins/Translations.vue:63 #: front/src/components/playlists/PlaylistModal.vue:45 -#: front/src/views/admin/library/ArtistDetail.vue:98 +#: front/src/views/admin/library/ArtistDetail.vue:103 #: front/src/views/admin/library/LibraryDetail.vue:85 +#: front/src/views/admin/library/TagDetail.vue:68 #: front/src/views/admin/library/UploadDetail.vue:92 -#: front/src/views/admin/moderation/DomainsDetail.vue:97 -#: front/src/views/content/libraries/Form.vue:10 src/edits.js:10 -#: front/src/components/mixins/Translations.vue:54 +#: front/src/views/admin/moderation/DomainsDetail.vue:134 +#: front/src/views/content/libraries/Form.vue:10 src/edits.js:17 +#: front/src/components/mixins/Translations.vue:64 msgctxt "*/*/*/Noun" msgid "Name" msgstr "Nome" +#: front/src/views/Notifications.vue:24 src/views/Notifications.vue:58 +msgctxt "*/*/*" +msgid "Never" +msgstr "" + #: front/src/components/auth/Settings.vue:88 #: front/src/views/auth/PasswordResetConfirm.vue:14 msgctxt "Content/Settings/Input.Label" msgid "New password" msgstr "Nova senha" -#: front/src/components/Sidebar.vue:173 +#: front/src/components/Sidebar.vue:177 msgctxt "Sidebar/Player/Paragraph" msgid "New tracks will be appended here automatically." msgstr "Novas faixas serão acrescentadas aqui automaticamente." @@ -2806,23 +2938,20 @@ msgstr "Novas faixas serão acrescentadas aqui automaticamente." #: front/src/components/library/EditCard.vue:47 msgctxt "Content/Library/Card.Table.Header/Short" msgid "New value" -msgstr "" +msgstr "Novo valor" -#: front/src/components/audio/Player.vue:629 +#: front/src/components/audio/Player.vue:655 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Next track" msgstr "Próxima faixa" -#: front/src/components/Sidebar.vue:130 +#: front/src/components/Sidebar.vue:134 +#: front/src/components/manage/moderation/DomainsTable.vue:13 +#: front/src/views/admin/moderation/DomainsDetail.vue:110 msgctxt "*/*/*" msgid "No" msgstr "Não" -#: front/src/components/Home.vue:95 -msgctxt "Content/Home/List item" -msgid "No add-ons, no plugins : you only need a web library" -msgstr "Sem add-ons, sem plugins: Você só precisa de uma biblioteca da web" - #: front/src/components/audio/Search.vue:25 msgctxt "Content/Search/Paragraph" msgid "No album matched your query" @@ -2834,24 +2963,26 @@ msgid "No artist matched your query" msgstr "Artista não encontrado" #: front/src/components/library/TrackDetail.vue:14 -#, fuzzy msgctxt "Content/Track/Table.Paragraph" msgid "No copyright information available for this track" -msgstr "Sem letras disponÃveis para esta faixa." +msgstr "Sem informações de direitos autorais para esta faixa" + +#: front/src/components/About.vue:25 src/components/Home.vue:25 +msgctxt "Content/Home/Paragraph" +msgid "No description available." +msgstr "" #: front/src/components/library/TrackDetail.vue:25 -#, fuzzy msgctxt "Content/Track/Table.Paragraph" msgid "No licensing information for this track" -msgstr "Não temos informações de licenciamento para esta faixa" +msgstr "Sem informações de licenciamento para esta faixa" #: front/src/components/federation/LibraryWidget.vue:6 msgctxt "Content/Federation/Paragraph" msgid "No matching library." msgstr "Nenhuma biblioteca encontrada." -#: front/src/views/Notifications.vue:28 -#, fuzzy +#: front/src/views/Notifications.vue:93 msgctxt "Content/Notifications/Paragraph" msgid "No notification to show." msgstr "Sem notificações." @@ -2859,6 +2990,16 @@ msgstr "Sem notificações." #: front/src/components/common/EmptyState.vue:7 msgctxt "Content/*/Paragraph" msgid "No results were found." +msgstr "Sem resultados." + +#: front/src/components/About.vue:32 +msgctxt "Content/Home/Paragraph" +msgid "No rules available." +msgstr "" + +#: front/src/components/About.vue:39 +msgctxt "Content/Home/Paragraph" +msgid "No terms available." msgstr "" #: front/src/components/mixins/Translations.vue:10 @@ -2877,18 +3018,22 @@ msgctxt "Content/Admin/Table" msgid "Not used" msgstr "Não usado" -#: front/src/components/mixins/Translations.vue:100 -#: front/src/components/mixins/Translations.vue:101 -msgctxt "Content/OAuth Scopes/Label" -msgid "Notifications" -msgstr "Notificações" - -#: front/src/components/Sidebar.vue:46 src/views/Notifications.vue:76 +#: front/src/components/Sidebar.vue:46 +#: src/components/mixins/Translations.vue:112 +#: front/src/views/Notifications.vue:151 +#: src/components/mixins/Translations.vue:113 msgctxt "*/Notifications/*" msgid "Notifications" msgstr "Notificações" -#: front/src/components/Footer.vue:47 +#: front/src/components/mixins/Translations.vue:47 +#: front/src/components/mixins/Translations.vue:48 +#, fuzzy +msgctxt "Content/Moderation/Dropdown" +msgid "Offensive content" +msgstr "Ocultar conteúdo" + +#: front/src/components/Footer.vue:55 msgctxt "Footer/*/List item.Link" msgid "Official website" msgstr "Site oficial" @@ -2901,7 +3046,13 @@ msgstr "Senha antiga" #: front/src/components/library/EditCard.vue:46 msgctxt "Content/Library/Card.Table.Header/Short" msgid "Old value" -msgstr "" +msgstr "Valor anterior" + +#: front/src/components/About.vue:90 +#, fuzzy +msgctxt "*/*/*/State of registrations" +msgid "Open" +msgstr "Abrir" #: front/src/components/manage/users/InvitationsTable.vue:20 msgctxt "Content/Admin/Dropdown/Adjective" @@ -2910,49 +3061,47 @@ msgstr "Abrir" #: front/src/components/library/ImportStatusModal.vue:56 msgctxt "Popup/Import/Table.Label/Value" -msgid "" -"Open a support thread (include the debug information below in your message)" -msgstr "" - -#: front/src/components/library/AlbumBase.vue:73 -#: front/src/components/library/ArtistBase.vue:84 -#: front/src/components/library/TrackBase.vue:92 -#, fuzzy +msgid "Open a support thread (include the debug information below in your message)" +msgstr "Abra um tópico de suporte (inclua informação de depuração na mensagem)" + +#: front/src/components/library/AlbumBase.vue:87 +#: front/src/components/library/ArtistBase.vue:99 +#: front/src/components/library/TagDetail.vue:11 +#: front/src/components/library/TrackBase.vue:103 +#: front/src/components/manage/moderation/ReportCard.vue:128 msgctxt "Content/Moderation/Link" msgid "Open in moderation interface" -msgstr "Atualizar regra de moderação" +msgstr "Abrir interface de moderação" -#: front/src/views/admin/library/AlbumDetail.vue:31 -#: front/src/views/admin/library/ArtistDetail.vue:30 -#: front/src/views/admin/library/TrackDetail.vue:30 -#, fuzzy +#: front/src/views/admin/library/AlbumDetail.vue:37 +#: front/src/views/admin/library/ArtistDetail.vue:35 +#: front/src/views/admin/library/TagDetail.vue:21 +#: front/src/views/admin/library/TrackDetail.vue:36 msgctxt "Content/Moderation/Link/Verb" msgid "Open local profile" -msgstr "Abrir perfil" +msgstr "Abrir perfil local" -#: front/src/views/admin/library/AlbumDetail.vue:46 -#: front/src/views/admin/library/ArtistDetail.vue:45 -#: front/src/views/admin/library/TrackDetail.vue:45 -#, fuzzy +#: front/src/views/admin/library/AlbumDetail.vue:52 +#: front/src/views/admin/library/ArtistDetail.vue:50 +#: front/src/views/admin/library/TrackDetail.vue:51 msgctxt "Content/Moderation/Link/Verb" msgid "Open on MusicBrainz" -msgstr "Ver em MusicBrainz" +msgstr "Abrir em MusicBrainz" #: front/src/views/admin/moderation/AccountsDetail.vue:23 msgctxt "Content/Moderation/Link/Verb" msgid "Open profile" msgstr "Abrir perfil" -#: front/src/views/admin/library/AlbumDetail.vue:54 -#: front/src/views/admin/library/ArtistDetail.vue:53 +#: front/src/views/admin/library/AlbumDetail.vue:60 +#: front/src/views/admin/library/ArtistDetail.vue:58 #: front/src/views/admin/library/LibraryDetail.vue:49 -#: front/src/views/admin/library/TrackDetail.vue:53 +#: front/src/views/admin/library/TrackDetail.vue:59 #: front/src/views/admin/library/UploadDetail.vue:50 #: front/src/views/admin/moderation/AccountsDetail.vue:52 -#, fuzzy msgctxt "Content/Moderation/Link/Verb" msgid "Open remote profile" -msgstr "Abrir perfil" +msgstr "Abrir perfil remoto" #: front/src/views/admin/moderation/DomainsDetail.vue:16 msgctxt "Content/Moderation/Link/Verb" @@ -2968,6 +3117,7 @@ msgstr "Ou personalize sua regra" #: src/components/library/Radios.vue:41 #: front/src/components/manage/library/EditsCardList.vue:37 #: front/src/components/manage/users/UsersTable.vue:17 +#: front/src/views/admin/moderation/ReportsList.vue:42 #: front/src/views/playlists/List.vue:25 msgctxt "Content/Search/Dropdown.Label/Noun" msgid "Order" @@ -2975,40 +3125,51 @@ msgstr "Ordem" #: front/src/components/favorites/List.vue:24 #: src/components/library/Albums.vue:15 -#: front/src/components/library/Artists.vue:15 +#: front/src/components/library/Artists.vue:19 #: src/components/library/Radios.vue:33 #: front/src/components/manage/library/AlbumsTable.vue:11 #: front/src/components/manage/library/ArtistsTable.vue:11 #: front/src/components/manage/library/EditsCardList.vue:29 #: front/src/components/manage/library/LibrariesTable.vue:20 +#: front/src/components/manage/library/TagsTable.vue:11 #: front/src/components/manage/library/TracksTable.vue:11 #: front/src/components/manage/library/UploadsTable.vue:30 #: front/src/components/manage/moderation/AccountsTable.vue:11 -#: front/src/components/manage/moderation/DomainsTable.vue:9 +#: front/src/components/manage/moderation/DomainsTable.vue:17 #: front/src/components/manage/users/InvitationsTable.vue:9 #: front/src/components/manage/users/UsersTable.vue:9 +#: front/src/views/admin/moderation/ReportsList.vue:34 #: front/src/views/content/libraries/FilesTable.vue:21 #: front/src/views/playlists/List.vue:17 msgctxt "Content/Search/Dropdown.Label/Noun" msgid "Ordering" msgstr "Ordenando" -#: front/src/components/library/Albums.vue:23 -#: src/components/library/Artists.vue:23 +#: front/src/components/library/Albums.vue:27 +#: src/components/library/Artists.vue:27 #: front/src/components/manage/library/AlbumsTable.vue:19 #: front/src/components/manage/library/ArtistsTable.vue:19 #: front/src/components/manage/library/LibrariesTable.vue:28 +#: front/src/components/manage/library/TagsTable.vue:19 #: front/src/components/manage/library/TracksTable.vue:19 #: front/src/components/manage/library/UploadsTable.vue:38 #: front/src/components/manage/moderation/AccountsTable.vue:19 -#: front/src/components/manage/moderation/DomainsTable.vue:17 +#: front/src/components/manage/moderation/DomainsTable.vue:25 #: front/src/views/content/libraries/FilesTable.vue:29 msgctxt "Content/Search/Dropdown.Label/Noun" msgid "Ordering direction" msgstr "Direção da ordem" +#: front/src/components/mixins/Translations.vue:48 +#: front/src/components/mixins/Translations.vue:49 +msgctxt "Content/Moderation/Dropdown" +msgid "Other" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:143 #: front/src/components/manage/users/InvitationsTable.vue:38 -msgctxt "Content/Admin/Table.Label" +#, fuzzy +msgctxt "*/*/*" msgid "Owner" msgstr "Dono(a)" @@ -3027,12 +3188,15 @@ msgctxt "Content/*/Hidden text/Noun" msgid "Pagination" msgstr "Paginação" -#: front/src/components/auth/Login.vue:33 src/components/auth/Signup.vue:40 -msgctxt "Content/*/Input.Label" +#: front/src/components/auth/LoginForm.vue:32 +#: src/components/auth/Settings.vue:291 +#: front/src/components/auth/SignupForm.vue:36 +#, fuzzy +msgctxt "*/*/*" msgid "Password" msgstr "Senha" -#: front/src/components/auth/SubsonicTokenForm.vue:94 +#: front/src/components/auth/SubsonicTokenForm.vue:100 msgctxt "Content/Settings/Message" msgid "Password updated" msgstr "Senha atualizada" @@ -3042,15 +3206,15 @@ msgctxt "Content/Signup/Card.Title" msgid "Password updated successfully" msgstr "Senha atualizada com sucesso" -#: front/src/components/audio/Player.vue:628 +#: front/src/components/audio/Player.vue:654 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Pause track" msgstr "Pausar faixa" -#: front/src/components/ShortcutsModal.vue:59 +#: front/src/components/ShortcutsModal.vue:96 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Pause/play the current track" -msgstr "Reproduzir/pausar a faixa atual" +msgstr "Tocar/pausar a faixa atual" #: front/src/components/manage/moderation/InstancePolicyCard.vue:12 msgctxt "Content/Moderation/Card.List item" @@ -3076,108 +3240,96 @@ msgctxt "Content/Library/Label" msgid "Pending files" msgstr "Arquivos pendentes" -#: front/src/components/Sidebar.vue:225 +#: front/src/components/Sidebar.vue:232 msgctxt "Sidebar/Notifications/Hidden text" msgid "Pending follow requests" msgstr "Solicitações de seguidor pendentes" #: front/src/components/library/EditCard.vue:29 #: front/src/components/manage/library/EditsCardList.vue:18 -#, fuzzy msgctxt "Content/Admin/*/Noun" msgid "Pending review" -msgstr "Arquivos pendentes" +msgstr "Revisão pendente" -#: front/src/components/Sidebar.vue:226 -#, fuzzy +#: front/src/components/Sidebar.vue:233 msgctxt "Sidebar/Moderation/Hidden text" msgid "Pending review edits" -msgstr "Arquivos pendentes" +msgstr "Edições de revisão pendente" +#: front/src/components/auth/Settings.vue:176 #: front/src/components/manage/users/UsersTable.vue:42 #: front/src/views/admin/moderation/AccountsDetail.vue:166 -msgctxt "Content/Admin/Table.Label/Noun" -msgid "Permissions" -msgstr "Permissões" - -#: front/src/components/auth/Settings.vue:176 msgctxt "Content/*/*/Noun" msgid "Permissions" msgstr "Permissões" #: front/src/components/audio/PlayButton.vue:9 -#: front/src/components/library/TrackBase.vue:26 +#: front/src/components/library/TrackBase.vue:24 msgctxt "*/Queue/Button.Label/Short, Verb" msgid "Play" -msgstr "Reproduzir" +msgstr "Tocar" #: front/src/components/audio/album/Card.vue:48 -#: front/src/components/audio/artist/Card.vue:44 -#: front/src/components/library/AlbumBase.vue:20 +#: front/src/components/library/AlbumBase.vue:21 #: front/src/components/library/AlbumDetail.vue:11 #: src/views/playlists/Detail.vue:24 msgctxt "Content/Queue/Button.Label/Short, Verb" msgid "Play all" -msgstr "Reproduzir tudo" +msgstr "Tocar tudo" -#: front/src/components/library/ArtistBase.vue:31 +#: front/src/components/library/ArtistBase.vue:32 msgctxt "Content/Artist/Button.Label/Verb" msgid "Play all albums" -msgstr "Reproduzir todos os álbuns" +msgstr "Tocar todos os álbuns" -#: front/src/components/audio/PlayButton.vue:76 +#: front/src/components/audio/PlayButton.vue:92 msgctxt "*/Queue/Dropdown/Button/Title" msgid "Play next" -msgstr "Reproduzir próxima" +msgstr "Tocar próxima" -#: front/src/components/ShortcutsModal.vue:67 +#: front/src/components/ShortcutsModal.vue:120 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Play next track" -msgstr "Reproduzir próxima faixa" +msgstr "Tocar próxima faixa" -#: front/src/components/audio/PlayButton.vue:74 +#: front/src/components/audio/PlayButton.vue:90 msgctxt "*/Queue/Dropdown/Button/Title" msgid "Play now" -msgstr "Reproduzir agora" +msgstr "Tocar agora" -#: front/src/components/ShortcutsModal.vue:63 +#: front/src/components/ShortcutsModal.vue:116 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Play previous track" -msgstr "Reproduzir faixa anterior" +msgstr "Tocar faixa anterior" -#: front/src/components/audio/PlayButton.vue:77 +#: front/src/components/audio/PlayButton.vue:93 msgctxt "*/Queue/Dropdown/Button/Title" msgid "Play similar songs" -msgstr "" +msgstr "Tocar músicas parecidas" -#: front/src/components/Sidebar.vue:224 +#: front/src/components/Sidebar.vue:231 msgctxt "Sidebar/Player/Hidden text" msgid "Play this track" -msgstr "Reproduzir esta faixa" +msgstr "Tocar esta faixa" -#: front/src/components/audio/Player.vue:627 +#: front/src/components/audio/Player.vue:653 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Play track" -msgstr "Reproduzir faixa" +msgstr "Tocar faixa" -#: front/src/components/audio/PlayButton.vue:82 +#: front/src/components/mixins/Report.vue:66 src/views/playlists/Detail.vue:121 +#: front/src/components/mixins/Report.vue:67 #, fuzzy -msgctxt "*/Queue/Button/Title" -msgid "Play..." -msgstr "Reproduzir" - -#: front/src/views/playlists/Detail.vue:91 -msgctxt "Head/Playlist/Title" +msgctxt "*/*/*" msgid "Playlist" msgstr "Lista" #: front/src/views/playlists/Detail.vue:12 -#, fuzzy msgctxt "Content/Playlist/Header.Subtitle" msgid "Playlist containing %{ count } track, by %{ username }" msgid_plural "Playlist containing %{ count } tracks, by %{ username }" -msgstr[0] "Lista contendo %{ count } faixa, de %{ username }" -msgstr[1] "Lista contendo %{ count } faixas, de %{ username }" +msgstr[0] "Lista contendo %{ count } faixa de %{ username }" +msgstr[1] "Lista contendo %{ count } faixas de %{ username }" #: front/src/components/playlists/Form.vue:9 msgctxt "Content/Playlist/Message" @@ -3204,33 +3356,30 @@ msgctxt "Content/Playlist/Dropdown.Label" msgid "Playlist visibility" msgstr "Visibilidade da lista" -#: front/src/components/mixins/Translations.vue:88 -#: front/src/components/mixins/Translations.vue:89 -msgctxt "Content/OAuth Scopes/Label" -msgid "Playlists" -msgstr "Listas de reprodução" - #: front/src/components/Sidebar.vue:71 src/components/library/Home.vue:16 -#: front/src/components/library/Library.vue:16 src/views/admin/Settings.vue:83 -#: front/src/views/admin/library/AlbumDetail.vue:173 -#: front/src/views/admin/library/ArtistDetail.vue:162 -#: front/src/views/admin/library/TrackDetail.vue:225 +#: front/src/components/library/Library.vue:16 +#: front/src/components/mixins/Translations.vue:100 +#: src/views/admin/Settings.vue:83 +#: front/src/views/admin/library/AlbumDetail.vue:179 +#: front/src/views/admin/library/ArtistDetail.vue:167 +#: front/src/views/admin/library/TrackDetail.vue:231 #: src/views/playlists/List.vue:106 +#: front/src/components/mixins/Translations.vue:101 msgctxt "*/*/*" msgid "Playlists" msgstr "Listas de reprodução" -#: front/src/components/Home.vue:56 -msgctxt "Content/Home/List item" -msgid "Playlists? We got them" -msgstr "Listas de reprodução? Nós temos" +#: front/src/components/audio/EmbedWizard.vue:9 +msgctxt "Content/Embed/Message" +msgid "Please contact your admins and ask them to update the corresponding setting." +msgstr "" #: front/src/components/auth/Settings.vue:79 msgctxt "Content/Settings/Error message.List item/Call to action" msgid "Please double-check your password is correct" msgstr "Por favor verifique novamente se a senha está certa" -#: front/src/components/auth/Login.vue:9 +#: front/src/components/auth/LoginForm.vue:5 msgctxt "Content/Login/Error message.List item/Call to action" msgid "Please double-check your username/password couple is correct" msgstr "Por favor verifique novamente se usuário/senha estão certos" @@ -3240,25 +3389,27 @@ msgctxt "Content/Settings/Paragraph" msgid "PNG, GIF or JPG. At most 2MB. Will be downscaled to 400x400px." msgstr "PNG, GIF ou JPG. No máximo 2MB. Será reduzido para 400x400px." -#: front/src/views/admin/library/TrackDetail.vue:137 -#, fuzzy -msgctxt "*/*/*/Noun" +#: front/src/components/About.vue:72 +msgctxt "Content/About/Header/Name" +msgid "Pod configuration" +msgstr "" + +#: front/src/views/admin/library/TrackDetail.vue:143 src/edits.js:70 +msgctxt "*/*/*/Short, Noun" msgid "Position" -msgstr "Paginação" +msgstr "Posição" #: front/src/components/manage/moderation/InstancePolicyForm.vue:118 msgctxt "Content/Moderation/Help text" -msgid "" -"Prevent account or domain from triggering notifications, except from " -"followers." +msgid "Prevent account or domain from triggering notifications, except from followers." msgstr "Impedir conta ou domÃnio de notificar, exceto seguidores." -#: front/src/components/audio/EmbedWizard.vue:33 +#: front/src/components/audio/EmbedWizard.vue:43 msgctxt "Popup/Embed/Title/Noun" msgid "Preview" msgstr "Prévia" -#: front/src/components/audio/Player.vue:626 +#: front/src/components/audio/Player.vue:652 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Previous track" msgstr "Faixa anterior" @@ -3267,9 +3418,9 @@ msgstr "Faixa anterior" #: front/src/components/mixins/Translations.vue:16 msgctxt "Content/Settings/Dropdown/Short" msgid "Private" -msgstr "" +msgstr "Privado" -#: front/src/views/content/remote/Card.vue:43 +#: front/src/views/content/remote/Card.vue:56 msgctxt "Content/Library/Card.List item" msgid "Problem during scanning" msgstr "Erro durante leitura" @@ -3290,15 +3441,20 @@ msgctxt "Content/Library/Tab.Title/Short" msgid "Processing" msgstr "Processando" -#: front/src/components/mixins/Translations.vue:68 -#: front/src/components/mixins/Translations.vue:69 -#, fuzzy +#: front/src/components/mixins/Translations.vue:80 +#: front/src/components/mixins/Translations.vue:81 msgctxt "Content/OAuth Scopes/Label" msgid "Profile" -msgstr "Abrir perfil" +msgstr "Perfil" + +#: front/src/components/auth/SignupForm.vue:5 +#, fuzzy +msgctxt "Content/Signup/Form/Paragraph" +msgid "Public registrations are not possible on this instance. You will need an invitation code to sign up." +msgstr "Cadastros estão fechados nesta instância, você precisa de um código de convite para criar uma conta." #: front/src/components/manage/moderation/AccountsTable.vue:188 -#: front/src/components/manage/moderation/DomainsTable.vue:168 +#: front/src/components/manage/moderation/DomainsTable.vue:186 #: front/src/views/content/libraries/Quota.vue:36 #: front/src/views/content/libraries/Quota.vue:39 #: front/src/views/content/libraries/Quota.vue:62 @@ -3329,7 +3485,7 @@ msgctxt "Sidebar/Queue/Tab.Title/Noun" msgid "Queue" msgstr "Fila" -#: front/src/components/audio/Player.vue:322 +#: front/src/components/audio/Player.vue:329 msgctxt "Content/Queue/Message" msgid "Queue shuffled!" msgstr "Fila embaralhada!" @@ -3361,35 +3517,31 @@ msgstr "Rádio atualizada" #: front/src/components/library/Library.vue:13 #: src/components/library/Radios.vue:142 +#: front/src/components/mixins/Translations.vue:104 +#: front/src/components/mixins/Translations.vue:105 msgctxt "*/*/*" msgid "Radios" msgstr "Rádios" -#: front/src/components/mixins/Translations.vue:92 -#: front/src/components/mixins/Translations.vue:93 -msgctxt "Content/OAuth Scopes/Label" -msgid "Radios" -msgstr "Rádios" - #: front/src/components/auth/ApplicationForm.vue:151 msgctxt "Content/OAuth Scopes/Label/Verb" msgid "Read" -msgstr "" +msgstr "Ler" #: front/src/components/library/ImportStatusModal.vue:51 msgctxt "Popup/Import/Table.Label/Value" msgid "Read our documentation for this error" -msgstr "" +msgstr "Leia nossa documentação para este erro" #: front/src/components/auth/Authorize.vue:24 msgctxt "Content/Auth/Label/Noun" msgid "Read-only" -msgstr "" +msgstr "Apenas leitura" #: front/src/components/auth/ApplicationForm.vue:152 msgctxt "Content/OAuth Scopes/Help Text" msgid "Read-only access to user data" -msgstr "" +msgstr "Apenas lê seus dados de usuário" #: front/src/components/manage/moderation/InstancePolicyCard.vue:39 #: front/src/components/manage/moderation/InstancePolicyForm.vue:25 @@ -3397,35 +3549,40 @@ msgctxt "Content/Moderation/*/Noun" msgid "Reason" msgstr "Motivo" -#: front/src/views/admin/moderation/AccountsDetail.vue:251 -#: front/src/views/admin/moderation/DomainsDetail.vue:179 +#: front/src/views/admin/moderation/AccountsDetail.vue:252 +#: front/src/views/admin/moderation/DomainsDetail.vue:216 msgctxt "Content/Moderation/Table.Label/Noun" msgid "Received library follows" msgstr "Biblioteca recebida segue" -#: front/src/components/manage/moderation/DomainsTable.vue:40 -#: front/src/components/mixins/Translations.vue:62 -#: front/src/components/mixins/Translations.vue:63 +#: front/src/components/manage/moderation/DomainsTable.vue:48 +#: front/src/components/mixins/Translations.vue:74 +#: front/src/components/mixins/Translations.vue:75 msgctxt "Content/Moderation/*/Noun" msgid "Received messages" msgstr "Mensagens recebidas" #: front/src/components/library/EditForm.vue:27 -#, fuzzy msgctxt "Content/Library/Paragraph" msgid "Recent edits" -msgstr "Adicionado recentemente" +msgstr "Edições recentes" #: front/src/components/library/EditForm.vue:17 msgctxt "Content/Library/Paragraph" msgid "Recent edits awaiting review" -msgstr "" +msgstr "Edições recentes esperando revisão" #: front/src/components/library/Home.vue:24 msgctxt "Content/Home/Title" msgid "Recently added" msgstr "Adicionado recentemente" +#: front/src/components/Home.vue:167 +#, fuzzy +msgctxt "Content/Home/Title" +msgid "Recently added albums" +msgstr "Adicionado recentemente" + #: front/src/components/library/Home.vue:11 msgctxt "Content/Home/Title" msgid "Recently favorited" @@ -3439,7 +3596,7 @@ msgstr "Escutado recentemente" #: front/src/components/auth/ApplicationForm.vue:13 msgctxt "Content/Applications/Input.Label/Noun" msgid "Redirect URI" -msgstr "" +msgstr "Redirecionar link" #: front/src/components/auth/Settings.vue:125 #: src/components/auth/Settings.vue:170 @@ -3450,40 +3607,36 @@ msgid "Refresh" msgstr "Atualizar" #: front/src/components/federation/FetchButton.vue:20 -#, fuzzy msgctxt "Popup/*/Message.Title" msgid "Refresh error" -msgstr "Atualizar" +msgstr "Atualizar erro" -#: front/src/views/admin/library/AlbumDetail.vue:50 -#: front/src/views/admin/library/ArtistDetail.vue:49 -#: front/src/views/admin/library/TrackDetail.vue:49 +#: front/src/views/admin/library/AlbumDetail.vue:56 +#: front/src/views/admin/library/ArtistDetail.vue:54 +#: front/src/views/admin/library/TrackDetail.vue:55 msgctxt "Content/Moderation/Button/Verb" msgid "Refresh from remote server" -msgstr "" +msgstr "Atualizar a partir de um servidor remoto" -#: front/src/views/admin/moderation/DomainsDetail.vue:127 +#: front/src/views/admin/moderation/DomainsDetail.vue:164 msgctxt "Content/Moderation/Button.Label/Verb" msgid "Refresh node info" msgstr "Atualizar node info" #: front/src/components/federation/FetchButton.vue:79 -#, fuzzy msgctxt "Popup/*/Message.Title" msgid "Refresh pending" -msgstr "Atualizar node info" +msgstr "Atualizar pendentes" #: front/src/components/federation/FetchButton.vue:80 msgctxt "Popup/*/Message.Content" -msgid "" -"Refresh request wasn't proceed in time by our server. It will be processed " -"later." -msgstr "" +msgid "Refresh request wasn't proceed in time by our server. It will be processed later." +msgstr "A solicitação de atualização não foi realizada a tempo pelo nosso servidor. Será processado mais tarde." #: front/src/components/federation/FetchButton.vue:16 msgctxt "Popup/*/Message.Title" msgid "Refresh successful" -msgstr "" +msgstr "Atualizado" #: front/src/components/common/ActionTable.vue:275 msgctxt "Content/*/Button.Tooltip/Verb" @@ -3493,27 +3646,23 @@ msgstr "Atualizar tabela de conteúdo" #: front/src/components/federation/FetchButton.vue:12 msgctxt "Popup/*/Message.Title" msgid "Refresh was skipped" -msgstr "" +msgstr "Atualização foi ignorada" #: front/src/components/federation/FetchButton.vue:7 msgctxt "Popup/*/Title" msgid "Refreshing object from remote…" -msgstr "" - -#: front/src/components/auth/Signup.vue:9 -msgctxt "Content/Signup/Form/Paragraph" -msgid "" -"Registration are closed on this instance, you will need an invitation code " -"to signup." -msgstr "" -"Cadastros estão fechados nesta instância, você precisa de um código de " -"convite para criar uma conta." +msgstr "Atualizando objeto do servidor remoto…" -#: front/src/components/manage/users/UsersTable.vue:71 +#: front/src/components/About.vue:86 #, fuzzy +msgctxt "*/*/*" +msgid "Registrations" +msgstr "Administração" + +#: front/src/components/manage/users/UsersTable.vue:72 msgctxt "Content/Admin/Table, User role" msgid "Regular user" -msgstr "usuário regular" +msgstr "Usuário regular" #: front/src/components/library/EditCard.vue:87 #: front/src/views/content/libraries/Detail.vue:51 @@ -3535,16 +3684,20 @@ msgid "Rejected" msgstr "Recusado" #: front/src/components/manage/library/AlbumsTable.vue:43 -#: front/src/components/mixins/Translations.vue:44 src/edits.js:28 -#: front/src/components/mixins/Translations.vue:45 -#, fuzzy +#: front/src/components/mixins/Translations.vue:54 src/edits.js:43 +#: front/src/components/mixins/Translations.vue:55 msgctxt "Content/*/*/Noun" msgid "Release date" -msgstr "Data de acesso" +msgstr "Data de lançamento" #: front/src/components/library/FileUpload.vue:63 msgctxt "Content/Library/Paragraph" msgid "Remaining storage space" +msgstr "Espaço de armazenamento restante" + +#: front/src/views/Notifications.vue:18 src/views/Notifications.vue:52 +msgctxt "Content/Notifications/Label" +msgid "Remind me in:" msgstr "" #: front/src/views/content/remote/Home.vue:6 @@ -3554,12 +3707,8 @@ msgstr "Bibliotecas remotas" #: front/src/views/content/remote/Home.vue:7 msgctxt "Content/Library/Paragraph" -msgid "" -"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." -msgstr "" -"Bibliotecas remotas são propriedade de outros usuários da rede. Você pode " -"acessá-las desde que você tenha permissão ou sejam públicas." +msgid "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." +msgstr "Bibliotecas remotas são de outros usuários da rede. Você pode vê-las desde que você tenha permissão ou sejam públicas." #: front/src/components/library/radios/Filter.vue:59 msgctxt "Content/Radio/Button.Label/Verb" @@ -3572,10 +3721,16 @@ msgid "Remove avatar" msgstr "Remover imagem de perfil" #: front/src/components/library/ArtistDetail.vue:12 -#, fuzzy msgctxt "Content/Moderation/Button.Label" msgid "Remove filter" -msgstr "Remover imagem de perfil" +msgstr "Excluir filtro" + +#: front/src/components/manage/moderation/DomainsTable.vue:198 +#: front/src/views/admin/moderation/DomainsDetail.vue:39 +#, fuzzy +msgctxt "Content/Moderation/Action/Verb" +msgid "Remove from allow-list" +msgstr "Desfavoritar" #: front/src/components/favorites/TrackFavoriteIcon.vue:26 msgctxt "Content/Track/Icon.Tooltip/Verb" @@ -3584,43 +3739,105 @@ msgstr "Desfavoritar" #: front/src/views/content/libraries/Quota.vue:38 msgctxt "Popup/Library/Paragraph" -msgid "" -"Removes uploaded but yet to be processed tracks completely, adding the " -"corresponding data to your quota." -msgstr "" -"Exclui completamente as faixas enviadas mas ainda a serem processadas, " -"adicionando os dados correspondentes à sua cota." +msgid "Removes uploaded but yet to be processed tracks completely, adding the corresponding data to your quota." +msgstr "Exclui completamente as faixas enviadas mas ainda a serem processadas, adicionando os dados correspondentes à sua cota." #: front/src/views/content/libraries/Quota.vue:64 msgctxt "Popup/Library/Paragraph" -msgid "" -"Removes uploaded tracks skipped during the import processes completely, " -"adding the corresponding data to your quota." -msgstr "" -"Exclui completamente as faixas ignoradas durante o processo de importação, " -"adicionando os dados correspondentes à sua cota." +msgid "Removes uploaded tracks skipped during the import processes completely, adding the corresponding data to your quota." +msgstr "Exclui completamente as faixas ignoradas durante o processo de importação, adicionando os dados correspondentes à sua cota." #: front/src/views/content/libraries/Quota.vue:90 msgctxt "Popup/Library/Paragraph" -msgid "" -"Removes uploaded tracks that could not be processed by the server " -"completely, adding the corresponding data to your quota." +msgid "Removes uploaded tracks that could not be processed by the server completely, adding the corresponding data to your quota." +msgstr "Exclui completamente faixas enviadas que não foram processadas pelo servidor, adicionando os dados correspondentes à sua cota." + +#: front/src/components/audio/PlayButton.vue:94 +#, fuzzy +msgctxt "*/Queue/Dropdown/Button/Title" +msgid "Replace current queue" +msgstr "Adicionar à fila atual" + +#: front/src/components/mixins/Report.vue:6 src/components/mixins/Report.vue:7 +msgctxt "*/Moderation/*/Verb" +msgid "Report @%{ username }…" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:5 +msgctxt "Content/Moderation/Card/Short" +msgid "Report %{ id }" +msgstr "" + +#: front/src/components/moderation/ReportModal.vue:139 +#, fuzzy +msgctxt "*/Moderation/Message" +msgid "Report successfully submitted, thank you" +msgstr "Sua edição foi enviada." + +#: front/src/components/mixins/Report.vue:36 +#: src/components/mixins/Report.vue:37 +#, fuzzy +msgctxt "*/Moderation/*/Verb" +msgid "Report this album…" +msgstr "Editar álbum" + +#: front/src/components/mixins/Report.vue:50 +#: src/components/mixins/Report.vue:51 +#, fuzzy +msgctxt "*/Moderation/*/Verb" +msgid "Report this artist…" +msgstr "Editar artista" + +#: front/src/components/mixins/Report.vue:72 +#: src/components/mixins/Report.vue:73 +#, fuzzy +msgctxt "*/Moderation/*/Verb" +msgid "Report this library…" +msgstr "Excluir esta biblioteca?" + +#: front/src/components/mixins/Report.vue:61 +#: src/components/mixins/Report.vue:62 +#, fuzzy +msgctxt "*/Moderation/*/Verb" +msgid "Report this playlist…" +msgstr "Adicionar a esta lista" + +#: front/src/components/mixins/Report.vue:23 +#: src/components/mixins/Report.vue:24 +#, fuzzy +msgctxt "*/Moderation/*/Verb" +msgid "Report this track…" +msgstr "Editar faixa" + +#: front/src/components/audio/PlayButton.vue:95 +msgctxt "*/Moderation/*/Button/Label,Verb" +msgid "Report…" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:117 +msgctxt "Content/*/*/Short" +msgid "Reported object" msgstr "" -"Exclui completamente faixas enviadas que não foram processadas pelo " -"servidor, adicionando os dados correspondentes à sua cota." -#: front/src/components/auth/SubsonicTokenForm.vue:33 -#: front/src/components/auth/SubsonicTokenForm.vue:36 +#: front/src/views/admin/moderation/Base.vue:5 +#: front/src/views/admin/moderation/ReportsList.vue:3 +#: front/src/views/admin/moderation/ReportsList.vue:208 +msgctxt "*/Moderation/*/Noun" +msgid "Reports" +msgstr "" + +#: front/src/components/auth/SubsonicTokenForm.vue:38 +#: front/src/components/auth/SubsonicTokenForm.vue:41 msgctxt "*/Settings/Button.Label/Verb" msgid "Request a new password" msgstr "Solicitar uma nova senha" -#: front/src/components/auth/SubsonicTokenForm.vue:34 +#: front/src/components/auth/SubsonicTokenForm.vue:39 msgctxt "Popup/Settings/Title" msgid "Request a new Subsonic API password?" msgstr "Solicitar uma nova senha da API Subsonic?" -#: front/src/components/auth/SubsonicTokenForm.vue:42 +#: front/src/components/auth/SubsonicTokenForm.vue:47 msgctxt "Content/Settings/Button.Label/Verb" msgid "Request a password" msgstr "Solicitar uma senha" @@ -3628,120 +3845,137 @@ msgstr "Solicitar uma senha" #: front/src/components/federation/FetchButton.vue:64 msgctxt "Popup/*/Loading.Title" msgid "Requesting a fetch…" -msgstr "" +msgstr "Requisitando busca…" -#: front/src/components/library/EditForm.vue:82 +#: front/src/components/library/EditForm.vue:94 +#, fuzzy msgctxt "Content/Library/Button.Label" -msgid "Reset to initial value: %{ value }" -msgstr "" +msgid "Reset to initial value" +msgstr "Redefinir para o valor inicial: %{ value }" -#: front/src/components/auth/Login.vue:35 src/views/auth/PasswordReset.vue:4 -#: front/src/views/auth/PasswordReset.vue:53 +#: front/src/components/auth/LoginForm.vue:34 +#: src/views/auth/PasswordReset.vue:4 front/src/views/auth/PasswordReset.vue:53 msgctxt "*/Login/*/Verb" msgid "Reset your password" msgstr "Redefinir sua senha" -#: front/src/views/content/libraries/FilesTable.vue:223 +#: front/src/components/manage/moderation/ReportCard.vue:83 #, fuzzy +msgctxt "Content/*/*/Noun" +msgid "Resolution date" +msgstr "Data de criação" + +#: front/src/components/manage/moderation/ReportCard.vue:218 +msgctxt "Content/*/Button.Label/Verb" +msgid "Resolve" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:62 +#: front/src/views/admin/moderation/ReportsList.vue:20 +msgctxt "Content/*/*/Short" +msgid "Resolved" +msgstr "" + +#: front/src/views/content/libraries/FilesTable.vue:223 msgctxt "Content/Library/Dropdown/Verb" msgid "Restart import" -msgstr "Repetir importação" +msgstr "Reiniciar importação" + +#: front/src/components/library/EditForm.vue:31 +msgctxt "Content/Library/Button.Label" +msgid "Restrict to unreviewed edits" +msgstr "Mostrar apenas edições não revisadas" #: front/src/components/favorites/List.vue:39 -#: src/components/library/Albums.vue:30 -#: front/src/components/library/Artists.vue:30 +#: src/components/library/Albums.vue:34 +#: front/src/components/library/Artists.vue:34 #: src/components/library/Radios.vue:52 front/src/views/playlists/List.vue:32 msgctxt "Content/Search/Dropdown.Label/Noun" msgid "Results per page" msgstr "Resultados por página" -#: front/src/components/library/EditForm.vue:31 -msgctxt "Content/Library/Button.Label" -msgid "Retrict to unreviewed edits" -msgstr "" - #: front/src/views/auth/EmailConfirm.vue:17 msgctxt "Content/Signup/Link/Verb" msgid "Return to login" msgstr "Voltar para entrada" #: front/src/components/library/ArtistDetail.vue:9 -#, fuzzy msgctxt "Content/Moderation/Link" msgid "Review my filters" -msgstr "Ver arquivos" +msgstr "Revisar filtros" #: front/src/components/auth/Settings.vue:192 msgctxt "*/*/*/Verb" msgid "Revoke" -msgstr "" +msgstr "Revogar" #: front/src/components/auth/Settings.vue:195 msgctxt "*/Settings/Button.Label/Verb" msgid "Revoke access" -msgstr "" +msgstr "Revogar acesso" #: front/src/components/auth/Settings.vue:193 msgctxt "Popup/Settings/Title" msgid "Revoke access for application \"%{ application }\"?" -msgstr "" +msgstr "Revogar acesso do aplicativo \"%{ application }\"?" #: front/src/components/manage/moderation/InstancePolicyCard.vue:16 msgctxt "Content/Moderation/Card.Title/Noun" msgid "Rule" msgstr "Regra" -#: front/src/components/admin/SettingsGroup.vue:67 +#: front/src/components/About.vue:28 src/components/About.vue:56 +#, fuzzy +msgctxt "Content/About/Header" +msgid "Rules" +msgstr "Regra" + +#: front/src/components/admin/SettingsGroup.vue:75 #: front/src/components/library/radios/Builder.vue:34 msgctxt "Content/*/Button.Label/Verb" msgid "Save" msgstr "Salvar" -#: front/src/views/content/remote/Card.vue:175 +#: front/src/views/content/remote/Card.vue:203 msgctxt "Content/Library/Message" msgid "Scan launched" msgstr "Varredura iniciada" -#: front/src/views/content/remote/Card.vue:67 +#: front/src/views/content/remote/Card.vue:80 msgctxt "Content/Library/Card.Button.Label/Verb" msgid "Scan now" msgstr "Iniciar varredura" -#: front/src/views/content/remote/Card.vue:35 -#, fuzzy +#: front/src/views/content/remote/Card.vue:48 msgctxt "Content/Library/Card.List item" msgid "Scan pending" -msgstr "Crescente" +msgstr "Varredura pendente" -#: front/src/views/content/remote/Card.vue:176 +#: front/src/views/content/remote/Card.vue:204 msgctxt "Content/Library/Message" msgid "Scan skipped (previous scan is too recent)" msgstr "Varredura ignorada (a anterior é muito recente)" -#: front/src/views/content/remote/Card.vue:47 +#: front/src/views/content/remote/Card.vue:60 msgctxt "Content/Library/Card.List item" msgid "Scanned" msgstr "Varredura completa" -#: front/src/views/content/remote/Card.vue:51 +#: front/src/views/content/remote/Card.vue:64 msgctxt "Content/Library/Card.List item" msgid "Scanned with errors" msgstr "Varredura completa com erros" -#: front/src/views/content/remote/Card.vue:39 +#: front/src/views/content/remote/Card.vue:52 msgctxt "Content/Library/Card.List item" msgid "Scanning… (%{ progress }%)" msgstr "Varrendo… (%{ progress }%)" #: front/src/components/auth/ApplicationForm.vue:22 -msgctxt "Content/Applications/Input.Label/Noun" -msgid "Scopes" -msgstr "" - #: front/src/components/auth/Settings.vue:226 msgctxt "Content/*/*/Noun" msgid "Scopes" -msgstr "" +msgstr "Campos" #: front/src/components/library/Albums.vue:10 #: src/components/library/Artists.vue:10 @@ -3750,12 +3984,14 @@ msgstr "" #: front/src/components/manage/library/ArtistsTable.vue:5 #: front/src/components/manage/library/EditsCardList.vue:6 #: front/src/components/manage/library/LibrariesTable.vue:5 +#: front/src/components/manage/library/TagsTable.vue:5 #: front/src/components/manage/library/TracksTable.vue:5 #: front/src/components/manage/library/UploadsTable.vue:5 #: front/src/components/manage/moderation/AccountsTable.vue:5 #: front/src/components/manage/moderation/DomainsTable.vue:5 #: front/src/components/manage/users/InvitationsTable.vue:5 #: front/src/components/manage/users/UsersTable.vue:5 +#: front/src/views/admin/moderation/ReportsList.vue:8 #: front/src/views/content/libraries/FilesTable.vue:5 #: src/views/playlists/List.vue:13 msgctxt "Content/Search/Input.Label/Noun" @@ -3768,52 +4004,51 @@ msgid "Search a remote library" msgstr "Pesquisar uma biblioteca remota" #: front/src/components/manage/library/EditsCardList.vue:211 -#, fuzzy +#: front/src/views/admin/moderation/ReportsList.vue:207 msgctxt "Content/Search/Input.Placeholder" msgid "Search by account, summary, domain…" -msgstr "Pesquisar por tÃtulo, artista, domÃnio…" +msgstr "Pesquisar por conta, resumo, domÃnio…" #: front/src/components/manage/library/LibrariesTable.vue:191 -#, fuzzy msgctxt "Content/Search/Input.Placeholder" msgid "Search by domain, actor, name, description…" -msgstr "Pesquisar por domÃnio, nome de usuário, biografia..." +msgstr "Pesquisar por domÃnio, artista, nome, descrição…" #: front/src/components/manage/library/UploadsTable.vue:241 -#, fuzzy msgctxt "Content/Search/Input.Placeholder" msgid "Search by domain, actor, name, reference, source…" -msgstr "Pesquisar por domÃnio, nome de usuário, biografia..." +msgstr "Pesquisar por domÃnio, artista, nome, referência, fonte…" #: front/src/components/manage/library/ArtistsTable.vue:164 -#, fuzzy msgctxt "Content/Search/Input.Placeholder" msgid "Search by domain, name, MusicBrainz ID…" -msgstr "Pesquisar por domÃnio, nome de usuário, biografia..." +msgstr "Pesquisar por domÃnio, nome, ID MusicBrainz…" #: front/src/components/manage/library/TracksTable.vue:174 -#, fuzzy msgctxt "Content/Search/Input.Placeholder" msgid "Search by domain, title, artist, album, MusicBrainz ID…" -msgstr "Pesquisar por tÃtulo, artista, álbum…" +msgstr "Pesquisar por domÃnio, tÃtulo, artista, álbum, ID MusicBrainz…" #: front/src/components/manage/library/AlbumsTable.vue:174 -#, fuzzy msgctxt "Content/Search/Input.Placeholder" msgid "Search by domain, title, artist, MusicBrainz ID…" -msgstr "Pesquisar por tÃtulo, artista, domÃnio…" +msgstr "Pesquisar por domÃnio, tÃtulo, artista, ID MusicBrainz…" #: front/src/components/manage/moderation/AccountsTable.vue:171 -#, fuzzy msgctxt "Content/Search/Input.Placeholder" msgid "Search by domain, username, bio…" -msgstr "Pesquisar por domÃnio, nome de usuário, biografia..." +msgstr "Pesquisar por domÃnio, nome de usuário, bio…" -#: front/src/components/manage/moderation/DomainsTable.vue:151 +#: front/src/components/manage/library/TagsTable.vue:165 #, fuzzy msgctxt "Content/Search/Input.Placeholder" +msgid "Search by name" +msgstr "Pesquisar por nome…" + +#: front/src/components/manage/moderation/DomainsTable.vue:168 +msgctxt "Content/Search/Input.Placeholder" msgid "Search by name…" -msgstr "Pesquisar por nome..." +msgstr "Pesquisar por nome…" #: front/src/views/content/libraries/FilesTable.vue:208 msgctxt "Content/Library/Input.Placeholder" @@ -3825,12 +4060,12 @@ msgctxt "Content/Admin/Input.Placeholder/Verb" msgid "Search by username, e-mail address, code…" msgstr "Pesquisar por nome de usuário, e-mail, código…" -#: front/src/components/manage/users/UsersTable.vue:163 +#: front/src/components/manage/users/UsersTable.vue:164 msgctxt "Content/Search/Input.Placeholder" msgid "Search by username, e-mail address, name…" msgstr "Pesquisar por nome de usuário, e-mail, nome…" -#: front/src/components/audio/SearchBar.vue:20 +#: front/src/components/audio/SearchBar.vue:27 msgctxt "Sidebar/Search/Input.Placeholder" msgid "Search for artists, albums, tracks…" msgstr "Pesquisar por artistas, álbuns, faixas…" @@ -3840,16 +4075,30 @@ msgctxt "Content/Search/Title" msgid "Search for some music" msgstr "Pesquisar músicas" -#: front/src/components/library/AlbumBase.vue:57 -#: front/src/components/library/ArtistBase.vue:68 -#: front/src/components/library/TrackBase.vue:76 +#: front/src/components/library/TagsSelector.vue:6 +#, fuzzy +msgctxt "*/Dropdown/Placeholder/Verb" +msgid "Search for tags…" +msgstr "Pesquisar por nome…" + +#: front/src/components/library/AlbumBase.vue:66 +#: front/src/components/library/ArtistBase.vue:77 +#: front/src/components/library/TrackBase.vue:82 +#, fuzzy +msgctxt "Content/*/Button.Label/Verb" +msgid "Search on Discogs" +msgstr "Pesquisar músicas" + +#: front/src/components/library/AlbumBase.vue:58 +#: front/src/components/library/ArtistBase.vue:69 +#: front/src/components/library/TrackBase.vue:74 msgctxt "Content/*/Button.Label/Verb" msgid "Search on Wikipedia" msgstr "Pesquisar no Wikipedia" #: front/src/components/library/Library.vue:35 -#: src/views/admin/library/Base.vue:32 -#: front/src/views/admin/moderation/Base.vue:22 +#: src/views/admin/library/Base.vue:35 +#: front/src/views/admin/moderation/Base.vue:44 #: src/views/admin/users/Base.vue:21 front/src/views/content/Base.vue:19 msgctxt "Menu/*/Hidden text" msgid "Secondary menu" @@ -3860,13 +4109,32 @@ msgctxt "Content/Admin/Menu.Title" msgid "Sections" msgstr "Seções" +#: front/src/components/ShortcutsModal.vue:108 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek backwards 30s" +msgstr "" + +#: front/src/components/ShortcutsModal.vue:100 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek backwards 5s" +msgstr "" + +#: front/src/components/ShortcutsModal.vue:112 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek forwards 30s" +msgstr "" + +#: front/src/components/ShortcutsModal.vue:104 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek forwards 5s" +msgstr "" + #: front/src/components/library/radios/Builder.vue:46 msgctxt "Content/Radio/Dropdown.Placeholder/Verb" msgid "Select a filter" msgstr "Selecione um filtro" #: front/src/components/common/ActionTable.vue:79 -#, fuzzy msgctxt "Content/*/Link/Verb" msgid "Select all %{ total } elements" msgid_plural "Select all %{ total } elements" @@ -3878,9 +4146,14 @@ msgctxt "Content/*/Link/Verb" msgid "Select only current page" msgstr "Selecionar apenas a página atual" -#: front/src/components/Sidebar.vue:43 src/components/Sidebar.vue:108 -#: front/src/components/manage/users/UsersTable.vue:181 -#: front/src/views/admin/moderation/AccountsDetail.vue:506 +#: front/src/components/Home.vue:43 +msgctxt "Content/Home/Link" +msgid "Server rules" +msgstr "" + +#: front/src/components/Sidebar.vue:43 src/components/Sidebar.vue:112 +#: front/src/components/manage/users/UsersTable.vue:182 +#: front/src/views/admin/moderation/AccountsDetail.vue:526 msgctxt "*/*/*/Noun" msgid "Settings" msgstr "Configurações" @@ -3893,7 +4166,7 @@ msgstr "Configurações atualizadas" #: front/src/components/admin/SettingsGroup.vue:11 msgctxt "Content/Settings/Paragraph" msgid "Settings updated successfully." -msgstr "As configurações foram atualizadas com sucesso." +msgstr "As configurações foram atualizadas." #: front/src/components/manage/users/InvitationForm.vue:27 msgctxt "Content/Admin/Table.Label/Noun" @@ -3902,50 +4175,68 @@ msgstr "Compartilhar link" #: front/src/views/content/libraries/Detail.vue:15 msgctxt "Content/Library/Paragraph" -msgid "" -"Share this link with other users so they can request access to your library." -msgstr "" -"Compartilhe este link com outros usuários para que possam solicitar acesso à " -" sua biblioteca." +msgid "Share this link with other users so they can request access to your library." +msgstr "Compartilhe este link com outros usuários para que possam solicitar permissão para ver sua biblioteca." #: front/src/views/content/libraries/Detail.vue:14 -#: front/src/views/content/remote/Card.vue:77 +#: front/src/views/content/remote/Card.vue:90 msgctxt "Content/Library/Title" msgid "Sharing link" msgstr "Link de compartilhamento" +#: front/src/components/audio/EmbedWizard.vue:5 +msgctxt "Content/Embed/Message" +msgid "Sharing will not work because this pod doesn't allow anonymous users to access content." +msgstr "" + +#: front/src/components/About.vue:156 +msgctxt "*/*/*/Verb" +msgid "Show" +msgstr "" + #: front/src/components/audio/album/Card.vue:38 -#, fuzzy msgctxt "Content/Album/Card.Link/Verb" msgid "Show %{ count } more track" msgid_plural "Show %{ count } more tracks" msgstr[0] "Mostrar mais %{ count } faixa" msgstr[1] "Mostrar mais %{ count } faixas" -#: front/src/components/audio/artist/Card.vue:30 +#: front/src/components/tags/List.vue:11 #, fuzzy -msgctxt "Content/Artist/Card.Link" -msgid "Show 1 more album" -msgid_plural "Show %{ count } more albums" +msgctxt "Content/*/Button/Label/Verb" +msgid "Show 1 more tag" +msgid_plural "Show %{ count } more tags" msgstr[0] "Mostrar mais 1 álbum" msgstr[1] "Mostrar mais %{ count } álbuns" #: front/src/components/library/EditForm.vue:21 msgctxt "Content/Library/Button.Label" msgid "Show all edits" -msgstr "" +msgstr "Mostrar todas as edições" -#: front/src/components/ShortcutsModal.vue:42 +#: front/src/components/ShortcutsModal.vue:60 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Show available keyboard shortcuts" msgstr "Mostrar atalhos de teclado disponÃveis" -#: front/src/views/Notifications.vue:7 +#: front/src/components/common/ExpandableDiv.vue:7 +#, fuzzy +msgctxt "*/*/Button,Label" +msgid "Show less" +msgstr "Mostrar todas as edições" + +#: front/src/components/common/ExpandableDiv.vue:8 +#, fuzzy +msgctxt "*/*/Button,Label" +msgid "Show more" +msgstr "Mostrar mais 1 álbum" + +#: front/src/views/Notifications.vue:72 msgctxt "Content/Notifications/Form.Label/Verb" msgid "Show read notifications" msgstr "Mostrar notificações lidas" -#: front/src/components/forms/PasswordInput.vue:26 +#: front/src/components/forms/PasswordInput.vue:42 msgctxt "Content/Settings/Button.Tooltip/Verb" msgid "Show/hide password" msgstr "Mostrar/ocultar senha" @@ -3954,56 +4245,64 @@ msgstr "Mostrar/ocultar senha" #: front/src/components/manage/library/ArtistsTable.vue:84 #: front/src/components/manage/library/EditsCardList.vue:72 #: front/src/components/manage/library/LibrariesTable.vue:110 +#: front/src/components/manage/library/TagsTable.vue:79 #: front/src/components/manage/library/TracksTable.vue:95 #: front/src/components/manage/library/UploadsTable.vue:144 #: front/src/components/manage/moderation/AccountsTable.vue:88 -#: front/src/components/manage/moderation/DomainsTable.vue:74 +#: front/src/components/manage/moderation/DomainsTable.vue:85 #: front/src/components/manage/users/InvitationsTable.vue:76 -#: front/src/components/manage/users/UsersTable.vue:87 +#: front/src/components/manage/users/UsersTable.vue:88 #: front/src/views/content/libraries/FilesTable.vue:117 msgctxt "Content/*/Paragraph" msgid "Showing results %{ start }-%{ end } on %{ total }" msgstr "Mostrando resultados %{ start }-%{ end } de %{ total }" -#: front/src/components/ShortcutsModal.vue:83 +#: front/src/components/ShortcutsModal.vue:140 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Shuffle queue" msgstr "Embaralhar fila" -#: front/src/components/audio/Player.vue:641 +#: front/src/components/audio/Player.vue:667 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Shuffle your queue" msgstr "Embaralhar sua fila" -#: front/src/components/auth/Signup.vue:97 +#: front/src/components/Home.vue:103 +#, fuzzy +msgctxt "*/Signup/Title" +msgid "Sign up" +msgstr "Criar conta" + +#: front/src/views/auth/Signup.vue:37 msgctxt "*/Signup/Title" msgid "Sign Up" msgstr "Criar conta" +#: front/src/components/Home.vue:107 +msgctxt "Content/Home/Paragraph" +msgid "Sign up now to keep a track of your favorites, create playlists, discover new content and much more!" +msgstr "" + #: front/src/components/manage/users/UsersTable.vue:40 msgctxt "Content/Admin/Table.Label/Short, Noun (Value is a date)" msgid "Sign-up" msgstr "Criar conta" -#: front/src/components/mixins/Translations.vue:57 -#: front/src/views/admin/moderation/AccountsDetail.vue:197 -#: front/src/components/mixins/Translations.vue:58 +#: front/src/components/mixins/Translations.vue:69 +#: front/src/views/admin/moderation/AccountsDetail.vue:198 +#: front/src/components/mixins/Translations.vue:70 msgctxt "Content/Admin/Table.Label/Noun" msgid "Sign-up date" msgstr "Data de criação" -#: front/src/components/manage/library/UploadsTable.vue:65 -#: front/src/views/admin/library/UploadDetail.vue:219 -msgctxt "Content/*/*/Noun" -msgid "Size" -msgstr "Tamanho" - #: front/src/components/library/FileUpload.vue:94 #: front/src/components/library/TrackDetail.vue:39 -#: front/src/components/mixins/Translations.vue:54 +#: front/src/components/manage/library/UploadsTable.vue:65 +#: front/src/components/mixins/Translations.vue:66 +#: front/src/views/admin/library/UploadDetail.vue:219 #: front/src/views/content/libraries/FilesTable.vue:61 -#: front/src/components/mixins/Translations.vue:55 -msgctxt "Content/Library/*/in MB" +#: front/src/components/mixins/Translations.vue:67 +msgctxt "Content/*/*/Noun" msgid "Size" msgstr "Tamanho" @@ -4020,7 +4319,7 @@ msgctxt "Content/Library/Label" msgid "Skipped files" msgstr "Arquivos ignorados" -#: front/src/views/admin/moderation/DomainsDetail.vue:89 +#: front/src/views/admin/moderation/DomainsDetail.vue:126 msgctxt "Content/Moderation/Table.Label" msgid "Software" msgstr "Software" @@ -4028,103 +4327,72 @@ msgstr "Software" #: front/src/components/playlists/Editor.vue:21 msgctxt "Content/Playlist/Paragraph" msgid "Some tracks in your queue are already in this playlist:" -msgstr "" +msgstr "Algumas faixas na sua fila já estão nesta lista:" #: front/src/components/PageNotFound.vue:10 -#, fuzzy msgctxt "Content/*/Paragraph" msgid "Sorry, the page you asked for does not exist:" msgstr "Desculpe, mas esta página não existe:" -#: front/src/components/Footer.vue:49 +#: front/src/components/Footer.vue:57 msgctxt "Footer/*/List item.Link" msgid "Source code" msgstr "Código fonte" #: front/src/components/auth/Profile.vue:23 -#: front/src/components/manage/users/UsersTable.vue:70 +#: front/src/components/manage/users/UsersTable.vue:71 msgctxt "Content/Profile/User role" msgid "Staff member" msgstr "Membro da equipe" -#: front/src/components/audio/PlayButton.vue:23 +#: front/src/components/audio/PlayButton.vue:27 #: src/components/radios/Button.vue:4 -#, fuzzy msgctxt "*/Queue/Button.Label/Short, Verb" msgid "Start radio" -msgstr "Parar rádio" +msgstr "Reproduzir rádio" -#: front/src/views/admin/Settings.vue:86 -msgctxt "Content/Admin/Menu" +#: front/src/components/About.vue:170 src/components/Home.vue:53 +#: front/src/views/admin/Settings.vue:87 +#, fuzzy +msgctxt "Content/Home/Header" msgid "Statistics" msgstr "EstatÃsticas" -#: front/src/views/admin/moderation/AccountsDetail.vue:490 +#: front/src/views/admin/moderation/AccountsDetail.vue:510 msgctxt "Content/Moderation/Help text" -msgid "" -"Statistics are computed from known activity and content on your instance, " -"and do not reflect general activity for this account" -msgstr "" -"EstatÃsticas são calculadas por atividades conhecidas e conteúdo da " -"instância, e não refletem a atividade geral desta conta" +msgid "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this account" +msgstr "EstatÃsticas são calculadas por atividades conhecidas e conteúdo da instância, e não refletem a atividade geral desta conta" -#: front/src/views/admin/moderation/DomainsDetail.vue:371 +#: front/src/views/admin/moderation/DomainsDetail.vue:418 msgctxt "Content/Moderation/Help text" -msgid "" -"Statistics are computed from known activity and content on your instance, " -"and do not reflect general activity for this domain" -msgstr "" -"EstatÃsticas são calculadas por atividade conhecida e conteúdo da instância," -" e não refletem a atividade geral deste domÃnio" - -#: front/src/views/admin/library/AlbumDetail.vue:329 -#: front/src/views/admin/library/ArtistDetail.vue:328 -#: front/src/views/admin/library/LibraryDetail.vue:316 -#: front/src/views/admin/library/TrackDetail.vue:371 +msgid "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this domain" +msgstr "EstatÃsticas são calculadas por atividade conhecida e conteúdo da instância, e não refletem a atividade geral deste domÃnio" + +#: front/src/views/admin/library/AlbumDetail.vue:346 +#: front/src/views/admin/library/ArtistDetail.vue:345 +#: front/src/views/admin/library/LibraryDetail.vue:356 +#: front/src/views/admin/library/TagDetail.vue:210 +#: front/src/views/admin/library/TrackDetail.vue:389 #: front/src/views/admin/library/UploadDetail.vue:335 -#, fuzzy msgctxt "Content/Moderation/Help text" -msgid "" -"Statistics are computed from known activity and content on your instance, " -"and do not reflect general activity for this object" -msgstr "" -"EstatÃsticas são calculadas por atividades conhecidas e conteúdo da " -"instância, e não refletem a atividade geral desta conta" - -#: front/src/views/admin/moderation/DomainsDetail.vue:115 -msgctxt "Content/Moderation/Table.Label (Value is Error message)" -msgid "Status" -msgstr "Status" +msgid "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" +msgstr "EstatÃsticas são calculadas por atividades conhecidas e conteúdo da instância, e não refletem a atividade geral deste objeto" #: front/src/components/library/FileUpload.vue:95 -msgctxt "Content/Library/Table.Label (Value is Uploading/Uploaded/Error)" -msgid "Status" -msgstr "Status" - -#: front/src/views/content/libraries/Detail.vue:28 -msgctxt "Content/Library.Federation/Table.Label (Value is Approved/Rejected)" -msgid "Status" -msgstr "Status" - +#: front/src/components/manage/library/EditsCardList.vue:12 +#: front/src/components/manage/moderation/ReportCard.vue:57 #: front/src/components/manage/users/InvitationsTable.vue:17 #: front/src/components/manage/users/InvitationsTable.vue:39 -msgctxt "Content/Admin/*/Noun (Value is Used/Not used)" -msgid "Status" -msgstr "Status" - #: front/src/components/manage/users/UsersTable.vue:43 -msgctxt "Content/Admin/Table.Label/Noun (Value is Regular user/Admin)" +#: front/src/views/admin/moderation/DomainsDetail.vue:152 +#: front/src/views/admin/moderation/ReportsList.vue:14 +#: front/src/views/content/libraries/Detail.vue:28 +#, fuzzy +msgctxt "*/*/*" msgid "Status" msgstr "Status" -#: front/src/components/manage/library/EditsCardList.vue:12 -msgctxt "" -"Content/Search/Dropdown.Label (Value is All/Pending " -"review/Approved/Rejected)" -msgid "Status" -msgstr "Status" - -#: front/src/components/Sidebar.vue:174 src/components/radios/Button.vue:3 +#: front/src/components/Sidebar.vue:178 src/components/radios/Button.vue:3 msgctxt "*/Player/Button.Label/Short, Verb" msgid "Stop radio" msgstr "Parar rádio" @@ -4134,22 +4402,34 @@ msgctxt "*/*/Button.Label/Verb" msgid "Submit" msgstr "Enviar" -#: front/src/components/library/EditForm.vue:98 +#: front/src/components/library/EditForm.vue:110 msgctxt "Content/Library/Button.Label/Verb" msgid "Submit and apply edit" -msgstr "" +msgstr "Enviar e aplicar edição" #: front/src/components/library/EditForm.vue:7 msgctxt "Content/Library/Button.Label" msgid "Submit another edit" -msgstr "" +msgstr "Enviar outra edição" -#: front/src/components/library/EditForm.vue:99 +#: front/src/components/moderation/ReportModal.vue:64 +#, fuzzy +msgctxt "Popup/*/Button.Label" +msgid "Submit report" +msgstr "Enviar" + +#: front/src/components/library/EditForm.vue:111 msgctxt "Content/Library/Button.Label/Verb" msgid "Submit suggestion" -msgstr "" +msgstr "Enviar sugestão" -#: front/src/views/admin/Settings.vue:85 +#: front/src/components/manage/moderation/ReportCard.vue:17 +#, fuzzy +msgctxt "Content/Moderation/*" +msgid "Submitted by" +msgstr "Enviar" + +#: front/src/views/admin/Settings.vue:86 msgctxt "Content/Admin/Menu" msgid "Subsonic" msgstr "Subsonic" @@ -4162,23 +4442,22 @@ msgstr "Senha da API Subsonic" #: front/src/components/library/EditForm.vue:38 msgctxt "Content/Library/Paragraph" msgid "Suggest a change using the form below." -msgstr "" +msgstr "Sugira uma alteração usando o formulário abaixo." #: front/src/components/library/AlbumEdit.vue:5 msgctxt "Content/*/Title" msgid "Suggest an edit on this album" -msgstr "" +msgstr "Sugerir edição neste álbum" #: front/src/components/library/ArtistEdit.vue:5 msgctxt "Content/*/Title" msgid "Suggest an edit on this artist" -msgstr "" +msgstr "Sugerir edição neste artista" #: front/src/components/library/TrackEdit.vue:5 -#, fuzzy msgctxt "Content/*/Title" msgid "Suggest an edit on this track" -msgstr "Não foi possÃvel carregar esta faixa" +msgstr "Sugerir edição nesta faixa" #: front/src/components/SetInstanceModal.vue:31 msgctxt "Popup/Instance/List.Label" @@ -4190,16 +4469,21 @@ msgctxt "Content/Library/Tab.Title/Short" msgid "Summary" msgstr "Resumo" -#: front/src/components/library/EditForm.vue:87 +#: front/src/components/library/EditForm.vue:99 msgctxt "*/*/*" msgid "Summary (optional)" -msgstr "" +msgstr "Resumo (opcional)" -#: front/src/components/Footer.vue:39 +#: front/src/components/Footer.vue:47 msgctxt "Footer/*/Listitem.Link" msgid "Support forum" msgstr "Fórum de suporte" +#: front/src/views/Notifications.vue:10 +msgctxt "Content/Notifications/Header" +msgid "Support this Funkwhale pod" +msgstr "" + #: front/src/components/library/FileUpload.vue:85 msgctxt "Content/Library/Paragraph" msgid "Supported extensions: %{ extensions }" @@ -4210,159 +4494,167 @@ msgctxt "Content/Playlist/Paragraph" msgid "Syncing changes to server…" msgstr "Sincronizando alterações com o servidor…" -#: front/src/components/audio/EmbedWizard.vue:25 +#: front/src/components/audio/SearchBar.vue:35 +msgctxt "*/*/*/Noun" +msgid "Tag" +msgstr "" + +#: front/src/views/admin/library/TagDetail.vue:61 +#, fuzzy +msgctxt "Content/Moderation/Title" +msgid "Tag data" +msgstr "Dados da faixa" + +#: front/src/components/library/Albums.vue:23 +#: src/components/library/Artists.vue:15 +#: front/src/views/admin/library/Base.vue:23 +#: src/views/admin/library/TagsList.vue:24 front/src/edits.js:24 +#: src/edits.js:50 src/edits.js:91 src/entities.js:120 +msgctxt "*/*/*/Noun" +msgid "Tags" +msgstr "" + +#: front/src/components/mixins/Translations.vue:44 +#: front/src/components/mixins/Translations.vue:45 +#, fuzzy +msgctxt "Content/Moderation/Dropdown" +msgid "Takedown request" +msgstr "Cancelar solicitação para seguir" + +#: front/src/components/About.vue:35 src/components/About.vue:61 +msgctxt "Content/About/Header" +msgid "Terms and privacy policy" +msgstr "" + +#: front/src/components/audio/EmbedWizard.vue:35 #: front/src/components/common/CopyInput.vue:3 msgctxt "Content/*/Paragraph" msgid "Text copied to clipboard!" msgstr "Texto copiado para a área de transferência!" -#: front/src/components/Home.vue:26 -msgctxt "Content/Home/Paragraph" -msgid "" -"That's simple: we loved Grooveshark and we want to build something even " -"better." -msgstr "" -"É simples: nós amávamos o Grooveshark e queremos construir algo ainda " -"melhor." - -#: front/src/views/admin/library/AlbumDetail.vue:75 +#: front/src/views/admin/library/AlbumDetail.vue:81 msgctxt "Content/Moderation/Paragraph" -msgid "" -"The album will be removed, as well as associated uploads, tracks, favorites " -"and listening history. This action is irreversible." -msgstr "" +msgid "The album will be removed, as well as associated uploads, tracks, favorites and listening history. This action is irreversible." +msgstr "O álbum será permanentemente excluÃdo, junto com os envios, faixas, favoritos e histórico de escutadas." #: front/src/components/auth/Authorize.vue:39 msgctxt "Content/Auth/Paragraph" msgid "The application is also requesting the following unknown permissions:" -msgstr "" +msgstr "O aplicativo também está solicitando as seguintes permissões desconhecidas:" -#: front/src/views/admin/library/ArtistDetail.vue:74 +#: front/src/views/admin/library/ArtistDetail.vue:79 msgctxt "Content/Moderation/Paragraph" -msgid "" -"The artist will be removed, as well as associated uploads, tracks, albums, " -"favorites and listening history. This action is irreversible." -msgstr "" +msgid "The artist will be removed, as well as associated uploads, tracks, albums, favorites and listening history. This action is irreversible." +msgstr "O(A) artista será permanentemente excluÃdo(a), junto com os envios, faixas, álbuns, favoritos e histórico de escutadas." -#: front/src/components/Footer.vue:53 +#: front/src/components/Footer.vue:61 msgctxt "Footer/*/List item.Link" msgid "The funkwhale logo was kindly designed and provided by Francis Gading." -msgstr "" -"A logo do Funkwhale foi gentilmente projetado e fornecido por Francis " -"Gading." +msgstr "A logo do Funkwhale foi gentilmente projetada e fornecida por Francis Gading." #: front/src/components/SetInstanceModal.vue:8 msgctxt "Popup/Instance/Error message.List item" msgid "The given address is not a Funkwhale server" -msgstr "" +msgstr "Este link não é de uma instância Funkwhale" #: front/src/views/content/libraries/Form.vue:34 msgctxt "Popup/Library/Paragraph" -msgid "" -"The library and all its tracks will be deleted. This can not be undone." +msgid "The library and all its tracks will be deleted. This can not be undone." msgstr "A biblioteca e todas as suas faixas serão excluÃdas permanentemente." #: front/src/views/admin/library/LibraryDetail.vue:61 msgctxt "Content/Moderation/Paragraph" -msgid "" -"The library will be removed, as well as associated uploads, and follows. " -"This action is irreversible." -msgstr "" +msgid "The library will be removed, as well as associated uploads, and follows. This action is irreversible." +msgstr "A biblioteca será permanentemente excluÃda, junto com os envios e os seguidos." #: front/src/components/library/ImportStatusModal.vue:140 msgctxt "Popup/Import/Error.Label" -msgid "" -"The metadata included in the file is invalid or some mandatory fields are " -"missing." -msgstr "" +msgid "The metadata included in the file is invalid or some mandatory fields are missing." +msgstr "Os metadados incluÃdos no arquivo são inválidos ou alguns campos obrigatórios estão faltando." #: front/src/components/library/FileUpload.vue:38 -#, fuzzy msgctxt "Content/Library/List item" msgid "The music files you are uploading are tagged properly." -msgstr "Os arquivos de áudio que você está enviando estão com as tags certas:" +msgstr "Os arquivos de áudio que você está enviando estão com as tags adequadas." #: front/src/components/audio/Player.vue:65 -#, fuzzy msgctxt "Sidebar/Player/Error message.Paragraph" msgid "The next track will play automatically in a few seconds…" -msgstr "" -"A próxima faixa será reproduzida automaticamente em alguns segundos..." +msgstr "A próxima faixa tocará automaticamente em alguns segundos…" -#: front/src/components/Home.vue:116 -msgctxt "Content/Home/List item" -msgid "" -"The plaform is free and open-source, you can install it and modify it " -"without worries" +#: front/src/components/manage/moderation/NotesThread.vue:27 +#, fuzzy +msgctxt "Content/Moderation/Paragraph" +msgid "The note will be removed. This action is irreversible." +msgstr "O envio será permanentemente excluÃdo." + +#: front/src/components/manage/moderation/ReportCard.vue:120 +msgctxt "Content/Moderation/Message" +msgid "The object associated with this report was deleted." msgstr "" -"A plataforma é livre e de código aberto, você pode instalá-la e modificá-la " -"sem se preocupar" #: front/src/components/playlists/Form.vue:14 -#, fuzzy msgctxt "Content/Playlist/Error message.Title" msgid "The playlist could not be created" -msgstr "Lista criada" +msgstr "A lista não foi criada" #: front/src/components/federation/FetchButton.vue:37 msgctxt "*/*/Error" msgid "The remote server answered with HTTP %{ status }" -msgstr "" +msgstr "O servidor remoto retornou com HTTP %{ status }" #: front/src/components/federation/FetchButton.vue:13 msgctxt "Popup/*/Message.Content" -msgid "" -"The remote server answered, but returned data was unsupported by Funkwhale." -msgstr "" +msgid "The remote server answered, but returned data was unsupported by Funkwhale." +msgstr "O servidor remoto retornou dados não suportados pelo Funkwhale." #: front/src/components/federation/FetchButton.vue:44 +#, fuzzy msgctxt "*/*/Error" -msgid "The remote server didn't answered fast enough" -msgstr "" +msgid "The remote server didn't respond quickly enough" +msgstr "O servidor remoto não respondeu a tempo" #: front/src/components/federation/FetchButton.vue:50 +#, fuzzy msgctxt "*/*/Error" -msgid "The return server returned invalid JSON or JSON-LD data" -msgstr "" +msgid "The remote server returned invalid JSON or JSON-LD data" +msgstr "O servidor remoto retornou dados inválidos de JSON ou JSON-LD" #: front/src/components/manage/library/AlbumsTable.vue:189 msgctxt "Popup/*/Paragraph" -msgid "" -"The selected albums will be removed, as well as associated tracks, uploads, " -"favorites and listening history. This action is irreversible." -msgstr "" +msgid "The selected albums will be removed, as well as associated tracks, uploads, favorites and listening history. This action is irreversible." +msgstr "Os álbuns selecionados serão permanentemente excluÃdos, junto com as faixas, envios, favoritos e histórico de escutadas." #: front/src/components/manage/library/ArtistsTable.vue:179 msgctxt "Popup/*/Paragraph" -msgid "" -"The selected artist will be removed, as well as associated uploads, tracks, " -"albums, favorites and listening history. This action is irreversible." -msgstr "" +msgid "The selected artist will be removed, as well as associated uploads, tracks, albums, favorites and listening history. This action is irreversible." +msgstr "O(A) artista selecionado(a) será permanentemente excluÃdo(a), junto com as faixas, álbuns, favoritos e histórico de escutadas." #: front/src/components/manage/library/LibrariesTable.vue:206 msgctxt "Popup/*/Paragraph" -msgid "" -"The selected library will be removed, as well as associated uploads and " -"follows. This action is irreversible." -msgstr "" +msgid "The selected library will be removed, as well as associated uploads and follows. This action is irreversible." +msgstr "A biblioteca selecionada será permanentemente excluÃda, junto com os envios e seguidos." + +#: front/src/components/manage/library/TagsTable.vue:180 +#, fuzzy +msgctxt "Popup/*/Paragraph" +msgid "The selected tag will be removed and unlinked with existing content, if any. This action is irreversible." +msgstr "O envio selecionado será permanentemente excluÃdo." #: front/src/components/manage/library/TracksTable.vue:189 msgctxt "Popup/*/Paragraph" -msgid "" -"The selected tracks will be removed, as well as associated uploads, " -"favorites and listening history. This action is irreversible." -msgstr "" +msgid "The selected tracks will be removed, as well as associated uploads, favorites and listening history. This action is irreversible." +msgstr "As faixas selecionadas serão permanentemente excluÃdas, junto com os envios, favoritos e histórico de escutadas." #: front/src/components/manage/library/UploadsTable.vue:256 -#, fuzzy msgctxt "Popup/*/Paragraph" msgid "The selected upload will be removed. This action is irreversible." -msgstr "Esta ação é irreversÃvel." +msgstr "O envio selecionado será permanentemente excluÃdo." #: front/src/components/SetInstanceModal.vue:7 msgctxt "Popup/Instance/Error message.List item" msgid "The server might be down" -msgstr "" +msgstr "Parece que o servidor caiu" #: front/src/components/auth/SubsonicTokenForm.vue:4 msgctxt "Content/Settings/Paragraph" @@ -4371,12 +4663,16 @@ msgstr "A API Subsonic não está disponÃvel nesta instância do Funkwhale." #: front/src/components/library/EditCard.vue:96 msgctxt "Popup/Library/Paragraph" -msgid "" -"The suggestion will be completely removed, this action is irreversible." -msgstr "" +msgid "The suggestion will be completely removed, this action is irreversible." +msgstr "A sugestão será permanentemente excluÃda." -#: front/src/components/playlists/PlaylistModal.vue:34 +#: front/src/views/admin/library/TagDetail.vue:44 #, fuzzy +msgctxt "Content/Moderation/Paragraph" +msgid "The tag will be removed and unlinked from any existing entity. This action is irreversible." +msgstr "A faixa será permanentemente excluÃda, junto com os envios, favoritos e histórico de escutadas." + +#: front/src/components/playlists/PlaylistModal.vue:34 msgctxt "Popup/Playlist/Error message.Title" msgid "The track can't be added to a playlist" msgstr "Não foi possÃvel adicionar a faixa na lista" @@ -4384,20 +4680,17 @@ msgstr "Não foi possÃvel adicionar a faixa na lista" #: front/src/components/audio/Player.vue:62 msgctxt "Sidebar/Player/Error message.Title" msgid "The track cannot be loaded" -msgstr "" +msgstr "Não foi possÃvel carregar a faixa" -#: front/src/views/admin/library/TrackDetail.vue:74 +#: front/src/views/admin/library/TrackDetail.vue:80 msgctxt "Content/Moderation/Paragraph" -msgid "" -"The track will be removed, as well as associated uploads, favorites and " -"listening history. This action is irreversible." -msgstr "" +msgid "The track will be removed, as well as associated uploads, favorites and listening history. This action is irreversible." +msgstr "A faixa será permanentemente excluÃda, junto com os envios, favoritos e histórico de escutadas." #: front/src/views/admin/library/UploadDetail.vue:68 -#, fuzzy msgctxt "Content/Moderation/Paragraph" msgid "The upload will be removed. This action is irreversible." -msgstr "Esta ação é irreversÃvel." +msgstr "O envio será permanentemente excluÃdo." #: front/src/components/library/FileUpload.vue:42 msgctxt "Content/Library/List item" @@ -4407,8 +4700,7 @@ msgstr "Os arquivos de áudio enviados estão no formato OGG, Flac ou MP3" #: front/src/views/content/Home.vue:4 msgctxt "Content/Library/Paragraph" msgid "There are various ways to grab new content and make it available here." -msgstr "" -"Existem várias maneiras de obter novos conteúdos e disponibilizá-los aqui." +msgstr "Existem várias maneiras de obter novos conteúdos e disponibilizá-los aqui." #: front/src/components/manage/moderation/InstancePolicyForm.vue:66 msgctxt "Popup/Moderation/Paragraph" @@ -4425,28 +4717,43 @@ msgctxt "Content/Artist/Paragraph" msgid "This artist is present in the following libraries:" msgstr "Este artista está presente nas seguintes bibliotecas:" +#: front/src/components/manage/moderation/DomainsTable.vue:169 +#, fuzzy +msgctxt "Content/Moderation/Popup" +msgid "This domain is present in your allow-list" +msgstr "Este artista está presente nas seguintes bibliotecas:" + #: front/src/views/admin/moderation/AccountsDetail.vue:84 -#: front/src/views/admin/moderation/DomainsDetail.vue:48 +#: front/src/views/admin/moderation/DomainsDetail.vue:76 msgctxt "Content/Moderation/Card.Title" msgid "This domain is subject to specific moderation rules" msgstr "Este domÃnio está sujeito a regras especÃficas de moderação" +#: front/src/components/manage/moderation/InstancePolicyModal.vue:16 +#, fuzzy +msgctxt "Content/Moderation/Card.Title" +msgid "This entity is subject to specific moderation rules" +msgstr "Este domÃnio está sujeito a regras especÃficas de moderação" + #: front/src/views/content/Home.vue:9 msgctxt "Content/Library/Paragraph" msgid "This instance offers up to %{quota} of storage space for every user." +msgstr "Esta instância oferece até %{quota} de espaço de armazenamento por usuário." + +#: front/src/components/auth/Settings.vue:300 +msgctxt "Popup/Settings/Paragraph" +msgid "This is irreversible and will permanently remove your data from our servers. You will we immediatly logged out." msgstr "" -"Esta instância oferece até %{quota} de espaço de armazenamento por usuário." #: front/src/components/auth/Settings.vue:165 msgctxt "Content/Settings/Paragraph" -msgid "" -"This is the list of applications that have access to your account data." -msgstr "" +msgid "This is the list of applications that have access to your account data." +msgstr "Esta é a lista de aplicativos que tem acesso aos dados da sua conta." #: front/src/components/auth/Settings.vue:218 msgctxt "Content/Settings/Paragraph" msgid "This is the list of applications that you have created." -msgstr "" +msgstr "Esta é a lista de aplicativos que você criou." #: front/src/components/auth/Profile.vue:16 msgctxt "Content/Profile/Button.Paragraph" @@ -4456,37 +4763,33 @@ msgstr "Este é você!" #: front/src/views/content/libraries/Form.vue:73 msgctxt "Content/Library/Input.Placeholder" msgid "This library contains my personal music, I hope you like it." -msgstr "" -"Esta biblioteca contém minhas músicas pessoais, espero que você goste." +msgstr "Esta biblioteca contém minhas músicas pessoais, espero que você goste." -#: front/src/views/content/remote/Card.vue:141 +#: front/src/views/content/remote/Card.vue:169 msgctxt "Content/Library/Card.Help text" -msgid "" -"This library is private and your approval from its owner is needed to access" -" its content" -msgstr "" -"Esta biblioteca é privada e a permissão do dono é necessária para acessar " -"seu conteúdo" +msgid "This library is private and your approval from its owner is needed to access its content" +msgstr "Esta biblioteca é privada e a permissão do dono é necessária para ver seu conteúdo" -#: front/src/views/content/remote/Card.vue:142 +#: front/src/views/content/remote/Card.vue:170 msgctxt "Content/Library/Card.Help text" msgid "This library is public and you can access its content freely" -msgstr "Esta biblioteca é pública e você pode acessar seu conteúdo livremente" +msgstr "Esta biblioteca é pública e você pode ver seu conteúdo livremente" #: front/src/components/common/ActionTable.vue:47 msgctxt "Modal/*/Paragraph" -msgid "" -"This may affect a lot of elements or have irreversible consequences, please " -"double check this is really what you want." -msgstr "" -"Isso pode afetar muitos elementos ou ter consequências irreversÃveis, por " -"favor, verifique se é o que você realmente deseja." +msgid "This may affect a lot of elements or have irreversible consequences, please double check this is really what you want." +msgstr "Isso pode afetar muitos elementos ou ter consequências irreversÃveis, por favor, verifique se é o que você realmente deseja." #: front/src/components/library/AlbumEdit.vue:8 #: front/src/components/library/ArtistEdit.vue:8 #: front/src/components/library/TrackEdit.vue:8 msgctxt "Content/*/Message" msgid "This object is managed by another server, you cannot edit it." +msgstr "Não é possÃvel editar este objeto, ele é gerenciado por outro servidor." + +#: front/src/components/Home.vue:87 +msgctxt "Content/Home/Paragraph" +msgid "This pod runs Funkwhale, a community-driven project that lets you listen and share music and audio within a decentralized, open network." msgstr "" #: front/src/components/library/FileUpload.vue:51 @@ -4498,39 +4801,32 @@ msgstr "Essa referência será usada para agrupar arquivos importados." #: front/src/components/mixins/Translations.vue:34 #, fuzzy msgctxt "Content/Library/Help text" -msgid "This track could not be processed, please it is tagged correctly" -msgstr "" -"Não foi possÃvel processar esta faixa, verifique se ela possui as tags " -"certas" +msgid "This track could not be processed, please make sure it is tagged correctly" +msgstr "Não foi possÃvel processar esta faixa, verifique se ela está com as tags adequadas" #: front/src/components/mixins/Translations.vue:29 #: front/src/components/mixins/Translations.vue:30 -#, fuzzy msgctxt "Content/Library/Help text" -msgid "" -"This track has been uploaded, but hasn't been processed by the server yet" +msgid "This track has been uploaded, but hasn't been processed by the server yet" msgstr "Faixa enviada, mas ainda não foi processada pelo servidor" #: front/src/components/mixins/Translations.vue:25 #: front/src/components/mixins/Translations.vue:26 -#, fuzzy msgctxt "Content/Library/Help text" msgid "This track is already present in one of your libraries" -msgstr "Faixa já presente em uma das suas bibliotecas" +msgstr "Faixa já presente em uma de suas bibliotecas" -#: front/src/components/audio/PlayButton.vue:85 +#: front/src/components/audio/PlayButton.vue:103 msgctxt "*/Queue/Button/Title" msgid "This track is not available in any library you have access to" -msgstr "" -"Esta faixa não está disponÃvel em nenhuma biblioteca à qual você tenha " -"acesso" +msgstr "Esta faixa não está disponÃvel em nenhuma biblioteca à qual você possa ver" #: front/src/components/library/TrackDetail.vue:82 msgctxt "Content/Track/Paragraph" msgid "This track is present in the following libraries:" msgstr "Esta faixa está presente nas seguintes bibliotecas:" -#: front/src/views/playlists/Detail.vue:38 +#: front/src/views/playlists/Detail.vue:46 msgctxt "Popup/Playlist/Paragraph" msgid "This will completely delete this playlist and cannot be undone." msgstr "Isso vai excluir permanentemente sua lista." @@ -4540,77 +4836,74 @@ msgctxt "Popup/Radio/Paragraph" msgid "This will completely delete this radio and cannot be undone." msgstr "Isso vai excluir permanentemente sua rádio." -#: front/src/components/auth/SubsonicTokenForm.vue:50 +#: front/src/components/auth/SubsonicTokenForm.vue:55 msgctxt "Popup/Settings/Paragraph" -msgid "" -"This will completely disable access to the Subsonic API using from account." +msgid "This will completely disable access to the Subsonic API using from account." +msgstr "Isso vai desativar completamente o acesso á API Subsonic usada na conta." + +#: front/src/components/manage/moderation/ReportCard.vue:359 +msgctxt "Content/Moderation/Popup,Paragraph" +msgid "This will delete the object associated with this report and mark the report as resolved. The deletion is irreversible." msgstr "" -"Isso vai desativar completamente o acesso á API Subsonic usada para a conta." -#: front/src/components/auth/SubsonicTokenForm.vue:35 +#: front/src/components/auth/SubsonicTokenForm.vue:40 msgctxt "Popup/Settings/Paragraph" -msgid "" -"This will log you out from existing devices that use the current password." -msgstr "" -"Isso fará com que sua conta saia de todos os dispositivos que usem a senha " -"atual." +msgid "This will log you out from existing devices that use the current password." +msgstr "Isso fará com que sua conta saia de todos os dispositivos que usem a senha atual." #: front/src/components/auth/Settings.vue:253 -#, fuzzy msgctxt "Popup/Settings/Paragraph" -msgid "" -"This will permanently delete the application and all the associated tokens." -msgstr "Isso vai excluir permanentemente sua lista." +msgid "This will permanently delete the application and all the associated tokens." +msgstr "Isso excluirá permanentemente seus aplicativos e todos os tokens associados." #: front/src/components/auth/Settings.vue:194 msgctxt "Popup/Settings/Paragraph" -msgid "" -"This will prevent this application from accessing the service on your " -"behalf." -msgstr "" +msgid "This will prevent this application from accessing the service on your behalf." +msgstr "Isso impedirá que esse aplicativo acesse o serviço em seu nome." #: front/src/components/playlists/Editor.vue:54 msgctxt "Popup/Playlist/Paragraph" msgid "This will remove all tracks from this playlist and cannot be undone." msgstr "Isso vai excluir permanentemente todas as faixas da sua lista." -#: front/src/views/admin/library/AlbumDetail.vue:99 -#: front/src/views/admin/library/TrackDetail.vue:98 src/edits.js:21 -#: src/edits.js:39 -msgctxt "*/*/*/Noun" -msgid "Title" -msgstr "TÃtulo" - #: front/src/components/audio/track/Table.vue:7 -#: front/src/views/content/libraries/FilesTable.vue:55 -msgctxt "Content/Track/*/Noun" -msgid "Title" -msgstr "TÃtulo" - #: front/src/components/manage/library/AlbumsTable.vue:39 #: front/src/components/manage/library/TracksTable.vue:39 -msgctxt "*/*/*" +#: front/src/views/admin/library/AlbumDetail.vue:105 +#: front/src/views/admin/library/TrackDetail.vue:104 +#: front/src/views/content/libraries/FilesTable.vue:55 src/edits.js:36 +#: front/src/edits.js:62 +msgctxt "*/*/*/Noun" msgid "Title" msgstr "TÃtulo" #: front/src/components/SetInstanceModal.vue:16 msgctxt "Popup/Instance/Paragraph" -msgid "" -"To continue, please select the Funkwhale instance you want to connect to. " -"Enter the address directly, or select one of the suggested choices." +msgid "To continue, please select the Funkwhale instance you want to connect to. Enter the address directly, or select one of the suggested choices." +msgstr "Para continuar, insira a instância Funkwhale que você deseja entrar. Digite o endereço ou selecione uma das sugeridas." + +#: front/src/components/ShortcutsModal.vue:148 +#, fuzzy +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Toggle favorite" +msgstr "1 favorito" + +#: front/src/components/ShortcutsModal.vue:132 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Toggle mute" msgstr "" -#: front/src/components/ShortcutsModal.vue:79 +#: front/src/components/ShortcutsModal.vue:136 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Toggle queue looping" msgstr "Botão de repetição da fila" -#: front/src/views/admin/library/AlbumDetail.vue:222 -#: front/src/views/admin/library/ArtistDetail.vue:211 -#: front/src/views/admin/library/LibraryDetail.vue:200 -#: front/src/views/admin/library/TrackDetail.vue:274 -#: front/src/views/admin/moderation/AccountsDetail.vue:317 -#: front/src/views/admin/moderation/DomainsDetail.vue:225 +#: front/src/views/admin/library/AlbumDetail.vue:238 +#: front/src/views/admin/library/ArtistDetail.vue:226 +#: front/src/views/admin/library/LibraryDetail.vue:219 +#: front/src/views/admin/library/TrackDetail.vue:290 +#: front/src/views/admin/moderation/AccountsDetail.vue:329 +#: front/src/views/admin/moderation/DomainsDetail.vue:262 msgctxt "Content/Moderation/Table.Label" msgid "Total size" msgstr "Tamanho total" @@ -4620,20 +4913,18 @@ msgctxt "Content/Library/Card.Help text" msgid "Total size of the files in this library" msgstr "Tamanho total dos arquivos nesta biblioteca" -#: front/src/views/admin/moderation/DomainsDetail.vue:105 +#: front/src/views/admin/moderation/DomainsDetail.vue:142 msgctxt "Content/*/*" msgid "Total users" msgstr "Total de usuários" -#: front/src/views/admin/library/UploadDetail.vue:199 -msgctxt "*/*/*" -msgid "Track" -msgstr "Faixa" - -#: front/src/components/audio/SearchBar.vue:27 -#: front/src/components/library/TrackBase.vue:173 +#: front/src/components/audio/SearchBar.vue:34 +#: front/src/components/library/TrackBase.vue:188 #: front/src/components/library/TrackDetail.vue:128 #: front/src/components/metadata/Search.vue:138 +#: src/components/mixins/Report.vue:28 +#: front/src/views/admin/library/UploadDetail.vue:199 +#: front/src/components/mixins/Report.vue:29 msgctxt "*/*/*/Noun" msgid "Track" msgstr "Faixa" @@ -4641,43 +4932,40 @@ msgstr "Faixa" #: front/src/components/library/EditCard.vue:13 msgctxt "Content/Library/Card/Short" msgid "Track #%{ id } - %{ name }" -msgstr "" +msgstr "Faixa #%{ id } - %{ name }" -#: front/src/views/admin/library/TrackDetail.vue:91 -#, fuzzy +#: front/src/views/admin/library/TrackDetail.vue:97 msgctxt "Content/Moderation/Title" msgid "Track data" -msgstr "Nome da faixa" +msgstr "Dados da faixa" #: front/src/components/library/TrackDetail.vue:4 msgctxt "Content/Track/Title/Noun" msgid "Track information" msgstr "Informações da faixa" -#: front/src/components/mixins/Translations.vue:50 -#: front/src/components/mixins/Translations.vue:51 +#: front/src/components/mixins/Translations.vue:60 +#: front/src/components/mixins/Translations.vue:61 msgctxt "Content/*/Dropdown/Noun" msgid "Track name" msgstr "Nome da faixa" -#: front/src/components/instance/Stats.vue:54 #: front/src/components/library/AlbumDetail.vue:19 -#: front/src/components/playlists/PlaylistModal.vue:47 -#: front/src/views/admin/moderation/AccountsDetail.vue:362 -#: front/src/views/admin/moderation/DomainsDetail.vue:274 -#: front/src/views/content/Base.vue:8 src/views/content/libraries/Detail.vue:8 -#: front/src/views/playlists/Detail.vue:51 src/views/radios/Detail.vue:34 -msgctxt "*/*/*/Noun" -msgid "Tracks" -msgstr "Faixas" - +#: front/src/components/library/TagDetail.vue:36 #: front/src/components/manage/library/AlbumsTable.vue:42 #: front/src/components/manage/library/ArtistsTable.vue:42 -#: front/src/views/admin/library/AlbumDetail.vue:252 -#: front/src/views/admin/library/ArtistDetail.vue:251 +#: front/src/components/manage/library/TagsTable.vue:44 +#: front/src/components/playlists/PlaylistModal.vue:47 +#: front/src/views/admin/library/AlbumDetail.vue:268 +#: front/src/views/admin/library/ArtistDetail.vue:266 #: front/src/views/admin/library/Base.vue:14 -#: front/src/views/admin/library/LibraryDetail.vue:229 +#: front/src/views/admin/library/LibraryDetail.vue:248 +#: front/src/views/admin/library/TagDetail.vue:143 #: front/src/views/admin/library/TracksList.vue:24 +#: front/src/views/admin/moderation/AccountsDetail.vue:374 +#: front/src/views/admin/moderation/DomainsDetail.vue:311 +#: front/src/views/content/Base.vue:8 src/views/content/libraries/Detail.vue:8 +#: front/src/views/playlists/Detail.vue:76 src/views/radios/Detail.vue:34 msgctxt "*/*/*" msgid "Tracks" msgstr "Faixas" @@ -4687,91 +4975,73 @@ msgctxt "Content/Artist/Title" msgid "Tracks by this artist" msgstr "Faixas deste artista" -#: front/src/components/instance/Stats.vue:25 -msgctxt "Content/About/Paragraph/Unit" -msgid "Tracks favorited" -msgstr "Faixas favoritadas" - -#: front/src/components/instance/Stats.vue:19 -msgctxt "Content/About/Paragraph/Unit" -msgid "tracks listened" -msgstr "faixas escutadas" - #: front/src/components/library/radios/Filter.vue:44 -#, fuzzy msgctxt "Popup/Radio/Title/Noun" msgid "Tracks matching filter" -msgstr "Faixa encontrada" +msgstr "Faixas encontradas" #: front/src/components/library/TrackDetail.vue:57 +#: front/src/components/manage/moderation/ReportCard.vue:134 #: front/src/views/admin/library/UploadDetail.vue:250 +#: front/src/views/admin/moderation/AccountsDetail.vue:181 msgctxt "Content/Track/Table.Label/Noun" msgid "Type" msgstr "Tipo" -#: front/src/views/admin/moderation/AccountsDetail.vue:180 -msgctxt "Content/Moderation/Table.Label/Noun" -msgid "Type" -msgstr "Tipo" - #: front/src/components/manage/moderation/AccountsTable.vue:44 -#: front/src/components/manage/moderation/DomainsTable.vue:42 +#: front/src/components/manage/moderation/DomainsTable.vue:50 msgctxt "Content/Moderation/Table.Label/Short" msgid "Under moderation rule" msgstr "Sob regra de moderação" -#: front/src/views/content/remote/Card.vue:109 -#: src/views/content/remote/Card.vue:114 +#: front/src/components/ShortcutsModal.vue:68 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Unfocus searchbar" +msgstr "" + +#: front/src/views/content/remote/Card.vue:122 +#: src/views/content/remote/Card.vue:127 msgctxt "*/Library/Button.Label/Verb" msgid "Unfollow" msgstr "Deixar de seguir" -#: front/src/views/content/remote/Card.vue:110 +#: front/src/views/content/remote/Card.vue:123 msgctxt "Popup/Library/Title" msgid "Unfollow this library?" msgstr "Deixar de seguir esta biblioteca?" -#: front/src/components/About.vue:17 -#, fuzzy -msgctxt "Content/About/Paragraph" -msgid "" -"Unfortunately, the owners of this instance did not yet take the time to " -"complete this page." -msgstr "" -"Infelizmente, os donos desta instância ainda não tiveram tempo para concluir" -" esta página." - #: front/src/components/federation/FetchButton.vue:54 #: front/src/components/federation/FetchButton.vue:55 -msgctxt "*/*/Error" -msgid "Unknowkn error" -msgstr "" - #: front/src/components/library/ImportStatusModal.vue:144 -msgctxt "Popup/Import/Error.Label" -msgid "Unkwown error" -msgstr "" - -#: front/src/components/Home.vue:37 -msgctxt "Content/Home/Title" -msgid "Unlimited music" -msgstr "Músicas ilimitadas" +msgctxt "*/*/Error" +msgid "Unknown error" +msgstr "Erro desconhecido" -#: front/src/components/audio/Player.vue:630 +#: front/src/components/audio/Player.vue:656 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Unmute" msgstr "Desfazer silêncio" +#: front/src/components/manage/moderation/ReportCard.vue:225 +msgctxt "Content/*/Button.Label" +msgid "Unresolve" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:67 +#: front/src/views/admin/moderation/ReportsList.vue:23 +msgctxt "Content/*/*/Short" +msgid "Unresolved" +msgstr "" + #: front/src/components/manage/moderation/InstancePolicyForm.vue:57 msgctxt "Content/Moderation/Card.Button.Label/Verb" msgid "Update" msgstr "Atualizar" #: front/src/components/auth/ApplicationForm.vue:64 -#, fuzzy msgctxt "Content/Applications/Button.Label/Verb" msgid "Update application" -msgstr "Atualizar lista" +msgstr "Atualizar aplicativo" #: front/src/components/auth/Settings.vue:50 msgctxt "Content/Settings/Button.Label/Verb" @@ -4812,10 +5082,9 @@ msgstr "Enviar nova imagem de perfil" #: front/src/views/content/Home.vue:6 msgctxt "Content/Library/Title/Verb" msgid "Upload audio content" -msgstr "Enviar áudio" +msgstr "Enviar conteúdo de áudio" #: front/src/views/admin/library/UploadDetail.vue:85 -#, fuzzy msgctxt "Content/Moderation/Title" msgid "Upload data" msgstr "Data de envio" @@ -4827,34 +5096,28 @@ msgstr "Data de envio" #: front/src/components/library/FileUpload.vue:258 msgctxt "Content/Library/Help text" -msgid "" -"Upload denied, ensure the file is not too big and that you have not reached " -"your quota" -msgstr "" -"Não enviado, certifique-se de que o arquivo não é muito grande e você não " -"atingiu sua cota" +msgid "Upload denied, ensure the file is not too big and that you have not reached your quota" +msgstr "Não enviado, certifique-se de que o arquivo não é muito grande e você não atingiu sua cota" #: front/src/components/library/ImportStatusModal.vue:8 msgctxt "Popup/Import/Message" msgid "Upload is still pending and will soon be processed by the server." -msgstr "" +msgstr "O envio ainda está pendente e logo será processado pelo servidor." #: front/src/views/content/Home.vue:7 msgctxt "Content/Library/Paragraph" -msgid "" -"Upload music files (MP3, OGG, FLAC, etc.) from your personal library " -"directly from your browser to enjoy them here." -msgstr "" -"Envie áudios (MP3, OGG, FLAC, etc.) da sua biblioteca pessoal diretamente de" -" seu navegador para curtÃ-los aqui." +msgid "Upload music files (MP3, OGG, FLAC, etc.) from your personal library directly from your browser to enjoy them here." +msgstr "Envie áudios (MP3, OGG, FLAC, etc.) da sua biblioteca pessoal diretamente de seu navegador para curtÃ-los aqui." #: front/src/components/library/FileUpload.vue:30 msgctxt "Content/Library/Title/Verb" msgid "Upload new tracks" msgstr "Enviar novas faixas" -#: front/src/views/admin/moderation/AccountsDetail.vue:298 -msgctxt "Content/Moderation/Table.Label/Noun" +#: front/src/components/About.vue:99 +#: front/src/views/admin/moderation/AccountsDetail.vue:309 +#, fuzzy +msgctxt "*/*/*" msgid "Upload quota" msgstr "Cota de envio" @@ -4865,16 +5128,13 @@ msgstr "Tempo de envio esgotado, por favor, tente novamente" #: front/src/components/library/ImportStatusModal.vue:14 msgctxt "Popup/Import/Message" -msgid "" -"Upload was skipped because a similar one is already available in one of your" -" libraries." -msgstr "" +msgid "Upload was skipped because a similar one is already available in one of your libraries." +msgstr "O envio foi ignorado porque já existe em uma de suas bibliotecas." #: front/src/components/library/ImportStatusModal.vue:11 -#, fuzzy msgctxt "Popup/Import/Message" msgid "Upload was successfully processed by the server." -msgstr "Faixa enviada, mas ainda não foi processada pelo servidor" +msgstr "Envio foi processado pelo servidor." #: front/src/components/library/FileUpload.vue:109 msgctxt "Content/Library/Table" @@ -4891,56 +5151,55 @@ msgctxt "Content/Library/Table" msgid "Uploading…" msgstr "Enviando…" +#: front/src/components/manage/library/LibrariesTable.vue:52 +#: front/src/components/manage/moderation/AccountsTable.vue:41 +#: front/src/components/mixins/Translations.vue:75 +#: front/src/views/admin/library/AlbumDetail.vue:258 +#: front/src/views/admin/library/ArtistDetail.vue:246 #: front/src/views/admin/library/Base.vue:20 +#: front/src/views/admin/library/LibraryDetail.vue:258 +#: front/src/views/admin/library/TrackDetail.vue:310 #: front/src/views/admin/library/UploadsList.vue:24 +#: front/src/views/admin/moderation/AccountsDetail.vue:349 +#: front/src/views/admin/moderation/DomainsDetail.vue:281 +#: front/src/components/mixins/Translations.vue:76 msgctxt "*/*/*" msgid "Uploads" msgstr "Envios" -#: front/src/components/manage/moderation/AccountsTable.vue:41 -#: front/src/components/mixins/Translations.vue:63 -#: front/src/views/admin/library/AlbumDetail.vue:242 -#: front/src/views/admin/library/ArtistDetail.vue:231 -#: front/src/views/admin/library/LibraryDetail.vue:239 -#: front/src/views/admin/library/TrackDetail.vue:294 -#: front/src/views/admin/moderation/AccountsDetail.vue:337 -#: front/src/views/admin/moderation/DomainsDetail.vue:244 -#: front/src/components/mixins/Translations.vue:64 -msgctxt "Content/Moderation/Table.Label/Noun" -msgid "Uploads" -msgstr "Envios" - -#: front/src/components/manage/library/LibrariesTable.vue:52 -msgctxt "Content/*/*/Noun" -msgid "Uploads" -msgstr "Envios" - #: front/src/components/auth/ApplicationForm.vue:16 msgctxt "Content/Applications/Help Text" -msgid "" -"Use \"urn:ietf:wg:oauth:2.0:oob\" as a redirect URI if your application is " -"not served on the web." -msgstr "" +msgid "Use \"urn:ietf:wg:oauth:2.0:oob\" as a redirect URI if your application is not served on the web." +msgstr "Use \"urn:ietf:wg:oauth:2.0:oob\" como link de redirecionamento se seu aplicativo não está na Web." #: front/src/components/Footer.vue:16 msgctxt "Footer/*/List item.Link" msgid "Use another instance" msgstr "Usar outra instância" +#: front/src/components/Home.vue:146 +msgctxt "Content/Home/Link" +msgid "Use Funkwhale on other devices with our apps" +msgstr "" + +#: front/src/components/moderation/ReportModal.vue:44 +msgctxt "*/*/Field,Help" +msgid "Use this field to provide additional context to the moderator that will handle your report." +msgstr "" + #: front/src/views/auth/PasswordReset.vue:12 msgctxt "Content/Signup/Paragraph" -msgid "" -"Use this form to request a password reset. We will send an email to the " -"given address with instructions to reset your password." +msgid "Use this form to request a password reset. We will send an email to the given address with instructions to reset your password." +msgstr "Use este formulário para solicitar redefinição de senha. Enviaremos um e-mail com instruções para o endereço fornecido." + +#: front/src/components/moderation/ReportModal.vue:18 +msgctxt "*/Moderation/Popup,Paragraph" +msgid "Use this form to submit a report to our moderation team." msgstr "" -"Use este formulário para solicitar redefinição de senha. Enviaremos um " -"e-mail com instruções para o endereço fornecido." #: front/src/components/manage/moderation/InstancePolicyForm.vue:111 msgctxt "Content/Moderation/Help text" -msgid "" -"Use this setting to temporarily enable/disable the policy without completely" -" removing it." +msgid "Use this setting to temporarily enable/disable the policy without completely removing it." msgstr "Usar essa configuração ativa/desativa as regras sem removê-las." #: front/src/components/manage/users/InvitationsTable.vue:49 @@ -4948,15 +5207,27 @@ msgctxt "Content/Admin/Table" msgid "Used" msgstr "Usado" +#: front/src/components/Home.vue:125 +msgctxt "Content/Home/Header" +msgid "Useful links" +msgstr "" + #: front/src/views/content/libraries/Detail.vue:26 msgctxt "Content/Library/Table.Label" msgid "User" msgstr "Usuário" -#: front/src/components/instance/Stats.vue:5 -msgctxt "Content/About/Title/Noun" -msgid "User activity" -msgstr "Atividade do usuário" +#: front/src/components/Home.vue:154 +#, fuzzy +msgctxt "Content/Home/Link" +msgid "User guides" +msgstr "Bibliotecas do usuário" + +#: front/src/views/admin/Settings.vue:88 +#, fuzzy +msgctxt "Content/Admin/Menu" +msgid "User Interface" +msgstr "Nome de usuário" #: front/src/components/library/AlbumDetail.vue:26 #: front/src/components/library/ArtistDetail.vue:39 @@ -4970,35 +5241,35 @@ msgctxt "Content/Radio/Title" msgid "User radios" msgstr "Rádios do usuário" -#: front/src/components/auth/Signup.vue:19 +#: front/src/components/auth/SignupForm.vue:15 #: front/src/components/manage/users/UsersTable.vue:37 -#: front/src/components/mixins/Translations.vue:59 +#: front/src/components/mixins/Translations.vue:71 #: front/src/views/admin/moderation/AccountsDetail.vue:114 -#: front/src/components/mixins/Translations.vue:60 +#: front/src/components/mixins/Translations.vue:72 msgctxt "Content/*/*" msgid "Username" msgstr "Nome de usuário" -#: front/src/components/auth/Login.vue:15 +#: front/src/components/auth/LoginForm.vue:11 msgctxt "Content/Login/Input.Label/Noun" msgid "Username or email" msgstr "Nome de usuário ou e-mail" -#: front/src/components/instance/Stats.vue:13 -msgctxt "Content/About/Paragraph/Unit" -msgid "users" -msgstr "usuários" - -#: front/src/components/Sidebar.vue:102 -#: front/src/components/manage/moderation/DomainsTable.vue:39 -#: front/src/components/mixins/Translations.vue:61 +#: front/src/components/Sidebar.vue:106 +#: front/src/components/manage/moderation/DomainsTable.vue:47 +#: front/src/components/mixins/Translations.vue:73 #: src/views/admin/Settings.vue:81 front/src/views/admin/users/Base.vue:5 #: src/views/admin/users/UsersList.vue:21 -#: front/src/components/mixins/Translations.vue:62 +#: front/src/components/mixins/Translations.vue:74 msgctxt "*/*/*/Noun" msgid "Users" msgstr "Usuários" +#: front/src/components/Home.vue:110 +msgctxt "Content/Home/Paragraph" +msgid "Users on this pod also get %{ quota } of free storage to upload their own content!" +msgstr "" + #: front/src/components/Footer.vue:29 msgctxt "Footer/*/Title" msgid "Using Funkwhale" @@ -5016,45 +5287,60 @@ msgctxt "Content/Library/Link/Verb" msgid "View files" msgstr "Ver arquivos" -#: front/src/components/library/AlbumBase.vue:81 -#: front/src/components/library/ArtistBase.vue:92 -#: front/src/components/library/TrackBase.vue:100 -#: front/src/views/admin/library/AlbumDetail.vue:42 -#: front/src/views/admin/library/ArtistDetail.vue:41 +#: front/src/components/library/AlbumBase.vue:95 +#: front/src/components/library/ArtistBase.vue:107 +#: front/src/components/library/TrackBase.vue:111 +#: front/src/views/admin/library/AlbumDetail.vue:48 +#: front/src/views/admin/library/ArtistDetail.vue:46 #: front/src/views/admin/library/LibraryDetail.vue:34 #: front/src/views/admin/library/LibraryDetail.vue:45 -#: front/src/views/admin/library/TrackDetail.vue:41 +#: front/src/views/admin/library/TagDetail.vue:32 +#: front/src/views/admin/library/TrackDetail.vue:47 #: front/src/views/admin/library/UploadDetail.vue:35 #: front/src/views/admin/library/UploadDetail.vue:46 #: front/src/views/admin/moderation/AccountsDetail.vue:37 #: front/src/views/admin/moderation/AccountsDetail.vue:45 +#: front/src/views/admin/moderation/DomainsDetail.vue:30 msgctxt "Content/Moderation/Link/Verb" msgid "View in Django's admin" -msgstr "" +msgstr "Ver administração Django" -#: front/src/components/library/AlbumBase.vue:61 -#: front/src/components/library/ArtistBase.vue:72 -#: front/src/components/library/TrackBase.vue:80 +#: front/src/components/Home.vue:169 +#, fuzzy +msgctxt "Content/Home/Link" +msgid "View more…" +msgstr "Ver mais…" + +#: front/src/components/library/AlbumBase.vue:62 +#: front/src/components/library/ArtistBase.vue:73 +#: front/src/components/library/TrackBase.vue:78 #: front/src/components/metadata/ArtistCard.vue:49 #: front/src/components/metadata/ReleaseCard.vue:53 msgctxt "Content/*/*/Clickable, Verb" msgid "View on MusicBrainz" msgstr "Ver em MusicBrainz" +#: front/src/components/manage/moderation/ReportCard.vue:124 +msgctxt "Content/Moderation/Link" +msgid "View public page" +msgstr "" + #: front/src/components/manage/library/LibrariesTable.vue:11 #: front/src/components/manage/library/LibrariesTable.vue:51 #: front/src/components/manage/library/UploadsTable.vue:11 #: front/src/components/manage/library/UploadsTable.vue:63 #: front/src/views/admin/library/LibraryDetail.vue:94 #: front/src/views/admin/library/UploadDetail.vue:101 +#: front/src/views/content/libraries/Form.vue:18 msgctxt "*/*/*" msgid "Visibility" msgstr "Visibilidade" -#: front/src/views/content/libraries/Form.vue:18 -msgctxt "Content/Library/Dropdown.Label" -msgid "Visibility" -msgstr "Visibilidade" +#: front/src/components/Home.vue:91 +#, fuzzy +msgctxt "Content/Home/Link" +msgid "Visit funkwhale.audio" +msgstr "Usando Funkwhale" #: front/src/components/library/AlbumDetail.vue:4 msgctxt "Content/Album/" @@ -5062,58 +5348,57 @@ msgid "Volume %{ number }" msgstr "Volume %{ number }" #: front/src/components/federation/FetchButton.vue:69 -#, fuzzy msgctxt "Popup/*/Loading.Title" msgid "Waiting for result…" -msgstr "Carregando seus favoritos…" +msgstr "Carregando…" -#: front/src/components/auth/Login.vue:7 +#: front/src/components/auth/Settings.vue:285 +#, fuzzy +msgctxt "Content/Settings/Error message.Title" +msgid "We cannot delete your account" +msgstr "Não foi possÃvel entrar" + +#: front/src/components/auth/LoginForm.vue:3 msgctxt "Content/Login/Error message.Title" msgid "We cannot log you in" msgstr "Não foi possÃvel entrar" #: front/src/components/auth/ApplicationForm.vue:3 -#, fuzzy msgctxt "Content/*/Error message.Title" msgid "We cannot save your changes" -msgstr "Não foi possÃvel salvar suas configurações" +msgstr "Não foi possÃvel salvar as alterações" -#: front/src/components/Home.vue:122 -msgctxt "Content/Home/List item" -msgid "We do not track you or bother you with ads" -msgstr "Nós não rastreamos ou incomodamos você com anúncios" +#: front/src/views/Notifications.vue:39 +msgctxt "Content/Notifications/Paragraph" +msgid "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!" +msgstr "" #: front/src/components/library/FileUpload.vue:39 msgctxt "Content/Library/Link" msgid "We recommend using Picard for that purpose." msgstr "Recomendamos o uso do Picard para este propósito." -#: front/src/components/Home.vue:7 -msgctxt "Content/Home/Title" -msgid "We think listening to music should be simple." -msgstr "Nós acreditamos que ouvir músicas deve ser simples." +#: front/src/components/moderation/ReportModal.vue:35 +msgctxt "*/*/Field,Help" +msgid "We'll use this email if we need to contact you regarding this report." +msgstr "" -#: front/src/components/Home.vue:148 +#: front/src/components/Home.vue:207 msgctxt "Head/Home/Title" msgid "Welcome" msgstr "Bem-vindo(a)" #: front/src/components/Home.vue:5 -msgctxt "Content/Home/Title/Verb" -msgid "Welcome on Funkwhale" -msgstr "Bem-vindo(a) ao Funkwhale" - -#: front/src/components/Home.vue:24 -msgctxt "Content/Home/Title" -msgid "Why funkwhale?" -msgstr "Por que funkwhale?" +msgctxt "Content/Home/Header" +msgid "Welcome to %{ podName }!" +msgstr "" -#: front/src/components/audio/EmbedWizard.vue:13 +#: front/src/components/audio/EmbedWizard.vue:23 msgctxt "Popup/Embed/Input.Label" msgid "Widget height" msgstr "Altura do widget" -#: front/src/components/audio/EmbedWizard.vue:6 +#: front/src/components/audio/EmbedWizard.vue:16 msgctxt "Popup/Embed/Input.Label" msgid "Widget width" msgstr "Largura do widget" @@ -5121,21 +5406,23 @@ msgstr "Largura do widget" #: front/src/components/auth/ApplicationForm.vue:157 msgctxt "Content/OAuth Scopes/Label/Verb" msgid "Write" -msgstr "" +msgstr "Escrita" #: front/src/components/auth/Authorize.vue:21 msgctxt "Content/Auth/Label/Noun" msgid "Write-only" -msgstr "" +msgstr "Apenas escrita" #: front/src/components/auth/ApplicationForm.vue:158 msgctxt "Content/OAuth Scopes/Help Text" msgid "Write-only access to user data" -msgstr "" +msgstr "Apenas escreve seus dados de usuário" -#: front/src/components/Sidebar.vue:129 +#: front/src/components/Sidebar.vue:133 #: front/src/components/manage/moderation/AccountsTable.vue:72 -#: front/src/components/manage/moderation/DomainsTable.vue:58 +#: front/src/components/manage/moderation/DomainsTable.vue:12 +#: front/src/components/manage/moderation/DomainsTable.vue:69 +#: front/src/views/admin/moderation/DomainsDetail.vue:109 msgctxt "*/*/*" msgid "Yes" msgstr "Sim" @@ -5147,35 +5434,23 @@ msgstr "Sim, quero sair!" #: front/src/views/content/libraries/Form.vue:19 msgctxt "Content/Library/Paragraph" -msgid "" -"You are able to share your library with other people, regardless of its " -"visibility." -msgstr "" -"Você pode compartilhar sua biblioteca com outras pessoas, independente da " -"sua visibilidade." +msgid "You are able to share your library with other people, regardless of its visibility." +msgstr "Você pode compartilhar sua biblioteca com outras pessoas, independente da sua visibilidade." #: front/src/components/library/FileUpload.vue:32 msgctxt "Content/Library/Paragraph" -msgid "" -"You are about to upload music to your library. Before proceeding, please " -"ensure that:" -msgstr "" -"Você está prestes a enviar músicas para sua biblioteca. Antes de continuar, " -"certifique-se de que:" +msgid "You are about to upload music to your library. Before proceeding, please ensure that:" +msgstr "Você está prestes a enviar músicas para sua biblioteca. Antes de continuar, certifique-se de que:" #: front/src/components/SetInstanceModal.vue:12 msgctxt "Popup/Login/Paragraph" -msgid "" -"You are currently connected to <a href=\"%{ url }\" target=\"_blank\">%{ " -"hostname } <i class=\"external icon\"/></a>. If you continue, you will " -"be disconnected from your current instance and all your local data will be " -"deleted." -msgstr "" +msgid "You are currently connected to <a href=\"%{ url }\" target=\"_blank\">%{ hostname } <i class=\"external icon\"/></a>. If you continue, you will be disconnected from your current instance and all your local data will be deleted." +msgstr "Você está em <a href=\"%{ url }\" target=\"_blank\">%{ hostname } <i class=\"external icon\"/></a>. Se continuar, você sairá e todos os seus dados locais serão excluÃdos." #: front/src/components/library/ArtistDetail.vue:6 msgctxt "Content/Artist/Paragraph" msgid "You are currently hiding content related to this artist." -msgstr "" +msgstr "Você ocultou conteúdos deste(a) artista." #: front/src/components/auth/Logout.vue:7 msgctxt "Content/Login/Paragraph" @@ -5184,95 +5459,72 @@ msgstr "Você entrou como %{ username }" #: front/src/components/library/FileUpload.vue:35 msgctxt "Content/Library/List item" -msgid "" -"You are not uploading copyrighted content in a public library, otherwise you" -" may be infringing the law" -msgstr "" +msgid "You are not uploading copyrighted content in a public library, otherwise you may be infringing the law" +msgstr "Não envie conteúdo protegido por direitos autorais em uma biblioteca pública porque você pode estar violando a lei" #: front/src/components/SetInstanceModal.vue:98 msgctxt "*/Instance/Message" msgid "You are now using the Funkwhale instance at %{ url }" -msgstr "" +msgstr "Você está usando a instância Funkwhale em %{ url }" #: front/src/views/content/Home.vue:17 +#, fuzzy msgctxt "Content/Library/Paragraph" -msgid "" -"You can follow libraries from other users to get access to new music. Public" -" libraries can be followed immediatly, while following a private library " -"requires approval from its owner." -msgstr "" -"Você pode seguir bibliotecas de outros usuários para conhecer novas músicas." -" Bibliotecas públicas podem ser seguidas imediatamente, enquanto seguir uma " -"biblioteca privada requer permissão do dono." - -#: front/src/components/Home.vue:128 -msgctxt "Content/Home/List item" -msgid "" -"You can invite friends and family to your instance so they can enjoy your " -"music" -msgstr "" -"Você pode convidar seus amigos e famÃlia para sua instância para que eles " -"possam curtir suas músicas" +msgid "You can 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." +msgstr "Você pode seguir bibliotecas de outros usuários para conhecer novas músicas. Bibliotecas públicas podem ser seguidas imediatamente, enquanto seguir uma biblioteca privada requer permissão do dono." #: front/src/components/moderation/FilterModal.vue:31 +#, fuzzy msgctxt "Popup/Moderation/Paragraph" -msgid "" -"You can manage and update your filters anytime from your account settings." -msgstr "" +msgid "You can manage and update your filters any time from your account settings." +msgstr "Você pode alterar e atualizar seus filtros a qualquer momento nas configurações da conta." #: front/src/views/auth/EmailConfirm.vue:24 msgctxt "Content/Signup/Paragraph" msgid "You can now use the service without limitations." msgstr "Agora você pode usar o serviço sem limitações." +#: front/src/components/auth/Settings.vue:278 +msgctxt "Content/Settings/Paragraph'" +msgid "You can permanently and irreversibly delete your account and all the associated data using the form below. You will be asked for confirmation." +msgstr "" + #: front/src/components/library/radios/Builder.vue:7 msgctxt "Content/Radio/Paragraph" -msgid "" -"You can use this interface to build your own custom radio, which will play " -"tracks according to your criteria." -msgstr "" -"Você pode usar esta interface para criar sua própria rádio personalizada, " -"que tocará faixas de sua escolha." +msgid "You can use this interface to build your own custom radio, which will play tracks according to your criteria." +msgstr "Você pode usar esta interface para criar sua própria rádio personalizada, que tocará faixas de sua escolha." #: front/src/components/auth/SubsonicTokenForm.vue:7 msgctxt "Content/Settings/Paragraph" -msgid "" -"You can use those to enjoy your playlist and music in offline mode, on your " -"smartphone or tablet, for instance." -msgstr "" -"Você pode usá-los para curtir sua lista no modo offline, em um dispositivo " -"móvel, por exemplo." +msgid "You can use those to enjoy your playlist and music in offline mode, on your smartphone or tablet, for instance." +msgstr "Você pode usá-los para curtir sua lista no modo offline, em um dispositivo móvel, por exemplo." #: front/src/components/auth/Settings.vue:202 -#, fuzzy msgctxt "Content/Applications/Paragraph" msgid "You don't have any application connected with your account." -msgstr "Você não tem nenhuma regra para esta conta." +msgstr "Sem aplicativos." #: front/src/components/auth/Settings.vue:261 -#, fuzzy msgctxt "Content/Applications/Paragraph" msgid "You don't have any configured application yet." -msgstr "Você não tem nenhuma regra para esta conta." +msgstr "Sem aplicativos configurados." #: front/src/views/admin/moderation/AccountsDetail.vue:75 msgctxt "Content/Moderation/Card.Title" msgid "You don't have any rule in place for this account." msgstr "Você não tem nenhuma regra para esta conta." -#: front/src/views/admin/moderation/DomainsDetail.vue:39 +#: front/src/views/admin/moderation/DomainsDetail.vue:67 msgctxt "Content/Moderation/Card.Title" msgid "You don't have any rule in place for this domain." msgstr "Você não tem nenhuma regra para este domÃnio." #: front/src/components/library/EditForm.vue:52 msgctxt "Content/Library/Paragraph" -msgid "" -"You don't have the permission to edit this object, but you can suggest " -"changes. Once submitted, suggestions will be reviewed before approval." -msgstr "" +msgid "You don't have the permission to edit this object, but you can suggest changes. Once submitted, suggestions will be reviewed before approval." +msgstr "Você não tem permissão para editar este objeto, mas pode sugerir alterações. Depois de enviadas, as sugestões serão revisadas antes da aprovação." -#: front/src/components/Sidebar.vue:171 +#: front/src/components/Sidebar.vue:175 msgctxt "Sidebar/Player/Title" msgid "You have a radio playing" msgstr "Você tem uma rádio tocando" @@ -5284,66 +5536,72 @@ msgstr "Você pode ter um problema de conexão." #: front/src/components/auth/Settings.vue:100 msgctxt "Popup/Settings/List item" -msgid "" -"You will be logged out from this session and have to log in with the new one" +msgid "You will be logged out from this session and have to log in with the new one" msgstr "Você sairá desta conta e precisará entrar novamente" #: front/src/components/auth/Authorize.vue:51 msgctxt "Content/Auth/Paragraph" msgid "You will be redirected to <strong>%{ url }</strong>" -msgstr "" +msgstr "Você será redirecionado para <strong>%{ url }</strong>" #: front/src/components/auth/Authorize.vue:49 msgctxt "Content/Auth/Paragraph" msgid "You will be shown a code to copy-paste in the application." -msgstr "" +msgstr "Você verá um código para copiar e colar no aplicativo." #: front/src/components/auth/Settings.vue:71 msgctxt "Content/Settings/Paragraph" -msgid "" -"You will have to update your password on your clients that use this " -"password." +msgid "You will have to update your password on your clients that use this password." msgstr "Você precisará atualizar a senha nos clientes que usam a senha atual." #: front/src/components/moderation/FilterModal.vue:20 +#, fuzzy msgctxt "Popup/Moderation/Paragraph" -msgid "" -"You will not see tracks, albums and user activity linked to this artist " -"anymore:" -msgstr "" +msgid "You will not see tracks, albums and user activity linked to this artist any more:" +msgstr "Você não verá mais faixas, álbuns e atividades de usuários vinculados a este(a) artista:" -#: front/src/components/auth/Signup.vue:13 +#: front/src/components/auth/SignupForm.vue:9 msgctxt "Content/Signup/Form/Paragraph" msgid "Your account cannot be created." +msgstr "Não foi possÃvel criar conta." + +#: front/src/components/auth/Settings.vue:281 +msgctxt "Content/Settings/Paragraph'" +msgid "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." msgstr "" #: front/src/components/auth/Settings.vue:215 -#, fuzzy msgctxt "Content/Settings/Title/Noun" msgid "Your applications" -msgstr "Suas notificações" +msgstr "Seus aplicativos" #: front/src/components/auth/Settings.vue:38 msgctxt "Content/Settings/Error message.Title" msgid "Your avatar cannot be saved" +msgstr "Não foi possÃvel salvar imagem de perfil" + +#: front/src/components/auth/Settings.vue:527 +msgctxt "*/Auth/Message" +msgid "Your deletion request was submitted, your account and content will be deleted shortly" msgstr "" #: front/src/components/library/EditForm.vue:3 msgctxt "Content/Library/Paragraph" msgid "Your edit was successfully submitted." -msgstr "" +msgstr "Sua edição foi enviada." #: front/src/components/favorites/List.vue:116 msgctxt "Head/Favorites/Title" msgid "Your Favorites" msgstr "Seus Favoritos" -#: front/src/components/Home.vue:109 -msgctxt "Content/Home/Title" -msgid "Your music, your way" -msgstr "Suas músicas, seu jeito" +#: front/src/views/Notifications.vue:5 +#, fuzzy +msgctxt "Content/Notifications/Title" +msgid "Your messages" +msgstr "Mensagens enviadas" -#: front/src/views/Notifications.vue:4 +#: front/src/views/Notifications.vue:69 msgctxt "Content/Notifications/Title" msgid "Your notifications" msgstr "Suas notificações" @@ -5351,7 +5609,7 @@ msgstr "Suas notificações" #: front/src/components/auth/Settings.vue:76 msgctxt "Content/Settings/Error message.Title" msgid "Your password cannot be changed" -msgstr "" +msgstr "Não foi possÃvel alterar senha" #: front/src/views/auth/PasswordResetConfirm.vue:29 msgctxt "Content/Signup/Card.Paragraph" @@ -5361,43 +5619,38 @@ msgstr "Sua senha foi atualizada com sucesso." #: front/src/components/auth/Settings.vue:14 #, fuzzy msgctxt "Content/Settings/Error message.Title" -msgid "Your settings can't be updateds" -msgstr "Configurações atualizadas" +msgid "Your settings can't be updated" +msgstr "Não foi possÃvel atualizar configurações" #: front/src/components/auth/Settings.vue:101 msgctxt "Popup/Settings/List item" -msgid "" -"Your Subsonic password will be changed to a new, random one, logging you out" -" from devices that used the old Subsonic password" -msgstr "" -"Sua senha do Subsonic será alterada para uma nova aleatória, e sua conta " -"sairá de dispositivos que usaram a senha antiga do Subsonic" +msgid "Your Subsonic password will be changed to a new, random one, logging you out from devices that used the old Subsonic password" +msgstr "Sua senha do Subsonic será alterada para uma nova aleatória, e sua conta sairá de dispositivos que usaram a senha antiga do Subsonic" -#: front/src/edits.js:47 +#: front/src/entities.js:126 #, fuzzy -msgctxt "*/*/*/Short, Noun" -msgid "Position" -msgstr "Paginação" +msgctxt "*/*/*/Noun" +msgid "MusicBrainz ID" +msgstr "Abrir em MusicBrainz" -#: front/src/edits.js:54 -msgctxt "Content/Track/*/Noun" -msgid "Copyright" -msgstr "Direitos autorais" +#: front/src/main.js:110 +msgctxt "*/Error/Paragraph" +msgid "You sent too many requests and have been rate limited, please try again in %{ delay }" +msgstr "" -#: front/src/components/library/AlbumBase.vue:183 -#, fuzzy +#: front/src/main.js:113 +msgctxt "*/Error/Paragraph" +msgid "You sent too many requests and have been rate limited, please try again later" +msgstr "" + +#: front/src/components/library/AlbumBase.vue:208 msgctxt "Content/Album/Header.Title" -msgid "" -"Album containing %{ count } track, by <a class=\"internal\" href=\"%{ " -"artistUrl }\">%{ artist }</a>" -msgid_plural "" -"Album containing %{ count } tracks, by <a class=\"internal\" href=\"%{ " -"artistUrl }\">%{ artist }</a>" -msgstr[0] "Ãlbum com %{ count } faixa, de %{ artist }" -msgstr[1] "Ãlbum com %{ count } faixas, de %{ artist }" - -#: front/src/components/audio/PlayButton.vue:220 -#, fuzzy +msgid "Album containing %{ count } track, by <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" +msgid_plural "Album containing %{ count } tracks, by <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" +msgstr[0] "Ãlbum com %{ count } faixa de <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" +msgstr[1] "Ãlbum com %{ count } faixas de <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" + +#: front/src/components/audio/PlayButton.vue:246 msgctxt "*/Queue/Message" msgid "%{ count } track was added to your queue" msgid_plural "%{ count } tracks were added to your queue" diff --git a/front/locales/pt_PT/LC_MESSAGES/app.po b/front/locales/pt_PT/LC_MESSAGES/app.po index ec8c886805eeecd0c9f98e359a64c56aaec49d7a..8413b9c7db4b375a4c6ed1ca9a40df4924ab2353 100644 --- a/front/locales/pt_PT/LC_MESSAGES/app.po +++ b/front/locales/pt_PT/LC_MESSAGES/app.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: front 1.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-05-16 10:35+0200\n" +"POT-Creation-Date: 2019-10-01 15:15+0200\n" "PO-Revision-Date: 2019-01-18 21:50+0000\n" "Last-Translator: troll <my_name_is_troll@protonmail.com>\n" "Language-Team: none\n" @@ -38,6 +38,53 @@ msgctxt "Content/Auth/Title" msgid "%{ app } wants to access your Funkwhale account" msgstr "Logar na sua conta Funkwhale" +#: front/src/components/About.vue:173 src/components/Home.vue:56 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } active user" +msgid_plural "%{ count } active users" +msgstr[0] "%{ count } pista" +msgstr[1] "%{ count } pistas" + +#: front/src/components/About.vue:182 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } albums" +msgid_plural "%{ count } albums" +msgstr[0] "%{ count } pista" +msgstr[1] "%{ count } pistas" + +#: front/src/components/About.vue:152 +msgctxt "*/*/*" +msgid "%{ count } allowed domains" +msgid_plural "%{ count } allowed domains" +msgstr[0] "" +msgstr[1] "" + +#: front/src/components/About.vue:179 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } artists" +msgid_plural "%{ count } artists" +msgstr[0] "%{ count } pista" +msgstr[1] "%{ count } pistas" + +#: front/src/components/About.vue:176 src/components/Home.vue:59 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } hour of music" +msgid_plural "%{ count } hours of music" +msgstr[0] "%{ count } pista" +msgstr[1] "%{ count } pistas" + +#: front/src/components/About.vue:188 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } listenings" +msgid_plural "%{ count } listenings" +msgstr[0] "%{ count } pista" +msgstr[1] "%{ count } pistas" + #: front/src/components/common/ActionTable.vue:68 #, fuzzy msgctxt "Content/*/Paragraph" @@ -46,9 +93,9 @@ msgid_plural "%{ count } on %{ total } selected" msgstr[0] "%{ count } em %{ total } selecionado" msgstr[1] "%{ count } em %{ total } selecionados" -#: front/src/components/Sidebar.vue:121 src/components/audio/album/Card.vue:52 +#: front/src/components/Sidebar.vue:125 src/components/audio/album/Card.vue:52 #: front/src/views/content/libraries/Card.vue:40 -#: src/views/content/remote/Card.vue:30 +#: src/views/content/remote/Card.vue:43 #, fuzzy msgctxt "*/*/*" msgid "%{ count } track" @@ -72,7 +119,15 @@ msgid_plural "%{ count } tracks matching combined filters" msgstr[0] "%{ count } pista corresponde aos filtros selecionados" msgstr[1] "%{ count } pistas correspondem aos filtros selecionados" -#: front/src/components/playlists/Card.vue:18 +#: front/src/components/About.vue:185 +#, fuzzy +msgctxt "Content/Home/Stat" +msgid "%{ count } tracks" +msgid_plural "%{ count } tracks" +msgstr[0] "%{ count } pista" +msgstr[1] "%{ count } pistas" + +#: front/src/components/playlists/Card.vue:28 #, fuzzy msgctxt "Content/*/Card/List item" msgid "%{ count} track" @@ -117,11 +172,10 @@ msgstr "%{ username } perfil" #: front/src/components/playlists/PlaylistModal.vue:21 msgctxt "Popup/Playlist/Paragraph" -msgid "" -"<strong>%{ track }</strong> is already in <strong>%{ playlist }</strong>." +msgid "<strong>%{ track }</strong> is already in <strong>%{ playlist }</strong>." msgstr "" -#: front/src/components/audio/artist/Card.vue:41 +#: front/src/components/audio/artist/Card.vue:11 #, fuzzy msgctxt "Content/Artist/Card" msgid "1 album" @@ -137,24 +191,44 @@ msgid_plural "%{ count } favorites" msgstr[0] "1 preferida" msgstr[1] "%{ count } preferidas" -#: front/src/components/Home.vue:64 -msgctxt "Content/Home/Title" -msgid "A clean library" -msgstr "Biblioteca limpa" +#: front/src/components/audio/artist/Card.vue:15 +#, fuzzy +msgctxt "Content/Artist/Card" +msgid "1 track" +msgid_plural "%{ count } tracks" +msgstr[0] "Adicionar música" +msgstr[1] "Adicionar música" + +#: front/src/views/Notifications.vue:21 src/views/Notifications.vue:55 +msgctxt "*/*/*" +msgid "30 days" +msgstr "" + +#: front/src/views/Notifications.vue:22 src/views/Notifications.vue:56 +msgctxt "*/*/*" +msgid "60 days" +msgstr "" + +#: front/src/views/Notifications.vue:23 src/views/Notifications.vue:57 +msgctxt "*/*/*" +msgid "90 days" +msgstr "" #: front/src/components/library/FileUpload.vue:264 +#, fuzzy msgctxt "Content/Library/Help text" -msgid "A network error occured while uploading this file" +msgid "A network error occurred while uploading this file" msgstr "Ocorreu um erro durante o upload deste ficheiro" -#: front/src/components/library/EditForm.vue:145 +#: front/src/components/library/EditForm.vue:161 msgctxt "*/*/Placeholder" msgid "A short summary describing your changes." msgstr "Ocorreu um erro ao salvar suas mudanças" #: front/src/components/About.vue:5 -msgctxt "Content/About/Title/Short, Noun" -msgid "About %{ instance }" +#, fuzzy +msgctxt "Content/Home/Header" +msgid "About %{ podName }" msgstr "Sobre %{ instance }" #: front/src/components/Footer.vue:6 @@ -162,7 +236,7 @@ msgctxt "Footer/About/Title" msgid "About %{instanceName}" msgstr "Sobre %{instanceName}" -#: front/src/components/Footer.vue:45 +#: front/src/components/Footer.vue:53 src/components/Home.vue:85 msgctxt "Footer/*/Title/Short" msgid "About Funkwhale" msgstr "Sobre Funkwhale" @@ -172,9 +246,16 @@ msgctxt "Footer/About/List item.Link" msgid "About page" msgstr "Sobre a página" -#: front/src/components/About.vue:8 src/components/About.vue:67 -msgctxt "Content/About/Title" -msgid "About this instance" +#: front/src/components/Home.vue:19 +#, fuzzy +msgctxt "Content/Home/Header" +msgid "About this Funkwhale pod" +msgstr "Sobre Funkwhale" + +#: front/src/components/About.vue:21 src/components/About.vue:51 +#, fuzzy +msgctxt "Content/About/Header" +msgid "About this pod" msgstr "Sobre esta instância" #: front/src/views/content/libraries/Detail.vue:48 @@ -187,96 +268,87 @@ msgctxt "Content/Library/Table/Short" msgid "Accepted" msgstr "Aceitado" -#: front/src/components/auth/SubsonicTokenForm.vue:110 +#: front/src/components/auth/SubsonicTokenForm.vue:117 msgctxt "Content/Settings/Message" msgid "Access disabled" msgstr "Acesso desativado" -#: front/src/components/mixins/Translations.vue:73 -#: front/src/components/mixins/Translations.vue:74 +#: front/src/components/mixins/Translations.vue:85 +#: front/src/components/mixins/Translations.vue:86 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to audio files, libraries, artists, albums and tracks" msgstr "" -#: front/src/components/mixins/Translations.vue:97 -#: front/src/components/mixins/Translations.vue:98 +#: front/src/components/mixins/Translations.vue:109 +#: front/src/components/mixins/Translations.vue:110 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to content filters" msgstr "Selecione um filtro" -#: front/src/components/mixins/Translations.vue:105 -#: front/src/components/mixins/Translations.vue:106 +#: front/src/components/mixins/Translations.vue:117 +#: front/src/components/mixins/Translations.vue:118 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to edits" msgstr "Acesso desativado" -#: front/src/components/mixins/Translations.vue:69 -#: front/src/components/mixins/Translations.vue:70 +#: front/src/components/mixins/Translations.vue:81 +#: front/src/components/mixins/Translations.vue:82 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to email, username, and profile information" msgstr "" -#: front/src/components/mixins/Translations.vue:77 -#: front/src/components/mixins/Translations.vue:78 +#: front/src/components/mixins/Translations.vue:89 +#: front/src/components/mixins/Translations.vue:90 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to favorites" msgstr "Adicionar aos favoritos" -#: front/src/components/mixins/Translations.vue:85 -#: front/src/components/mixins/Translations.vue:86 +#: front/src/components/mixins/Translations.vue:97 +#: front/src/components/mixins/Translations.vue:98 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to follows" msgstr "" -#: front/src/components/mixins/Translations.vue:81 -#: front/src/components/mixins/Translations.vue:82 +#: front/src/components/mixins/Translations.vue:93 +#: front/src/components/mixins/Translations.vue:94 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to listening history" msgstr "" -#: front/src/components/mixins/Translations.vue:101 -#: front/src/components/mixins/Translations.vue:102 +#: front/src/components/mixins/Translations.vue:113 +#: front/src/components/mixins/Translations.vue:114 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to notifications" msgstr "Suas notificações" -#: front/src/components/mixins/Translations.vue:89 -#: front/src/components/mixins/Translations.vue:90 +#: front/src/components/mixins/Translations.vue:101 +#: front/src/components/mixins/Translations.vue:102 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to playlists" msgstr "Adicionar à Playlist…" -#: front/src/components/mixins/Translations.vue:93 -#: front/src/components/mixins/Translations.vue:94 +#: front/src/components/mixins/Translations.vue:105 +#: front/src/components/mixins/Translations.vue:106 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to radios" msgstr "Acesso desativado" -#: front/src/components/Home.vue:101 -msgctxt "Content/Home/List item" -msgid "" -"Access your music from a clean interface that focuses on what really matters" -msgstr "" -"Aceda à sua música a partir de uma interface limpa que se concentra no que " -"realmente importa" - #: front/src/components/manage/library/UploadsTable.vue:67 -#: front/src/components/mixins/Translations.vue:45 +#: front/src/components/mixins/Translations.vue:55 #: front/src/views/admin/library/UploadDetail.vue:175 -#: front/src/components/mixins/Translations.vue:46 +#: front/src/components/mixins/Translations.vue:56 msgctxt "Content/*/*/Noun" msgid "Accessed date" msgstr "Acesso desativado" -#: front/src/views/admin/library/LibraryDetail.vue:104 -#: front/src/views/admin/library/UploadDetail.vue:111 -msgctxt "*/*/*/Noun" -msgid "Account" -msgstr "Contas" - #: front/src/components/manage/library/LibrariesTable.vue:49 #: front/src/components/manage/library/UploadsTable.vue:61 -msgctxt "*/*/*" +#: front/src/components/manage/moderation/ReportCard.vue:156 +#: front/src/components/mixins/Report.vue:13 +#: front/src/views/admin/library/LibraryDetail.vue:113 +#: front/src/views/admin/library/UploadDetail.vue:111 +#: front/src/components/mixins/Report.vue:14 +msgctxt "*/*/*/Noun" msgid "Account" msgstr "Contas" @@ -290,7 +362,7 @@ msgctxt "Content/Settings/Title" msgid "Account settings" msgstr "Configurações da conta" -#: front/src/components/auth/Settings.vue:479 +#: front/src/components/auth/Settings.vue:544 msgctxt "Head/Settings/Title" msgid "Account Settings" msgstr "Configurações da Conta" @@ -307,7 +379,7 @@ msgstr "Email da conta" #: front/src/views/admin/moderation/AccountsList.vue:3 #: front/src/views/admin/moderation/AccountsList.vue:24 -#: front/src/views/admin/moderation/Base.vue:8 +#: front/src/views/admin/moderation/Base.vue:11 msgctxt "*/Moderation/Title" msgid "Accounts" msgstr "Contas" @@ -321,29 +393,30 @@ msgstr "Açao" #, fuzzy msgctxt "Content/*/Paragraph" msgid "Action %{ action } was launched successfully on %{ count } element" -msgid_plural "" -"Action %{ action } was launched successfully on %{ count } elements" +msgid_plural "Action %{ action } was launched successfully on %{ count } elements" msgstr[0] "A ação %{ action } foi lançada com sucesso em %{ count } item" msgstr[1] "A ação %{ action } foi lançada com sucesso em %{ count } itens" #: front/src/components/common/ActionTable.vue:22 #: front/src/components/library/radios/Builder.vue:65 +#: front/src/components/manage/moderation/ReportCard.vue:210 msgctxt "Content/*/*/Noun" msgid "Actions" msgstr "Ações" -#: front/src/components/manage/users/UsersTable.vue:53 +#: front/src/components/manage/users/UsersTable.vue:54 msgctxt "Content/Admin/Table" msgid "Active" msgstr "Ativo" -#: front/src/views/admin/library/AlbumDetail.vue:134 -#: front/src/views/admin/library/ArtistDetail.vue:123 -#: front/src/views/admin/library/LibraryDetail.vue:138 -#: front/src/views/admin/library/TrackDetail.vue:186 +#: front/src/views/admin/library/AlbumDetail.vue:140 +#: front/src/views/admin/library/ArtistDetail.vue:128 +#: front/src/views/admin/library/LibraryDetail.vue:147 +#: front/src/views/admin/library/TagDetail.vue:83 +#: front/src/views/admin/library/TrackDetail.vue:192 #: front/src/views/admin/library/UploadDetail.vue:160 -#: front/src/views/admin/moderation/AccountsDetail.vue:220 -#: front/src/views/admin/moderation/DomainsDetail.vue:136 +#: front/src/views/admin/moderation/AccountsDetail.vue:221 +#: front/src/views/admin/moderation/DomainsDetail.vue:173 msgctxt "Content/Moderation/Title" msgid "Activity" msgstr "Atividade" @@ -354,7 +427,7 @@ msgctxt "Content/Settings/Dropdown.Label/Noun" msgid "Activity visibility" msgstr "Visibilidade da atividade" -#: front/src/views/admin/moderation/DomainsList.vue:18 +#: front/src/views/admin/moderation/DomainsList.vue:22 msgctxt "Content/Moderation/Button/Verb" msgid "Add" msgstr "Adicionar" @@ -400,7 +473,21 @@ msgctxt "Content/Radio/Paragraph" msgid "Add filters to customize your radio" msgstr "Adicione filtros para personalizar seu rádio" -#: front/src/components/audio/PlayButton.vue:75 +#: front/src/components/manage/moderation/NoteForm.vue:12 +#, fuzzy +msgctxt "Content/Moderation/Button.Label/Verb" +msgid "Add note" +msgstr "Adicionar conteúdo" + +#: front/src/components/manage/moderation/DomainsTable.vue:191 +#: front/src/views/admin/moderation/DomainsDetail.vue:46 +#: front/src/views/admin/moderation/DomainsList.vue:18 +#, fuzzy +msgctxt "Content/Moderation/Action/Verb" +msgid "Add to allow-list" +msgstr "Adicionar à Playlist…" + +#: front/src/components/audio/PlayButton.vue:91 msgctxt "*/Queue/Dropdown/Button/Title" msgid "Add to current queue" msgstr "Adicionar à fila atual" @@ -432,7 +519,7 @@ msgctxt "Popup/Playlist/Table.Button.Label/Verb" msgid "Add track" msgstr "Adicionar música" -#: front/src/components/manage/users/UsersTable.vue:69 +#: front/src/components/manage/users/UsersTable.vue:70 msgctxt "Content/Admin/Table.User role" msgid "Admin" msgstr "Admin" @@ -442,49 +529,49 @@ msgctxt "Sidebar/Admin/Title/Noun" msgid "Administration" msgstr "Administração" -#: front/src/views/admin/library/TrackDetail.vue:107 -msgctxt "*/*/*/Noun" -msgid "Album" -msgstr "Ãlbum" - -#: front/src/components/audio/SearchBar.vue:26 +#: front/src/components/audio/SearchBar.vue:33 #: src/components/audio/track/Table.vue:9 -#: front/src/components/library/AlbumBase.vue:152 -#: front/src/components/library/ArtistBase.vue:194 +#: front/src/components/library/AlbumBase.vue:170 +#: front/src/components/library/ArtistBase.vue:212 #: front/src/components/manage/library/TracksTable.vue:40 #: front/src/components/metadata/Search.vue:134 +#: src/components/mixins/Report.vue:41 +#: front/src/views/admin/library/TrackDetail.vue:113 #: front/src/views/content/libraries/FilesTable.vue:57 +#: front/src/components/mixins/Report.vue:42 msgctxt "*/*/*" msgid "Album" msgstr "Ãlbum" -#: front/src/views/admin/library/TrackDetail.vue:128 +#: front/src/views/admin/library/TrackDetail.vue:134 msgctxt "*/*/*/Noun" msgid "Album artist" msgstr "Ãlbuns deste artista" -#: front/src/views/admin/library/AlbumDetail.vue:92 +#: front/src/views/admin/library/AlbumDetail.vue:98 msgctxt "Content/Moderation/Title" msgid "Album data" msgstr "Nome do álbum" -#: front/src/components/mixins/Translations.vue:51 -#: front/src/components/mixins/Translations.vue:52 +#: front/src/components/mixins/Translations.vue:61 +#: front/src/components/mixins/Translations.vue:62 msgctxt "Content/*/Dropdown/Noun" msgid "Album name" msgstr "Nome do álbum" #: front/src/components/audio/Search.vue:19 -#: src/components/instance/Stats.vue:48 -#: front/src/components/library/Albums.vue:120 -#: src/components/library/Library.vue:7 +#: src/components/library/Albums.vue:129 +#: front/src/components/library/Library.vue:7 +#: src/components/library/TagDetail.vue:28 #: front/src/components/manage/library/ArtistsTable.vue:41 +#: front/src/components/manage/library/TagsTable.vue:43 #: front/src/views/admin/library/AlbumsList.vue:24 -#: front/src/views/admin/library/ArtistDetail.vue:241 +#: front/src/views/admin/library/ArtistDetail.vue:256 #: front/src/views/admin/library/Base.vue:11 -#: front/src/views/admin/library/LibraryDetail.vue:219 -#: front/src/views/admin/moderation/AccountsDetail.vue:354 -#: front/src/views/admin/moderation/DomainsDetail.vue:264 +#: front/src/views/admin/library/LibraryDetail.vue:238 +#: front/src/views/admin/library/TagDetail.vue:133 +#: front/src/views/admin/moderation/AccountsDetail.vue:366 +#: front/src/views/admin/moderation/DomainsDetail.vue:301 msgctxt "*/*/*" msgid "Albums" msgstr "Ãlbuns" @@ -498,7 +585,10 @@ msgstr "Ãlbuns deste artista" #: front/src/components/manage/library/LibrariesTable.vue:13 #: front/src/components/manage/library/UploadsTable.vue:13 #: front/src/components/manage/library/UploadsTable.vue:22 +#: front/src/components/manage/moderation/DomainsTable.vue:11 #: front/src/components/manage/users/InvitationsTable.vue:19 +#: front/src/components/moderation/ReportCategoryDropdown.vue:32 +#: front/src/views/admin/moderation/ReportsList.vue:17 #: front/src/views/content/libraries/FilesTable.vue:13 msgctxt "Content/*/Dropdown" msgid "All" @@ -517,40 +607,53 @@ msgctxt "Head/Authorize/Title" msgid "Allow application" msgstr "" +#: front/src/components/About.vue:136 +msgctxt "*/*/*" +msgid "Allow-list" +msgstr "" + +#: front/src/components/About.vue:149 +#, fuzzy +msgctxt "*/*/*" +msgid "Allowed domains" +msgstr "Adicionar um domÃnio" + #: front/src/components/library/ImportStatusModal.vue:17 msgctxt "Popup/Import/Message" -msgid "" -"An error occured during upload processing. You will find more information " -"below." +msgid "An error occurred during upload processing. You will find more information below." msgstr "" #: front/src/components/playlists/Editor.vue:13 +#, fuzzy msgctxt "Content/Playlist/Error message.Title" -msgid "An error occured while saving your changes" +msgid "An error occurred while saving your changes" msgstr "Ocorreu um erro ao salvar suas mudanças" #: front/src/components/federation/FetchButton.vue:21 +#, fuzzy msgctxt "Popup/*/Message.Content" -msgid "An error occured while trying to refresh data:" +msgid "An error occurred while trying to refresh data:" msgstr "Ocorreu um erro ao salvar suas mudanças" #: front/src/components/federation/FetchButton.vue:41 +#, fuzzy msgctxt "*/*/Error" -msgid "An HTTP error occured while contacting the remote server" +msgid "An HTTP error occurred while contacting the remote server" msgstr "Ocorreu um erro ao salvar suas mudanças" -#: front/src/components/auth/Login.vue:10 -msgctxt "Content/Login/Error message/List item" -msgid "" -"An unknown error happend, this can mean the server is down or cannot be " -"reached" -msgstr "" -"Um erro desconhecido aconteceu, isso pode significar que o servidor está " -"inoperante ou não pode ser alcançado" - #: front/src/components/library/ImportStatusModal.vue:145 msgctxt "Popup/Import/Error.Label" -msgid "An unkwown error occured" +msgid "An unknown error occurred" +msgstr "" + +#: front/src/components/About.vue:123 +msgctxt "*/*/*" +msgid "Anonymous access" +msgstr "" + +#: front/src/components/moderation/ReportModal.vue:54 +msgctxt "Popup/Moderation/Error message" +msgid "Anonymous reports are disabled, please sign-in to submit a report." msgstr "" #: front/src/components/auth/Settings.vue:175 @@ -571,9 +674,7 @@ msgstr "" #: front/src/components/auth/ApplicationEdit.vue:16 msgctxt "Content/Application/Paragraph/" -msgid "" -"Application ID and secret are really sensitive values and must be treated " -"like passwords. Do not share those with anyone else." +msgid "Application ID and secret are really sensitive values and must be treated like passwords. Do not share those with anyone else." msgstr "" #: front/src/components/auth/ApplicationEdit.vue:25 @@ -603,29 +704,27 @@ msgctxt "Content/Login/Title" msgid "Are you sure you want to log out?" msgstr "Tem certeza que deseja sair?" +#: front/src/components/audio/SearchBar.vue:32 +#: src/components/audio/track/Table.vue:8 #: front/src/components/manage/library/AlbumsTable.vue:40 #: front/src/components/manage/library/TracksTable.vue:41 -msgctxt "*/*/*" -msgid "Artist" -msgstr "Artista" - -#: front/src/components/audio/SearchBar.vue:25 -#: src/components/audio/track/Table.vue:8 #: front/src/components/metadata/Search.vue:130 -#: front/src/views/admin/library/AlbumDetail.vue:108 -#: front/src/views/admin/library/TrackDetail.vue:118 -#: front/src/views/content/libraries/FilesTable.vue:56 +#: src/components/mixins/Report.vue:55 +#: front/src/views/admin/library/AlbumDetail.vue:114 +#: front/src/views/admin/library/TrackDetail.vue:124 +#: front/src/views/content/libraries/FilesTable.vue:56 src/entities.js:12 +#: front/src/components/mixins/Report.vue:56 msgctxt "*/*/*/Noun" msgid "Artist" msgstr "Artista" -#: front/src/views/admin/library/ArtistDetail.vue:91 +#: front/src/views/admin/library/ArtistDetail.vue:96 msgctxt "Content/Moderation/Title" msgid "Artist data" msgstr "Nome do artista" -#: front/src/components/mixins/Translations.vue:52 -#: front/src/components/mixins/Translations.vue:53 +#: front/src/components/mixins/Translations.vue:62 +#: front/src/components/mixins/Translations.vue:63 msgctxt "Content/*/Dropdown/Noun" msgid "Artist name" msgstr "Nome do artista" @@ -635,36 +734,36 @@ msgctxt "*/Search/Input.Placeholder" msgid "Artist, album, track…" msgstr "Artista, álbum, música…" +#: front/src/components/audio/Search.vue:10 +#: src/components/library/Artists.vue:117 +#: front/src/components/library/Library.vue:10 +#: front/src/components/library/TagDetail.vue:19 +#: front/src/components/manage/library/TagsTable.vue:42 #: front/src/views/admin/library/ArtistsList.vue:24 #: front/src/views/admin/library/Base.vue:8 -#: front/src/views/admin/library/LibraryDetail.vue:209 -msgctxt "*/*/*" -msgid "Artists" -msgstr "Artistas" - -#: front/src/components/audio/Search.vue:10 -#: src/components/instance/Stats.vue:42 -#: front/src/components/library/Artists.vue:117 -#: src/components/library/Library.vue:10 -#: front/src/views/admin/moderation/AccountsDetail.vue:346 -#: front/src/views/admin/moderation/DomainsDetail.vue:254 +#: front/src/views/admin/library/LibraryDetail.vue:228 +#: front/src/views/admin/library/TagDetail.vue:123 +#: front/src/views/admin/moderation/AccountsDetail.vue:358 +#: front/src/views/admin/moderation/DomainsDetail.vue:291 msgctxt "*/*/*/Noun" msgid "Artists" msgstr "Artistas" #: front/src/components/favorites/List.vue:34 -#: src/components/library/Albums.vue:25 -#: front/src/components/library/Artists.vue:25 +#: src/components/library/Albums.vue:29 +#: front/src/components/library/Artists.vue:29 #: src/components/library/Radios.vue:44 #: front/src/components/manage/library/AlbumsTable.vue:21 #: front/src/components/manage/library/ArtistsTable.vue:21 #: front/src/components/manage/library/EditsCardList.vue:39 #: front/src/components/manage/library/LibrariesTable.vue:30 +#: front/src/components/manage/library/TagsTable.vue:21 #: front/src/components/manage/library/TracksTable.vue:21 #: front/src/components/manage/library/UploadsTable.vue:40 #: front/src/components/manage/moderation/AccountsTable.vue:21 -#: front/src/components/manage/moderation/DomainsTable.vue:19 +#: front/src/components/manage/moderation/DomainsTable.vue:27 #: front/src/components/manage/users/UsersTable.vue:19 +#: front/src/views/admin/moderation/ReportsList.vue:44 #: front/src/views/content/libraries/FilesTable.vue:31 #: front/src/views/playlists/List.vue:27 msgctxt "Content/Search/Dropdown" @@ -676,18 +775,24 @@ msgctxt "Content/Signup/Button.Label/Verb" msgid "Ask for a password reset" msgstr "Peça uma redefinição de senha" -#: front/src/views/admin/library/AlbumDetail.vue:198 -#: front/src/views/admin/library/ArtistDetail.vue:187 -#: front/src/views/admin/library/LibraryDetail.vue:176 -#: front/src/views/admin/library/TrackDetail.vue:250 +#: front/src/components/manage/moderation/ReportCard.vue:72 +msgctxt "Content/Moderation/*" +msgid "Assigned to" +msgstr "" + +#: front/src/views/admin/library/AlbumDetail.vue:214 +#: front/src/views/admin/library/ArtistDetail.vue:202 +#: front/src/views/admin/library/LibraryDetail.vue:195 +#: front/src/views/admin/library/TagDetail.vue:113 +#: front/src/views/admin/library/TrackDetail.vue:266 #: front/src/views/admin/library/UploadDetail.vue:191 -#: front/src/views/admin/moderation/AccountsDetail.vue:274 -#: front/src/views/admin/moderation/DomainsDetail.vue:202 +#: front/src/views/admin/moderation/AccountsDetail.vue:285 +#: front/src/views/admin/moderation/DomainsDetail.vue:239 msgctxt "Content/Moderation/Title" msgid "Audio content" msgstr "Conteúdo áudio" -#: front/src/components/ShortcutsModal.vue:55 +#: front/src/components/ShortcutsModal.vue:92 msgctxt "Popup/Keyboard shortcuts/Title" msgid "Audio player shortcuts" msgstr "Atalhos do leitor de áudio" @@ -730,9 +835,9 @@ msgid "Back to settings" msgstr "Atualizar configurações" #: front/src/components/library/TrackDetail.vue:48 -#: front/src/components/mixins/Translations.vue:55 +#: front/src/components/mixins/Translations.vue:67 #: front/src/views/admin/library/UploadDetail.vue:227 -#: front/src/components/mixins/Translations.vue:56 +#: front/src/components/mixins/Translations.vue:68 msgctxt "Content/Track/*/Noun" msgid "Bitrate" msgstr "Bitrate" @@ -745,14 +850,8 @@ msgstr "Bloquear tudo" #: front/src/components/manage/moderation/InstancePolicyForm.vue:112 msgctxt "Content/Moderation/Help text" -msgid "" -"Block everything from this account or domain. This will prevent any " -"interaction with the entity, and purge related content (uploads, libraries, " -"follows, etc.)" -msgstr "" -"Bloquear tudo a partir desta conta ou domÃnio. Isso evitará qualquer " -"interação com a entidade e eliminará conteúdo relacionado (uploads, " -"bibliotecas, segue, etc.)" +msgid "Block everything from this account or domain. This will prevent any interaction with the entity, and purge related content (uploads, libraries, follows, etc.)" +msgstr "Bloquear tudo a partir desta conta ou domÃnio. Isso evitará qualquer interação com a entidade e eliminará conteúdo relacionado (uploads, bibliotecas, segue, etc.)" #: front/src/components/Sidebar.vue:18 src/components/library/Library.vue:4 msgctxt "*/Library/*/Verb" @@ -764,6 +863,12 @@ msgctxt "Sidebar/Library/List item.Link/Verb" msgid "Browse library" msgstr "Navegar pela biblioteca" +#: front/src/components/Home.vue:132 +#, fuzzy +msgctxt "Content/Home/Link" +msgid "Browse public content" +msgstr "Atualizar o conteúdo da tabela" + #: front/src/components/library/Albums.vue:4 msgctxt "Content/Album/Title" msgid "Browsing albums" @@ -794,39 +899,40 @@ msgctxt "Content/Album/Card" msgid "By %{ artist }" msgstr "Por %{ artist }" -#: front/src/views/content/remote/Card.vue:112 +#: front/src/views/content/remote/Card.vue:125 msgctxt "Popup/Library/Paragraph" msgid "By unfollowing this library, you loose access to its content." -msgstr "" -"Ao deixar de seguir esta biblioteca, você perderá o acesso ao seu conteúdo." +msgstr "Ao deixar de seguir esta biblioteca, você perderá o acesso ao seu conteúdo." -#: front/src/views/admin/library/AlbumDetail.vue:214 -#: front/src/views/admin/library/ArtistDetail.vue:203 -#: front/src/views/admin/library/LibraryDetail.vue:192 -#: front/src/views/admin/library/TrackDetail.vue:266 +#: front/src/views/admin/library/AlbumDetail.vue:230 +#: front/src/views/admin/library/ArtistDetail.vue:218 +#: front/src/views/admin/library/LibraryDetail.vue:211 +#: front/src/views/admin/library/TrackDetail.vue:282 #: front/src/views/admin/library/UploadDetail.vue:208 -#: front/src/views/admin/moderation/AccountsDetail.vue:290 -#: front/src/views/admin/moderation/DomainsDetail.vue:217 +#: front/src/views/admin/moderation/AccountsDetail.vue:301 +#: front/src/views/admin/moderation/DomainsDetail.vue:254 msgctxt "Content/Moderation/Table.Label/Noun" msgid "Cached size" msgstr "Tamanho em cache" #: front/src/components/SetInstanceModal.vue:37 #: front/src/components/common/DangerousButton.vue:17 -#: front/src/components/library/AlbumBase.vue:36 -#: front/src/components/library/ArtistBase.vue:47 -#: front/src/components/library/EditForm.vue:95 -#: front/src/components/library/TrackBase.vue:55 +#: front/src/components/library/AlbumBase.vue:37 +#: front/src/components/library/ArtistBase.vue:48 +#: front/src/components/library/EditForm.vue:107 +#: front/src/components/library/TrackBase.vue:53 #: front/src/components/library/radios/Filter.vue:53 #: front/src/components/manage/moderation/InstancePolicyForm.vue:54 #: front/src/components/moderation/FilterModal.vue:39 +#: front/src/components/moderation/ReportModal.vue:59 #: front/src/components/playlists/PlaylistModal.vue:26 #: front/src/components/playlists/PlaylistModal.vue:77 +#: front/src/views/playlists/Detail.vue:62 msgctxt "*/*/Button.Label/Verb" msgid "Cancel" msgstr "Cancelar" -#: front/src/views/content/remote/Card.vue:97 +#: front/src/views/content/remote/Card.vue:110 #, fuzzy msgctxt "Content/Library/Card.Paragraph" msgid "Cancel follow request" @@ -840,8 +946,15 @@ msgstr "Candidatos" #: front/src/components/library/FileUpload.vue:261 msgctxt "Content/Library/Help text" msgid "Cannot upload this file, ensure it is not too big" +msgstr "Não é possÃvel carregar este arquivo, assegure-se de que não é muito grande" + +#: front/src/components/manage/moderation/ReportCard.vue:30 +#: front/src/components/mixins/Translations.vue:42 +#: front/src/components/moderation/ReportCategoryDropdown.vue:2 +#: front/src/components/mixins/Translations.vue:43 +msgctxt "*/*/*" +msgid "Category" msgstr "" -"Não é possÃvel carregar este arquivo, assegure-se de que não é muito grande" #: front/src/components/Footer.vue:21 msgctxt "Footer/Settings/Dropdown.Label/Short, Verb" @@ -858,6 +971,11 @@ msgctxt "Content/Settings/Button.Label" msgid "Change password" msgstr "Mudar senha" +#: front/src/components/Footer.vue:37 +msgctxt "Footer/Settings/Dropdown.Label/Short, Verb" +msgid "Change theme" +msgstr "" + #: front/src/views/auth/PasswordResetConfirm.vue:62 msgctxt "*/Signup/Title" msgid "Change your password" @@ -875,28 +993,22 @@ msgstr "Modificações sincronizadas com o servidor" #: front/src/components/auth/Settings.vue:71 msgctxt "Content/Settings/Paragraph'" -msgid "" -"Changing your password will also change your Subsonic API password if you " -"have requested one." -msgstr "" -"Mudar sua senha também muda sua senha da API Subsonic se você tiver " -"solicitado uma." +msgid "Changing your password will also change your Subsonic API password if you have requested one." +msgstr "Mudar sua senha também muda sua senha da API Subsonic se você tiver solicitado uma." #: front/src/components/auth/Settings.vue:98 msgctxt "Popup/Settings/Paragraph" msgid "Changing your password will have the following consequences:" msgstr "Alterar sua senha terá as seguintes consequências" -#: front/src/components/Footer.vue:40 +#: front/src/components/Footer.vue:48 msgctxt "Footer/*/List item.Link" msgid "Chat room" msgstr "Sala de bate-papo" #: front/src/components/auth/ApplicationForm.vue:24 msgctxt "Content/Applications/Paragraph/" -msgid "" -"Checking the parent \"Read\" or \"Write\" scopes implies access to all the " -"corresponding children scopes." +msgid "Checking the parent \"Read\" or \"Write\" scopes implies access to all the corresponding children scopes." msgstr "" #: front/src/components/SetInstanceModal.vue:2 @@ -904,12 +1016,9 @@ msgctxt "Popup/Instance/Title" msgid "Choose your instance" msgstr "Escolha sua instância" -#: front/src/components/manage/users/InvitationForm.vue:37 -msgctxt "Content/Admin/Button.Label/Verb" -msgid "Clear" -msgstr "Claro" - #: front/src/components/library/EditForm.vue:75 +#: front/src/components/library/EditForm.vue:88 +#: front/src/components/manage/users/InvitationForm.vue:37 msgctxt "Content/Library/Button.Label" msgid "Clear" msgstr "Claro" @@ -920,46 +1029,47 @@ msgctxt "*/Playlist/Button.Label/Verb" msgid "Clear playlist" msgstr "Limpar playlist" -#: front/src/components/audio/Player.vue:642 +#: front/src/components/ShortcutsModal.vue:144 +#, fuzzy +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Clear queue" +msgstr "Limpar sua fila" + +#: front/src/components/audio/Player.vue:668 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Clear your queue" msgstr "Limpar sua fila" -#: front/src/components/Home.vue:44 -msgctxt "Content/Home/List item/Verb" -msgid "Click once, listen for hours using built-in radios" -msgstr "Clique uma vez, ouça por horas usando rádios" - #: front/src/components/mixins/Translations.vue:21 #: front/src/components/mixins/Translations.vue:22 msgctxt "Content/Library/Link.Title" -msgid "" -"Click to display more information about the import process for this upload" +msgid "Click to display more information about the import process for this upload" msgstr "" #: front/src/components/library/FileUpload.vue:82 msgctxt "Content/Library/Paragraph/Call to action" msgid "Click to select files to upload or drag and drop files or directories" -msgstr "" -"Clique para selecionar arquivos para carregar ou arrastar e soltar arquivos " -"ou diretórios" +msgstr "Clique para selecionar arquivos para carregar ou arrastar e soltar arquivos ou diretórios" +#: front/src/components/ShortcutsModal.vue:38 #: front/src/components/federation/FetchButton.vue:85 #: front/src/components/library/ImportStatusModal.vue:79 +#: front/src/components/manage/moderation/InstancePolicyModal.vue:34 msgctxt "*/*/Button.Label/Verb" msgid "Close" msgstr "Fechar" -#: front/src/components/ShortcutsModal.vue:20 -msgctxt "Popup/Keyboard shortcuts/Button.Label/Verb" -msgid "Close" -msgstr "Fechar" - #: front/src/components/federation/FetchButton.vue:88 msgctxt "*/*/Button.Label/Verb" msgid "Close and reload page" msgstr "" +#: front/src/components/About.vue:94 +#, fuzzy +msgctxt "*/*/*/State of registrations" +msgid "Closed" +msgstr "Fechar" + #: front/src/components/manage/users/InvitationForm.vue:26 #: front/src/components/manage/users/InvitationsTable.vue:42 msgctxt "Content/Admin/Table.Label/Noun" @@ -967,8 +1077,9 @@ msgid "Code" msgstr "Código" #: front/src/components/audio/album/Card.vue:41 -#: front/src/components/audio/artist/Card.vue:33 -msgctxt "Content/*/Card.Link/Verb" +#: front/src/components/common/CollapseLink.vue:3 +#, fuzzy +msgctxt "*/*/Button,Label" msgid "Collapse" msgstr "Colapso" @@ -992,42 +1103,47 @@ msgctxt "Content/Signup/Form.Label" msgid "Confirmation code" msgstr "Código de confirmação" +#: front/src/components/About.vue:67 src/components/Home.vue:65 +msgctxt "Content/Home/Header/Name" +msgid "Contact" +msgstr "" + #: front/src/components/moderation/FilterModal.vue:90 msgctxt "*/Moderation/Message" msgid "Content filter successfully added" msgstr "" -#: front/src/components/mixins/Translations.vue:96 -#: front/src/components/mixins/Translations.vue:97 -msgctxt "Content/OAuth Scopes/Label" -msgid "Content filters" -msgstr "Selecione um filtro" - #: front/src/components/auth/Settings.vue:116 +#: front/src/components/mixins/Translations.vue:108 +#: front/src/components/mixins/Translations.vue:109 msgctxt "Content/Settings/Title/Noun" msgid "Content filters" msgstr "Selecione um filtro" #: front/src/components/auth/Settings.vue:119 msgctxt "Content/Settings/Paragraph" -msgid "" -"Content filters help you hide content you don't want to see on the service." +msgid "Content filters help you hide content you don't want to see on the service." msgstr "" #: front/src/components/common/ActionTable.vue:8 msgctxt "Content/*/Button.Help text.Paragraph" msgid "Content have been updated, click refresh to see up-to-date content" -msgstr "" -"O conteúdo foi atualizado, clique em atualizar para ver o conteúdo " -"atualizado" +msgstr "O conteúdo foi atualizado, clique em atualizar para ver o conteúdo atualizado" -#: front/src/components/Footer.vue:48 +#: front/src/components/About.vue:46 +#, fuzzy +msgctxt "Content/About/Header" +msgid "Contents" +msgstr "Selecione um filtro" + +#: front/src/components/Footer.vue:56 msgctxt "Footer/*/List item.Link" msgid "Contribute" msgstr "Contribuir" -#: front/src/components/audio/EmbedWizard.vue:19 +#: front/src/components/audio/EmbedWizard.vue:29 #: front/src/components/common/CopyInput.vue:8 +#: front/src/components/forms/PasswordInput.vue:43 msgctxt "*/*/Button.Label/Short, Verb" msgid "Copy" msgstr "Cópia" @@ -1042,14 +1158,14 @@ msgctxt "Content/Auth/Paragraph" msgid "Copy-paste the following code in the application:" msgstr "" -#: front/src/components/audio/EmbedWizard.vue:21 +#: front/src/components/audio/EmbedWizard.vue:31 msgctxt "Popup/Embed/Paragraph" msgid "Copy/paste this code in your website HTML" msgstr "Copie/colar este código no seu website HTML" #: front/src/components/library/TrackDetail.vue:10 -#: front/src/views/admin/library/TrackDetail.vue:153 -msgctxt "Content/Track/Table.Label/Noun" +#: front/src/views/admin/library/TrackDetail.vue:159 src/edits.js:77 +msgctxt "Content/Track/*/Noun" msgid "Copyright" msgstr "Direitos Autorais" @@ -1063,29 +1179,20 @@ msgctxt "Content/Library/Error message.Title" msgid "Could not fetch remote library" msgstr "Não foi possÃvel buscar a biblioteca remota" -#: front/src/components/Home.vue:80 -msgctxt "Content/Home/List item" -msgid "Covers, lyrics, our goal is to have them all ;)" -msgstr "Capas, letras, nosso objetivo é tê-los todos ;)" - #: front/src/components/manage/moderation/InstancePolicyForm.vue:58 msgctxt "Content/Moderation/Card.Button.Label/Verb" msgid "Create" msgstr "Criar" -#: front/src/components/auth/Signup.vue:4 +#: front/src/views/auth/Signup.vue:4 msgctxt "Content/Signup/Title" msgid "Create a funkwhale account" msgstr "Crie uma conta funkwhale" -#: front/src/components/auth/Settings.vue:220 -msgctxt "Content/Settings/Button.Label" -msgid "Create a new application" -msgstr "Crie uma nova playlist" - #: front/src/components/auth/ApplicationNew.vue:8 #: front/src/components/auth/ApplicationNew.vue:41 -msgctxt "Content/Applications/Title" +#: front/src/components/auth/Settings.vue:220 +msgctxt "Content/Settings/Button.Label" msgid "Create a new application" msgstr "Crie uma nova playlist" @@ -1099,7 +1206,7 @@ msgctxt "Popup/Playlist/Title/Verb" msgid "Create a new playlist" msgstr "Crie uma nova playlist" -#: front/src/components/Sidebar.vue:57 src/components/auth/Login.vue:17 +#: front/src/components/Sidebar.vue:57 src/components/auth/LoginForm.vue:15 msgctxt "*/Signup/Link/Verb" msgid "Create an account" msgstr "Crie a sua conta" @@ -1114,7 +1221,7 @@ msgctxt "Content/Library/Button.Label/Verb" msgid "Create library" msgstr "Criar biblioteca" -#: front/src/components/auth/Signup.vue:53 +#: front/src/components/auth/SignupForm.vue:49 msgctxt "Content/Signup/Button.Label" msgid "Create my account" msgstr "Criar a minha conta" @@ -1139,11 +1246,13 @@ msgstr "Crie seu próprio rádio" #: front/src/components/manage/library/AlbumsTable.vue:44 #: front/src/components/manage/library/ArtistsTable.vue:43 #: front/src/components/manage/library/LibrariesTable.vue:54 +#: front/src/components/manage/library/TagsTable.vue:45 #: front/src/components/manage/library/TracksTable.vue:44 #: front/src/components/manage/library/UploadsTable.vue:66 +#: front/src/components/manage/moderation/ReportCard.vue:43 #: front/src/components/manage/users/InvitationsTable.vue:40 -#: front/src/components/mixins/Translations.vue:43 -#: front/src/components/mixins/Translations.vue:44 +#: front/src/components/mixins/Translations.vue:53 +#: front/src/components/mixins/Translations.vue:54 msgctxt "Content/*/*/Noun" msgid "Creation date" msgstr "Data de criação" @@ -1153,6 +1262,12 @@ msgctxt "Content/Settings/Title/Noun" msgid "Current avatar" msgstr "Avatar atual" +#: front/src/components/admin/SettingsGroup.vue:67 +#, fuzzy +msgctxt "Content/Settings/Title/Noun" +msgid "Current image" +msgstr "Uso atual" + #: front/src/views/content/libraries/DetailArea.vue:4 msgctxt "Content/Library/Title" msgid "Current library" @@ -1168,6 +1283,11 @@ msgctxt "Content/Library/Title" msgid "Current usage" msgstr "Uso atual" +#: front/src/components/Footer.vue:94 +msgctxt "Footer/Settings/Dropdown.Label/Theme name" +msgid "Dark" +msgstr "" + #: front/src/components/federation/FetchButton.vue:53 msgctxt "*/*/Error" msgid "Data returned by the remote server had invalid or missing attributes" @@ -1188,7 +1308,7 @@ msgctxt "Popup/Import/Table.Label/Noun" msgid "Debug information" msgstr "Informação da música" -#: front/src/components/ShortcutsModal.vue:75 +#: front/src/components/ShortcutsModal.vue:128 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Decrease volume" msgstr "Diminuir o volume" @@ -1200,23 +1320,29 @@ msgstr "Diminuir o volume" #: front/src/components/manage/library/AlbumsTable.vue:188 #: front/src/components/manage/library/ArtistsTable.vue:178 #: front/src/components/manage/library/LibrariesTable.vue:205 +#: front/src/components/manage/library/TagsTable.vue:179 #: front/src/components/manage/library/TracksTable.vue:188 #: front/src/components/manage/library/UploadsTable.vue:255 #: front/src/components/manage/moderation/InstancePolicyForm.vue:61 +#: front/src/components/manage/moderation/NotesThread.vue:24 +#: front/src/components/manage/moderation/NotesThread.vue:29 +#: front/src/components/manage/moderation/ReportCard.vue:360 #: front/src/components/manage/users/InvitationsTable.vue:167 -#: front/src/views/admin/library/AlbumDetail.vue:72 -#: front/src/views/admin/library/AlbumDetail.vue:77 -#: front/src/views/admin/library/ArtistDetail.vue:71 +#: front/src/views/admin/library/AlbumDetail.vue:78 +#: front/src/views/admin/library/AlbumDetail.vue:83 #: front/src/views/admin/library/ArtistDetail.vue:76 +#: front/src/views/admin/library/ArtistDetail.vue:81 #: front/src/views/admin/library/LibraryDetail.vue:58 #: front/src/views/admin/library/LibraryDetail.vue:63 -#: front/src/views/admin/library/TrackDetail.vue:71 -#: front/src/views/admin/library/TrackDetail.vue:76 +#: front/src/views/admin/library/TagDetail.vue:41 +#: front/src/views/admin/library/TagDetail.vue:46 +#: front/src/views/admin/library/TrackDetail.vue:77 +#: front/src/views/admin/library/TrackDetail.vue:82 #: front/src/views/admin/library/UploadDetail.vue:65 #: front/src/views/admin/library/UploadDetail.vue:70 #: front/src/views/content/libraries/FilesTable.vue:222 #: front/src/views/content/libraries/Form.vue:29 -#: src/views/playlists/Detail.vue:34 +#: src/views/playlists/Detail.vue:42 msgctxt "*/*/*/Verb" msgid "Delete" msgstr "Suprimir" @@ -1241,7 +1367,20 @@ msgctxt "Popup/Moderation/Button.Label/Verb" msgid "Delete moderation rule" msgstr "Eliminar regra de moderação" -#: front/src/views/playlists/Detail.vue:39 +#: front/src/components/auth/Settings.vue:274 +#: src/components/auth/Settings.vue:302 +#, fuzzy +msgctxt "*/*/Button.Label" +msgid "Delete my account" +msgstr "Criar a minha conta" + +#: front/src/components/auth/Settings.vue:297 +#, fuzzy +msgctxt "*/*/Button.Label" +msgid "Delete my account…" +msgstr "Criar a minha conta" + +#: front/src/views/playlists/Detail.vue:47 msgctxt "Popup/Playlist/Button.Label/Verb" msgid "Delete playlist" msgstr "Suprimir Playlist" @@ -1251,13 +1390,23 @@ msgctxt "Popup/Radio/Button.Label/Verb" msgid "Delete radio" msgstr "Suprimir radio" -#: front/src/views/admin/library/AlbumDetail.vue:73 -#: front/src/views/admin/library/TrackDetail.vue:72 +#: front/src/components/manage/moderation/ReportCard.vue:357 +msgctxt "Content/Moderation/Button/Verb" +msgid "Delete reported object" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:358 +msgctxt "Content/Moderation/Popup/Header" +msgid "Delete reported object?" +msgstr "" + +#: front/src/views/admin/library/AlbumDetail.vue:79 +#: front/src/views/admin/library/TrackDetail.vue:78 msgctxt "Popup/Library/Title" msgid "Delete this album?" msgstr "Excluir esta biblioteca?" -#: front/src/views/admin/library/ArtistDetail.vue:72 +#: front/src/views/admin/library/ArtistDetail.vue:77 msgctxt "Popup/Library/Title" msgid "Delete this artist?" msgstr "Excluir esta biblioteca?" @@ -1273,60 +1422,71 @@ msgctxt "Popup/Moderation/Title" msgid "Delete this moderation rule?" msgstr "Eliminar esta regra de moderação?" +#: front/src/components/manage/moderation/NotesThread.vue:25 +#, fuzzy +msgctxt "Popup/Moderation/Title" +msgid "Delete this note?" +msgstr "Excluir esta biblioteca?" + #: front/src/components/library/EditCard.vue:94 msgctxt "Popup/Library/Title" msgid "Delete this suggestion?" msgstr "Eliminar esta regra de moderação?" -#: front/src/views/admin/library/UploadDetail.vue:66 +#: front/src/views/admin/library/TagDetail.vue:42 +#, fuzzy +msgctxt "Popup/Library/Title" +msgid "Delete this tag?" +msgstr "Excluir esta biblioteca?" + +#: front/src/views/admin/library/UploadDetail.vue:66 msgctxt "Popup/Library/Title" msgid "Delete this upload?" msgstr "Excluir esta biblioteca?" #: front/src/components/favorites/List.vue:35 -#: src/components/library/Albums.vue:26 -#: front/src/components/library/Artists.vue:26 +#: src/components/library/Albums.vue:30 +#: front/src/components/library/Artists.vue:30 #: src/components/library/Radios.vue:47 #: front/src/components/manage/library/AlbumsTable.vue:22 #: front/src/components/manage/library/ArtistsTable.vue:22 #: front/src/components/manage/library/EditsCardList.vue:40 #: front/src/components/manage/library/LibrariesTable.vue:31 +#: front/src/components/manage/library/TagsTable.vue:22 #: front/src/components/manage/library/TracksTable.vue:22 #: front/src/components/manage/library/UploadsTable.vue:41 #: front/src/components/manage/moderation/AccountsTable.vue:22 -#: front/src/components/manage/moderation/DomainsTable.vue:20 +#: front/src/components/manage/moderation/DomainsTable.vue:28 #: front/src/components/manage/users/UsersTable.vue:20 +#: front/src/views/admin/moderation/ReportsList.vue:45 #: front/src/views/content/libraries/FilesTable.vue:32 #: front/src/views/playlists/List.vue:28 msgctxt "Content/Search/Dropdown" msgid "Descending" msgstr "Descendente" -#: front/src/views/admin/library/LibraryDetail.vue:123 -msgctxt "*/*/*/Noun" -msgid "Description" -msgstr "Descrição" +#: front/src/components/manage/moderation/NoteForm.vue:37 +msgctxt "Content/Moderation/Placeholder" +msgid "Describe what actions have been taken, or any other related updates…" +msgstr "" #: front/src/components/library/radios/Builder.vue:25 +#: front/src/views/admin/library/LibraryDetail.vue:132 #: front/src/views/content/libraries/Form.vue:14 -msgctxt "Content/*/Input.Label/Noun" +msgctxt "*/*/*/Noun" msgid "Description" msgstr "Descrição" #: front/src/views/content/libraries/Card.vue:48 -#: src/views/content/remote/Card.vue:54 +#: src/views/content/remote/Card.vue:67 msgctxt "Content/Library/Card.Button.Label/Noun" msgid "Details" msgstr "Detalhes" -#: front/src/views/admin/moderation/AccountsDetail.vue:491 +#: front/src/views/admin/moderation/AccountsDetail.vue:511 msgctxt "Content/Moderation/Help text" -msgid "" -"Determine how much content the user can upload. Leave empty to use the " -"default value of the instance." -msgstr "" -"Determine quanto conteúdo o usuário pode enviar. Deixe em branco para usar o" -" valor padrão da instância." +msgid "Determine how much content the user can upload. Leave empty to use the default value of the instance." +msgstr "Determine quanto conteúdo o usuário pode enviar. Deixe em branco para usar o valor padrão da instância." #: front/src/components/mixins/Translations.vue:8 #: front/src/components/mixins/Translations.vue:9 @@ -1335,38 +1495,51 @@ msgid "Determine the visibility level of your activity" msgstr "Determinar o nÃvel de visibilidade de sua atividade" #: front/src/components/auth/Settings.vue:104 -#: front/src/components/auth/SubsonicTokenForm.vue:51 +#: front/src/components/auth/SubsonicTokenForm.vue:56 msgctxt "Popup/Settings/Button.Label" msgid "Disable access" msgstr "Desativar acesso" -#: front/src/components/auth/SubsonicTokenForm.vue:48 +#: front/src/components/auth/SubsonicTokenForm.vue:53 msgctxt "Content/Settings/Button.Label/Verb" msgid "Disable Subsonic access" msgstr "Desativar o acesso a Subsonic" -#: front/src/components/auth/SubsonicTokenForm.vue:49 +#: front/src/components/auth/SubsonicTokenForm.vue:54 msgctxt "Popup/Settings/Title" msgid "Disable Subsonic API access?" msgstr "Desativar o acesso o API Subsonic?" +#: front/src/components/About.vue:118 src/components/About.vue:131 +#: front/src/components/About.vue:144 #: front/src/components/manage/moderation/InstancePolicyForm.vue:18 #: front/src/views/admin/moderation/AccountsDetail.vue:157 #: front/src/views/admin/moderation/AccountsDetail.vue:161 -msgctxt "*/*/*" +#, fuzzy +msgctxt "*/*/*/State of feature" msgid "Disabled" msgstr "Desativado" -#: front/src/views/admin/library/TrackDetail.vue:145 +#: front/src/views/admin/library/TrackDetail.vue:151 msgctxt "*/*/*/Noun" msgid "Disc number" msgstr "" +#: front/src/components/Home.vue:157 +msgctxt "Content/Home/Link" +msgid "Discover everything you need to know about Funkwhale and its features" +msgstr "" + #: front/src/components/auth/SubsonicTokenForm.vue:13 msgctxt "Content/Settings/Link" msgid "Discover how to use Funkwhale from other apps" msgstr "Descubra como usar o Funkwhale em outros aplicativos" +#: front/src/views/Notifications.vue:45 +msgctxt "Content/Notifications/Button.Label/Verb" +msgid "Discover other ways to help" +msgstr "" + #: front/src/views/admin/moderation/AccountsDetail.vue:132 msgctxt "'Content/*/*/Noun'" msgid "Display name" @@ -1379,13 +1552,14 @@ msgstr "Exibir publicamente" #: front/src/components/manage/moderation/InstancePolicyForm.vue:122 msgctxt "Content/Moderation/Help text" -msgid "" -"Do not download any media file (audio, album cover, account avatar…) from " -"this account or domain. This will purge existing content as well." -msgstr "" -"Não faça o download de nenhum arquivo de mÃdia (áudio, capa do álbum, avatar" -" da conta ...) dessa conta ou domÃnio. Isso também limpará o conteúdo " -"existente." +msgid "Do not download any media file (audio, album cover, account avatar…) from this account or domain. This will purge existing content as well." +msgstr "Não faça o download de nenhum arquivo de mÃdia (áudio, capa do álbum, avatar da conta …) dessa conta ou domÃnio. Isso também limpará o conteúdo existente." + +#: front/src/views/Notifications.vue:36 +#, fuzzy +msgctxt "Content/Notifications/Header" +msgid "Do you like Funkwhale?" +msgstr "Sobre Funkwhale" #: front/src/components/playlists/Editor.vue:51 msgctxt "Popup/Playlist/Title" @@ -1397,7 +1571,7 @@ msgctxt "Modal/*/Title" msgid "Do you want to confirm this action?" msgstr "Você quer confirmar esta ação?" -#: front/src/views/playlists/Detail.vue:35 +#: front/src/views/playlists/Detail.vue:43 msgctxt "Popup/Playlist/Title/Call to action" msgid "Do you want to delete the playlist \"%{ playlist }\"?" msgstr "Você deseja excluir a playlist \"%{ playlist }\"?" @@ -1407,6 +1581,12 @@ msgctxt "Popup/Radio/Title" msgid "Do you want to delete the radio \"%{ radio }\"?" msgstr "Você deseja excluir a radio \"%{ radio }\"?" +#: front/src/components/auth/Settings.vue:298 +#, fuzzy +msgctxt "Popup/Settings/Title" +msgid "Do you want to delete your account?" +msgstr "Você quer restaurar sua fila anterior?" + #: front/src/components/moderation/FilterModal.vue:3 msgctxt "Popup/Moderation/Title/Verb" msgid "Do you want to hide content from artist \"%{ name }\"?" @@ -1420,7 +1600,13 @@ msgid_plural "Do you want to launch %{ action } on %{ count } elements?" msgstr[0] "Deseja lançar %{ action } no %{ count } elemento?" msgstr[1] "Deseja lançar %{ action } nos %{ count } elementos?" -#: front/src/components/Sidebar.vue:118 +#: front/src/components/moderation/ReportModal.vue:3 +#, fuzzy +msgctxt "Popup/Moderation/Title/Verb" +msgid "Do you want to report this object?" +msgstr "Você quer confirmar esta ação?" + +#: front/src/components/Sidebar.vue:122 msgctxt "Sidebar/Queue/Message" msgid "Do you want to restore your previous queue?" msgstr "Você quer restaurar sua fila anterior?" @@ -1436,26 +1622,33 @@ msgstr "Documentação" #: front/src/components/manage/library/TracksTable.vue:42 #: front/src/components/manage/library/UploadsTable.vue:62 #: front/src/components/manage/moderation/AccountsTable.vue:40 -#: front/src/components/mixins/Translations.vue:60 -#: front/src/views/admin/library/AlbumDetail.vue:118 -#: front/src/views/admin/library/ArtistDetail.vue:107 -#: front/src/views/admin/library/LibraryDetail.vue:114 -#: front/src/views/admin/library/TrackDetail.vue:170 +#: front/src/components/manage/moderation/ReportCard.vue:169 +#: front/src/components/manage/moderation/ReportCard.vue:179 +#: front/src/components/mixins/Translations.vue:72 +#: front/src/views/admin/library/AlbumDetail.vue:124 +#: front/src/views/admin/library/ArtistDetail.vue:112 +#: front/src/views/admin/library/LibraryDetail.vue:123 +#: front/src/views/admin/library/TrackDetail.vue:176 #: front/src/views/admin/library/UploadDetail.vue:121 #: front/src/views/admin/moderation/AccountsDetail.vue:123 -#: front/src/components/mixins/Translations.vue:61 +#: front/src/components/mixins/Translations.vue:73 msgctxt "Content/Moderation/*/Noun" msgid "Domain" msgstr "Dominio" -#: front/src/views/admin/moderation/Base.vue:5 +#: front/src/views/admin/moderation/Base.vue:8 #: front/src/views/admin/moderation/DomainsList.vue:3 -#: front/src/views/admin/moderation/DomainsList.vue:48 +#: front/src/views/admin/moderation/DomainsList.vue:54 msgctxt "*/Moderation/*/Noun" msgid "Domains" msgstr "DomÃnios" -#: front/src/components/library/TrackBase.vue:39 +#: front/src/views/Notifications.vue:42 +msgctxt "Content/Notifications/Button.Label/Verb" +msgid "Donate" +msgstr "" + +#: front/src/components/library/TrackBase.vue:37 #: front/src/views/admin/library/UploadDetail.vue:58 msgctxt "Content/Track/Link/Verb" msgid "Download" @@ -1468,10 +1661,10 @@ msgstr "Arraste e solte as linhas para reordenar as músicas da playlist" #: front/src/components/audio/track/Table.vue:10 #: front/src/components/library/TrackDetail.vue:30 -#: front/src/components/mixins/Translations.vue:56 +#: front/src/components/mixins/Translations.vue:68 #: front/src/views/admin/library/UploadDetail.vue:238 #: front/src/views/content/libraries/FilesTable.vue:60 -#: front/src/components/mixins/Translations.vue:57 +#: front/src/components/mixins/Translations.vue:69 msgctxt "Content/*/*" msgid "Duration" msgstr "Duração" @@ -1481,41 +1674,27 @@ msgctxt "Content/Signup/Message" msgid "E-mail address confirmed" msgstr "E-mail confirmado" -#: front/src/components/Home.vue:88 -msgctxt "Content/Home/Title" -msgid "Easy to use" -msgstr "Fácil de usar" - -#: front/src/components/library/AlbumBase.vue:68 -#: front/src/components/library/ArtistBase.vue:79 -#: front/src/components/library/TrackBase.vue:87 +#: front/src/components/auth/Settings.vue:246 +#: src/components/library/AlbumBase.vue:73 +#: front/src/components/library/ArtistBase.vue:84 +#: front/src/components/library/TrackBase.vue:89 #: front/src/components/manage/moderation/InstancePolicyCard.vue:45 #: front/src/components/radios/Card.vue:23 -#: src/views/admin/library/AlbumDetail.vue:65 -#: front/src/views/admin/library/ArtistDetail.vue:64 -#: front/src/views/admin/library/TrackDetail.vue:64 +#: src/views/admin/library/AlbumDetail.vue:71 +#: front/src/views/admin/library/ArtistDetail.vue:69 +#: front/src/views/admin/library/TrackDetail.vue:70 #: front/src/views/content/libraries/Detail.vue:9 #: src/views/playlists/Detail.vue:31 msgctxt "Content/*/Button.Label/Verb" msgid "Edit" msgstr "Editar" -#: front/src/components/auth/Settings.vue:246 -msgctxt "Content/Settings/Button.Label" -msgid "Edit" -msgstr "Editar" - #: front/src/components/auth/ApplicationEdit.vue:30 #: front/src/components/auth/ApplicationEdit.vue:75 msgctxt "Content/Applications/Title" msgid "Edit application" msgstr "Erro ao aplicar a ação" -#: front/src/components/About.vue:22 -msgctxt "Content/Settings/Button.Label/Verb" -msgid "Edit instance info" -msgstr "Editar informações da instância" - #: front/src/components/manage/moderation/InstancePolicyForm.vue:3 msgctxt "Content/Moderation/Card.Title/Verb" msgid "Edit moderation rule" @@ -1536,23 +1715,20 @@ msgctxt "Content/*/Title" msgid "Edit this track" msgstr "Jogar esta pista" -#: front/src/views/admin/library/AlbumDetail.vue:182 -#: front/src/views/admin/library/ArtistDetail.vue:171 +#: front/src/components/mixins/Translations.vue:116 +#: front/src/views/admin/library/AlbumDetail.vue:198 +#: front/src/views/admin/library/ArtistDetail.vue:186 #: front/src/views/admin/library/Base.vue:5 #: src/views/admin/library/EditsList.vue:24 -#: front/src/views/admin/library/TrackDetail.vue:234 +#: front/src/views/admin/library/TrackDetail.vue:250 +#: front/src/components/mixins/Translations.vue:117 msgctxt "*/Admin/*/Noun" msgid "Edits" msgstr "Editar" -#: front/src/components/mixins/Translations.vue:104 -#: front/src/components/mixins/Translations.vue:105 -msgctxt "Content/OAuth Scopes/Label" -msgid "Edits" -msgstr "Editar" - -#: front/src/components/auth/Signup.vue:30 +#: front/src/components/auth/SignupForm.vue:26 #: front/src/components/manage/users/UsersTable.vue:38 +#: front/src/components/moderation/ReportModal.vue:31 msgctxt "Content/*/*/Noun" msgid "Email" msgstr "Email" @@ -1562,50 +1738,60 @@ msgctxt "Content/*/*" msgid "Email address" msgstr "Endereço de e-mail" -#: front/src/components/library/AlbumBase.vue:53 -#: front/src/components/library/ArtistBase.vue:64 -#: front/src/components/library/TrackBase.vue:72 +#: front/src/components/library/AlbumBase.vue:54 +#: front/src/components/library/ArtistBase.vue:65 +#: front/src/components/library/TrackBase.vue:70 +#: src/views/playlists/Detail.vue:38 msgctxt "Content/*/Button.Label/Verb" msgid "Embed" msgstr "Incorporar" -#: front/src/components/audio/EmbedWizard.vue:20 +#: front/src/components/audio/EmbedWizard.vue:30 msgctxt "Popup/Embed/Input.Label/Noun" msgid "Embed code" msgstr "Código de incorporação" -#: front/src/components/library/AlbumBase.vue:26 +#: front/src/components/library/AlbumBase.vue:27 msgctxt "Popup/Album/Title/Verb" msgid "Embed this album on your website" msgstr "Incorpore este álbum no seu website" -#: front/src/components/library/ArtistBase.vue:37 +#: front/src/components/library/ArtistBase.vue:38 msgctxt "Popup/Artist/Title/Verb" msgid "Embed this artist work on your website" msgstr "Incorpore esta pista no seu website" -#: front/src/components/library/TrackBase.vue:45 +#: front/src/views/playlists/Detail.vue:52 +#, fuzzy +msgctxt "Popup/Album/Title/Verb" +msgid "Embed this playlist on your website" +msgstr "Incorpore este álbum no seu website" + +#: front/src/components/library/TrackBase.vue:43 msgctxt "Popup/Track/Title" msgid "Embed this track on your website" msgstr "Incorpore esta pista no seu website" -#: front/src/views/admin/moderation/AccountsDetail.vue:259 -#: front/src/views/admin/moderation/DomainsDetail.vue:187 +#: front/src/views/admin/moderation/AccountsDetail.vue:260 +#: front/src/views/admin/moderation/DomainsDetail.vue:224 msgctxt "Content/Moderation/Table.Label/Noun" msgid "Emitted library follows" msgstr "A biblioteca emitida segue" -#: front/src/views/admin/moderation/AccountsDetail.vue:243 -#: front/src/views/admin/moderation/DomainsDetail.vue:171 +#: front/src/views/admin/moderation/AccountsDetail.vue:244 +#: front/src/views/admin/moderation/DomainsDetail.vue:208 msgctxt "Content/Moderation/Table.Label/Noun" msgid "Emitted messages" msgstr "Mensagens emitidas" +#: front/src/components/About.vue:114 src/components/About.vue:127 +#: front/src/components/About.vue:140 #: front/src/components/manage/moderation/InstancePolicyCard.vue:8 #: front/src/components/manage/moderation/InstancePolicyForm.vue:17 #: front/src/views/admin/moderation/AccountsDetail.vue:156 #: front/src/views/admin/moderation/AccountsDetail.vue:160 -msgctxt "*/*/*" +#, fuzzy +msgctxt "*/*/*/State of feature" msgid "Enabled" msgstr "Ativado" @@ -1624,9 +1810,9 @@ msgctxt "Content/Search/Input.Placeholder" msgid "Enter a radio name…" msgstr "Indicar um nome de rádio …" -#: front/src/components/library/Albums.vue:119 +#: front/src/components/library/Albums.vue:128 msgctxt "Content/Search/Input.Placeholder" -msgid "Enter album title..." +msgid "Enter album title…" msgstr "" #: front/src/components/library/Artists.vue:116 @@ -1640,32 +1826,33 @@ msgid "Enter playlist name…" msgstr "Indicar um nome de playlist…" #: front/src/views/auth/PasswordReset.vue:54 +#, fuzzy msgctxt "Content/Signup/Input.Placeholder" -msgid "Enter the email address binded to your account" +msgid "Enter the email address linked to your account" msgstr "Insira o endereço de e-mail associado à sua conta" -#: front/src/components/auth/Signup.vue:103 +#: front/src/components/auth/SignupForm.vue:96 msgctxt "Content/Signup/Form/Placeholder" msgid "Enter your email" msgstr "Insira seu email" -#: front/src/components/auth/Signup.vue:98 src/components/auth/Signup.vue:100 +#: front/src/components/auth/SignupForm.vue:91 +#: src/components/auth/SignupForm.vue:93 msgctxt "Content/Signup/Form/Placeholder" msgid "Enter your invitation code (case insensitive)" -msgstr "" -"Indicar seu código de convite (não diferencia maiúsculas de minúsculas)" +msgstr "Indicar seu código de convite (não diferencia maiúsculas de minúsculas)" #: front/src/components/metadata/Search.vue:114 msgctxt "Content/Library/Input.Placeholder/Verb" msgid "Enter your search query…" msgstr "Insira sua consulta de pesquisa …" -#: front/src/components/auth/Signup.vue:102 +#: front/src/components/auth/SignupForm.vue:95 msgctxt "Content/Signup/Form/Placeholder" msgid "Enter your username" msgstr "Indicar seu nome de usuário" -#: front/src/components/auth/Login.vue:83 +#: front/src/components/auth/LoginForm.vue:81 msgctxt "Content/Login/Input.Placeholder" msgid "Enter your username or email" msgstr "Indicar seu nome de usuário ou email" @@ -1682,7 +1869,7 @@ msgctxt "Popup/Import/Table.Label/Noun" msgid "Error detail" msgstr "Relatório de erros" -#: front/src/views/admin/Settings.vue:87 +#: front/src/views/admin/Settings.vue:89 msgctxt "Content/Admin/Menu" msgid "Error reporting" msgstr "Relatório de erros" @@ -1738,16 +1925,12 @@ msgctxt "Popup/Moderation/Error message" msgid "Error while fetching application data" msgstr "Erro ao criar convite" -#: front/src/views/admin/moderation/DomainsDetail.vue:118 +#: front/src/views/admin/moderation/DomainsDetail.vue:155 msgctxt "Content/Moderation/Table" msgid "Error while fetching node info" msgstr "Erro ao buscar informações do nó" #: front/src/components/admin/SettingsGroup.vue:5 -msgctxt "Content/Settings/Error message.Title" -msgid "Error while saving settings" -msgstr "Erro ao salvar configurações" - #: front/src/components/federation/FetchButton.vue:73 msgctxt "Content/*/Error message.Title" msgid "Error while saving settings" @@ -1758,6 +1941,18 @@ msgctxt "Content/Library/Error message.Title" msgid "Error while submitting edit" msgstr "Erro ao salvar configurações" +#: front/src/components/manage/moderation/NoteForm.vue:3 +#, fuzzy +msgctxt "Content/Moderation/Error message.Title" +msgid "Error while submitting note" +msgstr "Erro ao salvar configurações" + +#: front/src/components/moderation/ReportModal.vue:11 +#, fuzzy +msgctxt "Popup/Moderation/Error message" +msgid "Error while submitting report" +msgstr "Erro ao salvar configurações" + #: front/src/components/mixins/Translations.vue:32 #: front/src/components/mixins/Translations.vue:33 msgctxt "Content/Library/Table/Short" @@ -1792,9 +1987,14 @@ msgctxt "Content/Radio/Table.Label/Verb" msgid "Exclude" msgstr "Excluir" +#: front/src/components/common/CollapseLink.vue:2 +msgctxt "*/*/Button,Label" +msgid "Expand" +msgstr "" + #: front/src/components/manage/users/InvitationsTable.vue:41 -#: front/src/components/mixins/Translations.vue:49 -#: front/src/components/mixins/Translations.vue:50 +#: front/src/components/mixins/Translations.vue:59 +#: front/src/components/mixins/Translations.vue:60 msgctxt "Content/Admin/Table.Label/Noun" msgid "Expiration date" msgstr "Data de vencimento" @@ -1811,16 +2011,8 @@ msgstr "Expirado / usados" #: front/src/components/manage/moderation/InstancePolicyForm.vue:110 msgctxt "Content/Moderation/Help text" -msgid "" -"Explain why you're applying this policy. Depending on your instance " -"configuration, this will help you remember why you acted on this account or " -"domain, and may be displayed publicly to help users understand what " -"moderation rules are in place." -msgstr "" -"Explique porque está a aplicar esta polÃtica. Dependendo da configuração da " -"sua instância, isso o ajudará a lembrar por que você agiu nessa conta ou " -"domÃnio e poderá ser exibido publicamente para ajudar os usuários a entender" -" quais regras de moderação estão em vigor." +msgid "Explain why you're applying this policy. Depending on your instance configuration, this will help you remember why you acted on this account or domain, and may be displayed publicly to help users understand what moderation rules are in place." +msgstr "Explique porque está a aplicar esta polÃtica. Dependendo da configuração da sua instância, isso o ajudará a lembrar por que você agiu nessa conta ou domÃnio e poderá ser exibido publicamente para ajudar os usuários a entender quais regras de moderação estão em vigor." #: front/src/components/manage/library/UploadsTable.vue:25 #: front/src/views/content/libraries/FilesTable.vue:16 @@ -1828,31 +2020,28 @@ msgctxt "Content/Library/Dropdown" msgid "Failed" msgstr "Falhou" -#: front/src/views/content/remote/Card.vue:62 +#: front/src/views/content/remote/Card.vue:75 msgctxt "Content/Library/Card.List item/Noun" msgid "Failed tracks:" msgstr "Pistas falhadas:" -#: front/src/views/admin/library/AlbumDetail.vue:165 -#: front/src/views/admin/library/ArtistDetail.vue:154 -#: front/src/views/admin/library/TrackDetail.vue:217 +#: front/src/views/admin/library/AlbumDetail.vue:171 +#: front/src/views/admin/library/ArtistDetail.vue:159 +#: front/src/views/admin/library/TrackDetail.vue:223 msgctxt "*/*/*" msgid "Favorited tracks" msgstr "Pistas falhadas:" #: front/src/components/Sidebar.vue:66 +#: src/components/mixins/Translations.vue:88 +#: front/src/components/mixins/Translations.vue:89 msgctxt "Sidebar/Favorites/List item.Link/Noun" msgid "Favorites" msgstr "Favoritas" -#: front/src/components/mixins/Translations.vue:76 -#: front/src/components/mixins/Translations.vue:77 -msgctxt "Content/OAuth Scopes/Label" -msgid "Favorites" -msgstr "Favoritas" - -#: front/src/views/admin/Settings.vue:84 -msgctxt "Content/Admin/Menu" +#: front/src/components/About.vue:110 src/views/admin/Settings.vue:84 +#, fuzzy +msgctxt "*/*/*" msgid "Federation" msgstr "Federação" @@ -1876,6 +2065,11 @@ msgctxt "Content/Radio/Table.Label/Noun" msgid "Filter name" msgstr "Nome do filtro" +#: front/src/components/Home.vue:118 +msgctxt "Content/Home/Link" +msgid "Find another pod" +msgstr "" + #: front/src/components/manage/library/UploadsTable.vue:26 #: front/src/components/mixins/Translations.vue:36 #: front/src/views/content/libraries/FilesTable.vue:17 @@ -1885,25 +2079,31 @@ msgid "Finished" msgstr "Acabado" #: front/src/components/manage/moderation/AccountsTable.vue:42 -#: front/src/components/manage/moderation/DomainsTable.vue:41 -#: front/src/views/admin/library/AlbumDetail.vue:149 -#: front/src/views/admin/library/ArtistDetail.vue:138 -#: front/src/views/admin/library/LibraryDetail.vue:153 -#: front/src/views/admin/library/TrackDetail.vue:201 +#: front/src/components/manage/moderation/DomainsTable.vue:49 +#: front/src/views/admin/library/AlbumDetail.vue:155 +#: front/src/views/admin/library/ArtistDetail.vue:143 +#: front/src/views/admin/library/LibraryDetail.vue:162 +#: front/src/views/admin/library/TagDetail.vue:98 +#: front/src/views/admin/library/TrackDetail.vue:207 #: front/src/views/admin/library/UploadDetail.vue:167 -#: front/src/views/admin/moderation/AccountsDetail.vue:235 -#: front/src/views/admin/moderation/DomainsDetail.vue:151 +#: front/src/views/admin/moderation/AccountsDetail.vue:236 +#: front/src/views/admin/moderation/DomainsDetail.vue:188 msgctxt "Content/Moderation/Table.Label/Short (Value is a date)" msgid "First seen" msgstr "Visto pela primeira vez" -#: front/src/components/mixins/Translations.vue:46 -#: front/src/components/mixins/Translations.vue:47 +#: front/src/components/mixins/Translations.vue:56 +#: front/src/components/mixins/Translations.vue:57 msgctxt "Content/Moderation/Dropdown/Noun" msgid "First seen date" msgstr "Data da primeira vista" -#: front/src/views/content/remote/Card.vue:87 +#: front/src/components/ShortcutsModal.vue:64 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Focus searchbar" +msgstr "" + +#: front/src/views/content/remote/Card.vue:100 msgctxt "Content/Library/Card.Button.Label/Verb" msgid "Follow" msgstr "Segue" @@ -1913,40 +2113,34 @@ msgctxt "Content/Library/Title/Verb" msgid "Follow remote libraries" msgstr "Siga as bibliotecas remotas" -#: front/src/views/content/remote/Card.vue:92 +#: front/src/views/content/remote/Card.vue:105 msgctxt "Content/Library/Card.Paragraph" msgid "Follow request pending approval" msgstr "Solicitação de seguir pendente" -#: front/src/components/mixins/Translations.vue:64 -#: front/src/views/admin/library/LibraryDetail.vue:161 +#: front/src/components/manage/library/LibrariesTable.vue:53 +#: front/src/components/mixins/Translations.vue:76 +#: front/src/views/admin/library/LibraryDetail.vue:170 #: front/src/views/content/libraries/Detail.vue:7 -#: front/src/components/mixins/Translations.vue:65 +#: front/src/components/mixins/Translations.vue:77 msgctxt "Content/Federation/*/Noun" msgid "Followers" msgstr "Seguidores" -#: front/src/components/manage/library/LibrariesTable.vue:53 -msgctxt "Content/*/*/Noun" -msgid "Followers" -msgstr "Seguidores" - -#: front/src/views/content/remote/Card.vue:103 +#: front/src/views/content/remote/Card.vue:116 msgctxt "Content/Library/Card.Paragraph" msgid "Following" msgstr "Seguir" -#: front/src/components/mixins/Translations.vue:84 -#: front/src/components/mixins/Translations.vue:85 +#: front/src/components/mixins/Translations.vue:96 +#: front/src/components/mixins/Translations.vue:97 msgctxt "Content/OAuth Scopes/Label" msgid "Follows" msgstr "Segue" -#: front/src/components/library/TrackBase.vue:17 +#: front/src/components/library/TrackBase.vue:245 msgctxt "Content/Track/Paragraph" -msgid "" -"From album <a class=\"internal\" href=\"%{ albumUrl }\">%{ album }</a> by <a" -" class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" +msgid "From album <a class=\"internal\" href=\"%{ albumUrl }\">%{ album }</a> by <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" msgstr "" #: front/src/components/auth/Authorize.vue:28 @@ -1956,38 +2150,21 @@ msgstr "Desativar acesso" #: front/src/components/auth/SubsonicTokenForm.vue:7 msgctxt "Content/Settings/Paragraph'" -msgid "" -"Funkwhale is compatible with other music players that support the Subsonic " -"API." -msgstr "" -"O Funkwhale é compatÃvel com outros players de música que suportam a API " -"Subsonic." - -#: front/src/components/Home.vue:90 -msgctxt "Content/Home/Paragraph" -msgid "Funkwhale is dead simple to use." -msgstr "Funkwhale é muito simples de usar." - -#: front/src/components/Home.vue:39 -msgctxt "Content/Home/Paragraph" -msgid "" -"Funkwhale is designed to make it easy to listen to music you like, or to " -"discover new artists." -msgstr "" -"O Funkwhale foi projetado para facilitar a escuta da música que você gosta " -"ou descobrir novos artistas." +msgid "Funkwhale is compatible with other music players that support the Subsonic API." +msgstr "O Funkwhale é compatÃvel com outros players de música que suportam a API Subsonic." -#: front/src/components/Home.vue:111 +#: front/src/components/Home.vue:88 +#, fuzzy msgctxt "Content/Home/Paragraph" -msgid "Funkwhale is free and gives you control on your music." +msgid "Funkwhale is free and developped by a friendly community of volunteers." msgstr "O Funkwhale é gratuito e permite controlar sua música." -#: front/src/components/Home.vue:66 -msgctxt "Content/Home/Paragraph" -msgid "Funkwhale takes care of handling your music" -msgstr "Funkwhale cuida da sua música" +#: front/src/components/About.vue:78 +msgctxt "*/*/*" +msgid "Funkwhale version" +msgstr "" -#: front/src/components/ShortcutsModal.vue:38 +#: front/src/components/ShortcutsModal.vue:56 msgctxt "Popup/Keyboard shortcuts/Title" msgid "General shortcuts" msgstr "Atalhos gerais" @@ -1997,35 +2174,17 @@ msgctxt "Content/Admin/Button.Label/Verb" msgid "Get a new invitation" msgstr "Receba um novo convite" -#: front/src/components/Home.vue:13 -msgctxt "Content/Home/Button.Label/Verb" -msgid "Get me to the library" -msgstr "Me leve para a biblioteca" - -#: front/src/components/Home.vue:70 -msgctxt "Content/Home/List item/Verb" -msgid "" -"Get quality metadata about your music thanks to <a href=\"%{ url }\" " -"target=\"_blank\">MusicBrainz</a>" -msgstr "" -"Obtenha metadados de qualidade sobre sua música graças ao <a href=\"%{ url " -"}\" target=\"_blank\">MusicBrainz</a>" - #: front/src/views/content/Home.vue:12 src/views/content/Home.vue:19 msgctxt "Content/Library/Button.Label/Verb" msgid "Get started" msgstr "Começar" -#: front/src/components/Footer.vue:37 +#: front/src/components/Footer.vue:45 +#: src/components/library/ImportStatusModal.vue:45 msgctxt "Footer/*/Link" msgid "Getting help" msgstr "Obter ajuda" -#: front/src/components/library/ImportStatusModal.vue:45 -msgctxt "Popup/Import/Table.Label/Noun" -msgid "Getting help" -msgstr "Obter ajuda" - #: front/src/components/common/ActionTable.vue:35 #: front/src/components/common/ActionTable.vue:56 msgctxt "Content/*/Button.Label/Short, Verb" @@ -2037,11 +2196,21 @@ msgctxt "Content/*/Button.Label/Verb" msgid "Go to home page" msgstr "Vá para a página inicial" +#: front/src/views/Notifications.vue:27 src/views/Notifications.vue:61 +msgctxt "Content/Notifications/Button.Label" +msgid "Got it!" +msgstr "" + #: front/src/components/auth/Settings.vue:128 msgctxt "Content/Settings/Title" msgid "Hidden artists" msgstr "Procurando artistas" +#: front/src/components/About.vue:155 +msgctxt "*/*/*/Verb" +msgid "Hide" +msgstr "" + #: front/src/components/manage/moderation/InstancePolicyForm.vue:114 msgctxt "Content/Moderation/Help text" msgid "Hide account or domain content, except from followers." @@ -2052,12 +2221,12 @@ msgctxt "Popup/*/Button.Label" msgid "Hide content" msgstr "Adicionar conteúdo" -#: front/src/components/audio/PlayButton.vue:26 +#: front/src/components/audio/PlayButton.vue:31 msgctxt "*/Queue/Dropdown/Button/Label/Short" msgid "Hide content from this artist" msgstr "" -#: front/src/components/audio/Player.vue:643 +#: front/src/components/audio/Player.vue:669 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Hide content from this artist…" msgstr "" @@ -2067,38 +2236,29 @@ msgctxt "Head/Home/Title" msgid "Home" msgstr "Casa" -#: front/src/components/instance/Stats.vue:36 -msgctxt "Content/About/Paragraph/Unit" -msgid "Hours of music" -msgstr "Horas de música" - #: front/src/components/auth/SubsonicTokenForm.vue:10 msgctxt "Content/Settings/Paragraph" -msgid "" -"However, accessing Funkwhale from those clients require a separate password " -"you can set below." -msgstr "" -"No entanto, acessar o Funkwhale desses clientes requer uma senha separada " -"que você pode definir abaixo." +msgid "However, accessing Funkwhale from those clients require a separate password you can set below." +msgstr "No entanto, acessar o Funkwhale desses clientes requer uma senha separada que você pode definir abaixo." #: front/src/views/auth/PasswordResetConfirm.vue:24 +#, fuzzy msgctxt "Content/Signup/Paragraph" -msgid "" -"If the email address provided in the previous step is valid and binded to a " -"user account, you should receive an email with reset instructions in the " -"next couple of minutes." -msgstr "" -"Se o endereço de e-mail fornecido na etapa anterior for válido e vinculado a" -" uma conta de usuário, você deverá receber um e-mail com instruções de " -"redefinição nos próximos minutos." +msgid "If the email address provided in the previous step is valid and linked to a user account, you should receive an email with reset instructions in the next couple of minutes." +msgstr "Se o endereço de e-mail fornecido na etapa anterior for válido e vinculado a uma conta de usuário, você deverá receber um e-mail com instruções de redefinição nos próximos minutos." #: front/src/components/auth/Settings.vue:205 msgctxt "Content/Applications/Paragraph" -msgid "" -"If you authorize third-party applications to access your data, those " -"applications will be listed here." +msgid "If you authorize third-party applications to access your data, those applications will be listed here." msgstr "" +#: front/src/components/mixins/Translations.vue:46 +#: front/src/components/mixins/Translations.vue:47 +#, fuzzy +msgctxt "Content/Moderation/Dropdown" +msgid "Illegal content" +msgstr "Adicionar conteúdo" + #: front/src/components/library/ImportStatusModal.vue:3 msgctxt "Popup/Import/Title" msgid "Import detail" @@ -2110,14 +2270,10 @@ msgid "Import reference" msgstr "Referência de importação" #: front/src/components/manage/library/UploadsTable.vue:20 -#: front/src/views/content/libraries/FilesTable.vue:11 -#: front/src/views/content/libraries/FilesTable.vue:59 -msgctxt "Content/Library/*/Noun" -msgid "Import status" -msgstr "Status de Importação" - #: front/src/components/manage/library/UploadsTable.vue:64 #: front/src/views/admin/library/UploadDetail.vue:131 +#: front/src/views/content/libraries/FilesTable.vue:11 +#: front/src/views/content/libraries/FilesTable.vue:59 msgctxt "Content/*/*/Noun" msgid "Import status" msgstr "Status de Importação" @@ -2158,12 +2314,12 @@ msgctxt "Popup/Moderation/List item" msgid "In radio suggestions" msgstr "" -#: front/src/components/manage/users/UsersTable.vue:54 +#: front/src/components/manage/users/UsersTable.vue:55 msgctxt "Content/Admin/Table" msgid "Inactive" msgstr "Inativo" -#: front/src/components/ShortcutsModal.vue:71 +#: front/src/components/ShortcutsModal.vue:124 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Increase volume" msgstr "Aumentar o volume" @@ -2182,7 +2338,7 @@ msgctxt "Content/Settings/Dropdown/Short" msgid "Instance" msgstr "Dados da instância" -#: front/src/views/admin/moderation/DomainsDetail.vue:71 +#: front/src/views/admin/moderation/DomainsDetail.vue:99 msgctxt "Content/Moderation/Title" msgid "Instance data" msgstr "Dados da instância" @@ -2207,21 +2363,25 @@ msgctxt "Popup/Instance/Input.Label/Noun" msgid "Instance URL" msgstr "Dados da instância" +#: front/src/components/manage/moderation/ReportCard.vue:92 +#: front/src/components/manage/moderation/ReportCard.vue:203 +msgctxt "Content/*/*/Noun" +msgid "Internal notes" +msgstr "" + #: front/src/components/library/FileUpload.vue:268 msgctxt "Content/Library/Help text" -msgid "" -"Invalid file type, ensure you are uploading an audio file. Supported file " -"extensions are %{ extensions }" -msgstr "" -"Tipo de ficheiro inválido, certifique-se de que está a carregar um ficheiro " -"de áudio. As extensões de arquivo suportadas são %{ extensions }" +msgid "Invalid file type, ensure you are uploading an audio file. Supported file extensions are %{ extensions }" +msgstr "Tipo de ficheiro inválido, certifique-se de que está a carregar um ficheiro de áudio. As extensões de arquivo suportadas são %{ extensions }" #: front/src/components/library/ImportStatusModal.vue:139 +#: front/src/components/mixins/Translations.vue:45 +#: front/src/components/mixins/Translations.vue:46 msgctxt "Popup/Import/Error.Label" msgid "Invalid metadata" msgstr "" -#: front/src/components/auth/Signup.vue:44 +#: front/src/components/auth/SignupForm.vue:40 #: front/src/components/manage/users/InvitationForm.vue:11 msgctxt "Content/*/Input.Label" msgid "Invitation code" @@ -2233,7 +2393,13 @@ msgctxt "*/Admin/*/Noun" msgid "Invitations" msgstr "Convites" -#: front/src/components/Footer.vue:41 +#: front/src/components/manage/moderation/DomainsTable.vue:9 +#: front/src/views/admin/moderation/DomainsDetail.vue:106 +msgctxt "Content/Moderation/*/Adjective" +msgid "Is present on allow-list" +msgstr "" + +#: front/src/components/Footer.vue:49 msgctxt "Footer/*/List item.Link" msgid "Issue tracker" msgstr "Rastreador de problemas" @@ -2243,17 +2409,18 @@ msgctxt "Popup/Instance/Error message.Title" msgid "It is not possible to connect to the given URL" msgstr "" -#: front/src/components/Home.vue:50 -msgctxt "Content/Home/List item/Verb" -msgid "Keep a track of your favorite songs" -msgstr "Guardar suas músicas favoritas" +#: front/src/components/mixins/Translations.vue:65 +#: front/src/components/mixins/Translations.vue:66 +msgctxt "*/*/*/Noun" +msgid "Items" +msgstr "" #: front/src/components/Footer.vue:33 src/components/ShortcutsModal.vue:3 msgctxt "*/*/*/Noun" msgid "Keyboard shortcuts" msgstr "Atalhos do teclado" -#: front/src/views/admin/moderation/DomainsDetail.vue:161 +#: front/src/views/admin/moderation/DomainsDetail.vue:198 msgctxt "Content/Moderation/Table.Label.Link" msgid "Known accounts" msgstr "Contas conhecidas" @@ -2264,15 +2431,15 @@ msgid "Known libraries" msgstr "Bibliotecas conhecidas" #: front/src/components/manage/users/UsersTable.vue:41 -#: front/src/components/mixins/Translations.vue:58 -#: front/src/views/admin/moderation/AccountsDetail.vue:205 -#: front/src/components/mixins/Translations.vue:59 +#: front/src/components/mixins/Translations.vue:70 +#: front/src/views/admin/moderation/AccountsDetail.vue:206 +#: front/src/components/mixins/Translations.vue:71 msgctxt "Content/Profile/Table.Label/Short, Noun (Value is a date)" msgid "Last activity" msgstr "Ultima atividade" -#: front/src/views/admin/moderation/AccountsDetail.vue:188 -#: front/src/views/admin/moderation/DomainsDetail.vue:78 +#: front/src/views/admin/moderation/AccountsDetail.vue:189 +#: front/src/views/admin/moderation/DomainsDetail.vue:115 msgctxt "Content/*/Table.Label" msgid "Last checked" msgstr "Última verificação" @@ -2287,13 +2454,13 @@ msgctxt "Content/Moderation/Table.Label/Noun" msgid "Last seen" msgstr "Visto pela última vez" -#: front/src/components/mixins/Translations.vue:47 -#: front/src/components/mixins/Translations.vue:48 +#: front/src/components/mixins/Translations.vue:57 +#: front/src/components/mixins/Translations.vue:58 msgctxt "Content/Moderation/Dropdown/Noun" msgid "Last seen date" msgstr "Data da última vista" -#: front/src/views/content/remote/Card.vue:60 +#: front/src/views/content/remote/Card.vue:73 msgctxt "Content/Library/Card.List item/Noun" msgid "Last update:" msgstr "Última atualização:" @@ -2303,60 +2470,60 @@ msgctxt "Modal/*/Button.Label/Short, Verb" msgid "Launch" msgstr "Lançamento" -#: front/src/components/Home.vue:10 -msgctxt "Content/Home/Button.Label/Verb" -msgid "Learn more about this instance" -msgstr "Saiba mais sobre esta instância" +#: front/src/components/Home.vue:35 +#, fuzzy +msgctxt "Content/Home/Link" +msgid "Learn more" +msgstr "Carregando seguidores…" #: front/src/components/manage/users/InvitationForm.vue:58 msgctxt "Content/Admin/Input.Placeholder" msgid "Leave empty for a random code" msgstr "Deixar vazio para um código aleatório" -#: front/src/components/audio/EmbedWizard.vue:7 +#: front/src/components/audio/EmbedWizard.vue:17 msgctxt "Popup/Embed/Paragraph" msgid "Leave empty for a responsive widget" msgstr "Deixe vazio para um widget responsivo" -#: front/src/views/admin/library/AlbumDetail.vue:232 -#: front/src/views/admin/library/ArtistDetail.vue:221 -#: front/src/views/admin/library/TrackDetail.vue:284 -#: front/src/views/admin/moderation/AccountsDetail.vue:327 -#: front/src/views/admin/moderation/DomainsDetail.vue:234 -#: front/src/views/content/Base.vue:5 +#: front/src/components/mixins/Translations.vue:64 +#: front/src/components/mixins/Translations.vue:65 msgctxt "*/*/*/Noun" -msgid "Libraries" -msgstr "Bibliotecas" +msgid "Length" +msgstr "" +#: front/src/views/admin/library/AlbumDetail.vue:248 +#: front/src/views/admin/library/ArtistDetail.vue:236 #: front/src/views/admin/library/Base.vue:17 #: front/src/views/admin/library/LibrariesList.vue:24 -msgctxt "*/*/*" +#: front/src/views/admin/library/TrackDetail.vue:300 +#: front/src/views/admin/moderation/AccountsDetail.vue:339 +#: front/src/views/admin/moderation/DomainsDetail.vue:271 +#: front/src/views/content/Base.vue:5 +msgctxt "*/*/*/Noun" msgid "Libraries" msgstr "Bibliotecas" -#: front/src/components/mixins/Translations.vue:72 -#: front/src/components/mixins/Translations.vue:73 +#: front/src/components/mixins/Translations.vue:84 +#: front/src/components/mixins/Translations.vue:85 msgctxt "Content/OAuth Scopes/Label" msgid "Libraries and uploads" msgstr "Biblioteca atualizada" #: front/src/views/content/libraries/Form.vue:2 msgctxt "Content/Library/Paragraph" -msgid "" -"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." -msgstr "" -"As bibliotecas ajudam você a organizar e compartilhar suas coleções de " -"músicas. Você pode enviar sua própria coleção de músicas para o Funkwhale e " -"compartilhá-la com seus amigos e familiares." +msgid "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." +msgstr "As bibliotecas ajudam você a organizar e compartilhar suas coleções de músicas. Você pode enviar sua própria coleção de músicas para o Funkwhale e compartilhá-la com seus amigos e familiares." -#: front/src/components/Sidebar.vue:85 src/components/instance/Stats.vue:30 +#: front/src/components/Sidebar.vue:85 #: front/src/components/manage/library/UploadsTable.vue:60 -#: front/src/components/manage/users/UsersTable.vue:173 +#: front/src/components/manage/users/UsersTable.vue:174 +#: front/src/components/mixins/Report.vue:77 #: front/src/views/admin/library/UploadDetail.vue:144 -#: front/src/views/admin/moderation/AccountsDetail.vue:498 -msgctxt "*/*/*" +#: front/src/views/admin/moderation/AccountsDetail.vue:518 src/entities.js:132 +#: front/src/components/mixins/Report.vue:78 +#, fuzzy +msgctxt "*/*/*/Noun" msgid "Library" msgstr "Biblioteca" @@ -2387,21 +2554,37 @@ msgstr "Biblioteca atualizada" #: front/src/components/library/TrackDetail.vue:19 #: front/src/components/manage/library/TracksTable.vue:43 -#: front/src/views/admin/library/TrackDetail.vue:159 src/edits.js:61 +#: front/src/views/admin/library/TrackDetail.vue:165 src/edits.js:84 +#: front/src/entities.js:115 msgctxt "Content/*/*/Noun" msgid "License" msgstr "Licença" -#: front/src/views/admin/library/AlbumDetail.vue:157 -#: front/src/views/admin/library/ArtistDetail.vue:146 -#: front/src/views/admin/library/TrackDetail.vue:209 -msgctxt "*/*/*/Noun" -msgid "Listenings" +#: front/src/components/Footer.vue:90 +msgctxt "Footer/Settings/Dropdown.Label/Theme name" +msgid "Light" msgstr "" -#: front/src/components/mixins/Translations.vue:80 -#: front/src/components/mixins/Translations.vue:81 -msgctxt "Content/OAuth Scopes/Label" +#: front/src/views/admin/library/AlbumDetail.vue:188 +#: front/src/views/admin/library/ArtistDetail.vue:176 +#: front/src/views/admin/library/LibraryDetail.vue:179 +#: front/src/views/admin/library/TrackDetail.vue:240 +#: front/src/views/admin/moderation/AccountsDetail.vue:269 +msgctxt "Content/Moderation/Table.Label/Noun" +msgid "Linked reports" +msgstr "" + +#: front/src/components/Home.vue:135 +msgctxt "Content/Home/Link" +msgid "Listen to public albums and playlists shared on this pod" +msgstr "" + +#: front/src/components/mixins/Translations.vue:92 +#: front/src/views/admin/library/AlbumDetail.vue:163 +#: front/src/views/admin/library/ArtistDetail.vue:151 +#: front/src/views/admin/library/TrackDetail.vue:215 +#: front/src/components/mixins/Translations.vue:93 +msgctxt "*/*/*/Noun" msgid "Listenings" msgstr "" @@ -2427,7 +2610,7 @@ msgctxt "Content/Library/Paragraph" msgid "Loading library data…" msgstr "Carregando dados da biblioteca…" -#: front/src/views/Notifications.vue:19 +#: front/src/views/Notifications.vue:84 msgctxt "Content/Notifications/Paragraph" msgid "Loading notifications…" msgstr "Carregando notificações…" @@ -2435,7 +2618,7 @@ msgstr "Carregando notificações…" #: front/src/views/content/remote/Home.vue:3 msgctxt "Content/Library/Paragraph" msgid "Loading remote libraries…" -msgstr "Carregando bibliotecas remotas..." +msgstr "Carregando bibliotecas remotas…" #: front/src/views/content/libraries/Quota.vue:4 msgctxt "Content/Library/Paragraph" @@ -2452,6 +2635,7 @@ msgstr "Carregando seus favoritos …" #: front/src/components/manage/library/LibrariesTable.vue:75 #: front/src/components/manage/library/TracksTable.vue:71 #: front/src/components/manage/library/UploadsTable.vue:99 +#: front/src/components/manage/moderation/ReportCard.vue:173 #: front/src/views/admin/library/AlbumDetail.vue:19 #: front/src/views/admin/library/ArtistDetail.vue:18 #: front/src/views/admin/library/LibraryDetail.vue:18 @@ -2467,12 +2651,12 @@ msgctxt "Content/Moderation/*/Short, Noun" msgid "Local account" msgstr "Conta local" -#: front/src/components/auth/Login.vue:84 +#: front/src/components/Home.vue:96 src/views/auth/Login.vue:29 msgctxt "Head/Login/Title" msgid "Log In" msgstr "Autenticação" -#: front/src/components/auth/Login.vue:4 +#: front/src/views/auth/Login.vue:4 msgctxt "Content/Login/Title/Verb" msgid "Log in to your Funkwhale account" msgstr "Logar na sua conta Funkwhale" @@ -2487,7 +2671,7 @@ msgctxt "Sidebar/Profile/List item.Link" msgid "Logged in as %{ username }" msgstr "Conectado como %{ username }" -#: front/src/components/Sidebar.vue:54 src/components/auth/Login.vue:42 +#: front/src/components/Sidebar.vue:54 src/components/auth/LoginForm.vue:41 msgctxt "*/Login/*/Verb" msgid "Login" msgstr "Entrar" @@ -2507,36 +2691,40 @@ msgctxt "Content/Library/Paragraph" msgid "Looks like you don't have a library, it's time to create one." msgstr "Parece que você ainda não tem biblioteca, é hora de criar uma." -#: front/src/components/audio/Player.vue:632 -#: src/components/audio/Player.vue:633 +#: front/src/components/audio/Player.vue:658 +#: src/components/audio/Player.vue:659 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Looping disabled. Click to switch to single-track looping." -msgstr "" -"Looping desativado. Clique para alternar para um loop de musica única." +msgstr "Looping desativado. Clique para alternar para um loop de musica única." -#: front/src/components/audio/Player.vue:635 -#: src/components/audio/Player.vue:636 +#: front/src/components/audio/Player.vue:661 +#: src/components/audio/Player.vue:662 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Looping on a single track. Click to switch to whole queue looping." -msgstr "" -"Looping em uma única música. Clique para alternar para todo o loop da fila." +msgstr "Looping em uma única música. Clique para alternar para todo o loop da fila." -#: front/src/components/audio/Player.vue:638 -#: src/components/audio/Player.vue:639 +#: front/src/components/audio/Player.vue:664 +#: src/components/audio/Player.vue:665 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Looping on whole queue. Click to disable looping." msgstr "Looping na fila inteira. Clique para desativar o loop." -#: front/src/components/Sidebar.vue:223 +#: front/src/components/Sidebar.vue:230 msgctxt "Sidebar/*/Hidden text" msgid "Main menu" msgstr "Menu principal" -#: front/src/views/admin/library/Base.vue:31 +#: front/src/views/admin/library/Base.vue:34 msgctxt "Head/Admin/Title" msgid "Manage library" msgstr "Gerenciar biblioteca" +#: front/src/components/manage/moderation/InstancePolicyModal.vue:8 +#, fuzzy +msgctxt "Popup/Moderation/Title/Verb" +msgid "Manage moderation rules for %{ obj }" +msgstr "Atualizar a regra de moderação" + #: front/src/components/playlists/PlaylistModal.vue:3 msgctxt "Popup/Playlist/Title/Verb" msgid "Manage playlists" @@ -2552,7 +2740,7 @@ msgctxt "Content/Playlist/Button.Label/Verb" msgid "Manage your playlists" msgstr "Gerenciar suas playlists" -#: front/src/views/Notifications.vue:14 +#: front/src/views/Notifications.vue:79 msgctxt "Content/Notifications/Button.Label/Verb" msgid "Mark all as read" msgstr "Marque tudo como lido" @@ -2567,12 +2755,12 @@ msgctxt "Content/Notifications/Button.Tooltip/Verb" msgid "Mark as unread" msgstr "Marcar como não lido" -#: front/src/views/admin/moderation/AccountsDetail.vue:310 +#: front/src/views/admin/moderation/AccountsDetail.vue:321 msgctxt "Content/*/*/Unit" msgid "MB" msgstr "MB" -#: front/src/components/audio/Player.vue:625 +#: front/src/components/audio/Player.vue:651 msgctxt "Sidebar/Player/Hidden text" msgid "Media player" msgstr "Leitor de mÃdia" @@ -2582,43 +2770,59 @@ msgctxt "Content/Profile/Paragraph" msgid "Member since %{ date }" msgstr "Registrado desde %{ date }" +#: front/src/components/manage/moderation/ReportCard.vue:109 +#: front/src/components/moderation/ReportModal.vue:41 +msgctxt "*/*/Field.Label/Noun" +msgid "Message" +msgstr "" + #: front/src/components/Footer.vue:32 msgctxt "Footer/*/List item.Link" msgid "Mobile and desktop apps" msgstr "Aplicativos móveis e de computador" +#: front/src/components/Home.vue:143 +#, fuzzy +msgctxt "Content/Home/Link" +msgid "Mobile apps" +msgstr "Aplicativos móveis e de computador" + #: front/src/components/Sidebar.vue:96 -#: src/components/manage/users/UsersTable.vue:177 -#: front/src/views/admin/moderation/AccountsDetail.vue:502 -#: front/src/views/admin/moderation/Base.vue:21 +#: src/components/manage/users/UsersTable.vue:178 +#: front/src/views/admin/Settings.vue:85 +#: front/src/views/admin/moderation/AccountsDetail.vue:522 +#: front/src/views/admin/moderation/Base.vue:43 msgctxt "*/Moderation/*" msgid "Moderation" msgstr "Moderação" #: front/src/views/admin/moderation/AccountsDetail.vue:78 -#: front/src/views/admin/moderation/DomainsDetail.vue:42 +#: front/src/views/admin/moderation/DomainsDetail.vue:70 msgctxt "Content/Moderation/Card.Paragraph" -msgid "" -"Moderation policies help you control how your instance interact with a given" -" domain or account." -msgstr "" -"As polÃticas de moderação ajudam a controlar como sua instância interage com" -" um determinado domÃnio ou conta." +msgid "Moderation policies help you control how your instance interact with a given domain or account." +msgstr "As polÃticas de moderação ajudam a controlar como sua instância interage com um determinado domÃnio ou conta." + +#: front/src/components/manage/moderation/InstancePolicyModal.vue:4 +#, fuzzy +msgctxt "Content/Moderation/Button.Label" +msgid "Moderation rules…" +msgstr "Atualizar a regra de moderação" #: front/src/components/library/EditCard.vue:5 msgctxt "Content/Library/Card/Short" msgid "Modification %{ id }" msgstr "Data de modificação" -#: front/src/components/mixins/Translations.vue:48 -#: front/src/components/mixins/Translations.vue:49 +#: front/src/components/mixins/Translations.vue:58 +#: front/src/components/mixins/Translations.vue:59 msgctxt "Content/Playlist/Dropdown/Noun" msgid "Modification date" msgstr "Data de modificação" -#: front/src/components/library/AlbumBase.vue:42 -#: front/src/components/library/ArtistBase.vue:53 -#: front/src/components/library/TrackBase.vue:61 +#: front/src/components/audio/PlayButton.vue:100 +#: front/src/components/library/AlbumBase.vue:43 +#: front/src/components/library/ArtistBase.vue:54 +#: front/src/components/library/TrackBase.vue:59 msgctxt "*/*/Button.Label/Noun" msgid "More…" msgstr "" @@ -2628,7 +2832,7 @@ msgctxt "*/*/*/Noun" msgid "Music" msgstr "Música" -#: front/src/components/audio/Player.vue:631 +#: front/src/components/audio/Player.vue:657 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Mute" msgstr "Mudo" @@ -2675,8 +2879,8 @@ msgctxt "Content/Library/Title" msgid "My libraries" msgstr "Minhas bibliotecas" -#: front/src/components/audio/track/Row.vue:40 -#: src/components/library/EditCard.vue:60 +#: front/src/components/About.vue:105 src/components/audio/track/Row.vue:40 +#: front/src/components/library/EditCard.vue:60 #: front/src/components/library/EditForm.vue:70 #: front/src/components/library/TrackDetail.vue:34 #: front/src/components/library/TrackDetail.vue:43 @@ -2686,54 +2890,56 @@ msgstr "Minhas bibliotecas" #: front/src/components/manage/library/TracksTable.vue:76 #: front/src/components/manage/library/UploadsTable.vue:121 #: front/src/components/manage/library/UploadsTable.vue:128 -#: front/src/components/manage/users/UsersTable.vue:61 +#: front/src/components/manage/moderation/ReportCard.vue:78 +#: front/src/components/manage/moderation/ReportCard.vue:87 +#: front/src/components/manage/moderation/ReportCard.vue:193 +#: front/src/components/manage/users/UsersTable.vue:62 #: front/src/views/admin/library/UploadDetail.vue:179 #: front/src/views/admin/library/UploadDetail.vue:214 #: front/src/views/admin/library/UploadDetail.vue:233 #: front/src/views/admin/library/UploadDetail.vue:244 #: front/src/views/admin/library/UploadDetail.vue:257 -#: front/src/views/admin/moderation/AccountsDetail.vue:192 -#: front/src/views/admin/moderation/DomainsDetail.vue:82 +#: front/src/views/admin/moderation/AccountsDetail.vue:193 +#: front/src/views/admin/moderation/DomainsDetail.vue:119 #: front/src/views/content/libraries/FilesTable.vue:95 #: front/src/views/content/libraries/FilesTable.vue:101 msgctxt "*/*/*" msgid "N/A" msgstr "" -#: front/src/components/manage/library/LibrariesTable.vue:48 -#: front/src/components/manage/library/UploadsTable.vue:59 -msgctxt "*/*/*" -msgid "Name" -msgstr "Nome" - #: front/src/components/auth/ApplicationForm.vue:9 -msgctxt "Content/Applications/Input.Label/Noun" -msgid "Name" -msgstr "Nome" - #: front/src/components/auth/Settings.vue:133 #: front/src/components/manage/library/ArtistsTable.vue:39 +#: front/src/components/manage/library/LibrariesTable.vue:48 +#: front/src/components/manage/library/TagsTable.vue:41 +#: front/src/components/manage/library/UploadsTable.vue:59 #: front/src/components/manage/moderation/AccountsTable.vue:39 -#: front/src/components/manage/moderation/DomainsTable.vue:38 -#: front/src/components/mixins/Translations.vue:53 +#: front/src/components/manage/moderation/DomainsTable.vue:46 +#: front/src/components/mixins/Translations.vue:63 #: front/src/components/playlists/PlaylistModal.vue:45 -#: front/src/views/admin/library/ArtistDetail.vue:98 +#: front/src/views/admin/library/ArtistDetail.vue:103 #: front/src/views/admin/library/LibraryDetail.vue:85 +#: front/src/views/admin/library/TagDetail.vue:68 #: front/src/views/admin/library/UploadDetail.vue:92 -#: front/src/views/admin/moderation/DomainsDetail.vue:97 -#: front/src/views/content/libraries/Form.vue:10 src/edits.js:10 -#: front/src/components/mixins/Translations.vue:54 +#: front/src/views/admin/moderation/DomainsDetail.vue:134 +#: front/src/views/content/libraries/Form.vue:10 src/edits.js:17 +#: front/src/components/mixins/Translations.vue:64 msgctxt "*/*/*/Noun" msgid "Name" msgstr "Nome" +#: front/src/views/Notifications.vue:24 src/views/Notifications.vue:58 +msgctxt "*/*/*" +msgid "Never" +msgstr "" + #: front/src/components/auth/Settings.vue:88 #: front/src/views/auth/PasswordResetConfirm.vue:14 msgctxt "Content/Settings/Input.Label" msgid "New password" msgstr "Nova senha" -#: front/src/components/Sidebar.vue:173 +#: front/src/components/Sidebar.vue:177 msgctxt "Sidebar/Player/Paragraph" msgid "New tracks will be appended here automatically." msgstr "Novas músicas serão adicionadas automaticamente aqui." @@ -2743,21 +2949,18 @@ msgctxt "Content/Library/Card.Table.Header/Short" msgid "New value" msgstr "" -#: front/src/components/audio/Player.vue:629 +#: front/src/components/audio/Player.vue:655 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Next track" msgstr "Música seguinte" -#: front/src/components/Sidebar.vue:130 +#: front/src/components/Sidebar.vue:134 +#: front/src/components/manage/moderation/DomainsTable.vue:13 +#: front/src/views/admin/moderation/DomainsDetail.vue:110 msgctxt "*/*/*" msgid "No" msgstr "Não" -#: front/src/components/Home.vue:95 -msgctxt "Content/Home/List item" -msgid "No add-ons, no plugins : you only need a web library" -msgstr "Sem add-ons, sem plugins: você só precisa de uma biblioteca da Web" - #: front/src/components/audio/Search.vue:25 msgctxt "Content/Search/Paragraph" msgid "No album matched your query" @@ -2773,6 +2976,11 @@ msgctxt "Content/Track/Table.Paragraph" msgid "No copyright information available for this track" msgstr "Nenhuma letra disponÃvel para esta música." +#: front/src/components/About.vue:25 src/components/Home.vue:25 +msgctxt "Content/Home/Paragraph" +msgid "No description available." +msgstr "" + #: front/src/components/library/TrackDetail.vue:25 msgctxt "Content/Track/Table.Paragraph" msgid "No licensing information for this track" @@ -2783,7 +2991,7 @@ msgctxt "Content/Federation/Paragraph" msgid "No matching library." msgstr "Nenhuma biblioteca correspondente." -#: front/src/views/Notifications.vue:28 +#: front/src/views/Notifications.vue:93 msgctxt "Content/Notifications/Paragraph" msgid "No notification to show." msgstr "Ainda não há notificações." @@ -2793,6 +3001,16 @@ msgctxt "Content/*/Paragraph" msgid "No results were found." msgstr "" +#: front/src/components/About.vue:32 +msgctxt "Content/Home/Paragraph" +msgid "No rules available." +msgstr "" + +#: front/src/components/About.vue:39 +msgctxt "Content/Home/Paragraph" +msgid "No terms available." +msgstr "" + #: front/src/components/mixins/Translations.vue:10 #: front/src/components/mixins/Translations.vue:11 msgctxt "Content/Settings/Dropdown" @@ -2809,18 +3027,22 @@ msgctxt "Content/Admin/Table" msgid "Not used" msgstr "Não usado" -#: front/src/components/mixins/Translations.vue:100 -#: front/src/components/mixins/Translations.vue:101 -msgctxt "Content/OAuth Scopes/Label" -msgid "Notifications" -msgstr "Notificações" - -#: front/src/components/Sidebar.vue:46 src/views/Notifications.vue:76 +#: front/src/components/Sidebar.vue:46 +#: src/components/mixins/Translations.vue:112 +#: front/src/views/Notifications.vue:151 +#: src/components/mixins/Translations.vue:113 msgctxt "*/Notifications/*" msgid "Notifications" msgstr "Notificações" -#: front/src/components/Footer.vue:47 +#: front/src/components/mixins/Translations.vue:47 +#: front/src/components/mixins/Translations.vue:48 +#, fuzzy +msgctxt "Content/Moderation/Dropdown" +msgid "Offensive content" +msgstr "Adicionar conteúdo" + +#: front/src/components/Footer.vue:55 msgctxt "Footer/*/List item.Link" msgid "Official website" msgstr "Website oficial" @@ -2835,6 +3057,12 @@ msgctxt "Content/Library/Card.Table.Header/Short" msgid "Old value" msgstr "" +#: front/src/components/About.vue:90 +#, fuzzy +msgctxt "*/*/*/State of registrations" +msgid "Open" +msgstr "Aberto" + #: front/src/components/manage/users/InvitationsTable.vue:20 msgctxt "Content/Admin/Dropdown/Adjective" msgid "Open" @@ -2842,27 +3070,29 @@ msgstr "Aberto" #: front/src/components/library/ImportStatusModal.vue:56 msgctxt "Popup/Import/Table.Label/Value" -msgid "" -"Open a support thread (include the debug information below in your message)" +msgid "Open a support thread (include the debug information below in your message)" msgstr "" -#: front/src/components/library/AlbumBase.vue:73 -#: front/src/components/library/ArtistBase.vue:84 -#: front/src/components/library/TrackBase.vue:92 +#: front/src/components/library/AlbumBase.vue:87 +#: front/src/components/library/ArtistBase.vue:99 +#: front/src/components/library/TagDetail.vue:11 +#: front/src/components/library/TrackBase.vue:103 +#: front/src/components/manage/moderation/ReportCard.vue:128 msgctxt "Content/Moderation/Link" msgid "Open in moderation interface" msgstr "Atualizar a regra de moderação" -#: front/src/views/admin/library/AlbumDetail.vue:31 -#: front/src/views/admin/library/ArtistDetail.vue:30 -#: front/src/views/admin/library/TrackDetail.vue:30 +#: front/src/views/admin/library/AlbumDetail.vue:37 +#: front/src/views/admin/library/ArtistDetail.vue:35 +#: front/src/views/admin/library/TagDetail.vue:21 +#: front/src/views/admin/library/TrackDetail.vue:36 msgctxt "Content/Moderation/Link/Verb" msgid "Open local profile" msgstr "Abrir o perfil" -#: front/src/views/admin/library/AlbumDetail.vue:46 -#: front/src/views/admin/library/ArtistDetail.vue:45 -#: front/src/views/admin/library/TrackDetail.vue:45 +#: front/src/views/admin/library/AlbumDetail.vue:52 +#: front/src/views/admin/library/ArtistDetail.vue:50 +#: front/src/views/admin/library/TrackDetail.vue:51 msgctxt "Content/Moderation/Link/Verb" msgid "Open on MusicBrainz" msgstr "Ver no MusicBrainz" @@ -2872,10 +3102,10 @@ msgctxt "Content/Moderation/Link/Verb" msgid "Open profile" msgstr "Abrir o perfil" -#: front/src/views/admin/library/AlbumDetail.vue:54 -#: front/src/views/admin/library/ArtistDetail.vue:53 +#: front/src/views/admin/library/AlbumDetail.vue:60 +#: front/src/views/admin/library/ArtistDetail.vue:58 #: front/src/views/admin/library/LibraryDetail.vue:49 -#: front/src/views/admin/library/TrackDetail.vue:53 +#: front/src/views/admin/library/TrackDetail.vue:59 #: front/src/views/admin/library/UploadDetail.vue:50 #: front/src/views/admin/moderation/AccountsDetail.vue:52 msgctxt "Content/Moderation/Link/Verb" @@ -2896,6 +3126,7 @@ msgstr "Ou personalize sua regra" #: src/components/library/Radios.vue:41 #: front/src/components/manage/library/EditsCardList.vue:37 #: front/src/components/manage/users/UsersTable.vue:17 +#: front/src/views/admin/moderation/ReportsList.vue:42 #: front/src/views/playlists/List.vue:25 msgctxt "Content/Search/Dropdown.Label/Noun" msgid "Order" @@ -2903,40 +3134,51 @@ msgstr "Ordenar" #: front/src/components/favorites/List.vue:24 #: src/components/library/Albums.vue:15 -#: front/src/components/library/Artists.vue:15 +#: front/src/components/library/Artists.vue:19 #: src/components/library/Radios.vue:33 #: front/src/components/manage/library/AlbumsTable.vue:11 #: front/src/components/manage/library/ArtistsTable.vue:11 #: front/src/components/manage/library/EditsCardList.vue:29 #: front/src/components/manage/library/LibrariesTable.vue:20 +#: front/src/components/manage/library/TagsTable.vue:11 #: front/src/components/manage/library/TracksTable.vue:11 #: front/src/components/manage/library/UploadsTable.vue:30 #: front/src/components/manage/moderation/AccountsTable.vue:11 -#: front/src/components/manage/moderation/DomainsTable.vue:9 +#: front/src/components/manage/moderation/DomainsTable.vue:17 #: front/src/components/manage/users/InvitationsTable.vue:9 #: front/src/components/manage/users/UsersTable.vue:9 +#: front/src/views/admin/moderation/ReportsList.vue:34 #: front/src/views/content/libraries/FilesTable.vue:21 #: front/src/views/playlists/List.vue:17 msgctxt "Content/Search/Dropdown.Label/Noun" msgid "Ordering" msgstr "Ordenar" -#: front/src/components/library/Albums.vue:23 -#: src/components/library/Artists.vue:23 +#: front/src/components/library/Albums.vue:27 +#: src/components/library/Artists.vue:27 #: front/src/components/manage/library/AlbumsTable.vue:19 #: front/src/components/manage/library/ArtistsTable.vue:19 #: front/src/components/manage/library/LibrariesTable.vue:28 +#: front/src/components/manage/library/TagsTable.vue:19 #: front/src/components/manage/library/TracksTable.vue:19 #: front/src/components/manage/library/UploadsTable.vue:38 #: front/src/components/manage/moderation/AccountsTable.vue:19 -#: front/src/components/manage/moderation/DomainsTable.vue:17 +#: front/src/components/manage/moderation/DomainsTable.vue:25 #: front/src/views/content/libraries/FilesTable.vue:29 msgctxt "Content/Search/Dropdown.Label/Noun" msgid "Ordering direction" msgstr "Direção de ordenar" +#: front/src/components/mixins/Translations.vue:48 +#: front/src/components/mixins/Translations.vue:49 +msgctxt "Content/Moderation/Dropdown" +msgid "Other" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:143 #: front/src/components/manage/users/InvitationsTable.vue:38 -msgctxt "Content/Admin/Table.Label" +#, fuzzy +msgctxt "*/*/*" msgid "Owner" msgstr "Proprietário" @@ -2955,12 +3197,15 @@ msgctxt "Content/*/Hidden text/Noun" msgid "Pagination" msgstr "Paginação" -#: front/src/components/auth/Login.vue:33 src/components/auth/Signup.vue:40 -msgctxt "Content/*/Input.Label" +#: front/src/components/auth/LoginForm.vue:32 +#: src/components/auth/Settings.vue:291 +#: front/src/components/auth/SignupForm.vue:36 +#, fuzzy +msgctxt "*/*/*" msgid "Password" msgstr "Palavra-passe" -#: front/src/components/auth/SubsonicTokenForm.vue:94 +#: front/src/components/auth/SubsonicTokenForm.vue:100 msgctxt "Content/Settings/Message" msgid "Password updated" msgstr "Senha atualizada" @@ -2970,12 +3215,12 @@ msgctxt "Content/Signup/Card.Title" msgid "Password updated successfully" msgstr "Senha atualizada com sucesso" -#: front/src/components/audio/Player.vue:628 +#: front/src/components/audio/Player.vue:654 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Pause track" msgstr "Parar música" -#: front/src/components/ShortcutsModal.vue:59 +#: front/src/components/ShortcutsModal.vue:96 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Pause/play the current track" msgstr "Pausa/leitura da pista actual" @@ -3004,7 +3249,7 @@ msgctxt "Content/Library/Label" msgid "Pending files" msgstr "Ficheiros pendentes" -#: front/src/components/Sidebar.vue:225 +#: front/src/components/Sidebar.vue:232 msgctxt "Sidebar/Notifications/Hidden text" msgid "Pending follow requests" msgstr "Solicitações pendentes" @@ -3015,84 +3260,76 @@ msgctxt "Content/Admin/*/Noun" msgid "Pending review" msgstr "Ficheiros pendentes" -#: front/src/components/Sidebar.vue:226 +#: front/src/components/Sidebar.vue:233 msgctxt "Sidebar/Moderation/Hidden text" msgid "Pending review edits" msgstr "Ficheiros pendentes" +#: front/src/components/auth/Settings.vue:176 #: front/src/components/manage/users/UsersTable.vue:42 #: front/src/views/admin/moderation/AccountsDetail.vue:166 -msgctxt "Content/Admin/Table.Label/Noun" -msgid "Permissions" -msgstr "Permissões" - -#: front/src/components/auth/Settings.vue:176 msgctxt "Content/*/*/Noun" msgid "Permissions" msgstr "Permissões" #: front/src/components/audio/PlayButton.vue:9 -#: front/src/components/library/TrackBase.vue:26 +#: front/src/components/library/TrackBase.vue:24 msgctxt "*/Queue/Button.Label/Short, Verb" msgid "Play" msgstr "Jogar" #: front/src/components/audio/album/Card.vue:48 -#: front/src/components/audio/artist/Card.vue:44 -#: front/src/components/library/AlbumBase.vue:20 +#: front/src/components/library/AlbumBase.vue:21 #: front/src/components/library/AlbumDetail.vue:11 #: src/views/playlists/Detail.vue:24 msgctxt "Content/Queue/Button.Label/Short, Verb" msgid "Play all" msgstr "Jogar tudo" -#: front/src/components/library/ArtistBase.vue:31 +#: front/src/components/library/ArtistBase.vue:32 msgctxt "Content/Artist/Button.Label/Verb" msgid "Play all albums" msgstr "Jogar todos os álbuns" -#: front/src/components/audio/PlayButton.vue:76 +#: front/src/components/audio/PlayButton.vue:92 msgctxt "*/Queue/Dropdown/Button/Title" msgid "Play next" msgstr "Jogar seguinte" -#: front/src/components/ShortcutsModal.vue:67 +#: front/src/components/ShortcutsModal.vue:120 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Play next track" msgstr "Jogar pista seguinte" -#: front/src/components/audio/PlayButton.vue:74 +#: front/src/components/audio/PlayButton.vue:90 msgctxt "*/Queue/Dropdown/Button/Title" msgid "Play now" msgstr "Jogue agora" -#: front/src/components/ShortcutsModal.vue:63 +#: front/src/components/ShortcutsModal.vue:116 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Play previous track" msgstr "Jogar pista anterior" -#: front/src/components/audio/PlayButton.vue:77 +#: front/src/components/audio/PlayButton.vue:93 msgctxt "*/Queue/Dropdown/Button/Title" msgid "Play similar songs" msgstr "" -#: front/src/components/Sidebar.vue:224 +#: front/src/components/Sidebar.vue:231 msgctxt "Sidebar/Player/Hidden text" msgid "Play this track" msgstr "Jogar esta pista" -#: front/src/components/audio/Player.vue:627 +#: front/src/components/audio/Player.vue:653 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Play track" msgstr "Jogar mÅ©sica" -#: front/src/components/audio/PlayButton.vue:82 -msgctxt "*/Queue/Button/Title" -msgid "Play..." -msgstr "Jogar" - -#: front/src/views/playlists/Detail.vue:91 -msgctxt "Head/Playlist/Title" +#: front/src/components/mixins/Report.vue:66 src/views/playlists/Detail.vue:121 +#: front/src/components/mixins/Report.vue:67 +#, fuzzy +msgctxt "*/*/*" msgid "Playlist" msgstr "Playlist" @@ -3129,33 +3366,30 @@ msgctxt "Content/Playlist/Dropdown.Label" msgid "Playlist visibility" msgstr "Visibilidade da playlist" -#: front/src/components/mixins/Translations.vue:88 -#: front/src/components/mixins/Translations.vue:89 -msgctxt "Content/OAuth Scopes/Label" -msgid "Playlists" -msgstr "Playlists" - #: front/src/components/Sidebar.vue:71 src/components/library/Home.vue:16 -#: front/src/components/library/Library.vue:16 src/views/admin/Settings.vue:83 -#: front/src/views/admin/library/AlbumDetail.vue:173 -#: front/src/views/admin/library/ArtistDetail.vue:162 -#: front/src/views/admin/library/TrackDetail.vue:225 +#: front/src/components/library/Library.vue:16 +#: front/src/components/mixins/Translations.vue:100 +#: src/views/admin/Settings.vue:83 +#: front/src/views/admin/library/AlbumDetail.vue:179 +#: front/src/views/admin/library/ArtistDetail.vue:167 +#: front/src/views/admin/library/TrackDetail.vue:231 #: src/views/playlists/List.vue:106 +#: front/src/components/mixins/Translations.vue:101 msgctxt "*/*/*" msgid "Playlists" msgstr "Playlists" -#: front/src/components/Home.vue:56 -msgctxt "Content/Home/List item" -msgid "Playlists? We got them" -msgstr "Playlist criada" +#: front/src/components/audio/EmbedWizard.vue:9 +msgctxt "Content/Embed/Message" +msgid "Please contact your admins and ask them to update the corresponding setting." +msgstr "" #: front/src/components/auth/Settings.vue:79 msgctxt "Content/Settings/Error message.List item/Call to action" msgid "Please double-check your password is correct" msgstr "Por favor, verifique novamente se sua senha está correta" -#: front/src/components/auth/Login.vue:9 +#: front/src/components/auth/LoginForm.vue:5 msgctxt "Content/Login/Error message.List item/Call to action" msgid "Please double-check your username/password couple is correct" msgstr "Por favor, verifique se o seu nome de usuário e senha estão corretos" @@ -3165,25 +3399,27 @@ msgctxt "Content/Settings/Paragraph" msgid "PNG, GIF or JPG. At most 2MB. Will be downscaled to 400x400px." msgstr "PNG, GIF ou JPG. No máximo 2MB. Será reduzido para 400x400px." -#: front/src/views/admin/library/TrackDetail.vue:137 -msgctxt "*/*/*/Noun" +#: front/src/components/About.vue:72 +msgctxt "Content/About/Header/Name" +msgid "Pod configuration" +msgstr "" + +#: front/src/views/admin/library/TrackDetail.vue:143 src/edits.js:70 +msgctxt "*/*/*/Short, Noun" msgid "Position" msgstr "Paginação" #: front/src/components/manage/moderation/InstancePolicyForm.vue:118 msgctxt "Content/Moderation/Help text" -msgid "" -"Prevent account or domain from triggering notifications, except from " -"followers." -msgstr "" -"Evite que uma conta ou domÃnio acione notificações, exceto de seguidores." +msgid "Prevent account or domain from triggering notifications, except from followers." +msgstr "Evite que uma conta ou domÃnio acione notificações, exceto de seguidores." -#: front/src/components/audio/EmbedWizard.vue:33 +#: front/src/components/audio/EmbedWizard.vue:43 msgctxt "Popup/Embed/Title/Noun" msgid "Preview" msgstr "Pré-visualização" -#: front/src/components/audio/Player.vue:626 +#: front/src/components/audio/Player.vue:652 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Previous track" msgstr "Música anterior" @@ -3194,7 +3430,7 @@ msgctxt "Content/Settings/Dropdown/Short" msgid "Private" msgstr "" -#: front/src/views/content/remote/Card.vue:43 +#: front/src/views/content/remote/Card.vue:56 msgctxt "Content/Library/Card.List item" msgid "Problem during scanning" msgstr "Erro durante a análise" @@ -3215,14 +3451,20 @@ msgctxt "Content/Library/Tab.Title/Short" msgid "Processing" msgstr "Em tratamento" -#: front/src/components/mixins/Translations.vue:68 -#: front/src/components/mixins/Translations.vue:69 +#: front/src/components/mixins/Translations.vue:80 +#: front/src/components/mixins/Translations.vue:81 msgctxt "Content/OAuth Scopes/Label" msgid "Profile" msgstr "Abrir o perfil" +#: front/src/components/auth/SignupForm.vue:5 +#, fuzzy +msgctxt "Content/Signup/Form/Paragraph" +msgid "Public registrations are not possible on this instance. You will need an invitation code to sign up." +msgstr "As inscrições estão fechadas nesta instância, você precisará de um código de convite para inscrição." + #: front/src/components/manage/moderation/AccountsTable.vue:188 -#: front/src/components/manage/moderation/DomainsTable.vue:168 +#: front/src/components/manage/moderation/DomainsTable.vue:186 #: front/src/views/content/libraries/Quota.vue:36 #: front/src/views/content/libraries/Quota.vue:39 #: front/src/views/content/libraries/Quota.vue:62 @@ -3253,7 +3495,7 @@ msgctxt "Sidebar/Queue/Tab.Title/Noun" msgid "Queue" msgstr "Fila" -#: front/src/components/audio/Player.vue:322 +#: front/src/components/audio/Player.vue:329 msgctxt "Content/Queue/Message" msgid "Queue shuffled!" msgstr "Fila embaralhada!" @@ -3285,16 +3527,12 @@ msgstr "Rádio atualizado" #: front/src/components/library/Library.vue:13 #: src/components/library/Radios.vue:142 +#: front/src/components/mixins/Translations.vue:104 +#: front/src/components/mixins/Translations.vue:105 msgctxt "*/*/*" msgid "Radios" msgstr "Rádios" -#: front/src/components/mixins/Translations.vue:92 -#: front/src/components/mixins/Translations.vue:93 -msgctxt "Content/OAuth Scopes/Label" -msgid "Radios" -msgstr "Rádios" - #: front/src/components/auth/ApplicationForm.vue:151 msgctxt "Content/OAuth Scopes/Label/Verb" msgid "Read" @@ -3321,15 +3559,15 @@ msgctxt "Content/Moderation/*/Noun" msgid "Reason" msgstr "Motivo" -#: front/src/views/admin/moderation/AccountsDetail.vue:251 -#: front/src/views/admin/moderation/DomainsDetail.vue:179 +#: front/src/views/admin/moderation/AccountsDetail.vue:252 +#: front/src/views/admin/moderation/DomainsDetail.vue:216 msgctxt "Content/Moderation/Table.Label/Noun" msgid "Received library follows" msgstr "A biblioteca emitida segue" -#: front/src/components/manage/moderation/DomainsTable.vue:40 -#: front/src/components/mixins/Translations.vue:62 -#: front/src/components/mixins/Translations.vue:63 +#: front/src/components/manage/moderation/DomainsTable.vue:48 +#: front/src/components/mixins/Translations.vue:74 +#: front/src/components/mixins/Translations.vue:75 msgctxt "Content/Moderation/*/Noun" msgid "Received messages" msgstr "Mensagens recebidas" @@ -3349,6 +3587,12 @@ msgctxt "Content/Home/Title" msgid "Recently added" msgstr "Adicionado recentemente" +#: front/src/components/Home.vue:167 +#, fuzzy +msgctxt "Content/Home/Title" +msgid "Recently added albums" +msgstr "Adicionado recentemente" + #: front/src/components/library/Home.vue:11 msgctxt "Content/Home/Title" msgid "Recently favorited" @@ -3377,14 +3621,14 @@ msgctxt "Popup/*/Message.Title" msgid "Refresh error" msgstr "Atualizar" -#: front/src/views/admin/library/AlbumDetail.vue:50 -#: front/src/views/admin/library/ArtistDetail.vue:49 -#: front/src/views/admin/library/TrackDetail.vue:49 +#: front/src/views/admin/library/AlbumDetail.vue:56 +#: front/src/views/admin/library/ArtistDetail.vue:54 +#: front/src/views/admin/library/TrackDetail.vue:55 msgctxt "Content/Moderation/Button/Verb" msgid "Refresh from remote server" msgstr "" -#: front/src/views/admin/moderation/DomainsDetail.vue:127 +#: front/src/views/admin/moderation/DomainsDetail.vue:164 msgctxt "Content/Moderation/Button.Label/Verb" msgid "Refresh node info" msgstr "Atualizar informações do nó" @@ -3396,9 +3640,7 @@ msgstr "Atualizar informações do nó" #: front/src/components/federation/FetchButton.vue:80 msgctxt "Popup/*/Message.Content" -msgid "" -"Refresh request wasn't proceed in time by our server. It will be processed " -"later." +msgid "Refresh request wasn't proceed in time by our server. It will be processed later." msgstr "" #: front/src/components/federation/FetchButton.vue:16 @@ -3421,16 +3663,13 @@ msgctxt "Popup/*/Title" msgid "Refreshing object from remote…" msgstr "" -#: front/src/components/auth/Signup.vue:9 -msgctxt "Content/Signup/Form/Paragraph" -msgid "" -"Registration are closed on this instance, you will need an invitation code " -"to signup." -msgstr "" -"As inscrições estão fechadas nesta instância, você precisará de um código de" -" convite para inscrição." +#: front/src/components/About.vue:86 +#, fuzzy +msgctxt "*/*/*" +msgid "Registrations" +msgstr "Administração" -#: front/src/components/manage/users/UsersTable.vue:71 +#: front/src/components/manage/users/UsersTable.vue:72 msgctxt "Content/Admin/Table, User role" msgid "Regular user" msgstr "usuário regular" @@ -3455,8 +3694,8 @@ msgid "Rejected" msgstr "Rejeitado" #: front/src/components/manage/library/AlbumsTable.vue:43 -#: front/src/components/mixins/Translations.vue:44 src/edits.js:28 -#: front/src/components/mixins/Translations.vue:45 +#: front/src/components/mixins/Translations.vue:54 src/edits.js:43 +#: front/src/components/mixins/Translations.vue:55 msgctxt "Content/*/*/Noun" msgid "Release date" msgstr "Data da última vista" @@ -3466,6 +3705,11 @@ msgctxt "Content/Library/Paragraph" msgid "Remaining storage space" msgstr "" +#: front/src/views/Notifications.vue:18 src/views/Notifications.vue:52 +msgctxt "Content/Notifications/Label" +msgid "Remind me in:" +msgstr "" + #: front/src/views/content/remote/Home.vue:6 msgctxt "Content/Library/Title/Noun" msgid "Remote libraries" @@ -3473,12 +3717,8 @@ msgstr "Bibliotecas Remotas" #: front/src/views/content/remote/Home.vue:7 msgctxt "Content/Library/Paragraph" -msgid "" -"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." -msgstr "" -"Bibliotecas remotas são de propriedade de outros usuários na rede. Você pode" -" acessá-los desde que sejam públicos ou tenha acesso." +msgid "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." +msgstr "Bibliotecas remotas são de propriedade de outros usuários na rede. Você pode acessá-los desde que sejam públicos ou tenha acesso." #: front/src/components/library/radios/Filter.vue:59 msgctxt "Content/Radio/Button.Label/Verb" @@ -3495,6 +3735,13 @@ msgctxt "Content/Moderation/Button.Label" msgid "Remove filter" msgstr "Remover avatar" +#: front/src/components/manage/moderation/DomainsTable.vue:198 +#: front/src/views/admin/moderation/DomainsDetail.vue:39 +#, fuzzy +msgctxt "Content/Moderation/Action/Verb" +msgid "Remove from allow-list" +msgstr "Remover dos favoritos" + #: front/src/components/favorites/TrackFavoriteIcon.vue:26 msgctxt "Content/Track/Icon.Tooltip/Verb" msgid "Remove from favorites" @@ -3502,43 +3749,104 @@ msgstr "Remover dos favoritos" #: front/src/views/content/libraries/Quota.vue:38 msgctxt "Popup/Library/Paragraph" -msgid "" -"Removes uploaded but yet to be processed tracks completely, adding the " -"corresponding data to your quota." -msgstr "" -"Remove as pistas carregadas mas ainda a serem processadas completamente, " -"adicionando os dados correspondentes à sua quota." +msgid "Removes uploaded but yet to be processed tracks completely, adding the corresponding data to your quota." +msgstr "Remove as pistas carregadas mas ainda a serem processadas completamente, adicionando os dados correspondentes à sua quota." #: front/src/views/content/libraries/Quota.vue:64 msgctxt "Popup/Library/Paragraph" -msgid "" -"Removes uploaded tracks skipped during the import processes completely, " -"adding the corresponding data to your quota." -msgstr "" -"Remove as pistas carregadas ignoradas durante os processos de importação " -"completamente, adicionando os dados correspondentes à sua quota." +msgid "Removes uploaded tracks skipped during the import processes completely, adding the corresponding data to your quota." +msgstr "Remove as pistas carregadas ignoradas durante os processos de importação completamente, adicionando os dados correspondentes à sua quota." #: front/src/views/content/libraries/Quota.vue:90 msgctxt "Popup/Library/Paragraph" -msgid "" -"Removes uploaded tracks that could not be processed by the server " -"completely, adding the corresponding data to your quota." +msgid "Removes uploaded tracks that could not be processed by the server completely, adding the corresponding data to your quota." +msgstr "Remove as pistas carregadas que não puderam ser processadas completamente pelo servidor, adicionando os dados correspondentes à sua quota." + +#: front/src/components/audio/PlayButton.vue:94 +#, fuzzy +msgctxt "*/Queue/Dropdown/Button/Title" +msgid "Replace current queue" +msgstr "Adicionar à fila atual" + +#: front/src/components/mixins/Report.vue:6 src/components/mixins/Report.vue:7 +msgctxt "*/Moderation/*/Verb" +msgid "Report @%{ username }…" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:5 +msgctxt "Content/Moderation/Card/Short" +msgid "Report %{ id }" +msgstr "" + +#: front/src/components/moderation/ReportModal.vue:139 +msgctxt "*/Moderation/Message" +msgid "Report successfully submitted, thank you" +msgstr "" + +#: front/src/components/mixins/Report.vue:36 +#: src/components/mixins/Report.vue:37 +#, fuzzy +msgctxt "*/Moderation/*/Verb" +msgid "Report this album…" +msgstr "Jogar esta pista" + +#: front/src/components/mixins/Report.vue:50 +#: src/components/mixins/Report.vue:51 +#, fuzzy +msgctxt "*/Moderation/*/Verb" +msgid "Report this artist…" +msgstr "Jogar esta pista" + +#: front/src/components/mixins/Report.vue:72 +#: src/components/mixins/Report.vue:73 +#, fuzzy +msgctxt "*/Moderation/*/Verb" +msgid "Report this library…" +msgstr "Excluir esta biblioteca?" + +#: front/src/components/mixins/Report.vue:61 +#: src/components/mixins/Report.vue:62 +#, fuzzy +msgctxt "*/Moderation/*/Verb" +msgid "Report this playlist…" +msgstr "Adicionar a esta playlist" + +#: front/src/components/mixins/Report.vue:23 +#: src/components/mixins/Report.vue:24 +#, fuzzy +msgctxt "*/Moderation/*/Verb" +msgid "Report this track…" +msgstr "Jogar esta pista" + +#: front/src/components/audio/PlayButton.vue:95 +msgctxt "*/Moderation/*/Button/Label,Verb" +msgid "Report…" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:117 +msgctxt "Content/*/*/Short" +msgid "Reported object" +msgstr "" + +#: front/src/views/admin/moderation/Base.vue:5 +#: front/src/views/admin/moderation/ReportsList.vue:3 +#: front/src/views/admin/moderation/ReportsList.vue:208 +msgctxt "*/Moderation/*/Noun" +msgid "Reports" msgstr "" -"Remove as pistas carregadas que não puderam ser processadas completamente " -"pelo servidor, adicionando os dados correspondentes à sua quota." -#: front/src/components/auth/SubsonicTokenForm.vue:33 -#: front/src/components/auth/SubsonicTokenForm.vue:36 +#: front/src/components/auth/SubsonicTokenForm.vue:38 +#: front/src/components/auth/SubsonicTokenForm.vue:41 msgctxt "*/Settings/Button.Label/Verb" msgid "Request a new password" msgstr "Solicite uma nova senha" -#: front/src/components/auth/SubsonicTokenForm.vue:34 +#: front/src/components/auth/SubsonicTokenForm.vue:39 msgctxt "Popup/Settings/Title" msgid "Request a new Subsonic API password?" msgstr "Solicitar uma nova senha da Subsonic API?" -#: front/src/components/auth/SubsonicTokenForm.vue:42 +#: front/src/components/auth/SubsonicTokenForm.vue:47 msgctxt "Content/Settings/Button.Label/Verb" msgid "Request a password" msgstr "Solicite uma senha" @@ -3548,35 +3856,52 @@ msgctxt "Popup/*/Loading.Title" msgid "Requesting a fetch…" msgstr "" -#: front/src/components/library/EditForm.vue:82 +#: front/src/components/library/EditForm.vue:94 msgctxt "Content/Library/Button.Label" -msgid "Reset to initial value: %{ value }" +msgid "Reset to initial value" msgstr "" -#: front/src/components/auth/Login.vue:35 src/views/auth/PasswordReset.vue:4 -#: front/src/views/auth/PasswordReset.vue:53 +#: front/src/components/auth/LoginForm.vue:34 +#: src/views/auth/PasswordReset.vue:4 front/src/views/auth/PasswordReset.vue:53 msgctxt "*/Login/*/Verb" msgid "Reset your password" msgstr "Redefinir sua senha" +#: front/src/components/manage/moderation/ReportCard.vue:83 +#, fuzzy +msgctxt "Content/*/*/Noun" +msgid "Resolution date" +msgstr "Data de criação" + +#: front/src/components/manage/moderation/ReportCard.vue:218 +msgctxt "Content/*/Button.Label/Verb" +msgid "Resolve" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:62 +#: front/src/views/admin/moderation/ReportsList.vue:20 +msgctxt "Content/*/*/Short" +msgid "Resolved" +msgstr "" + #: front/src/views/content/libraries/FilesTable.vue:223 msgctxt "Content/Library/Dropdown/Verb" msgid "Restart import" msgstr "Reinicie a importação" +#: front/src/components/library/EditForm.vue:31 +msgctxt "Content/Library/Button.Label" +msgid "Restrict to unreviewed edits" +msgstr "" + #: front/src/components/favorites/List.vue:39 -#: src/components/library/Albums.vue:30 -#: front/src/components/library/Artists.vue:30 +#: src/components/library/Albums.vue:34 +#: front/src/components/library/Artists.vue:34 #: src/components/library/Radios.vue:52 front/src/views/playlists/List.vue:32 msgctxt "Content/Search/Dropdown.Label/Noun" msgid "Results per page" msgstr "Resultados por página" -#: front/src/components/library/EditForm.vue:31 -msgctxt "Content/Library/Button.Label" -msgid "Retrict to unreviewed edits" -msgstr "" - #: front/src/views/auth/EmailConfirm.vue:17 msgctxt "Content/Signup/Link/Verb" msgid "Return to login" @@ -3607,52 +3932,54 @@ msgctxt "Content/Moderation/Card.Title/Noun" msgid "Rule" msgstr "Regra" -#: front/src/components/admin/SettingsGroup.vue:67 +#: front/src/components/About.vue:28 src/components/About.vue:56 +#, fuzzy +msgctxt "Content/About/Header" +msgid "Rules" +msgstr "Regra" + +#: front/src/components/admin/SettingsGroup.vue:75 #: front/src/components/library/radios/Builder.vue:34 msgctxt "Content/*/Button.Label/Verb" msgid "Save" msgstr "Salvar" -#: front/src/views/content/remote/Card.vue:175 +#: front/src/views/content/remote/Card.vue:203 msgctxt "Content/Library/Message" msgid "Scan launched" msgstr "Análise iniciada" -#: front/src/views/content/remote/Card.vue:67 +#: front/src/views/content/remote/Card.vue:80 msgctxt "Content/Library/Card.Button.Label/Verb" msgid "Scan now" msgstr "Scanar agora" -#: front/src/views/content/remote/Card.vue:35 +#: front/src/views/content/remote/Card.vue:48 msgctxt "Content/Library/Card.List item" msgid "Scan pending" msgstr "Ascendente" -#: front/src/views/content/remote/Card.vue:176 +#: front/src/views/content/remote/Card.vue:204 msgctxt "Content/Library/Message" msgid "Scan skipped (previous scan is too recent)" msgstr "Análise ignorada (a análise anterior é muito recente)" -#: front/src/views/content/remote/Card.vue:47 +#: front/src/views/content/remote/Card.vue:60 msgctxt "Content/Library/Card.List item" msgid "Scanned" msgstr "Analisado" -#: front/src/views/content/remote/Card.vue:51 +#: front/src/views/content/remote/Card.vue:64 msgctxt "Content/Library/Card.List item" msgid "Scanned with errors" msgstr "Analisado com erros" -#: front/src/views/content/remote/Card.vue:39 +#: front/src/views/content/remote/Card.vue:52 msgctxt "Content/Library/Card.List item" msgid "Scanning… (%{ progress }%)" msgstr "" #: front/src/components/auth/ApplicationForm.vue:22 -msgctxt "Content/Applications/Input.Label/Noun" -msgid "Scopes" -msgstr "" - #: front/src/components/auth/Settings.vue:226 msgctxt "Content/*/*/Noun" msgid "Scopes" @@ -3665,12 +3992,14 @@ msgstr "" #: front/src/components/manage/library/ArtistsTable.vue:5 #: front/src/components/manage/library/EditsCardList.vue:6 #: front/src/components/manage/library/LibrariesTable.vue:5 +#: front/src/components/manage/library/TagsTable.vue:5 #: front/src/components/manage/library/TracksTable.vue:5 #: front/src/components/manage/library/UploadsTable.vue:5 #: front/src/components/manage/moderation/AccountsTable.vue:5 #: front/src/components/manage/moderation/DomainsTable.vue:5 #: front/src/components/manage/users/InvitationsTable.vue:5 #: front/src/components/manage/users/UsersTable.vue:5 +#: front/src/views/admin/moderation/ReportsList.vue:8 #: front/src/views/content/libraries/FilesTable.vue:5 #: src/views/playlists/List.vue:13 msgctxt "Content/Search/Input.Label/Noun" @@ -3683,6 +4012,7 @@ msgid "Search a remote library" msgstr "Pesquisar uma biblioteca remota" #: front/src/components/manage/library/EditsCardList.vue:211 +#: front/src/views/admin/moderation/ReportsList.vue:207 msgctxt "Content/Search/Input.Placeholder" msgid "Search by account, summary, domain…" msgstr "Pesquisa por tÃtulo, artista, domÃnio…" @@ -3690,17 +4020,17 @@ msgstr "Pesquisa por tÃtulo, artista, domÃnio…" #: front/src/components/manage/library/LibrariesTable.vue:191 msgctxt "Content/Search/Input.Placeholder" msgid "Search by domain, actor, name, description…" -msgstr "Pesquisa por domÃnio, nome de utilizador, biografia..." +msgstr "Pesquisa por domÃnio, nome de utilizador, biografia…" #: front/src/components/manage/library/UploadsTable.vue:241 msgctxt "Content/Search/Input.Placeholder" msgid "Search by domain, actor, name, reference, source…" -msgstr "Pesquisa por domÃnio, nome de utilizador, biografia..." +msgstr "Pesquisa por domÃnio, nome de utilizador, biografia…" #: front/src/components/manage/library/ArtistsTable.vue:164 msgctxt "Content/Search/Input.Placeholder" msgid "Search by domain, name, MusicBrainz ID…" -msgstr "Pesquisa por domÃnio, nome de utilizador, biografia..." +msgstr "Pesquisa por domÃnio, nome de utilizador, biografia…" #: front/src/components/manage/library/TracksTable.vue:174 msgctxt "Content/Search/Input.Placeholder" @@ -3715,12 +4045,18 @@ msgstr "Pesquisa por tÃtulo, artista, álbum…" #: front/src/components/manage/moderation/AccountsTable.vue:171 msgctxt "Content/Search/Input.Placeholder" msgid "Search by domain, username, bio…" -msgstr "Pesquisa por domÃnio, nome de utilizador, biografia..." +msgstr "Pesquisa por domÃnio, nome de utilizador, biografia…" + +#: front/src/components/manage/library/TagsTable.vue:165 +#, fuzzy +msgctxt "Content/Search/Input.Placeholder" +msgid "Search by name" +msgstr "Pesquisar por nome…" -#: front/src/components/manage/moderation/DomainsTable.vue:151 +#: front/src/components/manage/moderation/DomainsTable.vue:168 msgctxt "Content/Search/Input.Placeholder" msgid "Search by name…" -msgstr "Pesquisar por nome..." +msgstr "Pesquisar por nome…" #: front/src/views/content/libraries/FilesTable.vue:208 msgctxt "Content/Library/Input.Placeholder" @@ -3732,12 +4068,12 @@ msgctxt "Content/Admin/Input.Placeholder/Verb" msgid "Search by username, e-mail address, code…" msgstr "Pesquisa por nome de utilizador, endereço de e-mail, código…" -#: front/src/components/manage/users/UsersTable.vue:163 +#: front/src/components/manage/users/UsersTable.vue:164 msgctxt "Content/Search/Input.Placeholder" msgid "Search by username, e-mail address, name…" msgstr "Pesquisa por nome de utilizador, endereço de e-mail, nome…" -#: front/src/components/audio/SearchBar.vue:20 +#: front/src/components/audio/SearchBar.vue:27 msgctxt "Sidebar/Search/Input.Placeholder" msgid "Search for artists, albums, tracks…" msgstr "Procure por artistas, álbuns, pistas…" @@ -3747,16 +4083,30 @@ msgctxt "Content/Search/Title" msgid "Search for some music" msgstr "Procure alguma música" -#: front/src/components/library/AlbumBase.vue:57 -#: front/src/components/library/ArtistBase.vue:68 -#: front/src/components/library/TrackBase.vue:76 +#: front/src/components/library/TagsSelector.vue:6 +#, fuzzy +msgctxt "*/Dropdown/Placeholder/Verb" +msgid "Search for tags…" +msgstr "Pesquisar por nome…" + +#: front/src/components/library/AlbumBase.vue:66 +#: front/src/components/library/ArtistBase.vue:77 +#: front/src/components/library/TrackBase.vue:82 +#, fuzzy +msgctxt "Content/*/Button.Label/Verb" +msgid "Search on Discogs" +msgstr "Procure alguma música" + +#: front/src/components/library/AlbumBase.vue:58 +#: front/src/components/library/ArtistBase.vue:69 +#: front/src/components/library/TrackBase.vue:74 msgctxt "Content/*/Button.Label/Verb" msgid "Search on Wikipedia" msgstr "Procurar em Wikipedia" #: front/src/components/library/Library.vue:35 -#: src/views/admin/library/Base.vue:32 -#: front/src/views/admin/moderation/Base.vue:22 +#: src/views/admin/library/Base.vue:35 +#: front/src/views/admin/moderation/Base.vue:44 #: src/views/admin/users/Base.vue:21 front/src/views/content/Base.vue:19 msgctxt "Menu/*/Hidden text" msgid "Secondary menu" @@ -3767,6 +4117,26 @@ msgctxt "Content/Admin/Menu.Title" msgid "Sections" msgstr "Secções" +#: front/src/components/ShortcutsModal.vue:108 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek backwards 30s" +msgstr "" + +#: front/src/components/ShortcutsModal.vue:100 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek backwards 5s" +msgstr "" + +#: front/src/components/ShortcutsModal.vue:112 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek forwards 30s" +msgstr "" + +#: front/src/components/ShortcutsModal.vue:104 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek forwards 5s" +msgstr "" + #: front/src/components/library/radios/Builder.vue:46 msgctxt "Content/Radio/Dropdown.Placeholder/Verb" msgid "Select a filter" @@ -3785,9 +4155,14 @@ msgctxt "Content/*/Link/Verb" msgid "Select only current page" msgstr "Selecione apenas a página atual" -#: front/src/components/Sidebar.vue:43 src/components/Sidebar.vue:108 -#: front/src/components/manage/users/UsersTable.vue:181 -#: front/src/views/admin/moderation/AccountsDetail.vue:506 +#: front/src/components/Home.vue:43 +msgctxt "Content/Home/Link" +msgid "Server rules" +msgstr "" + +#: front/src/components/Sidebar.vue:43 src/components/Sidebar.vue:112 +#: front/src/components/manage/users/UsersTable.vue:182 +#: front/src/views/admin/moderation/AccountsDetail.vue:526 msgctxt "*/*/*/Noun" msgid "Settings" msgstr "Configurações" @@ -3809,18 +4184,25 @@ msgstr "Compartilhe o link" #: front/src/views/content/libraries/Detail.vue:15 msgctxt "Content/Library/Paragraph" -msgid "" -"Share this link with other users so they can request access to your library." -msgstr "" -"Compartilhe este link com outros usuários para que eles possam solicitar " -"acesso à sua biblioteca." +msgid "Share this link with other users so they can request access to your library." +msgstr "Compartilhe este link com outros usuários para que eles possam solicitar acesso à sua biblioteca." #: front/src/views/content/libraries/Detail.vue:14 -#: front/src/views/content/remote/Card.vue:77 +#: front/src/views/content/remote/Card.vue:90 msgctxt "Content/Library/Title" msgid "Sharing link" msgstr "Link de compartilhamento" +#: front/src/components/audio/EmbedWizard.vue:5 +msgctxt "Content/Embed/Message" +msgid "Sharing will not work because this pod doesn't allow anonymous users to access content." +msgstr "" + +#: front/src/components/About.vue:156 +msgctxt "*/*/*/Verb" +msgid "Show" +msgstr "" + #: front/src/components/audio/album/Card.vue:38 #, fuzzy msgctxt "Content/Album/Card.Link/Verb" @@ -3829,11 +4211,11 @@ msgid_plural "Show %{ count } more tracks" msgstr[0] "%{ count } tema" msgstr[1] "%{ count } temas" -#: front/src/components/audio/artist/Card.vue:30 +#: front/src/components/tags/List.vue:11 #, fuzzy -msgctxt "Content/Artist/Card.Link" -msgid "Show 1 more album" -msgid_plural "Show %{ count } more albums" +msgctxt "Content/*/Button/Label/Verb" +msgid "Show 1 more tag" +msgid_plural "Show %{ count } more tags" msgstr[0] "Mostrar mais 1 álbum" msgstr[1] "Mostrar mais %{ count } albums" @@ -3842,17 +4224,28 @@ msgctxt "Content/Library/Button.Label" msgid "Show all edits" msgstr "" -#: front/src/components/ShortcutsModal.vue:42 +#: front/src/components/ShortcutsModal.vue:60 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Show available keyboard shortcuts" msgstr "Mostrar atalhos de teclado disponÃveis" -#: front/src/views/Notifications.vue:7 +#: front/src/components/common/ExpandableDiv.vue:7 +msgctxt "*/*/Button,Label" +msgid "Show less" +msgstr "" + +#: front/src/components/common/ExpandableDiv.vue:8 +#, fuzzy +msgctxt "*/*/Button,Label" +msgid "Show more" +msgstr "Mostrar mais 1 álbum" + +#: front/src/views/Notifications.vue:72 msgctxt "Content/Notifications/Form.Label/Verb" msgid "Show read notifications" msgstr "Mostrar notificações antigas" -#: front/src/components/forms/PasswordInput.vue:26 +#: front/src/components/forms/PasswordInput.vue:42 msgctxt "Content/Settings/Button.Tooltip/Verb" msgid "Show/hide password" msgstr "Mostrar/ocultar senha" @@ -3861,56 +4254,64 @@ msgstr "Mostrar/ocultar senha" #: front/src/components/manage/library/ArtistsTable.vue:84 #: front/src/components/manage/library/EditsCardList.vue:72 #: front/src/components/manage/library/LibrariesTable.vue:110 +#: front/src/components/manage/library/TagsTable.vue:79 #: front/src/components/manage/library/TracksTable.vue:95 #: front/src/components/manage/library/UploadsTable.vue:144 #: front/src/components/manage/moderation/AccountsTable.vue:88 -#: front/src/components/manage/moderation/DomainsTable.vue:74 +#: front/src/components/manage/moderation/DomainsTable.vue:85 #: front/src/components/manage/users/InvitationsTable.vue:76 -#: front/src/components/manage/users/UsersTable.vue:87 +#: front/src/components/manage/users/UsersTable.vue:88 #: front/src/views/content/libraries/FilesTable.vue:117 msgctxt "Content/*/Paragraph" msgid "Showing results %{ start }-%{ end } on %{ total }" msgstr "Mostrando resultados %{ start }-%{ end } em %{ total }" -#: front/src/components/ShortcutsModal.vue:83 +#: front/src/components/ShortcutsModal.vue:140 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Shuffle queue" msgstr "Fila de embaralhamento" -#: front/src/components/audio/Player.vue:641 +#: front/src/components/audio/Player.vue:667 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Shuffle your queue" msgstr "Embaralhe sua fila" -#: front/src/components/auth/Signup.vue:97 +#: front/src/components/Home.vue:103 +#, fuzzy +msgctxt "*/Signup/Title" +msgid "Sign up" +msgstr "Inscrever-se" + +#: front/src/views/auth/Signup.vue:37 msgctxt "*/Signup/Title" msgid "Sign Up" msgstr "Inscrever-se" +#: front/src/components/Home.vue:107 +msgctxt "Content/Home/Paragraph" +msgid "Sign up now to keep a track of your favorites, create playlists, discover new content and much more!" +msgstr "" + #: front/src/components/manage/users/UsersTable.vue:40 msgctxt "Content/Admin/Table.Label/Short, Noun (Value is a date)" msgid "Sign-up" msgstr "Inscrever-se" -#: front/src/components/mixins/Translations.vue:57 -#: front/src/views/admin/moderation/AccountsDetail.vue:197 -#: front/src/components/mixins/Translations.vue:58 +#: front/src/components/mixins/Translations.vue:69 +#: front/src/views/admin/moderation/AccountsDetail.vue:198 +#: front/src/components/mixins/Translations.vue:70 msgctxt "Content/Admin/Table.Label/Noun" msgid "Sign-up date" msgstr "Data de inscrição" -#: front/src/components/manage/library/UploadsTable.vue:65 -#: front/src/views/admin/library/UploadDetail.vue:219 -msgctxt "Content/*/*/Noun" -msgid "Size" -msgstr "Tamanho" - #: front/src/components/library/FileUpload.vue:94 #: front/src/components/library/TrackDetail.vue:39 -#: front/src/components/mixins/Translations.vue:54 +#: front/src/components/manage/library/UploadsTable.vue:65 +#: front/src/components/mixins/Translations.vue:66 +#: front/src/views/admin/library/UploadDetail.vue:219 #: front/src/views/content/libraries/FilesTable.vue:61 -#: front/src/components/mixins/Translations.vue:55 -msgctxt "Content/Library/*/in MB" +#: front/src/components/mixins/Translations.vue:67 +msgctxt "Content/*/*/Noun" msgid "Size" msgstr "Tamanho" @@ -3927,7 +4328,7 @@ msgctxt "Content/Library/Label" msgid "Skipped files" msgstr "Arquivos ignorados" -#: front/src/views/admin/moderation/DomainsDetail.vue:89 +#: front/src/views/admin/moderation/DomainsDetail.vue:126 msgctxt "Content/Moderation/Table.Label" msgid "Software" msgstr "Software" @@ -3942,93 +4343,65 @@ msgctxt "Content/*/Paragraph" msgid "Sorry, the page you asked for does not exist:" msgstr "Desculpe, a página que você pediu não existe:" -#: front/src/components/Footer.vue:49 +#: front/src/components/Footer.vue:57 msgctxt "Footer/*/List item.Link" msgid "Source code" msgstr "" #: front/src/components/auth/Profile.vue:23 -#: front/src/components/manage/users/UsersTable.vue:70 +#: front/src/components/manage/users/UsersTable.vue:71 msgctxt "Content/Profile/User role" msgid "Staff member" msgstr "Membro da equipe" -#: front/src/components/audio/PlayButton.vue:23 +#: front/src/components/audio/PlayButton.vue:27 #: src/components/radios/Button.vue:4 msgctxt "*/Queue/Button.Label/Short, Verb" msgid "Start radio" msgstr "Pare o rádio" -#: front/src/views/admin/Settings.vue:86 -msgctxt "Content/Admin/Menu" +#: front/src/components/About.vue:170 src/components/Home.vue:53 +#: front/src/views/admin/Settings.vue:87 +#, fuzzy +msgctxt "Content/Home/Header" msgid "Statistics" msgstr "Estatisticas" -#: front/src/views/admin/moderation/AccountsDetail.vue:490 +#: front/src/views/admin/moderation/AccountsDetail.vue:510 msgctxt "Content/Moderation/Help text" -msgid "" -"Statistics are computed from known activity and content on your instance, " -"and do not reflect general activity for this account" -msgstr "" -"As estatÃsticas são calculadas a partir de atividade e conteúdo conhecidos " -"em sua instância, e não refletem a atividade geral para esta conta" +msgid "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this account" +msgstr "As estatÃsticas são calculadas a partir de atividade e conteúdo conhecidos em sua instância, e não refletem a atividade geral para esta conta" -#: front/src/views/admin/moderation/DomainsDetail.vue:371 +#: front/src/views/admin/moderation/DomainsDetail.vue:418 msgctxt "Content/Moderation/Help text" -msgid "" -"Statistics are computed from known activity and content on your instance, " -"and do not reflect general activity for this domain" -msgstr "" -"As estatÃsticas são calculadas a partir da actividade e conteúdo conhecidos " -"na sua instância e não reflectem a actividade geral para este domÃnio" - -#: front/src/views/admin/library/AlbumDetail.vue:329 -#: front/src/views/admin/library/ArtistDetail.vue:328 -#: front/src/views/admin/library/LibraryDetail.vue:316 -#: front/src/views/admin/library/TrackDetail.vue:371 +msgid "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this domain" +msgstr "As estatÃsticas são calculadas a partir da actividade e conteúdo conhecidos na sua instância e não reflectem a actividade geral para este domÃnio" + +#: front/src/views/admin/library/AlbumDetail.vue:346 +#: front/src/views/admin/library/ArtistDetail.vue:345 +#: front/src/views/admin/library/LibraryDetail.vue:356 +#: front/src/views/admin/library/TagDetail.vue:210 +#: front/src/views/admin/library/TrackDetail.vue:389 #: front/src/views/admin/library/UploadDetail.vue:335 msgctxt "Content/Moderation/Help text" -msgid "" -"Statistics are computed from known activity and content on your instance, " -"and do not reflect general activity for this object" -msgstr "" -"As estatÃsticas são calculadas a partir de atividade e conteúdo conhecidos " -"em sua instância, e não refletem a atividade geral para esta conta" - -#: front/src/views/admin/moderation/DomainsDetail.vue:115 -msgctxt "Content/Moderation/Table.Label (Value is Error message)" -msgid "Status" -msgstr "Estado" +msgid "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" +msgstr "As estatÃsticas são calculadas a partir de atividade e conteúdo conhecidos em sua instância, e não refletem a atividade geral para esta conta" #: front/src/components/library/FileUpload.vue:95 -msgctxt "Content/Library/Table.Label (Value is Uploading/Uploaded/Error)" -msgid "Status" -msgstr "Estado" - -#: front/src/views/content/libraries/Detail.vue:28 -msgctxt "Content/Library.Federation/Table.Label (Value is Approved/Rejected)" -msgid "Status" -msgstr "Estado" - +#: front/src/components/manage/library/EditsCardList.vue:12 +#: front/src/components/manage/moderation/ReportCard.vue:57 #: front/src/components/manage/users/InvitationsTable.vue:17 #: front/src/components/manage/users/InvitationsTable.vue:39 -msgctxt "Content/Admin/*/Noun (Value is Used/Not used)" -msgid "Status" -msgstr "Estado" - #: front/src/components/manage/users/UsersTable.vue:43 -msgctxt "Content/Admin/Table.Label/Noun (Value is Regular user/Admin)" -msgid "Status" -msgstr "Estado" - -#: front/src/components/manage/library/EditsCardList.vue:12 -msgctxt "" -"Content/Search/Dropdown.Label (Value is All/Pending " -"review/Approved/Rejected)" +#: front/src/views/admin/moderation/DomainsDetail.vue:152 +#: front/src/views/admin/moderation/ReportsList.vue:14 +#: front/src/views/content/libraries/Detail.vue:28 +#, fuzzy +msgctxt "*/*/*" msgid "Status" msgstr "Estado" -#: front/src/components/Sidebar.vue:174 src/components/radios/Button.vue:3 +#: front/src/components/Sidebar.vue:178 src/components/radios/Button.vue:3 msgctxt "*/Player/Button.Label/Short, Verb" msgid "Stop radio" msgstr "Pare o rádio" @@ -4038,7 +4411,7 @@ msgctxt "*/*/Button.Label/Verb" msgid "Submit" msgstr "Enviar" -#: front/src/components/library/EditForm.vue:98 +#: front/src/components/library/EditForm.vue:110 msgctxt "Content/Library/Button.Label/Verb" msgid "Submit and apply edit" msgstr "" @@ -4048,12 +4421,24 @@ msgctxt "Content/Library/Button.Label" msgid "Submit another edit" msgstr "" -#: front/src/components/library/EditForm.vue:99 +#: front/src/components/moderation/ReportModal.vue:64 +#, fuzzy +msgctxt "Popup/*/Button.Label" +msgid "Submit report" +msgstr "Enviar" + +#: front/src/components/library/EditForm.vue:111 msgctxt "Content/Library/Button.Label/Verb" msgid "Submit suggestion" msgstr "" -#: front/src/views/admin/Settings.vue:85 +#: front/src/components/manage/moderation/ReportCard.vue:17 +#, fuzzy +msgctxt "Content/Moderation/*" +msgid "Submitted by" +msgstr "Enviar" + +#: front/src/views/admin/Settings.vue:86 msgctxt "Content/Admin/Menu" msgid "Subsonic" msgstr "Subsonic" @@ -4093,16 +4478,21 @@ msgctxt "Content/Library/Tab.Title/Short" msgid "Summary" msgstr "Sumário" -#: front/src/components/library/EditForm.vue:87 +#: front/src/components/library/EditForm.vue:99 msgctxt "*/*/*" msgid "Summary (optional)" msgstr "" -#: front/src/components/Footer.vue:39 +#: front/src/components/Footer.vue:47 msgctxt "Footer/*/Listitem.Link" msgid "Support forum" msgstr "Fórum de apoio" +#: front/src/views/Notifications.vue:10 +msgctxt "Content/Notifications/Header" +msgid "Support this Funkwhale pod" +msgstr "" + #: front/src/components/library/FileUpload.vue:85 msgctxt "Content/Library/Paragraph" msgid "Supported extensions: %{ extensions }" @@ -4113,26 +4503,47 @@ msgctxt "Content/Playlist/Paragraph" msgid "Syncing changes to server…" msgstr "Sincronizar mudanças no servidor…" -#: front/src/components/audio/EmbedWizard.vue:25 +#: front/src/components/audio/SearchBar.vue:35 +msgctxt "*/*/*/Noun" +msgid "Tag" +msgstr "" + +#: front/src/views/admin/library/TagDetail.vue:61 +#, fuzzy +msgctxt "Content/Moderation/Title" +msgid "Tag data" +msgstr "TÃtulo da música" + +#: front/src/components/library/Albums.vue:23 +#: src/components/library/Artists.vue:15 +#: front/src/views/admin/library/Base.vue:23 +#: src/views/admin/library/TagsList.vue:24 front/src/edits.js:24 +#: src/edits.js:50 src/edits.js:91 src/entities.js:120 +msgctxt "*/*/*/Noun" +msgid "Tags" +msgstr "" + +#: front/src/components/mixins/Translations.vue:44 +#: front/src/components/mixins/Translations.vue:45 +#, fuzzy +msgctxt "Content/Moderation/Dropdown" +msgid "Takedown request" +msgstr "Solicitações pendentes" + +#: front/src/components/About.vue:35 src/components/About.vue:61 +msgctxt "Content/About/Header" +msgid "Terms and privacy policy" +msgstr "" + +#: front/src/components/audio/EmbedWizard.vue:35 #: front/src/components/common/CopyInput.vue:3 msgctxt "Content/*/Paragraph" msgid "Text copied to clipboard!" msgstr "Texto copiado para a área de transferência!" -#: front/src/components/Home.vue:26 -msgctxt "Content/Home/Paragraph" -msgid "" -"That's simple: we loved Grooveshark and we want to build something even " -"better." -msgstr "" -"Isso é simples: nós amamos o Grooveshark e queremos construir algo ainda " -"melhor." - -#: front/src/views/admin/library/AlbumDetail.vue:75 +#: front/src/views/admin/library/AlbumDetail.vue:81 msgctxt "Content/Moderation/Paragraph" -msgid "" -"The album will be removed, as well as associated uploads, tracks, favorites " -"and listening history. This action is irreversible." +msgid "The album will be removed, as well as associated uploads, tracks, favorites and listening history. This action is irreversible." msgstr "" #: front/src/components/auth/Authorize.vue:39 @@ -4140,19 +4551,15 @@ msgctxt "Content/Auth/Paragraph" msgid "The application is also requesting the following unknown permissions:" msgstr "" -#: front/src/views/admin/library/ArtistDetail.vue:74 +#: front/src/views/admin/library/ArtistDetail.vue:79 msgctxt "Content/Moderation/Paragraph" -msgid "" -"The artist will be removed, as well as associated uploads, tracks, albums, " -"favorites and listening history. This action is irreversible." +msgid "The artist will be removed, as well as associated uploads, tracks, albums, favorites and listening history. This action is irreversible." msgstr "" -#: front/src/components/Footer.vue:53 +#: front/src/components/Footer.vue:61 msgctxt "Footer/*/List item.Link" msgid "The funkwhale logo was kindly designed and provided by Francis Gading." -msgstr "" -"O logótipo funkwhale foi gentilmente projetado e fornecido por Francis " -"Gading." +msgstr "O logótipo funkwhale foi gentilmente projetado e fornecido por Francis Gading." #: front/src/components/SetInstanceModal.vue:8 msgctxt "Popup/Instance/Error message.List item" @@ -4161,45 +4568,39 @@ msgstr "" #: front/src/views/content/libraries/Form.vue:34 msgctxt "Popup/Library/Paragraph" -msgid "" -"The library and all its tracks will be deleted. This can not be undone." -msgstr "" -"A biblioteca e todas as suas pistas serão removidas. Isto não pode ser " -"desfeito." +msgid "The library and all its tracks will be deleted. This can not be undone." +msgstr "A biblioteca e todas as suas pistas serão removidas. Isto não pode ser desfeito." #: front/src/views/admin/library/LibraryDetail.vue:61 msgctxt "Content/Moderation/Paragraph" -msgid "" -"The library will be removed, as well as associated uploads, and follows. " -"This action is irreversible." +msgid "The library will be removed, as well as associated uploads, and follows. This action is irreversible." msgstr "" #: front/src/components/library/ImportStatusModal.vue:140 msgctxt "Popup/Import/Error.Label" -msgid "" -"The metadata included in the file is invalid or some mandatory fields are " -"missing." +msgid "The metadata included in the file is invalid or some mandatory fields are missing." msgstr "" #: front/src/components/library/FileUpload.vue:38 msgctxt "Content/Library/List item" msgid "The music files you are uploading are tagged properly." -msgstr "" -"Os arquivos de música que você está enviando são marcados corretamente:" +msgstr "Os arquivos de música que você está enviando são marcados corretamente:" #: front/src/components/audio/Player.vue:65 msgctxt "Sidebar/Player/Error message.Paragraph" msgid "The next track will play automatically in a few seconds…" -msgstr "A próxima pista será jogada automaticamente em poucos segundos..." +msgstr "A próxima pista será jogada automaticamente em poucos segundos…" -#: front/src/components/Home.vue:116 -msgctxt "Content/Home/List item" -msgid "" -"The plaform is free and open-source, you can install it and modify it " -"without worries" +#: front/src/components/manage/moderation/NotesThread.vue:27 +#, fuzzy +msgctxt "Content/Moderation/Paragraph" +msgid "The note will be removed. This action is irreversible." +msgstr "Esta acção é irreversÃvel." + +#: front/src/components/manage/moderation/ReportCard.vue:120 +msgctxt "Content/Moderation/Message" +msgid "The object associated with this report was deleted." msgstr "" -"A plataforma é gratuita e open-source, você pode instalá-lo e modificá-lo " -"sem preocupações" #: front/src/components/playlists/Form.vue:14 msgctxt "Content/Playlist/Error message.Title" @@ -4213,46 +4614,43 @@ msgstr "" #: front/src/components/federation/FetchButton.vue:13 msgctxt "Popup/*/Message.Content" -msgid "" -"The remote server answered, but returned data was unsupported by Funkwhale." +msgid "The remote server answered, but returned data was unsupported by Funkwhale." msgstr "" #: front/src/components/federation/FetchButton.vue:44 msgctxt "*/*/Error" -msgid "The remote server didn't answered fast enough" +msgid "The remote server didn't respond quickly enough" msgstr "" #: front/src/components/federation/FetchButton.vue:50 msgctxt "*/*/Error" -msgid "The return server returned invalid JSON or JSON-LD data" +msgid "The remote server returned invalid JSON or JSON-LD data" msgstr "" #: front/src/components/manage/library/AlbumsTable.vue:189 msgctxt "Popup/*/Paragraph" -msgid "" -"The selected albums will be removed, as well as associated tracks, uploads, " -"favorites and listening history. This action is irreversible." +msgid "The selected albums will be removed, as well as associated tracks, uploads, favorites and listening history. This action is irreversible." msgstr "" #: front/src/components/manage/library/ArtistsTable.vue:179 msgctxt "Popup/*/Paragraph" -msgid "" -"The selected artist will be removed, as well as associated uploads, tracks, " -"albums, favorites and listening history. This action is irreversible." +msgid "The selected artist will be removed, as well as associated uploads, tracks, albums, favorites and listening history. This action is irreversible." msgstr "" #: front/src/components/manage/library/LibrariesTable.vue:206 msgctxt "Popup/*/Paragraph" -msgid "" -"The selected library will be removed, as well as associated uploads and " -"follows. This action is irreversible." +msgid "The selected library will be removed, as well as associated uploads and follows. This action is irreversible." msgstr "" +#: front/src/components/manage/library/TagsTable.vue:180 +#, fuzzy +msgctxt "Popup/*/Paragraph" +msgid "The selected tag will be removed and unlinked with existing content, if any. This action is irreversible." +msgstr "Esta acção é irreversÃvel." + #: front/src/components/manage/library/TracksTable.vue:189 msgctxt "Popup/*/Paragraph" -msgid "" -"The selected tracks will be removed, as well as associated uploads, " -"favorites and listening history. This action is irreversible." +msgid "The selected tracks will be removed, as well as associated uploads, favorites and listening history. This action is irreversible." msgstr "" #: front/src/components/manage/library/UploadsTable.vue:256 @@ -4272,10 +4670,15 @@ msgstr "A API Subsonic não está disponÃvel nesta instância do Funkwhale." #: front/src/components/library/EditCard.vue:96 msgctxt "Popup/Library/Paragraph" -msgid "" -"The suggestion will be completely removed, this action is irreversible." +msgid "The suggestion will be completely removed, this action is irreversible." msgstr "" +#: front/src/views/admin/library/TagDetail.vue:44 +#, fuzzy +msgctxt "Content/Moderation/Paragraph" +msgid "The tag will be removed and unlinked from any existing entity. This action is irreversible." +msgstr "Esta acção é irreversÃvel." + #: front/src/components/playlists/PlaylistModal.vue:34 msgctxt "Popup/Playlist/Error message.Title" msgid "The track can't be added to a playlist" @@ -4286,11 +4689,9 @@ msgctxt "Sidebar/Player/Error message.Title" msgid "The track cannot be loaded" msgstr "" -#: front/src/views/admin/library/TrackDetail.vue:74 +#: front/src/views/admin/library/TrackDetail.vue:80 msgctxt "Content/Moderation/Paragraph" -msgid "" -"The track will be removed, as well as associated uploads, favorites and " -"listening history. This action is irreversible." +msgid "The track will be removed, as well as associated uploads, favorites and listening history. This action is irreversible." msgstr "" #: front/src/views/admin/library/UploadDetail.vue:68 @@ -4306,9 +4707,7 @@ msgstr "Os arquivos de música enviados estão no formato OGG, Flac ou MP3" #: front/src/views/content/Home.vue:4 msgctxt "Content/Library/Paragraph" msgid "There are various ways to grab new content and make it available here." -msgstr "" -"Existem várias maneiras de obter novos conteúdos e torná-los disponÃveis " -"aqui." +msgstr "Existem várias maneiras de obter novos conteúdos e torná-los disponÃveis aqui." #: front/src/components/manage/moderation/InstancePolicyForm.vue:66 msgctxt "Popup/Moderation/Paragraph" @@ -4325,22 +4724,37 @@ msgctxt "Content/Artist/Paragraph" msgid "This artist is present in the following libraries:" msgstr "Este artista está presente nas seguintes bibliotecas:" +#: front/src/components/manage/moderation/DomainsTable.vue:169 +#, fuzzy +msgctxt "Content/Moderation/Popup" +msgid "This domain is present in your allow-list" +msgstr "Este artista está presente nas seguintes bibliotecas:" + #: front/src/views/admin/moderation/AccountsDetail.vue:84 -#: front/src/views/admin/moderation/DomainsDetail.vue:48 +#: front/src/views/admin/moderation/DomainsDetail.vue:76 msgctxt "Content/Moderation/Card.Title" msgid "This domain is subject to specific moderation rules" msgstr "Este domÃnio está sujeito a regras de moderação especÃficas" +#: front/src/components/manage/moderation/InstancePolicyModal.vue:16 +#, fuzzy +msgctxt "Content/Moderation/Card.Title" +msgid "This entity is subject to specific moderation rules" +msgstr "Este domÃnio está sujeito a regras de moderação especÃficas" + #: front/src/views/content/Home.vue:9 msgctxt "Content/Library/Paragraph" msgid "This instance offers up to %{quota} of storage space for every user." +msgstr "Esta instância oferece até %{quota} de espaço de memória para cada usuário." + +#: front/src/components/auth/Settings.vue:300 +msgctxt "Popup/Settings/Paragraph" +msgid "This is irreversible and will permanently remove your data from our servers. You will we immediatly logged out." msgstr "" -"Esta instância oferece até %{quota} de espaço de memória para cada usuário." #: front/src/components/auth/Settings.vue:165 msgctxt "Content/Settings/Paragraph" -msgid "" -"This is the list of applications that have access to your account data." +msgid "This is the list of applications that have access to your account data." msgstr "" #: front/src/components/auth/Settings.vue:218 @@ -4358,28 +4772,20 @@ msgctxt "Content/Library/Input.Placeholder" msgid "This library contains my personal music, I hope you like it." msgstr "Esta biblioteca contém minha música pessoal, espero que você goste." -#: front/src/views/content/remote/Card.vue:141 +#: front/src/views/content/remote/Card.vue:169 msgctxt "Content/Library/Card.Help text" -msgid "" -"This library is private and your approval from its owner is needed to access" -" its content" -msgstr "" -"Esta biblioteca é privada e sua aprovação do proprietário é necessária para " -"acessar seu conteúdo" +msgid "This library is private and your approval from its owner is needed to access its content" +msgstr "Esta biblioteca é privada e sua aprovação do proprietário é necessária para acessar seu conteúdo" -#: front/src/views/content/remote/Card.vue:142 +#: front/src/views/content/remote/Card.vue:170 msgctxt "Content/Library/Card.Help text" msgid "This library is public and you can access its content freely" msgstr "Esta biblioteca é pública e você pode acessar seu conteúdo livremente" #: front/src/components/common/ActionTable.vue:47 msgctxt "Modal/*/Paragraph" -msgid "" -"This may affect a lot of elements or have irreversible consequences, please " -"double check this is really what you want." -msgstr "" -"Isso pode afetar muitos elementos ou ter consequências irreversÃveis, por " -"favor, verifique se isso é realmente o que você quer." +msgid "This may affect a lot of elements or have irreversible consequences, please double check this is really what you want." +msgstr "Isso pode afetar muitos elementos ou ter consequências irreversÃveis, por favor, verifique se isso é realmente o que você quer." #: front/src/components/library/AlbumEdit.vue:8 #: front/src/components/library/ArtistEdit.vue:8 @@ -4388,6 +4794,11 @@ msgctxt "Content/*/Message" msgid "This object is managed by another server, you cannot edit it." msgstr "" +#: front/src/components/Home.vue:87 +msgctxt "Content/Home/Paragraph" +msgid "This pod runs Funkwhale, a community-driven project that lets you listen and share music and audio within a decentralized, open network." +msgstr "" + #: front/src/components/library/FileUpload.vue:51 msgctxt "Content/Library/Paragraph" msgid "This reference will be used to group imported files together." @@ -4395,17 +4806,15 @@ msgstr "Esta referência será usada para agrupar arquivos importados." #: front/src/components/mixins/Translations.vue:33 #: front/src/components/mixins/Translations.vue:34 +#, fuzzy msgctxt "Content/Library/Help text" -msgid "This track could not be processed, please it is tagged correctly" -msgstr "" -"Não foi possÃvel processar esta pista, certifique-se de que está " -"correctamente etiquetada" +msgid "This track could not be processed, please make sure it is tagged correctly" +msgstr "Não foi possÃvel processar esta pista, certifique-se de que está correctamente etiquetada" #: front/src/components/mixins/Translations.vue:29 #: front/src/components/mixins/Translations.vue:30 msgctxt "Content/Library/Help text" -msgid "" -"This track has been uploaded, but hasn't been processed by the server yet" +msgid "This track has been uploaded, but hasn't been processed by the server yet" msgstr "Pista carregada, mas ainda não tratada pelo servidor" #: front/src/components/mixins/Translations.vue:25 @@ -4414,18 +4823,17 @@ msgctxt "Content/Library/Help text" msgid "This track is already present in one of your libraries" msgstr "Pista já disponÃvel em uma de suas bibliotecas" -#: front/src/components/audio/PlayButton.vue:85 +#: front/src/components/audio/PlayButton.vue:103 msgctxt "*/Queue/Button/Title" msgid "This track is not available in any library you have access to" -msgstr "" -"Esta pista não está disponÃvel em nenhuma biblioteca a que tenha acesso" +msgstr "Esta pista não está disponÃvel em nenhuma biblioteca a que tenha acesso" #: front/src/components/library/TrackDetail.vue:82 msgctxt "Content/Track/Paragraph" msgid "This track is present in the following libraries:" msgstr "Esta música está presente nas seguintes bibliotecas:" -#: front/src/views/playlists/Detail.vue:38 +#: front/src/views/playlists/Detail.vue:46 msgctxt "Popup/Playlist/Paragraph" msgid "This will completely delete this playlist and cannot be undone." msgstr "Isso excluirá completamente essa playlist e não poderá ser desfeito." @@ -4435,77 +4843,74 @@ msgctxt "Popup/Radio/Paragraph" msgid "This will completely delete this radio and cannot be undone." msgstr "Isto irá remover completamente o rádio e não pode ser cancelado." -#: front/src/components/auth/SubsonicTokenForm.vue:50 +#: front/src/components/auth/SubsonicTokenForm.vue:55 msgctxt "Popup/Settings/Paragraph" -msgid "" -"This will completely disable access to the Subsonic API using from account." +msgid "This will completely disable access to the Subsonic API using from account." +msgstr "Isso desativará completamente o acesso à API do Subsonic usando a conta." + +#: front/src/components/manage/moderation/ReportCard.vue:359 +msgctxt "Content/Moderation/Popup,Paragraph" +msgid "This will delete the object associated with this report and mark the report as resolved. The deletion is irreversible." msgstr "" -"Isso desativará completamente o acesso à API do Subsonic usando a conta." -#: front/src/components/auth/SubsonicTokenForm.vue:35 +#: front/src/components/auth/SubsonicTokenForm.vue:40 msgctxt "Popup/Settings/Paragraph" -msgid "" -"This will log you out from existing devices that use the current password." -msgstr "" -"Isto irá desconectá-lo a partir de dispositivos existentes que usam a senha " -"atual." +msgid "This will log you out from existing devices that use the current password." +msgstr "Isto irá desconectá-lo a partir de dispositivos existentes que usam a senha atual." #: front/src/components/auth/Settings.vue:253 msgctxt "Popup/Settings/Paragraph" -msgid "" -"This will permanently delete the application and all the associated tokens." +msgid "This will permanently delete the application and all the associated tokens." msgstr "Isso excluirá completamente essa playlist e não poderá ser desfeito." #: front/src/components/auth/Settings.vue:194 msgctxt "Popup/Settings/Paragraph" -msgid "" -"This will prevent this application from accessing the service on your " -"behalf." +msgid "This will prevent this application from accessing the service on your behalf." msgstr "" #: front/src/components/playlists/Editor.vue:54 msgctxt "Popup/Playlist/Paragraph" msgid "This will remove all tracks from this playlist and cannot be undone." -msgstr "" -"Isso removerá todas as músicas dessa playlist e não poderá ser desfeito." - -#: front/src/views/admin/library/AlbumDetail.vue:99 -#: front/src/views/admin/library/TrackDetail.vue:98 src/edits.js:21 -#: src/edits.js:39 -msgctxt "*/*/*/Noun" -msgid "Title" -msgstr "TÃtulo" +msgstr "Isso removerá todas as músicas dessa playlist e não poderá ser desfeito." #: front/src/components/audio/track/Table.vue:7 -#: front/src/views/content/libraries/FilesTable.vue:55 -msgctxt "Content/Track/*/Noun" -msgid "Title" -msgstr "TÃtulo" - #: front/src/components/manage/library/AlbumsTable.vue:39 #: front/src/components/manage/library/TracksTable.vue:39 -msgctxt "*/*/*" +#: front/src/views/admin/library/AlbumDetail.vue:105 +#: front/src/views/admin/library/TrackDetail.vue:104 +#: front/src/views/content/libraries/FilesTable.vue:55 src/edits.js:36 +#: front/src/edits.js:62 +msgctxt "*/*/*/Noun" msgid "Title" msgstr "TÃtulo" #: front/src/components/SetInstanceModal.vue:16 msgctxt "Popup/Instance/Paragraph" -msgid "" -"To continue, please select the Funkwhale instance you want to connect to. " -"Enter the address directly, or select one of the suggested choices." +msgid "To continue, please select the Funkwhale instance you want to connect to. Enter the address directly, or select one of the suggested choices." msgstr "" -#: front/src/components/ShortcutsModal.vue:79 +#: front/src/components/ShortcutsModal.vue:148 +#, fuzzy +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Toggle favorite" +msgstr "1 preferida" + +#: front/src/components/ShortcutsModal.vue:132 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Toggle mute" +msgstr "" + +#: front/src/components/ShortcutsModal.vue:136 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Toggle queue looping" msgstr "Alternar looping de filas" -#: front/src/views/admin/library/AlbumDetail.vue:222 -#: front/src/views/admin/library/ArtistDetail.vue:211 -#: front/src/views/admin/library/LibraryDetail.vue:200 -#: front/src/views/admin/library/TrackDetail.vue:274 -#: front/src/views/admin/moderation/AccountsDetail.vue:317 -#: front/src/views/admin/moderation/DomainsDetail.vue:225 +#: front/src/views/admin/library/AlbumDetail.vue:238 +#: front/src/views/admin/library/ArtistDetail.vue:226 +#: front/src/views/admin/library/LibraryDetail.vue:219 +#: front/src/views/admin/library/TrackDetail.vue:290 +#: front/src/views/admin/moderation/AccountsDetail.vue:329 +#: front/src/views/admin/moderation/DomainsDetail.vue:262 msgctxt "Content/Moderation/Table.Label" msgid "Total size" msgstr "Tamanho total" @@ -4515,20 +4920,18 @@ msgctxt "Content/Library/Card.Help text" msgid "Total size of the files in this library" msgstr "Tamanho total dos arquivos nesta biblioteca" -#: front/src/views/admin/moderation/DomainsDetail.vue:105 +#: front/src/views/admin/moderation/DomainsDetail.vue:142 msgctxt "Content/*/*" msgid "Total users" msgstr "Usuários totais" -#: front/src/views/admin/library/UploadDetail.vue:199 -msgctxt "*/*/*" -msgid "Track" -msgstr "Música" - -#: front/src/components/audio/SearchBar.vue:27 -#: front/src/components/library/TrackBase.vue:173 +#: front/src/components/audio/SearchBar.vue:34 +#: front/src/components/library/TrackBase.vue:188 #: front/src/components/library/TrackDetail.vue:128 #: front/src/components/metadata/Search.vue:138 +#: src/components/mixins/Report.vue:28 +#: front/src/views/admin/library/UploadDetail.vue:199 +#: front/src/components/mixins/Report.vue:29 msgctxt "*/*/*/Noun" msgid "Track" msgstr "Música" @@ -4538,7 +4941,7 @@ msgctxt "Content/Library/Card/Short" msgid "Track #%{ id } - %{ name }" msgstr "" -#: front/src/views/admin/library/TrackDetail.vue:91 +#: front/src/views/admin/library/TrackDetail.vue:97 msgctxt "Content/Moderation/Title" msgid "Track data" msgstr "TÃtulo da música" @@ -4548,30 +4951,28 @@ msgctxt "Content/Track/Title/Noun" msgid "Track information" msgstr "Informação da música" -#: front/src/components/mixins/Translations.vue:50 -#: front/src/components/mixins/Translations.vue:51 +#: front/src/components/mixins/Translations.vue:60 +#: front/src/components/mixins/Translations.vue:61 msgctxt "Content/*/Dropdown/Noun" msgid "Track name" msgstr "TÃtulo da música" -#: front/src/components/instance/Stats.vue:54 #: front/src/components/library/AlbumDetail.vue:19 -#: front/src/components/playlists/PlaylistModal.vue:47 -#: front/src/views/admin/moderation/AccountsDetail.vue:362 -#: front/src/views/admin/moderation/DomainsDetail.vue:274 -#: front/src/views/content/Base.vue:8 src/views/content/libraries/Detail.vue:8 -#: front/src/views/playlists/Detail.vue:51 src/views/radios/Detail.vue:34 -msgctxt "*/*/*/Noun" -msgid "Tracks" -msgstr "Músicas" - +#: front/src/components/library/TagDetail.vue:36 #: front/src/components/manage/library/AlbumsTable.vue:42 #: front/src/components/manage/library/ArtistsTable.vue:42 -#: front/src/views/admin/library/AlbumDetail.vue:252 -#: front/src/views/admin/library/ArtistDetail.vue:251 +#: front/src/components/manage/library/TagsTable.vue:44 +#: front/src/components/playlists/PlaylistModal.vue:47 +#: front/src/views/admin/library/AlbumDetail.vue:268 +#: front/src/views/admin/library/ArtistDetail.vue:266 #: front/src/views/admin/library/Base.vue:14 -#: front/src/views/admin/library/LibraryDetail.vue:229 +#: front/src/views/admin/library/LibraryDetail.vue:248 +#: front/src/views/admin/library/TagDetail.vue:143 #: front/src/views/admin/library/TracksList.vue:24 +#: front/src/views/admin/moderation/AccountsDetail.vue:374 +#: front/src/views/admin/moderation/DomainsDetail.vue:311 +#: front/src/views/content/Base.vue:8 src/views/content/libraries/Detail.vue:8 +#: front/src/views/playlists/Detail.vue:76 src/views/radios/Detail.vue:34 msgctxt "*/*/*" msgid "Tracks" msgstr "Músicas" @@ -4581,79 +4982,64 @@ msgctxt "Content/Artist/Title" msgid "Tracks by this artist" msgstr "Musicas deste artista" -#: front/src/components/instance/Stats.vue:25 -msgctxt "Content/About/Paragraph/Unit" -msgid "Tracks favorited" -msgstr "Músicas favoritas" - -#: front/src/components/instance/Stats.vue:19 -msgctxt "Content/About/Paragraph/Unit" -msgid "tracks listened" -msgstr "músicas escutadas" - #: front/src/components/library/radios/Filter.vue:44 msgctxt "Popup/Radio/Title/Noun" msgid "Tracks matching filter" msgstr "Filtro de correspondência de músicas" #: front/src/components/library/TrackDetail.vue:57 +#: front/src/components/manage/moderation/ReportCard.vue:134 #: front/src/views/admin/library/UploadDetail.vue:250 +#: front/src/views/admin/moderation/AccountsDetail.vue:181 msgctxt "Content/Track/Table.Label/Noun" msgid "Type" msgstr "Tipo" -#: front/src/views/admin/moderation/AccountsDetail.vue:180 -msgctxt "Content/Moderation/Table.Label/Noun" -msgid "Type" -msgstr "Tipo" - #: front/src/components/manage/moderation/AccountsTable.vue:44 -#: front/src/components/manage/moderation/DomainsTable.vue:42 +#: front/src/components/manage/moderation/DomainsTable.vue:50 msgctxt "Content/Moderation/Table.Label/Short" msgid "Under moderation rule" msgstr "Atualizar a regra de moderação" -#: front/src/views/content/remote/Card.vue:109 -#: src/views/content/remote/Card.vue:114 +#: front/src/components/ShortcutsModal.vue:68 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Unfocus searchbar" +msgstr "" + +#: front/src/views/content/remote/Card.vue:122 +#: src/views/content/remote/Card.vue:127 msgctxt "*/Library/Button.Label/Verb" msgid "Unfollow" msgstr "Deixar de seguir" -#: front/src/views/content/remote/Card.vue:110 +#: front/src/views/content/remote/Card.vue:123 msgctxt "Popup/Library/Title" msgid "Unfollow this library?" msgstr "Deixar de seguir esta biblioteca?" -#: front/src/components/About.vue:17 -msgctxt "Content/About/Paragraph" -msgid "" -"Unfortunately, the owners of this instance did not yet take the time to " -"complete this page." -msgstr "" -"Infelizmente, os proprietários desta instância não ainda ter o tempo para " -"preencher esta página." - #: front/src/components/federation/FetchButton.vue:54 #: front/src/components/federation/FetchButton.vue:55 -msgctxt "*/*/Error" -msgid "Unknowkn error" -msgstr "" - #: front/src/components/library/ImportStatusModal.vue:144 -msgctxt "Popup/Import/Error.Label" -msgid "Unkwown error" +msgctxt "*/*/Error" +msgid "Unknown error" msgstr "" -#: front/src/components/Home.vue:37 -msgctxt "Content/Home/Title" -msgid "Unlimited music" -msgstr "Música ilimitada" - -#: front/src/components/audio/Player.vue:630 +#: front/src/components/audio/Player.vue:656 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Unmute" msgstr "Cancelar mudo" +#: front/src/components/manage/moderation/ReportCard.vue:225 +msgctxt "Content/*/Button.Label" +msgid "Unresolve" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:67 +#: front/src/views/admin/moderation/ReportsList.vue:23 +msgctxt "Content/*/*/Short" +msgid "Unresolved" +msgstr "" + #: front/src/components/manage/moderation/InstancePolicyForm.vue:57 msgctxt "Content/Moderation/Card.Button.Label/Verb" msgid "Update" @@ -4717,12 +5103,8 @@ msgstr "Data de upload" #: front/src/components/library/FileUpload.vue:258 msgctxt "Content/Library/Help text" -msgid "" -"Upload denied, ensure the file is not too big and that you have not reached " -"your quota" -msgstr "" -"Carregamento recusado, garantir que o arquivo não é muito grande e que você " -"não atingiu sua cota" +msgid "Upload denied, ensure the file is not too big and that you have not reached your quota" +msgstr "Carregamento recusado, garantir que o arquivo não é muito grande e que você não atingiu sua cota" #: front/src/components/library/ImportStatusModal.vue:8 msgctxt "Popup/Import/Message" @@ -4731,20 +5113,18 @@ msgstr "" #: front/src/views/content/Home.vue:7 msgctxt "Content/Library/Paragraph" -msgid "" -"Upload music files (MP3, OGG, FLAC, etc.) from your personal library " -"directly from your browser to enjoy them here." -msgstr "" -"Carregue arquivos de música (mp3, ogg, flac, etc.) da sua biblioteca pessoal" -" diretamente de seu navegador para apreciá-los aqui." +msgid "Upload music files (MP3, OGG, FLAC, etc.) from your personal library directly from your browser to enjoy them here." +msgstr "Carregue arquivos de música (mp3, ogg, flac, etc.) da sua biblioteca pessoal diretamente de seu navegador para apreciá-los aqui." #: front/src/components/library/FileUpload.vue:30 msgctxt "Content/Library/Title/Verb" msgid "Upload new tracks" msgstr "Carregar novas músicas" -#: front/src/views/admin/moderation/AccountsDetail.vue:298 -msgctxt "Content/Moderation/Table.Label/Noun" +#: front/src/components/About.vue:99 +#: front/src/views/admin/moderation/AccountsDetail.vue:309 +#, fuzzy +msgctxt "*/*/*" msgid "Upload quota" msgstr "Carregar quota" @@ -4755,9 +5135,7 @@ msgstr "Tempo limite de upload, por favor, tente novamente" #: front/src/components/library/ImportStatusModal.vue:14 msgctxt "Popup/Import/Message" -msgid "" -"Upload was skipped because a similar one is already available in one of your" -" libraries." +msgid "Upload was skipped because a similar one is already available in one of your libraries." msgstr "" #: front/src/components/library/ImportStatusModal.vue:11 @@ -4780,35 +5158,25 @@ msgctxt "Content/Library/Table" msgid "Uploading…" msgstr "Carregando…" +#: front/src/components/manage/library/LibrariesTable.vue:52 +#: front/src/components/manage/moderation/AccountsTable.vue:41 +#: front/src/components/mixins/Translations.vue:75 +#: front/src/views/admin/library/AlbumDetail.vue:258 +#: front/src/views/admin/library/ArtistDetail.vue:246 #: front/src/views/admin/library/Base.vue:20 +#: front/src/views/admin/library/LibraryDetail.vue:258 +#: front/src/views/admin/library/TrackDetail.vue:310 #: front/src/views/admin/library/UploadsList.vue:24 +#: front/src/views/admin/moderation/AccountsDetail.vue:349 +#: front/src/views/admin/moderation/DomainsDetail.vue:281 +#: front/src/components/mixins/Translations.vue:76 msgctxt "*/*/*" msgid "Uploads" msgstr "Envios" -#: front/src/components/manage/moderation/AccountsTable.vue:41 -#: front/src/components/mixins/Translations.vue:63 -#: front/src/views/admin/library/AlbumDetail.vue:242 -#: front/src/views/admin/library/ArtistDetail.vue:231 -#: front/src/views/admin/library/LibraryDetail.vue:239 -#: front/src/views/admin/library/TrackDetail.vue:294 -#: front/src/views/admin/moderation/AccountsDetail.vue:337 -#: front/src/views/admin/moderation/DomainsDetail.vue:244 -#: front/src/components/mixins/Translations.vue:64 -msgctxt "Content/Moderation/Table.Label/Noun" -msgid "Uploads" -msgstr "Envios" - -#: front/src/components/manage/library/LibrariesTable.vue:52 -msgctxt "Content/*/*/Noun" -msgid "Uploads" -msgstr "Envios" - #: front/src/components/auth/ApplicationForm.vue:16 msgctxt "Content/Applications/Help Text" -msgid "" -"Use \"urn:ietf:wg:oauth:2.0:oob\" as a redirect URI if your application is " -"not served on the web." +msgid "Use \"urn:ietf:wg:oauth:2.0:oob\" as a redirect URI if your application is not served on the web." msgstr "" #: front/src/components/Footer.vue:16 @@ -4816,38 +5184,57 @@ msgctxt "Footer/*/List item.Link" msgid "Use another instance" msgstr "Use outra instância" +#: front/src/components/Home.vue:146 +msgctxt "Content/Home/Link" +msgid "Use Funkwhale on other devices with our apps" +msgstr "" + +#: front/src/components/moderation/ReportModal.vue:44 +msgctxt "*/*/Field,Help" +msgid "Use this field to provide additional context to the moderator that will handle your report." +msgstr "" + #: front/src/views/auth/PasswordReset.vue:12 msgctxt "Content/Signup/Paragraph" -msgid "" -"Use this form to request a password reset. We will send an email to the " -"given address with instructions to reset your password." +msgid "Use this form to request a password reset. We will send an email to the given address with instructions to reset your password." +msgstr "Use este formulário para solicitar uma redefinição de senha. Enviaremos um email para o endereço fornecido com instruções para redefinir sua senha." + +#: front/src/components/moderation/ReportModal.vue:18 +msgctxt "*/Moderation/Popup,Paragraph" +msgid "Use this form to submit a report to our moderation team." msgstr "" -"Use este formulário para solicitar uma redefinição de senha. Enviaremos um " -"email para o endereço fornecido com instruções para redefinir sua senha." #: front/src/components/manage/moderation/InstancePolicyForm.vue:111 msgctxt "Content/Moderation/Help text" -msgid "" -"Use this setting to temporarily enable/disable the policy without completely" -" removing it." -msgstr "" -"Use esta configuração para ativar/desativar temporariamente a polÃtica sem " -"removê-la completamente." +msgid "Use this setting to temporarily enable/disable the policy without completely removing it." +msgstr "Use esta configuração para ativar/desativar temporariamente a polÃtica sem removê-la completamente." #: front/src/components/manage/users/InvitationsTable.vue:49 msgctxt "Content/Admin/Table" msgid "Used" msgstr "Usado" +#: front/src/components/Home.vue:125 +msgctxt "Content/Home/Header" +msgid "Useful links" +msgstr "" + #: front/src/views/content/libraries/Detail.vue:26 msgctxt "Content/Library/Table.Label" msgid "User" msgstr "Usuário" -#: front/src/components/instance/Stats.vue:5 -msgctxt "Content/About/Title/Noun" -msgid "User activity" -msgstr "Atividade do usuário" +#: front/src/components/Home.vue:154 +#, fuzzy +msgctxt "Content/Home/Link" +msgid "User guides" +msgstr "Bibliotecas do usuário" + +#: front/src/views/admin/Settings.vue:88 +#, fuzzy +msgctxt "Content/Admin/Menu" +msgid "User Interface" +msgstr "Nome de usuário" #: front/src/components/library/AlbumDetail.vue:26 #: front/src/components/library/ArtistDetail.vue:39 @@ -4861,35 +5248,35 @@ msgctxt "Content/Radio/Title" msgid "User radios" msgstr "Rádios do usuário" -#: front/src/components/auth/Signup.vue:19 +#: front/src/components/auth/SignupForm.vue:15 #: front/src/components/manage/users/UsersTable.vue:37 -#: front/src/components/mixins/Translations.vue:59 +#: front/src/components/mixins/Translations.vue:71 #: front/src/views/admin/moderation/AccountsDetail.vue:114 -#: front/src/components/mixins/Translations.vue:60 +#: front/src/components/mixins/Translations.vue:72 msgctxt "Content/*/*" msgid "Username" msgstr "Nome de usuário" -#: front/src/components/auth/Login.vue:15 +#: front/src/components/auth/LoginForm.vue:11 msgctxt "Content/Login/Input.Label/Noun" msgid "Username or email" msgstr "Nome de usuário ou email" -#: front/src/components/instance/Stats.vue:13 -msgctxt "Content/About/Paragraph/Unit" -msgid "users" -msgstr "usuários" - -#: front/src/components/Sidebar.vue:102 -#: front/src/components/manage/moderation/DomainsTable.vue:39 -#: front/src/components/mixins/Translations.vue:61 +#: front/src/components/Sidebar.vue:106 +#: front/src/components/manage/moderation/DomainsTable.vue:47 +#: front/src/components/mixins/Translations.vue:73 #: src/views/admin/Settings.vue:81 front/src/views/admin/users/Base.vue:5 #: src/views/admin/users/UsersList.vue:21 -#: front/src/components/mixins/Translations.vue:62 +#: front/src/components/mixins/Translations.vue:74 msgctxt "*/*/*/Noun" msgid "Users" msgstr "Usuários" +#: front/src/components/Home.vue:110 +msgctxt "Content/Home/Paragraph" +msgid "Users on this pod also get %{ quota } of free storage to upload their own content!" +msgstr "" + #: front/src/components/Footer.vue:29 msgctxt "Footer/*/Title" msgid "Using Funkwhale" @@ -4907,45 +5294,60 @@ msgctxt "Content/Library/Link/Verb" msgid "View files" msgstr "Ver ficheiros" -#: front/src/components/library/AlbumBase.vue:81 -#: front/src/components/library/ArtistBase.vue:92 -#: front/src/components/library/TrackBase.vue:100 -#: front/src/views/admin/library/AlbumDetail.vue:42 -#: front/src/views/admin/library/ArtistDetail.vue:41 +#: front/src/components/library/AlbumBase.vue:95 +#: front/src/components/library/ArtistBase.vue:107 +#: front/src/components/library/TrackBase.vue:111 +#: front/src/views/admin/library/AlbumDetail.vue:48 +#: front/src/views/admin/library/ArtistDetail.vue:46 #: front/src/views/admin/library/LibraryDetail.vue:34 #: front/src/views/admin/library/LibraryDetail.vue:45 -#: front/src/views/admin/library/TrackDetail.vue:41 +#: front/src/views/admin/library/TagDetail.vue:32 +#: front/src/views/admin/library/TrackDetail.vue:47 #: front/src/views/admin/library/UploadDetail.vue:35 #: front/src/views/admin/library/UploadDetail.vue:46 #: front/src/views/admin/moderation/AccountsDetail.vue:37 #: front/src/views/admin/moderation/AccountsDetail.vue:45 +#: front/src/views/admin/moderation/DomainsDetail.vue:30 msgctxt "Content/Moderation/Link/Verb" msgid "View in Django's admin" msgstr "" -#: front/src/components/library/AlbumBase.vue:61 -#: front/src/components/library/ArtistBase.vue:72 -#: front/src/components/library/TrackBase.vue:80 +#: front/src/components/Home.vue:169 +#, fuzzy +msgctxt "Content/Home/Link" +msgid "View more…" +msgstr "Carregando seguidores…" + +#: front/src/components/library/AlbumBase.vue:62 +#: front/src/components/library/ArtistBase.vue:73 +#: front/src/components/library/TrackBase.vue:78 #: front/src/components/metadata/ArtistCard.vue:49 #: front/src/components/metadata/ReleaseCard.vue:53 msgctxt "Content/*/*/Clickable, Verb" msgid "View on MusicBrainz" msgstr "Ver no MusicBrainz" +#: front/src/components/manage/moderation/ReportCard.vue:124 +msgctxt "Content/Moderation/Link" +msgid "View public page" +msgstr "" + #: front/src/components/manage/library/LibrariesTable.vue:11 #: front/src/components/manage/library/LibrariesTable.vue:51 #: front/src/components/manage/library/UploadsTable.vue:11 #: front/src/components/manage/library/UploadsTable.vue:63 #: front/src/views/admin/library/LibraryDetail.vue:94 #: front/src/views/admin/library/UploadDetail.vue:101 +#: front/src/views/content/libraries/Form.vue:18 msgctxt "*/*/*" msgid "Visibility" msgstr "Visibilidade" -#: front/src/views/content/libraries/Form.vue:18 -msgctxt "Content/Library/Dropdown.Label" -msgid "Visibility" -msgstr "Visibilidade" +#: front/src/components/Home.vue:91 +#, fuzzy +msgctxt "Content/Home/Link" +msgid "Visit funkwhale.audio" +msgstr "Usando Funkwhale" #: front/src/components/library/AlbumDetail.vue:4 msgctxt "Content/Album/" @@ -4957,7 +5359,13 @@ msgctxt "Popup/*/Loading.Title" msgid "Waiting for result…" msgstr "Carregando seus favoritos …" -#: front/src/components/auth/Login.vue:7 +#: front/src/components/auth/Settings.vue:285 +#, fuzzy +msgctxt "Content/Settings/Error message.Title" +msgid "We cannot delete your account" +msgstr "Nós não podemos te logar" + +#: front/src/components/auth/LoginForm.vue:3 msgctxt "Content/Login/Error message.Title" msgid "We cannot log you in" msgstr "Nós não podemos te logar" @@ -4967,42 +5375,37 @@ msgctxt "Content/*/Error message.Title" msgid "We cannot save your changes" msgstr "Não podemos criar sua conta" -#: front/src/components/Home.vue:122 -msgctxt "Content/Home/List item" -msgid "We do not track you or bother you with ads" -msgstr "Nós não rastreamos ou incomodamos você com anúncios" +#: front/src/views/Notifications.vue:39 +msgctxt "Content/Notifications/Paragraph" +msgid "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!" +msgstr "" #: front/src/components/library/FileUpload.vue:39 msgctxt "Content/Library/Link" msgid "We recommend using Picard for that purpose." msgstr "Recomendamos usar o Picard para esse fim." -#: front/src/components/Home.vue:7 -msgctxt "Content/Home/Title" -msgid "We think listening to music should be simple." -msgstr "Nós achamos que ouvir música deveria ser simples." +#: front/src/components/moderation/ReportModal.vue:35 +msgctxt "*/*/Field,Help" +msgid "We'll use this email if we need to contact you regarding this report." +msgstr "" -#: front/src/components/Home.vue:148 +#: front/src/components/Home.vue:207 msgctxt "Head/Home/Title" msgid "Welcome" msgstr "Bem-vindo" #: front/src/components/Home.vue:5 -msgctxt "Content/Home/Title/Verb" -msgid "Welcome on Funkwhale" -msgstr "Bem-vindo ao Funkwhale" - -#: front/src/components/Home.vue:24 -msgctxt "Content/Home/Title" -msgid "Why funkwhale?" -msgstr "Por que o funkwhale?" +msgctxt "Content/Home/Header" +msgid "Welcome to %{ podName }!" +msgstr "" -#: front/src/components/audio/EmbedWizard.vue:13 +#: front/src/components/audio/EmbedWizard.vue:23 msgctxt "Popup/Embed/Input.Label" msgid "Widget height" msgstr "Altura do widget" -#: front/src/components/audio/EmbedWizard.vue:6 +#: front/src/components/audio/EmbedWizard.vue:16 msgctxt "Popup/Embed/Input.Label" msgid "Widget width" msgstr "Largura do widget" @@ -5022,9 +5425,11 @@ msgctxt "Content/OAuth Scopes/Help Text" msgid "Write-only access to user data" msgstr "" -#: front/src/components/Sidebar.vue:129 +#: front/src/components/Sidebar.vue:133 #: front/src/components/manage/moderation/AccountsTable.vue:72 -#: front/src/components/manage/moderation/DomainsTable.vue:58 +#: front/src/components/manage/moderation/DomainsTable.vue:12 +#: front/src/components/manage/moderation/DomainsTable.vue:69 +#: front/src/views/admin/moderation/DomainsDetail.vue:109 msgctxt "*/*/*" msgid "Yes" msgstr "Sim" @@ -5036,29 +5441,17 @@ msgstr "Sim, me desconecte!" #: front/src/views/content/libraries/Form.vue:19 msgctxt "Content/Library/Paragraph" -msgid "" -"You are able to share your library with other people, regardless of its " -"visibility." -msgstr "" -"Você pode compartilhar sua biblioteca com outras pessoas, independentemente " -"de sua visibilidade." +msgid "You are able to share your library with other people, regardless of its visibility." +msgstr "Você pode compartilhar sua biblioteca com outras pessoas, independentemente de sua visibilidade." #: front/src/components/library/FileUpload.vue:32 msgctxt "Content/Library/Paragraph" -msgid "" -"You are about to upload music to your library. Before proceeding, please " -"ensure that:" -msgstr "" -"Você está prestes a fazer o upload de músicas para sua biblioteca. Antes de " -"prosseguir, certifique-se de que:" +msgid "You are about to upload music to your library. Before proceeding, please ensure that:" +msgstr "Você está prestes a fazer o upload de músicas para sua biblioteca. Antes de prosseguir, certifique-se de que:" #: front/src/components/SetInstanceModal.vue:12 msgctxt "Popup/Login/Paragraph" -msgid "" -"You are currently connected to <a href=\"%{ url }\" target=\"_blank\">%{ " -"hostname } <i class=\"external icon\"/></a>. If you continue, you will " -"be disconnected from your current instance and all your local data will be " -"deleted." +msgid "You are currently connected to <a href=\"%{ url }\" target=\"_blank\">%{ hostname } <i class=\"external icon\"/></a>. If you continue, you will be disconnected from your current instance and all your local data will be deleted." msgstr "" #: front/src/components/library/ArtistDetail.vue:6 @@ -5073,9 +5466,7 @@ msgstr "Você está logado como %{ username }" #: front/src/components/library/FileUpload.vue:35 msgctxt "Content/Library/List item" -msgid "" -"You are not uploading copyrighted content in a public library, otherwise you" -" may be infringing the law" +msgid "You are not uploading copyrighted content in a public library, otherwise you may be infringing the law" msgstr "" #: front/src/components/SetInstanceModal.vue:98 @@ -5084,29 +5475,14 @@ msgid "You are now using the Funkwhale instance at %{ url }" msgstr "" #: front/src/views/content/Home.vue:17 +#, fuzzy msgctxt "Content/Library/Paragraph" -msgid "" -"You can follow libraries from other users to get access to new music. Public" -" libraries can be followed immediatly, while following a private library " -"requires approval from its owner." -msgstr "" -"Você pode seguir bibliotecas de outros usuários para obter acesso a novas " -"músicas. Bibliotecas públicas podem ser seguidas imediatamente, enquanto " -"seguir uma biblioteca privada requer aprovação de seu proprietário." - -#: front/src/components/Home.vue:128 -msgctxt "Content/Home/List item" -msgid "" -"You can invite friends and family to your instance so they can enjoy your " -"music" -msgstr "" -"Você pode convidar amigos e familia para sua instância para que eles possam " -"curtir sua música" +msgid "You can 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." +msgstr "Você pode seguir bibliotecas de outros usuários para obter acesso a novas músicas. Bibliotecas públicas podem ser seguidas imediatamente, enquanto seguir uma biblioteca privada requer aprovação de seu proprietário." #: front/src/components/moderation/FilterModal.vue:31 msgctxt "Popup/Moderation/Paragraph" -msgid "" -"You can manage and update your filters anytime from your account settings." +msgid "You can manage and update your filters any time from your account settings." msgstr "" #: front/src/views/auth/EmailConfirm.vue:24 @@ -5114,23 +5490,20 @@ msgctxt "Content/Signup/Paragraph" msgid "You can now use the service without limitations." msgstr "Agora você pode usar o serviço sem limitações." +#: front/src/components/auth/Settings.vue:278 +msgctxt "Content/Settings/Paragraph'" +msgid "You can permanently and irreversibly delete your account and all the associated data using the form below. You will be asked for confirmation." +msgstr "" + #: front/src/components/library/radios/Builder.vue:7 msgctxt "Content/Radio/Paragraph" -msgid "" -"You can use this interface to build your own custom radio, which will play " -"tracks according to your criteria." -msgstr "" -"Você pode usar essa interface para construir a sua própria rádio que vai " -"jogar músicas de acordo com seus critérios." +msgid "You can use this interface to build your own custom radio, which will play tracks according to your criteria." +msgstr "Você pode usar essa interface para construir a sua própria rádio que vai jogar músicas de acordo com seus critérios." #: front/src/components/auth/SubsonicTokenForm.vue:7 msgctxt "Content/Settings/Paragraph" -msgid "" -"You can use those to enjoy your playlist and music in offline mode, on your " -"smartphone or tablet, for instance." -msgstr "" -"Você pode usá-los para curtir sua playlist e música no modo off-line, em seu" -" smartphone ou tablet, por exemplo." +msgid "You can use those to enjoy your playlist and music in offline mode, on your smartphone or tablet, for instance." +msgstr "Você pode usá-los para curtir sua playlist e música no modo off-line, em seu smartphone ou tablet, por exemplo." #: front/src/components/auth/Settings.vue:202 msgctxt "Content/Applications/Paragraph" @@ -5147,19 +5520,17 @@ msgctxt "Content/Moderation/Card.Title" msgid "You don't have any rule in place for this account." msgstr "Não tem nenhuma regra em vigor para esta conta." -#: front/src/views/admin/moderation/DomainsDetail.vue:39 +#: front/src/views/admin/moderation/DomainsDetail.vue:67 msgctxt "Content/Moderation/Card.Title" msgid "You don't have any rule in place for this domain." msgstr "Você não tem nenhuma regra em vigor para este domÃnio." #: front/src/components/library/EditForm.vue:52 msgctxt "Content/Library/Paragraph" -msgid "" -"You don't have the permission to edit this object, but you can suggest " -"changes. Once submitted, suggestions will be reviewed before approval." +msgid "You don't have the permission to edit this object, but you can suggest changes. Once submitted, suggestions will be reviewed before approval." msgstr "" -#: front/src/components/Sidebar.vue:171 +#: front/src/components/Sidebar.vue:175 msgctxt "Sidebar/Player/Title" msgid "You have a radio playing" msgstr "Você tem um rádio tocando" @@ -5171,10 +5542,8 @@ msgstr "Você pode ter um problema de conectividade." #: front/src/components/auth/Settings.vue:100 msgctxt "Popup/Settings/List item" -msgid "" -"You will be logged out from this session and have to log in with the new one" -msgstr "" -"Você será desconectado desta sessão e precisará fazer login com o novo" +msgid "You will be logged out from this session and have to log in with the new one" +msgstr "Você será desconectado desta sessão e precisará fazer login com o novo" #: front/src/components/auth/Authorize.vue:51 msgctxt "Content/Auth/Paragraph" @@ -5188,24 +5557,24 @@ msgstr "" #: front/src/components/auth/Settings.vue:71 msgctxt "Content/Settings/Paragraph" -msgid "" -"You will have to update your password on your clients that use this " -"password." -msgstr "" -"Você terá que atualizar sua senha em seus clientes que usam essa senha." +msgid "You will have to update your password on your clients that use this password." +msgstr "Você terá que atualizar sua senha em seus clientes que usam essa senha." #: front/src/components/moderation/FilterModal.vue:20 msgctxt "Popup/Moderation/Paragraph" -msgid "" -"You will not see tracks, albums and user activity linked to this artist " -"anymore:" +msgid "You will not see tracks, albums and user activity linked to this artist any more:" msgstr "" -#: front/src/components/auth/Signup.vue:13 +#: front/src/components/auth/SignupForm.vue:9 msgctxt "Content/Signup/Form/Paragraph" msgid "Your account cannot be created." msgstr "Playlist criada" +#: front/src/components/auth/Settings.vue:281 +msgctxt "Content/Settings/Paragraph'" +msgid "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." +msgstr "" + #: front/src/components/auth/Settings.vue:215 msgctxt "Content/Settings/Title/Noun" msgid "Your applications" @@ -5216,6 +5585,11 @@ msgctxt "Content/Settings/Error message.Title" msgid "Your avatar cannot be saved" msgstr "" +#: front/src/components/auth/Settings.vue:527 +msgctxt "*/Auth/Message" +msgid "Your deletion request was submitted, your account and content will be deleted shortly" +msgstr "" + #: front/src/components/library/EditForm.vue:3 msgctxt "Content/Library/Paragraph" msgid "Your edit was successfully submitted." @@ -5226,12 +5600,13 @@ msgctxt "Head/Favorites/Title" msgid "Your Favorites" msgstr "Seus favoritos" -#: front/src/components/Home.vue:109 -msgctxt "Content/Home/Title" -msgid "Your music, your way" -msgstr "Sua música, seu jeito" +#: front/src/views/Notifications.vue:5 +#, fuzzy +msgctxt "Content/Notifications/Title" +msgid "Your messages" +msgstr "Mensagens emitidas" -#: front/src/views/Notifications.vue:4 +#: front/src/views/Notifications.vue:69 msgctxt "Content/Notifications/Title" msgid "Your notifications" msgstr "Suas notificações" @@ -5247,42 +5622,41 @@ msgid "Your password has been updated successfully." msgstr "Sua senha foi atualizada com sucesso." #: front/src/components/auth/Settings.vue:14 +#, fuzzy msgctxt "Content/Settings/Error message.Title" -msgid "Your settings can't be updateds" +msgid "Your settings can't be updated" msgstr "Configurações atualizadas" #: front/src/components/auth/Settings.vue:101 msgctxt "Popup/Settings/List item" -msgid "" -"Your Subsonic password will be changed to a new, random one, logging you out" -" from devices that used the old Subsonic password" -msgstr "" -"Sua senha do Subsonic será alterada para uma nova, aleatória, efetuando o " -"logout de dispositivos que usaram a senha antiga do Subsonic" +msgid "Your Subsonic password will be changed to a new, random one, logging you out from devices that used the old Subsonic password" +msgstr "Sua senha do Subsonic será alterada para uma nova, aleatória, efetuando o logout de dispositivos que usaram a senha antiga do Subsonic" -#: front/src/edits.js:47 -msgctxt "*/*/*/Short, Noun" -msgid "Position" -msgstr "Paginação" +#: front/src/entities.js:126 +#, fuzzy +msgctxt "*/*/*/Noun" +msgid "MusicBrainz ID" +msgstr "Ver no MusicBrainz" -#: front/src/edits.js:54 -msgctxt "Content/Track/*/Noun" -msgid "Copyright" -msgstr "Direitos Autorais" +#: front/src/main.js:110 +msgctxt "*/Error/Paragraph" +msgid "You sent too many requests and have been rate limited, please try again in %{ delay }" +msgstr "" + +#: front/src/main.js:113 +msgctxt "*/Error/Paragraph" +msgid "You sent too many requests and have been rate limited, please try again later" +msgstr "" -#: front/src/components/library/AlbumBase.vue:183 +#: front/src/components/library/AlbumBase.vue:208 #, fuzzy msgctxt "Content/Album/Header.Title" -msgid "" -"Album containing %{ count } track, by <a class=\"internal\" href=\"%{ " -"artistUrl }\">%{ artist }</a>" -msgid_plural "" -"Album containing %{ count } tracks, by <a class=\"internal\" href=\"%{ " -"artistUrl }\">%{ artist }</a>" +msgid "Album containing %{ count } track, by <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" +msgid_plural "Album containing %{ count } tracks, by <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" msgstr[0] "Ãlbum contendo %{ count } pista, por %{ artist }" msgstr[1] "Ãlbum contendo %{ count } pistas, por %{ artist }" -#: front/src/components/audio/PlayButton.vue:220 +#: front/src/components/audio/PlayButton.vue:246 #, fuzzy msgctxt "*/Queue/Message" msgid "%{ count } track was added to your queue" diff --git a/front/locales/ru/LC_MESSAGES/app.po b/front/locales/ru/LC_MESSAGES/app.po index 4a3793d342c73fec567cf1e2521b9e158f8c8b4e..8c5e68495f69332ff248a072b4c4ba0d1db3bcd8 100644 --- a/front/locales/ru/LC_MESSAGES/app.po +++ b/front/locales/ru/LC_MESSAGES/app.po @@ -7,16 +7,17 @@ msgid "" msgstr "" "Project-Id-Version: front 0.1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-05-16 10:35+0200\n" -"PO-Revision-Date: 2018-10-20 14:22+0000\n" -"Last-Translator: noname <noname@inventati.org>\n" +"POT-Creation-Date: 2019-10-01 15:15+0200\n" +"PO-Revision-Date: 2019-10-03 17:13+0000\n" +"Last-Translator: SpcCw <ravnina@gmail.com>\n" "Language-Team: none\n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 2.20\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=" +"4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 3.7\n" #: front/src/components/playlists/PlaylistModal.vue:9 msgctxt "Popup/Playlist/Paragraph" @@ -36,21 +37,67 @@ msgstr "(пуÑто)" #: front/src/components/auth/Authorize.vue:16 msgctxt "Content/Auth/Title" msgid "%{ app } wants to access your Funkwhale account" -msgstr "Войти в ваш аккаунт Funkwhale" +msgstr "%{ app } хочет получить доÑтуп к Вашему аккаунту Funkwhale" + +#: front/src/components/About.vue:173 src/components/Home.vue:56 +msgctxt "Content/Home/Stat" +msgid "%{ count } active user" +msgid_plural "%{ count } active users" +msgstr[0] "%{ count } активный пользователь" +msgstr[1] "%{ count } активных пользователÑ" +msgstr[2] "%{ count } активных пользователей" + +#: front/src/components/About.vue:182 +msgctxt "Content/Home/Stat" +msgid "%{ count } albums" +msgid_plural "%{ count } albums" +msgstr[0] "%{ count } альбом" +msgstr[1] "%{ count } альбома" +msgstr[2] "%{ count } альбомов" + +#: front/src/components/About.vue:152 +msgctxt "*/*/*" +msgid "%{ count } allowed domains" +msgid_plural "%{ count } allowed domains" +msgstr[0] "%{ count } разрешенный домен" +msgstr[1] "%{ count } разрешенных домена" +msgstr[2] "%{ count } разрешенных доменов" + +#: front/src/components/About.vue:179 +msgctxt "Content/Home/Stat" +msgid "%{ count } artists" +msgid_plural "%{ count } artists" +msgstr[0] "%{ count } иÑполнитель" +msgstr[1] "%{ count } иÑполнителÑ" +msgstr[2] "%{ count } иÑполнителей" + +#: front/src/components/About.vue:176 src/components/Home.vue:59 +msgctxt "Content/Home/Stat" +msgid "%{ count } hour of music" +msgid_plural "%{ count } hours of music" +msgstr[0] "%{ count } Ñ‡Ð°Ñ Ð¼ÑƒÐ·Ñ‹ÐºÐ¸" +msgstr[1] "%{ count } чаÑа музыки" +msgstr[2] "%{ count } чаÑов музыки" + +#: front/src/components/About.vue:188 +msgctxt "Content/Home/Stat" +msgid "%{ count } listenings" +msgid_plural "%{ count } listenings" +msgstr[0] "%{ count } проÑлушивание" +msgstr[1] "%{ count } проÑлушиваниÑ" +msgstr[2] "%{ count } проÑлушиваний" #: front/src/components/common/ActionTable.vue:68 -#, fuzzy msgctxt "Content/*/Paragraph" msgid "%{ count } on %{ total } selected" msgid_plural "%{ count } on %{ total } selected" msgstr[0] "выбран %{ count } из %{ total }" -msgstr[1] "выбрано %{ count } из %{ total }" +msgstr[1] "выбраны %{ count } из %{ total }" msgstr[2] "выбрано %{ count } из %{ total }" -#: front/src/components/Sidebar.vue:121 src/components/audio/album/Card.vue:52 +#: front/src/components/Sidebar.vue:125 src/components/audio/album/Card.vue:52 #: front/src/views/content/libraries/Card.vue:40 -#: src/views/content/remote/Card.vue:30 -#, fuzzy +#: src/views/content/remote/Card.vue:43 msgctxt "*/*/*" msgid "%{ count } track" msgid_plural "%{ count } tracks" @@ -59,7 +106,6 @@ msgstr[1] "%{ count } трека" msgstr[2] "%{ count } треков" #: front/src/components/library/ArtistBase.vue:13 -#, fuzzy msgctxt "Content/Artist/Paragraph" msgid "%{ count } track in %{ albumsCount } albums" msgid_plural "%{ count } tracks in %{ albumsCount } albums" @@ -68,7 +114,6 @@ msgstr[1] "%{ count } трека из %{ albumsCount } альбомов" msgstr[2] "%{ count } треков из %{ albumsCount } альбомов" #: front/src/components/library/radios/Builder.vue:81 -#, fuzzy msgctxt "Content/Radio/Table.Paragraph/Short" msgid "%{ count } track matching combined filters" msgid_plural "%{ count } tracks matching combined filters" @@ -76,8 +121,15 @@ msgstr[0] "%{ count } подходÑщий трек" msgstr[1] "%{ count } подходÑщих трека" msgstr[2] "%{ count } подходÑщих треков" -#: front/src/components/playlists/Card.vue:18 -#, fuzzy +#: front/src/components/About.vue:185 +msgctxt "Content/Home/Stat" +msgid "%{ count } tracks" +msgid_plural "%{ count } tracks" +msgstr[0] "%{ count } трек" +msgstr[1] "%{ count } трека" +msgstr[2] "%{ count } треков" + +#: front/src/components/playlists/Card.vue:28 msgctxt "Content/*/Card/List item" msgid "%{ count} track" msgid_plural "%{ count } tracks" @@ -103,17 +155,17 @@ msgstr "%{ minutes } мин" #: front/src/components/notifications/NotificationRow.vue:40 msgctxt "Content/Notifications/Paragraph" msgid "%{ username } accepted your follow on library \"%{ library }\"" -msgstr "" +msgstr "%{ username } принÑл Вашу подпиÑку на библиотеку \"%{ library }\"" #: front/src/components/notifications/NotificationRow.vue:39 msgctxt "Content/Notifications/Paragraph" msgid "%{ username } followed your library \"%{ library }\"" -msgstr "" +msgstr "%{ username } подпиÑалÑÑ Ð½Ð° Вашу библиотеку \"%{ library }\"" #: front/src/components/notifications/NotificationRow.vue:41 msgctxt "Content/Notifications/Paragraph" msgid "%{ username } wants to follow your library \"%{ library }\"" -msgstr "" +msgstr "%{ username } хочет подпиÑатьÑÑ Ð½Ð° Вашу библиотеку \"%{ library }\"" #: front/src/components/auth/Profile.vue:46 msgctxt "Head/Profile/Title" @@ -122,12 +174,10 @@ msgstr "Профиль %{ username }" #: front/src/components/playlists/PlaylistModal.vue:21 msgctxt "Popup/Playlist/Paragraph" -msgid "" -"<strong>%{ track }</strong> is already in <strong>%{ playlist }</strong>." -msgstr "" +msgid "<strong>%{ track }</strong> is already in <strong>%{ playlist }</strong>." +msgstr "<strong>%{ track }</strong> уже в ÑпиÑке воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ <strong>%{ playlist }</strong>." -#: front/src/components/audio/artist/Card.vue:41 -#, fuzzy +#: front/src/components/audio/artist/Card.vue:11 msgctxt "Content/Artist/Card" msgid "1 album" msgid_plural "%{ count } albums" @@ -136,7 +186,6 @@ msgstr[1] "%{ count } альбома" msgstr[2] "%{ count } альбомов" #: front/src/components/favorites/List.vue:10 -#, fuzzy msgctxt "Content/Favorites/Title" msgid "1 favorite" msgid_plural "%{ count } favorites" @@ -144,32 +193,50 @@ msgstr[0] "1 избранный" msgstr[1] "%{ count } избранных" msgstr[2] "%{ count } избранных" -#: front/src/components/Home.vue:64 -msgctxt "Content/Home/Title" -msgid "A clean library" -msgstr "ОчиÑтить библиотеку" +#: front/src/components/audio/artist/Card.vue:15 +msgctxt "Content/Artist/Card" +msgid "1 track" +msgid_plural "%{ count } tracks" +msgstr[0] "один трек" +msgstr[1] "%{ count } трека" +msgstr[2] "%{ count } треков" + +#: front/src/views/Notifications.vue:21 src/views/Notifications.vue:55 +msgctxt "*/*/*" +msgid "30 days" +msgstr "30 дней" + +#: front/src/views/Notifications.vue:22 src/views/Notifications.vue:56 +msgctxt "*/*/*" +msgid "60 days" +msgstr "60 дней" + +#: front/src/views/Notifications.vue:23 src/views/Notifications.vue:57 +msgctxt "*/*/*" +msgid "90 days" +msgstr "90 дней" #: front/src/components/library/FileUpload.vue:264 msgctxt "Content/Library/Help text" -msgid "A network error occured while uploading this file" +msgid "A network error occurred while uploading this file" msgstr "При загрузке Ñтого файла произошла ÑÐµÑ‚ÐµÐ²Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°" -#: front/src/components/library/EditForm.vue:145 +#: front/src/components/library/EditForm.vue:161 msgctxt "*/*/Placeholder" msgid "A short summary describing your changes." -msgstr "При Ñохранении ваших изменений произошла ошибка" +msgstr "ÐšÑ€Ð°Ñ‚ÐºÐ°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ Ваших правках." #: front/src/components/About.vue:5 -msgctxt "Content/About/Title/Short, Noun" -msgid "About %{ instance }" -msgstr "О %{ instance }" +msgctxt "Content/Home/Header" +msgid "About %{ podName }" +msgstr "О %{ podName }" #: front/src/components/Footer.vue:6 msgctxt "Footer/About/Title" msgid "About %{instanceName}" msgstr "О %{ instance }" -#: front/src/components/Footer.vue:45 +#: front/src/components/Footer.vue:53 src/components/Home.vue:85 msgctxt "Footer/*/Title/Short" msgid "About Funkwhale" msgstr "О Funkwhale" @@ -177,11 +244,16 @@ msgstr "О Funkwhale" #: front/src/components/Footer.vue:10 msgctxt "Footer/About/List item.Link" msgid "About page" -msgstr "Страница альбома" +msgstr "ИнформациÑ" -#: front/src/components/About.vue:8 src/components/About.vue:67 -msgctxt "Content/About/Title" -msgid "About this instance" +#: front/src/components/Home.vue:19 +msgctxt "Content/Home/Header" +msgid "About this Funkwhale pod" +msgstr "Об Ñтом узле Funkwhale" + +#: front/src/components/About.vue:21 src/components/About.vue:51 +msgctxt "Content/About/Header" +msgid "About this pod" msgstr "Об Ñтом узле" #: front/src/views/content/libraries/Detail.vue:48 @@ -194,110 +266,101 @@ msgctxt "Content/Library/Table/Short" msgid "Accepted" msgstr "Подтверждено" -#: front/src/components/auth/SubsonicTokenForm.vue:110 +#: front/src/components/auth/SubsonicTokenForm.vue:117 msgctxt "Content/Settings/Message" msgid "Access disabled" msgstr "ДоÑтуп отключен" -#: front/src/components/mixins/Translations.vue:73 -#: front/src/components/mixins/Translations.vue:74 +#: front/src/components/mixins/Translations.vue:85 +#: front/src/components/mixins/Translations.vue:86 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to audio files, libraries, artists, albums and tracks" -msgstr "" +msgstr "ДоÑтуп к аудио файлам, библиотекам, иÑполнителÑм, альбомам и трекам" -#: front/src/components/mixins/Translations.vue:97 -#: front/src/components/mixins/Translations.vue:98 +#: front/src/components/mixins/Translations.vue:109 +#: front/src/components/mixins/Translations.vue:110 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to content filters" -msgstr "Выберите фильтр" +msgstr "ДоÑтуп к фильтрам Ñодержимого" -#: front/src/components/mixins/Translations.vue:105 -#: front/src/components/mixins/Translations.vue:106 +#: front/src/components/mixins/Translations.vue:117 +#: front/src/components/mixins/Translations.vue:118 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to edits" -msgstr "ДоÑтуп отключен" +msgstr "ДоÑтуп к правкам" -#: front/src/components/mixins/Translations.vue:69 -#: front/src/components/mixins/Translations.vue:70 +#: front/src/components/mixins/Translations.vue:81 +#: front/src/components/mixins/Translations.vue:82 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to email, username, and profile information" -msgstr "" +msgstr "ДоÑтуп к Ñлектронной почте, имени Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸ информации профилÑ" -#: front/src/components/mixins/Translations.vue:77 -#: front/src/components/mixins/Translations.vue:78 +#: front/src/components/mixins/Translations.vue:89 +#: front/src/components/mixins/Translations.vue:90 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to favorites" -msgstr "Добавить в избранное" +msgstr "ДоÑтуп к избранному" -#: front/src/components/mixins/Translations.vue:85 -#: front/src/components/mixins/Translations.vue:86 +#: front/src/components/mixins/Translations.vue:97 +#: front/src/components/mixins/Translations.vue:98 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to follows" -msgstr "" +msgstr "ДоÑтуп к подпиÑкам" -#: front/src/components/mixins/Translations.vue:81 -#: front/src/components/mixins/Translations.vue:82 +#: front/src/components/mixins/Translations.vue:93 +#: front/src/components/mixins/Translations.vue:94 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to listening history" -msgstr "" +msgstr "ДоÑтуп к иÑтории проÑлушиваниÑ" -#: front/src/components/mixins/Translations.vue:101 -#: front/src/components/mixins/Translations.vue:102 +#: front/src/components/mixins/Translations.vue:113 +#: front/src/components/mixins/Translations.vue:114 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to notifications" -msgstr "Ваши уведомлениÑ" +msgstr "ДоÑтуп к уведомлениÑм" -#: front/src/components/mixins/Translations.vue:89 -#: front/src/components/mixins/Translations.vue:90 +#: front/src/components/mixins/Translations.vue:101 +#: front/src/components/mixins/Translations.vue:102 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to playlists" -msgstr "Добавить в ÑпиÑок воÑпроизведениÑ..." +msgstr "ДоÑтуп к ÑпиÑкам воÑпроизведениÑ" -#: front/src/components/mixins/Translations.vue:93 -#: front/src/components/mixins/Translations.vue:94 +#: front/src/components/mixins/Translations.vue:105 +#: front/src/components/mixins/Translations.vue:106 msgctxt "Content/OAuth Scopes/Paragraph" msgid "Access to radios" -msgstr "ДоÑтуп отключен" - -#: front/src/components/Home.vue:101 -msgctxt "Content/Home/List item" -msgid "" -"Access your music from a clean interface that focuses on what really matters" -msgstr "" -"Получайте доÑтуп к вашей музыке из проÑтого интерфейÑа который ÑфокуÑирован " -"на том что дейÑтвительно важно" +msgstr "ДоÑтуп к радио" #: front/src/components/manage/library/UploadsTable.vue:67 -#: front/src/components/mixins/Translations.vue:45 +#: front/src/components/mixins/Translations.vue:55 #: front/src/views/admin/library/UploadDetail.vue:175 -#: front/src/components/mixins/Translations.vue:46 +#: front/src/components/mixins/Translations.vue:56 msgctxt "Content/*/*/Noun" msgid "Accessed date" -msgstr "ДоÑтуп отключен" - -#: front/src/views/admin/library/LibraryDetail.vue:104 -#: front/src/views/admin/library/UploadDetail.vue:111 -msgctxt "*/*/*/Noun" -msgid "Account" -msgstr "Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Ð°ÐºÐºÐ°ÑƒÐ½Ñ‚Ð°" +msgstr "Ð’Ñ€ÐµÐ¼Ñ Ð´Ð¾Ñтупа" #: front/src/components/manage/library/LibrariesTable.vue:49 #: front/src/components/manage/library/UploadsTable.vue:61 -msgctxt "*/*/*" +#: front/src/components/manage/moderation/ReportCard.vue:156 +#: front/src/components/mixins/Report.vue:13 +#: front/src/views/admin/library/LibraryDetail.vue:113 +#: front/src/views/admin/library/UploadDetail.vue:111 +#: front/src/components/mixins/Report.vue:14 +msgctxt "*/*/*/Noun" msgid "Account" msgstr "Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Ð°ÐºÐºÐ°ÑƒÐ½Ñ‚Ð°" #: front/src/views/admin/moderation/AccountsDetail.vue:107 msgctxt "Content/Moderation/Title" msgid "Account data" -msgstr "Ðккаунт активен" +msgstr "Данные аккаунта" #: front/src/components/auth/Settings.vue:5 msgctxt "Content/Settings/Title" msgid "Account settings" msgstr "ÐаÑтройки аккаунта" -#: front/src/components/auth/Settings.vue:479 +#: front/src/components/auth/Settings.vue:544 msgctxt "Head/Settings/Title" msgid "Account Settings" msgstr "ÐаÑтройки аккаунта" @@ -310,14 +373,14 @@ msgstr "Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Ð°ÐºÐºÐ°ÑƒÐ½Ñ‚Ð°" #: front/src/views/auth/PasswordReset.vue:14 msgctxt "Content/Signup/Input.Label" msgid "Account's email" -msgstr "ÐÐ»ÐµÐºÑ‚Ñ€Ð¾Ð½Ð½Ð°Ñ Ð¿Ð¾Ñ‡Ñ‚Ð° аккаунта" +msgstr "ÐÐ»ÐµÐºÑ‚Ñ€Ð¾Ð½Ð½Ð°Ñ Ð¿Ð¾Ñ‡Ñ‚Ð°" #: front/src/views/admin/moderation/AccountsList.vue:3 #: front/src/views/admin/moderation/AccountsList.vue:24 -#: front/src/views/admin/moderation/Base.vue:8 +#: front/src/views/admin/moderation/Base.vue:11 msgctxt "*/Moderation/Title" msgid "Accounts" -msgstr "Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Ð°ÐºÐºÐ°ÑƒÐ½Ñ‚Ð°" +msgstr "Ðккаунты" #: front/src/views/content/libraries/Detail.vue:29 msgctxt "Content/Library/Table.Label" @@ -325,33 +388,33 @@ msgid "Action" msgstr "ДейÑтвие" #: front/src/components/common/ActionTable.vue:101 -#, fuzzy msgctxt "Content/*/Paragraph" msgid "Action %{ action } was launched successfully on %{ count } element" -msgid_plural "" -"Action %{ action } was launched successfully on %{ count } elements" +msgid_plural "Action %{ action } was launched successfully on %{ count } elements" msgstr[0] "ДейÑтвие %{ action } было уÑпешно запущено на %{ count } Ñлементе" msgstr[1] "ДейÑтвие %{ action } было уÑпешно запущено на %{ count } Ñлементах" msgstr[2] "ДейÑтвие %{ action } было уÑпешно запущено на %{ count } Ñлементах" #: front/src/components/common/ActionTable.vue:22 #: front/src/components/library/radios/Builder.vue:65 +#: front/src/components/manage/moderation/ReportCard.vue:210 msgctxt "Content/*/*/Noun" msgid "Actions" msgstr "ДейÑтвиÑ" -#: front/src/components/manage/users/UsersTable.vue:53 +#: front/src/components/manage/users/UsersTable.vue:54 msgctxt "Content/Admin/Table" msgid "Active" msgstr "Ðктивен(на)" -#: front/src/views/admin/library/AlbumDetail.vue:134 -#: front/src/views/admin/library/ArtistDetail.vue:123 -#: front/src/views/admin/library/LibraryDetail.vue:138 -#: front/src/views/admin/library/TrackDetail.vue:186 +#: front/src/views/admin/library/AlbumDetail.vue:140 +#: front/src/views/admin/library/ArtistDetail.vue:128 +#: front/src/views/admin/library/LibraryDetail.vue:147 +#: front/src/views/admin/library/TagDetail.vue:83 +#: front/src/views/admin/library/TrackDetail.vue:192 #: front/src/views/admin/library/UploadDetail.vue:160 -#: front/src/views/admin/moderation/AccountsDetail.vue:220 -#: front/src/views/admin/moderation/DomainsDetail.vue:136 +#: front/src/views/admin/moderation/AccountsDetail.vue:221 +#: front/src/views/admin/moderation/DomainsDetail.vue:173 msgctxt "Content/Moderation/Title" msgid "Activity" msgstr "ÐктивноÑÑ‚ÑŒ" @@ -362,25 +425,25 @@ msgctxt "Content/Settings/Dropdown.Label/Noun" msgid "Activity visibility" msgstr "ВидимоÑÑ‚ÑŒ активноÑти" -#: front/src/views/admin/moderation/DomainsList.vue:18 +#: front/src/views/admin/moderation/DomainsList.vue:22 msgctxt "Content/Moderation/Button/Verb" msgid "Add" -msgstr "" +msgstr "Добавить" #: front/src/views/admin/moderation/DomainsList.vue:13 msgctxt "Content/Moderation/Form.Label/Verb" msgid "Add a domain" -msgstr "" +msgstr "Добавить домен" #: front/src/views/admin/moderation/AccountsDetail.vue:79 msgctxt "Content/Moderation/Button/Verb" msgid "Add a moderation policy" -msgstr "" +msgstr "Добавить политику модерации" #: front/src/components/manage/moderation/InstancePolicyForm.vue:4 msgctxt "Content/Moderation/Card.Button.Label/Verb" msgid "Add a new moderation rule" -msgstr "Удалить радио" +msgstr "Добавить правило модерации" #: front/src/views/content/Home.vue:35 msgctxt "Content/Library/Title/Verb" @@ -391,7 +454,7 @@ msgstr "Добавить или управлÑÑ‚ÑŒ Ñодержимым" #: front/src/components/playlists/PlaylistModal.vue:31 msgctxt "*/Playlist/Button.Label/Verb" msgid "Add anyways" -msgstr "" +msgstr "Ð’ÑÑ‘ равно добавить" #: front/src/components/Sidebar.vue:75 src/views/content/Base.vue:18 msgctxt "*/Library/*/Verb" @@ -406,9 +469,21 @@ msgstr "Добавить фильтр" #: front/src/components/library/radios/Builder.vue:41 msgctxt "Content/Radio/Paragraph" msgid "Add filters to customize your radio" -msgstr "Добавить фильтры чтобы каÑтомизировать Ñвоё радио" +msgstr "Добавить фильтры, чтобы наÑтроить Ñвоё радио" + +#: front/src/components/manage/moderation/NoteForm.vue:12 +msgctxt "Content/Moderation/Button.Label/Verb" +msgid "Add note" +msgstr "Добавить примечание" + +#: front/src/components/manage/moderation/DomainsTable.vue:191 +#: front/src/views/admin/moderation/DomainsDetail.vue:46 +#: front/src/views/admin/moderation/DomainsList.vue:18 +msgctxt "Content/Moderation/Action/Verb" +msgid "Add to allow-list" +msgstr "Добавить в \"белый\" ÑпиÑок" -#: front/src/components/audio/PlayButton.vue:75 +#: front/src/components/audio/PlayButton.vue:91 msgctxt "*/Queue/Dropdown/Button/Title" msgid "Add to current queue" msgstr "Добавить в очередь" @@ -423,7 +498,7 @@ msgstr "Добавить в избранное" #: front/src/components/playlists/TrackPlaylistIcon.vue:34 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Add to playlist…" -msgstr "Добавить в ÑпиÑок воÑпроизведениÑ..." +msgstr "Добавить в ÑпиÑок воÑпроизведениÑ…" #: front/src/components/audio/PlayButton.vue:15 msgctxt "*/Queue/Dropdown/Button/Label/Short" @@ -440,7 +515,7 @@ msgctxt "Popup/Playlist/Table.Button.Label/Verb" msgid "Add track" msgstr "Добавить трек" -#: front/src/components/manage/users/UsersTable.vue:69 +#: front/src/components/manage/users/UsersTable.vue:70 msgctxt "Content/Admin/Table.User role" msgid "Admin" msgstr "ÐдминиÑтратор" @@ -450,49 +525,49 @@ msgctxt "Sidebar/Admin/Title/Noun" msgid "Administration" msgstr "ÐдминиÑтрирование" -#: front/src/views/admin/library/TrackDetail.vue:107 -msgctxt "*/*/*/Noun" -msgid "Album" -msgstr "Ðльбом" - -#: front/src/components/audio/SearchBar.vue:26 +#: front/src/components/audio/SearchBar.vue:33 #: src/components/audio/track/Table.vue:9 -#: front/src/components/library/AlbumBase.vue:152 -#: front/src/components/library/ArtistBase.vue:194 +#: front/src/components/library/AlbumBase.vue:170 +#: front/src/components/library/ArtistBase.vue:212 #: front/src/components/manage/library/TracksTable.vue:40 #: front/src/components/metadata/Search.vue:134 +#: src/components/mixins/Report.vue:41 +#: front/src/views/admin/library/TrackDetail.vue:113 #: front/src/views/content/libraries/FilesTable.vue:57 +#: front/src/components/mixins/Report.vue:42 msgctxt "*/*/*" msgid "Album" msgstr "Ðльбом" -#: front/src/views/admin/library/TrackDetail.vue:128 +#: front/src/views/admin/library/TrackDetail.vue:134 msgctxt "*/*/*/Noun" msgid "Album artist" -msgstr "Ðльбомы Ñтого иÑполнителÑ" +msgstr "ИÑполнитель альбома" -#: front/src/views/admin/library/AlbumDetail.vue:92 +#: front/src/views/admin/library/AlbumDetail.vue:98 msgctxt "Content/Moderation/Title" msgid "Album data" -msgstr "Ðазвание альбома" +msgstr "Данные альбома" -#: front/src/components/mixins/Translations.vue:51 -#: front/src/components/mixins/Translations.vue:52 +#: front/src/components/mixins/Translations.vue:61 +#: front/src/components/mixins/Translations.vue:62 msgctxt "Content/*/Dropdown/Noun" msgid "Album name" msgstr "Ðазвание альбома" #: front/src/components/audio/Search.vue:19 -#: src/components/instance/Stats.vue:48 -#: front/src/components/library/Albums.vue:120 -#: src/components/library/Library.vue:7 +#: src/components/library/Albums.vue:129 +#: front/src/components/library/Library.vue:7 +#: src/components/library/TagDetail.vue:28 #: front/src/components/manage/library/ArtistsTable.vue:41 +#: front/src/components/manage/library/TagsTable.vue:43 #: front/src/views/admin/library/AlbumsList.vue:24 -#: front/src/views/admin/library/ArtistDetail.vue:241 +#: front/src/views/admin/library/ArtistDetail.vue:256 #: front/src/views/admin/library/Base.vue:11 -#: front/src/views/admin/library/LibraryDetail.vue:219 -#: front/src/views/admin/moderation/AccountsDetail.vue:354 -#: front/src/views/admin/moderation/DomainsDetail.vue:264 +#: front/src/views/admin/library/LibraryDetail.vue:238 +#: front/src/views/admin/library/TagDetail.vue:133 +#: front/src/views/admin/moderation/AccountsDetail.vue:366 +#: front/src/views/admin/moderation/DomainsDetail.vue:301 msgctxt "*/*/*" msgid "Albums" msgstr "Ðльбомы" @@ -506,134 +581,142 @@ msgstr "Ðльбомы Ñтого иÑполнителÑ" #: front/src/components/manage/library/LibrariesTable.vue:13 #: front/src/components/manage/library/UploadsTable.vue:13 #: front/src/components/manage/library/UploadsTable.vue:22 +#: front/src/components/manage/moderation/DomainsTable.vue:11 #: front/src/components/manage/users/InvitationsTable.vue:19 +#: front/src/components/moderation/ReportCategoryDropdown.vue:32 +#: front/src/views/admin/moderation/ReportsList.vue:17 #: front/src/views/content/libraries/FilesTable.vue:13 msgctxt "Content/*/Dropdown" msgid "All" msgstr "Ð’Ñе" #: front/src/components/common/ActionTable.vue:59 -#, fuzzy msgctxt "Content/*/Paragraph" msgid "All %{ count } element selected" msgid_plural "All %{ count } elements selected" -msgstr[0] "выбран %{ count } из %{ total }" -msgstr[1] "выбрано %{ count } из %{ total }" -msgstr[2] "выбрано %{ count } из %{ total }" +msgstr[0] "Выбран %{ count } из %{ total }" +msgstr[1] "Выбраны %{ count } из %{ total }" +msgstr[2] "Выбрано %{ count } из %{ total }" #: front/src/components/auth/Authorize.vue:107 msgctxt "Head/Authorize/Title" msgid "Allow application" -msgstr "" +msgstr "Разрешить приложение" + +#: front/src/components/About.vue:136 +msgctxt "*/*/*" +msgid "Allow-list" +msgstr "\"Белый\" ÑпиÑок" + +#: front/src/components/About.vue:149 +msgctxt "*/*/*" +msgid "Allowed domains" +msgstr "Разрешённые домены" #: front/src/components/library/ImportStatusModal.vue:17 msgctxt "Popup/Import/Message" -msgid "" -"An error occured during upload processing. You will find more information " -"below." -msgstr "" +msgid "An error occurred during upload processing. You will find more information below." +msgstr "Во Ð²Ñ€ÐµÐ¼Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ закачки возникла ошибка. Ð”Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð½Ð¸Ð¶Ðµ." #: front/src/components/playlists/Editor.vue:13 msgctxt "Content/Playlist/Error message.Title" -msgid "An error occured while saving your changes" -msgstr "При Ñохранении ваших изменений произошла ошибка" +msgid "An error occurred while saving your changes" +msgstr "При Ñохранении Ваших изменений произошла ошибка" #: front/src/components/federation/FetchButton.vue:21 msgctxt "Popup/*/Message.Content" -msgid "An error occured while trying to refresh data:" -msgstr "При Ñохранении ваших изменений произошла ошибка" +msgid "An error occurred while trying to refresh data:" +msgstr "При попытке Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… произошла ошибка:" #: front/src/components/federation/FetchButton.vue:41 msgctxt "*/*/Error" -msgid "An HTTP error occured while contacting the remote server" -msgstr "При Ñохранении ваших изменений произошла ошибка" - -#: front/src/components/auth/Login.vue:10 -msgctxt "Content/Login/Error message/List item" -msgid "" -"An unknown error happend, this can mean the server is down or cannot be " -"reached" -msgstr "" -"Произошла неизвеÑÑ‚Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°, возможно Ñервер перегружен или недоÑтупен" +msgid "An HTTP error occurred while contacting the remote server" +msgstr "При Ñоединении Ñ ÑƒÐ´Ð°Ð»Ñ‘Ð½Ð½Ñ‹Ð¼ Ñервером возникла ошибка HTTP" #: front/src/components/library/ImportStatusModal.vue:145 msgctxt "Popup/Import/Error.Label" -msgid "An unkwown error occured" -msgstr "" +msgid "An unknown error occurred" +msgstr "Возникла неизвеÑÑ‚Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°" + +#: front/src/components/About.vue:123 +msgctxt "*/*/*" +msgid "Anonymous access" +msgstr "Ðнонимный доÑтуп" + +#: front/src/components/moderation/ReportModal.vue:54 +msgctxt "Popup/Moderation/Error message" +msgid "Anonymous reports are disabled, please sign-in to submit a report." +msgstr "Ðнонимные жалобы отключены, пожалуйÑта войдите Ð´Ð»Ñ Ð¾Ñ‚Ð¿Ñ€Ð°Ð²ÐºÐ¸ жалобы." #: front/src/components/auth/Settings.vue:175 #: src/components/auth/Settings.vue:225 msgctxt "*/*/*/Noun" msgid "Application" -msgstr "ДейÑтвие" +msgstr "Приложение" #: front/src/components/auth/ApplicationEdit.vue:12 msgctxt "Content/Applications/Title" msgid "Application details" -msgstr "" +msgstr "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ приложении" #: front/src/components/auth/ApplicationEdit.vue:21 msgctxt "Content/Applications/Label" msgid "Application ID" -msgstr "" +msgstr "ID приложениÑ" #: front/src/components/auth/ApplicationEdit.vue:16 msgctxt "Content/Application/Paragraph/" -msgid "" -"Application ID and secret are really sensitive values and must be treated " -"like passwords. Do not share those with anyone else." -msgstr "" +msgid "Application ID and secret are really sensitive values and must be treated like passwords. Do not share those with anyone else." +msgstr "ID Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¸ Ñекрет ÑвлÑÑŽÑ‚ÑÑ Ð²Ð°Ð¶Ð½Ð¾Ð¹ информацией, к ним нужно отноÑитьÑÑ ÐºÐ°Ðº к паролÑм. Ðе передавайте их никому." #: front/src/components/auth/ApplicationEdit.vue:25 msgctxt "Content/Applications/Label" msgid "Application secret" -msgstr "" +msgstr "Секрет приложениÑ" #: front/src/components/library/EditCard.vue:81 #: front/src/components/notifications/NotificationRow.vue:66 msgctxt "Content/*/Button.Label/Verb" msgid "Approve" -msgstr "" +msgstr "Одобрить" #: front/src/components/library/EditCard.vue:25 #: front/src/components/manage/library/EditsCardList.vue:21 msgctxt "Content/*/*/Short" msgid "Approved" -msgstr "" +msgstr "Одобрено" #: front/src/components/library/EditCard.vue:21 msgctxt "Content/Library/Card/Short" msgid "Approved and applied" -msgstr "" +msgstr "Одобрено и применено" #: front/src/components/auth/Logout.vue:5 msgctxt "Content/Login/Title" msgid "Are you sure you want to log out?" -msgstr "Ð’Ñ‹ уверены что хотите выйти?" +msgstr "Ð’Ñ‹ уверены, что хотите выйти?" +#: front/src/components/audio/SearchBar.vue:32 +#: src/components/audio/track/Table.vue:8 #: front/src/components/manage/library/AlbumsTable.vue:40 #: front/src/components/manage/library/TracksTable.vue:41 -msgctxt "*/*/*" -msgid "Artist" -msgstr "ИÑполнитель" - -#: front/src/components/audio/SearchBar.vue:25 -#: src/components/audio/track/Table.vue:8 #: front/src/components/metadata/Search.vue:130 -#: front/src/views/admin/library/AlbumDetail.vue:108 -#: front/src/views/admin/library/TrackDetail.vue:118 -#: front/src/views/content/libraries/FilesTable.vue:56 +#: src/components/mixins/Report.vue:55 +#: front/src/views/admin/library/AlbumDetail.vue:114 +#: front/src/views/admin/library/TrackDetail.vue:124 +#: front/src/views/content/libraries/FilesTable.vue:56 src/entities.js:12 +#: front/src/components/mixins/Report.vue:56 msgctxt "*/*/*/Noun" msgid "Artist" msgstr "ИÑполнитель" -#: front/src/views/admin/library/ArtistDetail.vue:91 +#: front/src/views/admin/library/ArtistDetail.vue:96 msgctxt "Content/Moderation/Title" msgid "Artist data" -msgstr "Ð˜Ð¼Ñ Ð¸ÑполнителÑ" +msgstr "Данные иÑполнителÑ" -#: front/src/components/mixins/Translations.vue:52 -#: front/src/components/mixins/Translations.vue:53 +#: front/src/components/mixins/Translations.vue:62 +#: front/src/components/mixins/Translations.vue:63 msgctxt "Content/*/Dropdown/Noun" msgid "Artist name" msgstr "Ð˜Ð¼Ñ Ð¸ÑполнителÑ" @@ -641,38 +724,38 @@ msgstr "Ð˜Ð¼Ñ Ð¸ÑполнителÑ" #: front/src/components/audio/Search.vue:65 msgctxt "*/Search/Input.Placeholder" msgid "Artist, album, track…" -msgstr "ИÑполнитель, альбом, трек..." +msgstr "ИÑполнитель, альбом, трек…" +#: front/src/components/audio/Search.vue:10 +#: src/components/library/Artists.vue:117 +#: front/src/components/library/Library.vue:10 +#: front/src/components/library/TagDetail.vue:19 +#: front/src/components/manage/library/TagsTable.vue:42 #: front/src/views/admin/library/ArtistsList.vue:24 #: front/src/views/admin/library/Base.vue:8 -#: front/src/views/admin/library/LibraryDetail.vue:209 -msgctxt "*/*/*" -msgid "Artists" -msgstr "ИÑполнители" - -#: front/src/components/audio/Search.vue:10 -#: src/components/instance/Stats.vue:42 -#: front/src/components/library/Artists.vue:117 -#: src/components/library/Library.vue:10 -#: front/src/views/admin/moderation/AccountsDetail.vue:346 -#: front/src/views/admin/moderation/DomainsDetail.vue:254 +#: front/src/views/admin/library/LibraryDetail.vue:228 +#: front/src/views/admin/library/TagDetail.vue:123 +#: front/src/views/admin/moderation/AccountsDetail.vue:358 +#: front/src/views/admin/moderation/DomainsDetail.vue:291 msgctxt "*/*/*/Noun" msgid "Artists" msgstr "ИÑполнители" #: front/src/components/favorites/List.vue:34 -#: src/components/library/Albums.vue:25 -#: front/src/components/library/Artists.vue:25 +#: src/components/library/Albums.vue:29 +#: front/src/components/library/Artists.vue:29 #: src/components/library/Radios.vue:44 #: front/src/components/manage/library/AlbumsTable.vue:21 #: front/src/components/manage/library/ArtistsTable.vue:21 #: front/src/components/manage/library/EditsCardList.vue:39 #: front/src/components/manage/library/LibrariesTable.vue:30 +#: front/src/components/manage/library/TagsTable.vue:21 #: front/src/components/manage/library/TracksTable.vue:21 #: front/src/components/manage/library/UploadsTable.vue:40 #: front/src/components/manage/moderation/AccountsTable.vue:21 -#: front/src/components/manage/moderation/DomainsTable.vue:19 +#: front/src/components/manage/moderation/DomainsTable.vue:27 #: front/src/components/manage/users/UsersTable.vue:19 +#: front/src/views/admin/moderation/ReportsList.vue:44 #: front/src/views/content/libraries/FilesTable.vue:31 #: front/src/views/playlists/List.vue:27 msgctxt "Content/Search/Dropdown" @@ -684,36 +767,42 @@ msgctxt "Content/Signup/Button.Label/Verb" msgid "Ask for a password reset" msgstr "СброÑить пароль" -#: front/src/views/admin/library/AlbumDetail.vue:198 -#: front/src/views/admin/library/ArtistDetail.vue:187 -#: front/src/views/admin/library/LibraryDetail.vue:176 -#: front/src/views/admin/library/TrackDetail.vue:250 +#: front/src/components/manage/moderation/ReportCard.vue:72 +msgctxt "Content/Moderation/*" +msgid "Assigned to" +msgstr "Ðазначено на" + +#: front/src/views/admin/library/AlbumDetail.vue:214 +#: front/src/views/admin/library/ArtistDetail.vue:202 +#: front/src/views/admin/library/LibraryDetail.vue:195 +#: front/src/views/admin/library/TagDetail.vue:113 +#: front/src/views/admin/library/TrackDetail.vue:266 #: front/src/views/admin/library/UploadDetail.vue:191 -#: front/src/views/admin/moderation/AccountsDetail.vue:274 -#: front/src/views/admin/moderation/DomainsDetail.vue:202 +#: front/src/views/admin/moderation/AccountsDetail.vue:285 +#: front/src/views/admin/moderation/DomainsDetail.vue:239 msgctxt "Content/Moderation/Title" msgid "Audio content" -msgstr "Добавить Ñодержимое" +msgstr "Музыкальный контент" -#: front/src/components/ShortcutsModal.vue:55 +#: front/src/components/ShortcutsModal.vue:92 msgctxt "Popup/Keyboard shortcuts/Title" msgid "Audio player shortcuts" -msgstr "" +msgstr "ГорÑчие клавиши плеера" #: front/src/components/auth/Authorize.vue:47 msgctxt "Content/Signup/Button.Label/Verb" msgid "Authorize %{ app }" -msgstr "" +msgstr "Ðвторизовать %{ app }" #: front/src/components/auth/Authorize.vue:4 msgctxt "Content/Auth/Title/Verb" msgid "Authorize third-party app" -msgstr "" +msgstr "Ðвторизовать Ñтороннее приложение" #: front/src/components/auth/Settings.vue:162 msgctxt "Content/Settings/Title/Noun" msgid "Authorized apps" -msgstr "" +msgstr "Ðвторизованные приложениÑ" #: front/src/components/playlists/PlaylistModal.vue:40 msgctxt "Popup/Playlist/Title" @@ -735,12 +824,12 @@ msgstr "Ðазад ко входу" #: front/src/components/auth/ApplicationNew.vue:5 msgctxt "Content/Applications/Link" msgid "Back to settings" -msgstr "Обновить наÑтройки" +msgstr "Ðазад к наÑтройкам" #: front/src/components/library/TrackDetail.vue:48 -#: front/src/components/mixins/Translations.vue:55 +#: front/src/components/mixins/Translations.vue:67 #: front/src/views/admin/library/UploadDetail.vue:227 -#: front/src/components/mixins/Translations.vue:56 +#: front/src/components/mixins/Translations.vue:68 msgctxt "Content/Track/*/Noun" msgid "Bitrate" msgstr "Битрейт" @@ -749,15 +838,12 @@ msgstr "Битрейт" #: front/src/components/manage/moderation/InstancePolicyForm.vue:34 msgctxt "Content/Moderation/*/Verb" msgid "Block everything" -msgstr "" +msgstr "Заблокировать вÑÑ‘" #: front/src/components/manage/moderation/InstancePolicyForm.vue:112 msgctxt "Content/Moderation/Help text" -msgid "" -"Block everything from this account or domain. This will prevent any " -"interaction with the entity, and purge related content (uploads, libraries, " -"follows, etc.)" -msgstr "" +msgid "Block everything from this account or domain. This will prevent any interaction with the entity, and purge related content (uploads, libraries, follows, etc.)" +msgstr "Заблокировать вÑÑ‘ от Ñтого Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð»Ð¸ домена. Ðто оÑтановит любое взаимодейÑтвие Ñ Ð½Ð¸Ð¼ и удалит ÑвÑзанный контент (закачки, библиотеки, подпиÑки и Ñ‚.п.)" #: front/src/components/Sidebar.vue:18 src/components/library/Library.vue:4 msgctxt "*/Library/*/Verb" @@ -769,10 +855,15 @@ msgctxt "Sidebar/Library/List item.Link/Verb" msgid "Browse library" msgstr "ПроÑмотр библиотеки" +#: front/src/components/Home.vue:132 +msgctxt "Content/Home/Link" +msgid "Browse public content" +msgstr "ПоÑмотреть публичное Ñодержимое" + #: front/src/components/library/Albums.vue:4 msgctxt "Content/Album/Title" msgid "Browsing albums" -msgstr "ПроÑмотр радио" +msgstr "ПроÑмотр альбомов" #: front/src/components/library/Artists.vue:4 msgctxt "Content/Artist/Title" @@ -799,42 +890,43 @@ msgctxt "Content/Album/Card" msgid "By %{ artist }" msgstr "От %{ artist }" -#: front/src/views/content/remote/Card.vue:112 +#: front/src/views/content/remote/Card.vue:125 msgctxt "Popup/Library/Paragraph" msgid "By unfollowing this library, you loose access to its content." -msgstr "ОтпиÑавшиÑÑŒ от Ñтой библиотеки, вы потерÑете доÑтуп к её Ñодержимому." +msgstr "ОтпиÑавшиÑÑŒ от Ñтой библиотеки, Ð’Ñ‹ потерÑете доÑтуп к её Ñодержимому." -#: front/src/views/admin/library/AlbumDetail.vue:214 -#: front/src/views/admin/library/ArtistDetail.vue:203 -#: front/src/views/admin/library/LibraryDetail.vue:192 -#: front/src/views/admin/library/TrackDetail.vue:266 +#: front/src/views/admin/library/AlbumDetail.vue:230 +#: front/src/views/admin/library/ArtistDetail.vue:218 +#: front/src/views/admin/library/LibraryDetail.vue:211 +#: front/src/views/admin/library/TrackDetail.vue:282 #: front/src/views/admin/library/UploadDetail.vue:208 -#: front/src/views/admin/moderation/AccountsDetail.vue:290 -#: front/src/views/admin/moderation/DomainsDetail.vue:217 +#: front/src/views/admin/moderation/AccountsDetail.vue:301 +#: front/src/views/admin/moderation/DomainsDetail.vue:254 msgctxt "Content/Moderation/Table.Label/Noun" msgid "Cached size" -msgstr "" +msgstr "Размер в кÑше" #: front/src/components/SetInstanceModal.vue:37 #: front/src/components/common/DangerousButton.vue:17 -#: front/src/components/library/AlbumBase.vue:36 -#: front/src/components/library/ArtistBase.vue:47 -#: front/src/components/library/EditForm.vue:95 -#: front/src/components/library/TrackBase.vue:55 +#: front/src/components/library/AlbumBase.vue:37 +#: front/src/components/library/ArtistBase.vue:48 +#: front/src/components/library/EditForm.vue:107 +#: front/src/components/library/TrackBase.vue:53 #: front/src/components/library/radios/Filter.vue:53 #: front/src/components/manage/moderation/InstancePolicyForm.vue:54 #: front/src/components/moderation/FilterModal.vue:39 +#: front/src/components/moderation/ReportModal.vue:59 #: front/src/components/playlists/PlaylistModal.vue:26 #: front/src/components/playlists/PlaylistModal.vue:77 +#: front/src/views/playlists/Detail.vue:62 msgctxt "*/*/Button.Label/Verb" msgid "Cancel" msgstr "Отмена" -#: front/src/views/content/remote/Card.vue:97 -#, fuzzy +#: front/src/views/content/remote/Card.vue:110 msgctxt "Content/Library/Card.Paragraph" msgid "Cancel follow request" -msgstr "Ожидающие файлы" +msgstr "Отменить Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° подпиÑку" #: front/src/components/library/radios/Builder.vue:64 msgctxt "Content/Radio/Table.Label/Noun (Value is a number of Tracks)" @@ -846,6 +938,14 @@ msgctxt "Content/Library/Help text" msgid "Cannot upload this file, ensure it is not too big" msgstr "Ðевозможно загрузить файл, убедитеÑÑŒ что он не Ñлишком большой" +#: front/src/components/manage/moderation/ReportCard.vue:30 +#: front/src/components/mixins/Translations.vue:42 +#: front/src/components/moderation/ReportCategoryDropdown.vue:2 +#: front/src/components/mixins/Translations.vue:43 +msgctxt "*/*/*" +msgid "Category" +msgstr "КатегориÑ" + #: front/src/components/Footer.vue:21 msgctxt "Footer/Settings/Dropdown.Label/Short, Verb" msgid "Change language" @@ -861,15 +961,20 @@ msgctxt "Content/Settings/Button.Label" msgid "Change password" msgstr "Сменить пароль" +#: front/src/components/Footer.vue:37 +msgctxt "Footer/Settings/Dropdown.Label/Short, Verb" +msgid "Change theme" +msgstr "Сменить тему" + #: front/src/views/auth/PasswordResetConfirm.vue:62 msgctxt "*/Signup/Title" msgid "Change your password" -msgstr "Сменить ваш пароль" +msgstr "Сменить Ваш пароль" #: front/src/components/auth/Settings.vue:96 msgctxt "Popup/Settings/Title" msgid "Change your password?" -msgstr "Сменить ваш пароль?" +msgstr "Сменить Ваш пароль?" #: front/src/components/playlists/Editor.vue:31 msgctxt "Content/Playlist/Paragraph" @@ -878,41 +983,32 @@ msgstr "Ð˜Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñинхронизированы Ñ Ñервером" #: front/src/components/auth/Settings.vue:71 msgctxt "Content/Settings/Paragraph'" -msgid "" -"Changing your password will also change your Subsonic API password if you " -"have requested one." -msgstr "" -"Изменение вашего Ð¿Ð°Ñ€Ð¾Ð»Ñ Ñ‚Ð°ÐºÐ¶Ðµ изменит ваш пароль Subsonic API еÑли вы " -"запрашивали его." +msgid "Changing your password will also change your Subsonic API password if you have requested one." +msgstr "Изменение Вашего Ð¿Ð°Ñ€Ð¾Ð»Ñ Ñ‚Ð°ÐºÐ¶Ðµ изменит Ваш пароль Subsonic API, еÑли Ð’Ñ‹ запрашивали его." #: front/src/components/auth/Settings.vue:98 msgctxt "Popup/Settings/Paragraph" msgid "Changing your password will have the following consequences:" -msgstr "Изменение вашего Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð¿Ñ€Ð¸Ð²ÐµÐ´Ñ‘Ñ‚ к Ñледующим поÑледÑтвиÑм" +msgstr "Изменение Вашего Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð¿Ñ€Ð¸Ð²ÐµÐ´Ñ‘Ñ‚ к Ñледующим поÑледÑтвиÑм:" -#: front/src/components/Footer.vue:40 +#: front/src/components/Footer.vue:48 msgctxt "Footer/*/List item.Link" msgid "Chat room" -msgstr "" +msgstr "Чат-комната" #: front/src/components/auth/ApplicationForm.vue:24 msgctxt "Content/Applications/Paragraph/" -msgid "" -"Checking the parent \"Read\" or \"Write\" scopes implies access to all the " -"corresponding children scopes." -msgstr "" +msgid "Checking the parent \"Read\" or \"Write\" scopes implies access to all the corresponding children scopes." +msgstr "Отметка родительÑких облаÑтей на \"чтение\" или \"запиÑÑŒ\" подразумевает доÑтуп ко вÑем ÑоответÑтвующим дочерним объектам." #: front/src/components/SetInstanceModal.vue:2 msgctxt "Popup/Instance/Title" msgid "Choose your instance" msgstr "Выберите Ñвой узел" -#: front/src/components/manage/users/InvitationForm.vue:37 -msgctxt "Content/Admin/Button.Label/Verb" -msgid "Clear" -msgstr "ОчиÑтить" - #: front/src/components/library/EditForm.vue:75 +#: front/src/components/library/EditForm.vue:88 +#: front/src/components/manage/users/InvitationForm.vue:37 msgctxt "Content/Library/Button.Label" msgid "Clear" msgstr "ОчиÑтить" @@ -923,44 +1019,44 @@ msgctxt "*/Playlist/Button.Label/Verb" msgid "Clear playlist" msgstr "ОчиÑтить ÑпиÑок воÑпроизведениÑ" -#: front/src/components/audio/Player.vue:642 +#: front/src/components/ShortcutsModal.vue:144 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Clear queue" +msgstr "ОчиÑтить очередь" + +#: front/src/components/audio/Player.vue:668 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Clear your queue" -msgstr "ОчиÑтить вашу очередь" - -#: front/src/components/Home.vue:44 -msgctxt "Content/Home/List item/Verb" -msgid "Click once, listen for hours using built-in radios" -msgstr "Ðажмите один раз, Ñлушайте чаÑами Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ вÑтроенного радио" +msgstr "ОчиÑтить Вашу очередь" #: front/src/components/mixins/Translations.vue:21 #: front/src/components/mixins/Translations.vue:22 msgctxt "Content/Library/Link.Title" -msgid "" -"Click to display more information about the import process for this upload" -msgstr "" +msgid "Click to display more information about the import process for this upload" +msgstr "Ðажмите, чтобы поÑмотреть больше информации об импорте Ñтой закачки" #: front/src/components/library/FileUpload.vue:82 msgctxt "Content/Library/Paragraph/Call to action" msgid "Click to select files to upload or drag and drop files or directories" -msgstr "" -"Ðажмите чтобы выбрать файлы Ð´Ð»Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ или перетащите файлы или директории" +msgstr "Ðажмите чтобы выбрать файлы Ð´Ð»Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ или перетащите файлы или директории" +#: front/src/components/ShortcutsModal.vue:38 #: front/src/components/federation/FetchButton.vue:85 #: front/src/components/library/ImportStatusModal.vue:79 +#: front/src/components/manage/moderation/InstancePolicyModal.vue:34 msgctxt "*/*/Button.Label/Verb" msgid "Close" -msgstr "" - -#: front/src/components/ShortcutsModal.vue:20 -msgctxt "Popup/Keyboard shortcuts/Button.Label/Verb" -msgid "Close" -msgstr "" +msgstr "Закрыть" #: front/src/components/federation/FetchButton.vue:88 msgctxt "*/*/Button.Label/Verb" msgid "Close and reload page" -msgstr "" +msgstr "Закрыть и обновить Ñтраницу" + +#: front/src/components/About.vue:94 +msgctxt "*/*/*/State of registrations" +msgid "Closed" +msgstr "Закрыто" #: front/src/components/manage/users/InvitationForm.vue:26 #: front/src/components/manage/users/InvitationsTable.vue:42 @@ -969,8 +1065,8 @@ msgid "Code" msgstr "Код" #: front/src/components/audio/album/Card.vue:41 -#: front/src/components/audio/artist/Card.vue:33 -msgctxt "Content/*/Card.Link/Verb" +#: front/src/components/common/CollapseLink.vue:3 +msgctxt "*/*/Button,Label" msgid "Collapse" msgstr "Свернуть" @@ -987,47 +1083,53 @@ msgstr "Подтвердить" #: front/src/views/auth/EmailConfirm.vue:51 msgctxt "Head/Signup/Title" msgid "Confirm your e-mail address" -msgstr "Подтвердить ваш Ð°Ð´Ñ€ÐµÑ Ñлектронной почты" +msgstr "Подтвердить Ваш Ð°Ð´Ñ€ÐµÑ Ñлектронной почты" #: front/src/views/auth/EmailConfirm.vue:13 msgctxt "Content/Signup/Form.Label" msgid "Confirmation code" msgstr "Код подтверждениÑ" +#: front/src/components/About.vue:67 src/components/Home.vue:65 +msgctxt "Content/Home/Header/Name" +msgid "Contact" +msgstr "Контакт" + #: front/src/components/moderation/FilterModal.vue:90 msgctxt "*/Moderation/Message" msgid "Content filter successfully added" -msgstr "" - -#: front/src/components/mixins/Translations.vue:96 -#: front/src/components/mixins/Translations.vue:97 -msgctxt "Content/OAuth Scopes/Label" -msgid "Content filters" -msgstr "Выберите фильтр" +msgstr "Фильтр Ñодержимого уÑпешно добавлен" #: front/src/components/auth/Settings.vue:116 +#: front/src/components/mixins/Translations.vue:108 +#: front/src/components/mixins/Translations.vue:109 msgctxt "Content/Settings/Title/Noun" msgid "Content filters" -msgstr "Выберите фильтр" +msgstr "Фильтры Ñодержимого" #: front/src/components/auth/Settings.vue:119 msgctxt "Content/Settings/Paragraph" -msgid "" -"Content filters help you hide content you don't want to see on the service." -msgstr "" +msgid "Content filters help you hide content you don't want to see on the service." +msgstr "Фильтры Ñодержимого помогают Вам Ñкрывать контент, который Ð’Ñ‹ не ходите видеть в Ñтом ÑервиÑе." #: front/src/components/common/ActionTable.vue:8 msgctxt "Content/*/Button.Help text.Paragraph" msgid "Content have been updated, click refresh to see up-to-date content" -msgstr "" +msgstr "Контент обновлён, нажмите \"Обновить\", чтобы увидеть его" -#: front/src/components/Footer.vue:48 +#: front/src/components/About.vue:46 +msgctxt "Content/About/Header" +msgid "Contents" +msgstr "Содержание" + +#: front/src/components/Footer.vue:56 msgctxt "Footer/*/List item.Link" msgid "Contribute" -msgstr "" +msgstr "Помочь" -#: front/src/components/audio/EmbedWizard.vue:19 +#: front/src/components/audio/EmbedWizard.vue:29 #: front/src/components/common/CopyInput.vue:8 +#: front/src/components/forms/PasswordInput.vue:43 msgctxt "*/*/Button.Label/Short, Verb" msgid "Copy" msgstr "Копировать" @@ -1040,54 +1142,45 @@ msgstr "Копировать треки из текущей очереди в Ñ #: front/src/components/auth/Authorize.vue:55 msgctxt "Content/Auth/Paragraph" msgid "Copy-paste the following code in the application:" -msgstr "" +msgstr "Скопируйте и вÑтавьте Ñледующий код в приложение:" -#: front/src/components/audio/EmbedWizard.vue:21 +#: front/src/components/audio/EmbedWizard.vue:31 msgctxt "Popup/Embed/Paragraph" msgid "Copy/paste this code in your website HTML" -msgstr "" +msgstr "Скопируйте и вÑтавьте Ñтот код в HTML Вашего Ñайта" #: front/src/components/library/TrackDetail.vue:10 -#: front/src/views/admin/library/TrackDetail.vue:153 -msgctxt "Content/Track/Table.Label/Noun" +#: front/src/views/admin/library/TrackDetail.vue:159 src/edits.js:77 +msgctxt "Content/Track/*/Noun" msgid "Copyright" -msgstr "Копировать" +msgstr "Копирайт" #: front/src/views/auth/EmailConfirm.vue:7 msgctxt "Content/Signup/Paragraph" msgid "Could not confirm your e-mail address" -msgstr "Подтвердить ваш Ð°Ð´Ñ€ÐµÑ Ñлектронной почты" +msgstr "Ðе удалоÑÑŒ подтвердить Ваш Ð°Ð´Ñ€ÐµÑ Ñлектронной почты" #: front/src/views/content/remote/ScanForm.vue:3 msgctxt "Content/Library/Error message.Title" msgid "Could not fetch remote library" msgstr "Ошибка во Ð²Ñ€ÐµÐ¼Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ удалённой библиотеки" -#: front/src/components/Home.vue:80 -msgctxt "Content/Home/List item" -msgid "Covers, lyrics, our goal is to have them all ;)" -msgstr "Обложки, текÑÑ‚Ñ‹, наша цель Ñобрать их вÑе ;)" - #: front/src/components/manage/moderation/InstancePolicyForm.vue:58 msgctxt "Content/Moderation/Card.Button.Label/Verb" msgid "Create" -msgstr "Создать импорт" +msgstr "Создать" -#: front/src/components/auth/Signup.vue:4 +#: front/src/views/auth/Signup.vue:4 msgctxt "Content/Signup/Title" msgid "Create a funkwhale account" msgstr "Создать аккаунт funkwhale" -#: front/src/components/auth/Settings.vue:220 -msgctxt "Content/Settings/Button.Label" -msgid "Create a new application" -msgstr "Создать новый ÑпиÑок воÑпроизведениÑ" - #: front/src/components/auth/ApplicationNew.vue:8 #: front/src/components/auth/ApplicationNew.vue:41 -msgctxt "Content/Applications/Title" +#: front/src/components/auth/Settings.vue:220 +msgctxt "Content/Settings/Button.Label" msgid "Create a new application" -msgstr "Создать новый ÑпиÑок воÑпроизведениÑ" +msgstr "Создать новое приложение" #: front/src/views/content/libraries/Home.vue:14 msgctxt "Content/Library/Link/Verb" @@ -1099,7 +1192,7 @@ msgctxt "Popup/Playlist/Title/Verb" msgid "Create a new playlist" msgstr "Создать новый ÑпиÑок воÑпроизведениÑ" -#: front/src/components/Sidebar.vue:57 src/components/auth/Login.vue:17 +#: front/src/components/Sidebar.vue:57 src/components/auth/LoginForm.vue:15 msgctxt "*/Signup/Link/Verb" msgid "Create an account" msgstr "Создать новый аккаунт" @@ -1107,14 +1200,14 @@ msgstr "Создать новый аккаунт" #: front/src/components/auth/ApplicationForm.vue:65 msgctxt "Content/Applications/Button.Label/Verb" msgid "Create application" -msgstr "Создать ÑпиÑок воÑпроизведениÑ" +msgstr "Создать приложение" #: front/src/views/content/libraries/Form.vue:26 msgctxt "Content/Library/Button.Label/Verb" msgid "Create library" msgstr "Создать библиотеку" -#: front/src/components/auth/Signup.vue:53 +#: front/src/components/auth/SignupForm.vue:49 msgctxt "Content/Signup/Button.Label" msgid "Create my account" msgstr "Создать мой аккаунт" @@ -1122,7 +1215,7 @@ msgstr "Создать мой аккаунт" #: front/src/components/auth/Settings.vue:264 msgctxt "Content/Applications/Paragraph" msgid "Create one to integrate Funkwhale with third-party applications." -msgstr "" +msgstr "Создайте его, чтобы интегрировать Funkwhale Ñо Ñторонними приложениÑми." #: front/src/components/playlists/Form.vue:34 msgctxt "Content/Playlist/Button.Label/Verb" @@ -1132,18 +1225,20 @@ msgstr "Создать ÑпиÑок воÑпроизведениÑ" #: front/src/components/library/Radios.vue:23 msgctxt "Content/Radio/Button.Label/Verb" msgid "Create your own radio" -msgstr "Создать ваше ÑобÑтвенное радио" +msgstr "Создать Ваше ÑобÑтвенное радио" #: front/src/components/auth/Settings.vue:134 #: src/components/auth/Settings.vue:227 #: front/src/components/manage/library/AlbumsTable.vue:44 #: front/src/components/manage/library/ArtistsTable.vue:43 #: front/src/components/manage/library/LibrariesTable.vue:54 +#: front/src/components/manage/library/TagsTable.vue:45 #: front/src/components/manage/library/TracksTable.vue:44 #: front/src/components/manage/library/UploadsTable.vue:66 +#: front/src/components/manage/moderation/ReportCard.vue:43 #: front/src/components/manage/users/InvitationsTable.vue:40 -#: front/src/components/mixins/Translations.vue:43 -#: front/src/components/mixins/Translations.vue:44 +#: front/src/components/mixins/Translations.vue:53 +#: front/src/components/mixins/Translations.vue:54 msgctxt "Content/*/*/Noun" msgid "Creation date" msgstr "Дата ÑозданиÑ" @@ -1153,6 +1248,11 @@ msgctxt "Content/Settings/Title/Noun" msgid "Current avatar" msgstr "Текущий аватар" +#: front/src/components/admin/SettingsGroup.vue:67 +msgctxt "Content/Settings/Title/Noun" +msgid "Current image" +msgstr "Текущее изображение" + #: front/src/views/content/libraries/DetailArea.vue:4 msgctxt "Content/Library/Title" msgid "Current library" @@ -1168,15 +1268,20 @@ msgctxt "Content/Library/Title" msgid "Current usage" msgstr "Текущее иÑпользование" +#: front/src/components/Footer.vue:94 +msgctxt "Footer/Settings/Dropdown.Label/Theme name" +msgid "Dark" +msgstr "ТемнаÑ" + #: front/src/components/federation/FetchButton.vue:53 msgctxt "*/*/Error" msgid "Data returned by the remote server had invalid or missing attributes" -msgstr "" +msgstr "Данные, принÑтые от удалённого Ñервера, Ñодержали неправильные или отÑутÑтвующие атрибуты" #: front/src/components/federation/FetchButton.vue:17 msgctxt "Popup/*/Message.Content" msgid "Data was refreshed successfully from remote server." -msgstr "" +msgstr "Данные Ñ ÑƒÐ´Ð°Ð»Ñ‘Ð½Ð½Ð¾Ð³Ð¾ Ñервера уÑпешно обновлены." #: front/src/views/content/libraries/Detail.vue:27 msgctxt "Content/Library/Table.Label" @@ -1186,12 +1291,12 @@ msgstr "Дата" #: front/src/components/library/ImportStatusModal.vue:64 msgctxt "Popup/Import/Table.Label/Noun" msgid "Debug information" -msgstr "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ треке" +msgstr "ДиагноÑтика" -#: front/src/components/ShortcutsModal.vue:75 +#: front/src/components/ShortcutsModal.vue:128 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Decrease volume" -msgstr "" +msgstr "Уменьшить громкоÑÑ‚ÑŒ" #: front/src/components/auth/Settings.vue:150 #: src/components/auth/Settings.vue:251 @@ -1200,23 +1305,29 @@ msgstr "" #: front/src/components/manage/library/AlbumsTable.vue:188 #: front/src/components/manage/library/ArtistsTable.vue:178 #: front/src/components/manage/library/LibrariesTable.vue:205 +#: front/src/components/manage/library/TagsTable.vue:179 #: front/src/components/manage/library/TracksTable.vue:188 #: front/src/components/manage/library/UploadsTable.vue:255 #: front/src/components/manage/moderation/InstancePolicyForm.vue:61 +#: front/src/components/manage/moderation/NotesThread.vue:24 +#: front/src/components/manage/moderation/NotesThread.vue:29 +#: front/src/components/manage/moderation/ReportCard.vue:360 #: front/src/components/manage/users/InvitationsTable.vue:167 -#: front/src/views/admin/library/AlbumDetail.vue:72 -#: front/src/views/admin/library/AlbumDetail.vue:77 -#: front/src/views/admin/library/ArtistDetail.vue:71 +#: front/src/views/admin/library/AlbumDetail.vue:78 +#: front/src/views/admin/library/AlbumDetail.vue:83 #: front/src/views/admin/library/ArtistDetail.vue:76 +#: front/src/views/admin/library/ArtistDetail.vue:81 #: front/src/views/admin/library/LibraryDetail.vue:58 #: front/src/views/admin/library/LibraryDetail.vue:63 -#: front/src/views/admin/library/TrackDetail.vue:71 -#: front/src/views/admin/library/TrackDetail.vue:76 +#: front/src/views/admin/library/TagDetail.vue:41 +#: front/src/views/admin/library/TagDetail.vue:46 +#: front/src/views/admin/library/TrackDetail.vue:77 +#: front/src/views/admin/library/TrackDetail.vue:82 #: front/src/views/admin/library/UploadDetail.vue:65 #: front/src/views/admin/library/UploadDetail.vue:70 #: front/src/views/content/libraries/FilesTable.vue:222 #: front/src/views/content/libraries/Form.vue:29 -#: src/views/playlists/Detail.vue:34 +#: src/views/playlists/Detail.vue:42 msgctxt "*/*/*/Verb" msgid "Delete" msgstr "Удалить" @@ -1224,12 +1335,12 @@ msgstr "Удалить" #: front/src/components/auth/Settings.vue:254 msgctxt "*/Settings/Button.Label/Verb" msgid "Delete application" -msgstr "Удалить ÑпиÑок воÑпроизведениÑ" +msgstr "Удалить приложение" #: front/src/components/auth/Settings.vue:252 msgctxt "Popup/Settings/Title" msgid "Delete application \"%{ application }\"?" -msgstr "" +msgstr "Удалить приложение \"%{ application }\"?" #: front/src/views/content/libraries/Form.vue:39 msgctxt "Popup/Library/Button.Label/Verb" @@ -1239,9 +1350,20 @@ msgstr "Удалить библиотеку" #: front/src/components/manage/moderation/InstancePolicyForm.vue:69 msgctxt "Popup/Moderation/Button.Label/Verb" msgid "Delete moderation rule" -msgstr "Удалить радио" +msgstr "Удалить правило модерации" + +#: front/src/components/auth/Settings.vue:274 +#: src/components/auth/Settings.vue:302 +msgctxt "*/*/Button.Label" +msgid "Delete my account" +msgstr "Удалить мой аккаунт" -#: front/src/views/playlists/Detail.vue:39 +#: front/src/components/auth/Settings.vue:297 +msgctxt "*/*/Button.Label" +msgid "Delete my account…" +msgstr "Удалить мой аккаунт…" + +#: front/src/views/playlists/Detail.vue:47 msgctxt "Popup/Playlist/Button.Label/Verb" msgid "Delete playlist" msgstr "Удалить ÑпиÑок воÑпроизведениÑ" @@ -1251,16 +1373,26 @@ msgctxt "Popup/Radio/Button.Label/Verb" msgid "Delete radio" msgstr "Удалить радио" -#: front/src/views/admin/library/AlbumDetail.vue:73 -#: front/src/views/admin/library/TrackDetail.vue:72 +#: front/src/components/manage/moderation/ReportCard.vue:357 +msgctxt "Content/Moderation/Button/Verb" +msgid "Delete reported object" +msgstr "Удалить объект по жалобе" + +#: front/src/components/manage/moderation/ReportCard.vue:358 +msgctxt "Content/Moderation/Popup/Header" +msgid "Delete reported object?" +msgstr "Удалить объект, на который пожаловалиÑÑŒ?" + +#: front/src/views/admin/library/AlbumDetail.vue:79 +#: front/src/views/admin/library/TrackDetail.vue:78 msgctxt "Popup/Library/Title" msgid "Delete this album?" -msgstr "Удалить Ñту библиотеку?" +msgstr "Удалить Ñтот альбом?" -#: front/src/views/admin/library/ArtistDetail.vue:72 +#: front/src/views/admin/library/ArtistDetail.vue:77 msgctxt "Popup/Library/Title" msgid "Delete this artist?" -msgstr "Удалить Ñту библиотеку?" +msgstr "Удалить Ñтого иÑполнителÑ?" #: front/src/views/admin/library/LibraryDetail.vue:59 #: front/src/views/content/libraries/Form.vue:31 @@ -1271,106 +1403,127 @@ msgstr "Удалить Ñту библиотеку?" #: front/src/components/manage/moderation/InstancePolicyForm.vue:63 msgctxt "Popup/Moderation/Title" msgid "Delete this moderation rule?" -msgstr "Удалить Ñту библиотеку?" +msgstr "Удалить Ñто правило модерации?" + +#: front/src/components/manage/moderation/NotesThread.vue:25 +msgctxt "Popup/Moderation/Title" +msgid "Delete this note?" +msgstr "Удалить Ñто примечание?" #: front/src/components/library/EditCard.vue:94 msgctxt "Popup/Library/Title" msgid "Delete this suggestion?" -msgstr "Удалить Ñту библиотеку?" +msgstr "Удалить Ñто предложение?" + +#: front/src/views/admin/library/TagDetail.vue:42 +msgctxt "Popup/Library/Title" +msgid "Delete this tag?" +msgstr "Удалить Ñтот тег?" #: front/src/views/admin/library/UploadDetail.vue:66 msgctxt "Popup/Library/Title" msgid "Delete this upload?" -msgstr "Удалить Ñту библиотеку?" +msgstr "Удалить Ñту закачку?" #: front/src/components/favorites/List.vue:35 -#: src/components/library/Albums.vue:26 -#: front/src/components/library/Artists.vue:26 +#: src/components/library/Albums.vue:30 +#: front/src/components/library/Artists.vue:30 #: src/components/library/Radios.vue:47 #: front/src/components/manage/library/AlbumsTable.vue:22 #: front/src/components/manage/library/ArtistsTable.vue:22 #: front/src/components/manage/library/EditsCardList.vue:40 #: front/src/components/manage/library/LibrariesTable.vue:31 +#: front/src/components/manage/library/TagsTable.vue:22 #: front/src/components/manage/library/TracksTable.vue:22 #: front/src/components/manage/library/UploadsTable.vue:41 #: front/src/components/manage/moderation/AccountsTable.vue:22 -#: front/src/components/manage/moderation/DomainsTable.vue:20 +#: front/src/components/manage/moderation/DomainsTable.vue:28 #: front/src/components/manage/users/UsersTable.vue:20 +#: front/src/views/admin/moderation/ReportsList.vue:45 #: front/src/views/content/libraries/FilesTable.vue:32 #: front/src/views/playlists/List.vue:28 msgctxt "Content/Search/Dropdown" msgid "Descending" msgstr "По убыванию" -#: front/src/views/admin/library/LibraryDetail.vue:123 -msgctxt "*/*/*/Noun" -msgid "Description" -msgstr "ОпиÑание" +#: front/src/components/manage/moderation/NoteForm.vue:37 +msgctxt "Content/Moderation/Placeholder" +msgid "Describe what actions have been taken, or any other related updates…" +msgstr "Опишите какие дейÑÑ‚Ð²Ð¸Ñ Ð±Ñ‹Ð»Ð¸ предпринÑÑ‚Ñ‹, либо другие важные моменты…" #: front/src/components/library/radios/Builder.vue:25 +#: front/src/views/admin/library/LibraryDetail.vue:132 #: front/src/views/content/libraries/Form.vue:14 -msgctxt "Content/*/Input.Label/Noun" +msgctxt "*/*/*/Noun" msgid "Description" msgstr "ОпиÑание" #: front/src/views/content/libraries/Card.vue:48 -#: src/views/content/remote/Card.vue:54 +#: src/views/content/remote/Card.vue:67 msgctxt "Content/Library/Card.Button.Label/Noun" msgid "Details" msgstr "ПодробноÑти" -#: front/src/views/admin/moderation/AccountsDetail.vue:491 +#: front/src/views/admin/moderation/AccountsDetail.vue:511 msgctxt "Content/Moderation/Help text" -msgid "" -"Determine how much content the user can upload. Leave empty to use the " -"default value of the instance." -msgstr "" -"Выберите как много Ñодержимого пользователь может загрузить. ОÑтавьте пуÑтым" -" чтобы иÑпользовать значение по умолчанию Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ узла." +msgid "Determine how much content the user can upload. Leave empty to use the default value of the instance." +msgstr "Выберите как много Ñодержимого пользователь может загрузить. ОÑтавьте пуÑтым, чтобы иÑпользовать значение по умолчанию Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ узла." #: front/src/components/mixins/Translations.vue:8 #: front/src/components/mixins/Translations.vue:9 msgctxt "Content/Settings/Dropdown.Help text" msgid "Determine the visibility level of your activity" -msgstr "Определить уровень видимоÑти вашей активноÑти" +msgstr "Определить уровень видимоÑти Вашей активноÑти" #: front/src/components/auth/Settings.vue:104 -#: front/src/components/auth/SubsonicTokenForm.vue:51 +#: front/src/components/auth/SubsonicTokenForm.vue:56 msgctxt "Popup/Settings/Button.Label" msgid "Disable access" msgstr "Отключить доÑтуп" -#: front/src/components/auth/SubsonicTokenForm.vue:48 +#: front/src/components/auth/SubsonicTokenForm.vue:53 msgctxt "Content/Settings/Button.Label/Verb" msgid "Disable Subsonic access" msgstr "Отключить доÑтуп Subsonic" -#: front/src/components/auth/SubsonicTokenForm.vue:49 +#: front/src/components/auth/SubsonicTokenForm.vue:54 msgctxt "Popup/Settings/Title" msgid "Disable Subsonic API access?" msgstr "Отключить доÑтуп Subsonic API?" +#: front/src/components/About.vue:118 src/components/About.vue:131 +#: front/src/components/About.vue:144 #: front/src/components/manage/moderation/InstancePolicyForm.vue:18 #: front/src/views/admin/moderation/AccountsDetail.vue:157 #: front/src/views/admin/moderation/AccountsDetail.vue:161 -msgctxt "*/*/*" +msgctxt "*/*/*/State of feature" msgid "Disabled" -msgstr "Отключить доÑтуп" +msgstr "Отключено" -#: front/src/views/admin/library/TrackDetail.vue:145 +#: front/src/views/admin/library/TrackDetail.vue:151 msgctxt "*/*/*/Noun" msgid "Disc number" -msgstr "" +msgstr "Ðомер диÑка" + +#: front/src/components/Home.vue:157 +msgctxt "Content/Home/Link" +msgid "Discover everything you need to know about Funkwhale and its features" +msgstr "Узнайте вÑÑ‘ о Funkwhale и её возможноÑÑ‚ÑÑ…" #: front/src/components/auth/SubsonicTokenForm.vue:13 msgctxt "Content/Settings/Link" msgid "Discover how to use Funkwhale from other apps" msgstr "Узнайте как иÑпользовать Funkwhale из других приложений" +#: front/src/views/Notifications.vue:45 +msgctxt "Content/Notifications/Button.Label/Verb" +msgid "Discover other ways to help" +msgstr "Другие ÑпоÑобы помочь" + #: front/src/views/admin/moderation/AccountsDetail.vue:132 msgctxt "'Content/*/*/Noun'" msgid "Display name" -msgstr "Ð˜Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°" +msgstr "Видимое имÑ" #: front/src/components/library/radios/Builder.vue:30 msgctxt "Content/Radio/Checkbox.Label/Verb" @@ -1379,10 +1532,13 @@ msgstr "Публично отображать" #: front/src/components/manage/moderation/InstancePolicyForm.vue:122 msgctxt "Content/Moderation/Help text" -msgid "" -"Do not download any media file (audio, album cover, account avatar…) from " -"this account or domain. This will purge existing content as well." -msgstr "" +msgid "Do not download any media file (audio, album cover, account avatar…) from this account or domain. This will purge existing content as well." +msgstr "Ðе Ñкачивать ничего (музыку, обложки, аватары…) от Ñтого Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð»Ð¸ домена. Ðто так же удалит ÑущеÑтвующий контент." + +#: front/src/views/Notifications.vue:36 +msgctxt "Content/Notifications/Header" +msgid "Do you like Funkwhale?" +msgstr "Вам нравитÑÑ Funkwhale?" #: front/src/components/playlists/Editor.vue:51 msgctxt "Popup/Playlist/Title" @@ -1394,7 +1550,7 @@ msgctxt "Modal/*/Title" msgid "Do you want to confirm this action?" msgstr "Ð’Ñ‹ хотите подтвердить Ñто дейÑтвие?" -#: front/src/views/playlists/Detail.vue:35 +#: front/src/views/playlists/Detail.vue:43 msgctxt "Popup/Playlist/Title/Call to action" msgid "Do you want to delete the playlist \"%{ playlist }\"?" msgstr "Ð’Ñ‹ хотите удалить ÑпиÑок воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ \"%{ playlist }\"?" @@ -1404,13 +1560,17 @@ msgctxt "Popup/Radio/Title" msgid "Do you want to delete the radio \"%{ radio }\"?" msgstr "Ð’Ñ‹ хотите удалить радио \"%{ radio }\"?" +#: front/src/components/auth/Settings.vue:298 +msgctxt "Popup/Settings/Title" +msgid "Do you want to delete your account?" +msgstr "Ð’Ñ‹ хотите удалить Ваш аккаунт?" + #: front/src/components/moderation/FilterModal.vue:3 msgctxt "Popup/Moderation/Title/Verb" msgid "Do you want to hide content from artist \"%{ name }\"?" -msgstr "Ð’Ñ‹ хотите удалить радио \"%{ radio }\"?" +msgstr "Ð’Ñ‹ хотите Ñкрыть Ñодержимое от иÑÐ¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»Ñ \"%{ name }\"?" #: front/src/components/common/ActionTable.vue:37 -#, fuzzy msgctxt "Modal/*/Title" msgid "Do you want to launch %{ action } on %{ count } element?" msgid_plural "Do you want to launch %{ action } on %{ count } elements?" @@ -1418,10 +1578,15 @@ msgstr[0] "Ð’Ñ‹ хотите запуÑтить %{ action } на %{ count } Ñл msgstr[1] "Ð’Ñ‹ хотите запуÑтить %{ action } на %{ count } Ñлементах?" msgstr[2] "Ð’Ñ‹ хотите запуÑтить %{ action } на %{ count } Ñлементах?" -#: front/src/components/Sidebar.vue:118 +#: front/src/components/moderation/ReportModal.vue:3 +msgctxt "Popup/Moderation/Title/Verb" +msgid "Do you want to report this object?" +msgstr "Ð’Ñ‹ хотите пожаловатьÑÑ Ð½Ð° Ñтот объект?" + +#: front/src/components/Sidebar.vue:122 msgctxt "Sidebar/Queue/Message" msgid "Do you want to restore your previous queue?" -msgstr "Ð’Ñ‹ хотите воÑÑтановить вашу предыдущую очередь?" +msgstr "Ð’Ñ‹ хотите воÑÑтановить Вашу предыдущую очередь?" #: front/src/components/Footer.vue:31 msgctxt "Footer/*/List item.Link/Short, Noun" @@ -1434,26 +1599,33 @@ msgstr "ДокументациÑ" #: front/src/components/manage/library/TracksTable.vue:42 #: front/src/components/manage/library/UploadsTable.vue:62 #: front/src/components/manage/moderation/AccountsTable.vue:40 -#: front/src/components/mixins/Translations.vue:60 -#: front/src/views/admin/library/AlbumDetail.vue:118 -#: front/src/views/admin/library/ArtistDetail.vue:107 -#: front/src/views/admin/library/LibraryDetail.vue:114 -#: front/src/views/admin/library/TrackDetail.vue:170 +#: front/src/components/manage/moderation/ReportCard.vue:169 +#: front/src/components/manage/moderation/ReportCard.vue:179 +#: front/src/components/mixins/Translations.vue:72 +#: front/src/views/admin/library/AlbumDetail.vue:124 +#: front/src/views/admin/library/ArtistDetail.vue:112 +#: front/src/views/admin/library/LibraryDetail.vue:123 +#: front/src/views/admin/library/TrackDetail.vue:176 #: front/src/views/admin/library/UploadDetail.vue:121 #: front/src/views/admin/moderation/AccountsDetail.vue:123 -#: front/src/components/mixins/Translations.vue:61 +#: front/src/components/mixins/Translations.vue:73 msgctxt "Content/Moderation/*/Noun" msgid "Domain" -msgstr "" +msgstr "Домен" -#: front/src/views/admin/moderation/Base.vue:5 +#: front/src/views/admin/moderation/Base.vue:8 #: front/src/views/admin/moderation/DomainsList.vue:3 -#: front/src/views/admin/moderation/DomainsList.vue:48 +#: front/src/views/admin/moderation/DomainsList.vue:54 msgctxt "*/Moderation/*/Noun" msgid "Domains" -msgstr "" +msgstr "Домены" -#: front/src/components/library/TrackBase.vue:39 +#: front/src/views/Notifications.vue:42 +msgctxt "Content/Notifications/Button.Label/Verb" +msgid "Donate" +msgstr "Поддержать" + +#: front/src/components/library/TrackBase.vue:37 #: front/src/views/admin/library/UploadDetail.vue:58 msgctxt "Content/Track/Link/Verb" msgid "Download" @@ -1462,15 +1634,14 @@ msgstr "Скачать" #: front/src/components/playlists/Editor.vue:59 msgctxt "Content/Playlist/Paragraph/Call to action" msgid "Drag and drop rows to reorder tracks in the playlist" -msgstr "" -"ПеретаÑкивайте Ñтроки чтобы упорÑдочить треки в ÑпиÑке воÑпроизведениÑ" +msgstr "ПеретаÑкивайте Ñтроки, чтобы упорÑдочить треки в ÑпиÑке воÑпроизведениÑ" #: front/src/components/audio/track/Table.vue:10 #: front/src/components/library/TrackDetail.vue:30 -#: front/src/components/mixins/Translations.vue:56 +#: front/src/components/mixins/Translations.vue:68 #: front/src/views/admin/library/UploadDetail.vue:238 #: front/src/views/content/libraries/FilesTable.vue:60 -#: front/src/components/mixins/Translations.vue:57 +#: front/src/components/mixins/Translations.vue:69 msgctxt "Content/*/*" msgid "Duration" msgstr "ДлительноÑÑ‚ÑŒ" @@ -1480,78 +1651,61 @@ msgctxt "Content/Signup/Message" msgid "E-mail address confirmed" msgstr "ÐÐ´Ñ€ÐµÑ Ñлектронной почты подтверждён" -#: front/src/components/Home.vue:88 -msgctxt "Content/Home/Title" -msgid "Easy to use" -msgstr "Легко в иÑпользовании" - -#: front/src/components/library/AlbumBase.vue:68 -#: front/src/components/library/ArtistBase.vue:79 -#: front/src/components/library/TrackBase.vue:87 +#: front/src/components/auth/Settings.vue:246 +#: src/components/library/AlbumBase.vue:73 +#: front/src/components/library/ArtistBase.vue:84 +#: front/src/components/library/TrackBase.vue:89 #: front/src/components/manage/moderation/InstancePolicyCard.vue:45 #: front/src/components/radios/Card.vue:23 -#: src/views/admin/library/AlbumDetail.vue:65 -#: front/src/views/admin/library/ArtistDetail.vue:64 -#: front/src/views/admin/library/TrackDetail.vue:64 +#: src/views/admin/library/AlbumDetail.vue:71 +#: front/src/views/admin/library/ArtistDetail.vue:69 +#: front/src/views/admin/library/TrackDetail.vue:70 #: front/src/views/content/libraries/Detail.vue:9 #: src/views/playlists/Detail.vue:31 msgctxt "Content/*/Button.Label/Verb" msgid "Edit" msgstr "Редактировать" -#: front/src/components/auth/Settings.vue:246 -msgctxt "Content/Settings/Button.Label" -msgid "Edit" -msgstr "Редактировать" - #: front/src/components/auth/ApplicationEdit.vue:30 #: front/src/components/auth/ApplicationEdit.vue:75 msgctxt "Content/Applications/Title" msgid "Edit application" -msgstr "Ошибка во Ð²Ñ€ÐµÐ¼Ñ Ð¿Ñ€Ð¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð´ÐµÐ¹ÑтвиÑ" - -#: front/src/components/About.vue:22 -msgctxt "Content/Settings/Button.Label/Verb" -msgid "Edit instance info" -msgstr "Редактировать информацию об узле" +msgstr "Редактировать приложение" #: front/src/components/manage/moderation/InstancePolicyForm.vue:3 msgctxt "Content/Moderation/Card.Title/Verb" msgid "Edit moderation rule" -msgstr "Удалить радио" +msgstr "Редактировать правило модерации" #: front/src/components/library/AlbumEdit.vue:4 msgctxt "Content/*/Title" msgid "Edit this album" -msgstr "Проиграть трек" +msgstr "Редактировать Ñтот альбом" #: front/src/components/library/ArtistEdit.vue:4 msgctxt "Content/*/Title" msgid "Edit this artist" -msgstr "Проиграть трек" +msgstr "Редактировать Ñтого иÑполнителÑ" #: front/src/components/library/TrackEdit.vue:4 msgctxt "Content/*/Title" msgid "Edit this track" -msgstr "Проиграть трек" +msgstr "Редактировать Ñтот трек" -#: front/src/views/admin/library/AlbumDetail.vue:182 -#: front/src/views/admin/library/ArtistDetail.vue:171 +#: front/src/components/mixins/Translations.vue:116 +#: front/src/views/admin/library/AlbumDetail.vue:198 +#: front/src/views/admin/library/ArtistDetail.vue:186 #: front/src/views/admin/library/Base.vue:5 #: src/views/admin/library/EditsList.vue:24 -#: front/src/views/admin/library/TrackDetail.vue:234 +#: front/src/views/admin/library/TrackDetail.vue:250 +#: front/src/components/mixins/Translations.vue:117 msgctxt "*/Admin/*/Noun" msgid "Edits" -msgstr "Редактировать" - -#: front/src/components/mixins/Translations.vue:104 -#: front/src/components/mixins/Translations.vue:105 -msgctxt "Content/OAuth Scopes/Label" -msgid "Edits" -msgstr "Редактировать" +msgstr "Правки" -#: front/src/components/auth/Signup.vue:30 +#: front/src/components/auth/SignupForm.vue:26 #: front/src/components/manage/users/UsersTable.vue:38 +#: front/src/components/moderation/ReportModal.vue:31 msgctxt "Content/*/*/Noun" msgid "Email" msgstr "ÐÐ»ÐµÐºÑ‚Ñ€Ð¾Ð½Ð½Ð°Ñ Ð¿Ð¾Ñ‡Ñ‚Ð°" @@ -1561,52 +1715,60 @@ msgctxt "Content/*/*" msgid "Email address" msgstr "ÐÐ´Ñ€ÐµÑ Ñлектронной почты" -#: front/src/components/library/AlbumBase.vue:53 -#: front/src/components/library/ArtistBase.vue:64 -#: front/src/components/library/TrackBase.vue:72 +#: front/src/components/library/AlbumBase.vue:54 +#: front/src/components/library/ArtistBase.vue:65 +#: front/src/components/library/TrackBase.vue:70 +#: src/views/playlists/Detail.vue:38 msgctxt "Content/*/Button.Label/Verb" msgid "Embed" -msgstr "" +msgstr "Внедрить" -#: front/src/components/audio/EmbedWizard.vue:20 +#: front/src/components/audio/EmbedWizard.vue:30 msgctxt "Popup/Embed/Input.Label/Noun" msgid "Embed code" -msgstr "" +msgstr "Внедрить код" -#: front/src/components/library/AlbumBase.vue:26 +#: front/src/components/library/AlbumBase.vue:27 msgctxt "Popup/Album/Title/Verb" msgid "Embed this album on your website" -msgstr "" +msgstr "Внедрить Ñтот альбом на Ваш Ñайт" -#: front/src/components/library/ArtistBase.vue:37 +#: front/src/components/library/ArtistBase.vue:38 msgctxt "Popup/Artist/Title/Verb" msgid "Embed this artist work on your website" -msgstr "" +msgstr "Внедрить Ð¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ñтого иÑÐ¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»Ñ Ð½Ð° Ваш Ñайт" + +#: front/src/views/playlists/Detail.vue:52 +msgctxt "Popup/Album/Title/Verb" +msgid "Embed this playlist on your website" +msgstr "Внедрить Ñтот альбом на Ваш Ñайт" -#: front/src/components/library/TrackBase.vue:45 +#: front/src/components/library/TrackBase.vue:43 msgctxt "Popup/Track/Title" msgid "Embed this track on your website" -msgstr "" +msgstr "Внедрить Ñтот трек на Ваш Ñайт" -#: front/src/views/admin/moderation/AccountsDetail.vue:259 -#: front/src/views/admin/moderation/DomainsDetail.vue:187 +#: front/src/views/admin/moderation/AccountsDetail.vue:260 +#: front/src/views/admin/moderation/DomainsDetail.vue:224 msgctxt "Content/Moderation/Table.Label/Noun" msgid "Emitted library follows" -msgstr "" +msgstr "ИÑходÑщие подпиÑки на библиотеки" -#: front/src/views/admin/moderation/AccountsDetail.vue:243 -#: front/src/views/admin/moderation/DomainsDetail.vue:171 +#: front/src/views/admin/moderation/AccountsDetail.vue:244 +#: front/src/views/admin/moderation/DomainsDetail.vue:208 msgctxt "Content/Moderation/Table.Label/Noun" msgid "Emitted messages" -msgstr "" +msgstr "ИÑходÑщие ÑообщениÑ" +#: front/src/components/About.vue:114 src/components/About.vue:127 +#: front/src/components/About.vue:140 #: front/src/components/manage/moderation/InstancePolicyCard.vue:8 #: front/src/components/manage/moderation/InstancePolicyForm.vue:17 #: front/src/views/admin/moderation/AccountsDetail.vue:156 #: front/src/views/admin/moderation/AccountsDetail.vue:160 -msgctxt "*/*/*" +msgctxt "*/*/*/State of feature" msgid "Enabled" -msgstr "Отключить доÑтуп" +msgstr "Включено" #: front/src/views/playlists/Detail.vue:30 msgctxt "Content/Playlist/Button.Label/Verb" @@ -1616,57 +1778,58 @@ msgstr "Закончить редактирование" #: front/src/views/content/remote/ScanForm.vue:50 msgctxt "Content/Library/Input.Placeholder" msgid "Enter a library URL" -msgstr "ОчиÑтить библиотеку" +msgstr "Введите URL библиотеки" #: front/src/components/library/Radios.vue:141 msgctxt "Content/Search/Input.Placeholder" msgid "Enter a radio name…" -msgstr "Введите название радио..." +msgstr "Введите название радио…" -#: front/src/components/library/Albums.vue:119 +#: front/src/components/library/Albums.vue:128 msgctxt "Content/Search/Input.Placeholder" -msgid "Enter album title..." -msgstr "" +msgid "Enter album title…" +msgstr "Введите название альбома…" #: front/src/components/library/Artists.vue:116 msgctxt "Content/Search/Input.Placeholder" msgid "Enter artist name…" -msgstr "Введите Ð¸Ð¼Ñ Ð¸ÑполнителÑ..." +msgstr "Введите Ð¸Ð¼Ñ Ð¸ÑполнителÑ…" #: front/src/views/playlists/List.vue:107 msgctxt "Content/Playlist/Placeholder/Call to action" msgid "Enter playlist name…" -msgstr "Введите название ÑпиÑка воÑпроизведениÑ..." +msgstr "Введите название ÑпиÑка воÑпроизведениÑ…" #: front/src/views/auth/PasswordReset.vue:54 msgctxt "Content/Signup/Input.Placeholder" -msgid "Enter the email address binded to your account" -msgstr "" +msgid "Enter the email address linked to your account" +msgstr "Введите Ð°Ð´Ñ€ÐµÑ Ñлектронной почты, ÑвÑзанный Ñ Ð’Ð°ÑˆÐ¸Ð¼ аккаунтом" -#: front/src/components/auth/Signup.vue:103 +#: front/src/components/auth/SignupForm.vue:96 msgctxt "Content/Signup/Form/Placeholder" msgid "Enter your email" -msgstr "Введите ваш Ð°Ð´Ñ€ÐµÑ Ñлектронной почты" +msgstr "Введите Ваш Ð°Ð´Ñ€ÐµÑ Ñлектронной почты" -#: front/src/components/auth/Signup.vue:98 src/components/auth/Signup.vue:100 +#: front/src/components/auth/SignupForm.vue:91 +#: src/components/auth/SignupForm.vue:93 msgctxt "Content/Signup/Form/Placeholder" msgid "Enter your invitation code (case insensitive)" -msgstr "Введите ваш код Ð¿Ñ€Ð¸Ð³Ð»Ð°ÑˆÐµÐ½Ð¸Ñ (нечувÑтвительно к региÑтру)" +msgstr "Введите Ваш код Ð¿Ñ€Ð¸Ð³Ð»Ð°ÑˆÐµÐ½Ð¸Ñ (нечувÑтвительно к региÑтру)" #: front/src/components/metadata/Search.vue:114 msgctxt "Content/Library/Input.Placeholder/Verb" msgid "Enter your search query…" -msgstr "Введите ваш поиÑковый запроÑ..." +msgstr "Введите Ваш поиÑковый запроÑ…" -#: front/src/components/auth/Signup.vue:102 +#: front/src/components/auth/SignupForm.vue:95 msgctxt "Content/Signup/Form/Placeholder" msgid "Enter your username" -msgstr "Введите ваше Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ" +msgstr "Введите Ваше Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ" -#: front/src/components/auth/Login.vue:83 +#: front/src/components/auth/LoginForm.vue:81 msgctxt "Content/Login/Input.Placeholder" msgid "Enter your username or email" -msgstr "Введите ваше Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð»Ð¸ Ð°Ð´Ñ€ÐµÑ Ñлектронной почты" +msgstr "Введите Ваше Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð»Ð¸ Ð°Ð´Ñ€ÐµÑ Ñлектронной почты" #: front/src/components/auth/SubsonicTokenForm.vue:19 #: front/src/views/content/libraries/Form.vue:4 @@ -1678,18 +1841,18 @@ msgstr "Ошибка" #: front/src/components/library/ImportStatusModal.vue:32 msgctxt "Popup/Import/Table.Label/Noun" msgid "Error detail" -msgstr "Ошибка во Ð²Ñ€ÐµÐ¼Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¸Ð³Ð»Ð°ÑˆÐµÐ½Ð¸Ñ" +msgstr "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾Ð± ошибке" -#: front/src/views/admin/Settings.vue:87 +#: front/src/views/admin/Settings.vue:89 msgctxt "Content/Admin/Menu" msgid "Error reporting" -msgstr "Ошибка во Ð²Ñ€ÐµÐ¼Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¸Ð³Ð»Ð°ÑˆÐµÐ½Ð¸Ñ" +msgstr "Ð¡Ð¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾Ð± ошибках" #: front/src/components/federation/FetchButton.vue:26 #: front/src/components/library/ImportStatusModal.vue:24 msgctxt "Popup/Import/Table.Label/Noun" msgid "Error type" -msgstr "Ошибочно" +msgstr "Тип ошибки" #: front/src/components/common/ActionTable.vue:94 msgctxt "Content/*/Error message/Header" @@ -1704,22 +1867,22 @@ msgstr "Ошибка во Ð²Ñ€ÐµÐ¼Ñ Ð·Ð°Ð¿Ñ€Ð¾Ñа ÑброÑа паролÑ" #: front/src/components/auth/Authorize.vue:6 msgctxt "Popup/Moderation/Error message" msgid "Error while authorizing application" -msgstr "Ошибка во Ð²Ñ€ÐµÐ¼Ñ Ð¿Ñ€Ð¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð´ÐµÐ¹ÑтвиÑ" +msgstr "Ошибка при авторизации приложениÑ" #: front/src/views/auth/PasswordResetConfirm.vue:7 msgctxt "Content/Signup/Card.Title" msgid "Error while changing your password" -msgstr "Ошибка во Ð²Ñ€ÐµÐ¼Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð²Ð°ÑˆÐµÐ³Ð¾ паролÑ" +msgstr "Ошибка во Ð²Ñ€ÐµÐ¼Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð’Ð°ÑˆÐµÐ³Ð¾ паролÑ" #: front/src/views/admin/moderation/DomainsList.vue:6 msgctxt "Content/Moderation/Message.Title" msgid "Error while creating domain" -msgstr "Ошибка во Ð²Ñ€ÐµÐ¼Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¸Ð³Ð»Ð°ÑˆÐµÐ½Ð¸Ñ" +msgstr "Ошибка во Ð²Ñ€ÐµÐ¼Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð´Ð¾Ð¼ÐµÐ½Ð°" #: front/src/components/moderation/FilterModal.vue:13 msgctxt "Popup/Moderation/Error message" msgid "Error while creating filter" -msgstr "Ошибка во Ð²Ñ€ÐµÐ¼Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¸Ð³Ð»Ð°ÑˆÐµÐ½Ð¸Ñ" +msgstr "Ошибка во Ð²Ñ€ÐµÐ¼Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñ„Ð¸Ð»ÑŒÑ‚Ñ€Ð°" #: front/src/components/manage/users/InvitationForm.vue:4 msgctxt "Content/Admin/Error message.Title" @@ -1729,23 +1892,19 @@ msgstr "Ошибка во Ð²Ñ€ÐµÐ¼Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¸Ð³Ð»Ð°ÑˆÐµÐ½Ð¸Ñ" #: front/src/components/manage/moderation/InstancePolicyForm.vue:7 msgctxt "Content/Moderation/Error message.Title" msgid "Error while creating rule" -msgstr "Ошибка во Ð²Ñ€ÐµÐ¼Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¸Ð³Ð»Ð°ÑˆÐµÐ½Ð¸Ñ" +msgstr "Ошибка во Ð²Ñ€ÐµÐ¼Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð°Ð²Ð¸Ð»Ð°" #: front/src/components/auth/Authorize.vue:7 msgctxt "Popup/Moderation/Error message" msgid "Error while fetching application data" -msgstr "Ошибка во Ð²Ñ€ÐµÐ¼Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¸Ð³Ð»Ð°ÑˆÐµÐ½Ð¸Ñ" +msgstr "Ошибка при запроÑе данных приложениÑ" -#: front/src/views/admin/moderation/DomainsDetail.vue:118 +#: front/src/views/admin/moderation/DomainsDetail.vue:155 msgctxt "Content/Moderation/Table" msgid "Error while fetching node info" -msgstr "Ошибка во Ð²Ñ€ÐµÐ¼Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ удалённой библиотеки" +msgstr "Ошибка при запроÑе данных узла" #: front/src/components/admin/SettingsGroup.vue:5 -msgctxt "Content/Settings/Error message.Title" -msgid "Error while saving settings" -msgstr "Ошибка во Ð²Ñ€ÐµÐ¼Ñ ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð½Ð°Ñтроек" - #: front/src/components/federation/FetchButton.vue:73 msgctxt "Content/*/Error message.Title" msgid "Error while saving settings" @@ -1754,7 +1913,17 @@ msgstr "Ошибка во Ð²Ñ€ÐµÐ¼Ñ ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð½Ð°Ñтроек" #: front/src/components/library/EditForm.vue:46 msgctxt "Content/Library/Error message.Title" msgid "Error while submitting edit" -msgstr "Ошибка во Ð²Ñ€ÐµÐ¼Ñ ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð½Ð°Ñтроек" +msgstr "Ошибка при отправке правки" + +#: front/src/components/manage/moderation/NoteForm.vue:3 +msgctxt "Content/Moderation/Error message.Title" +msgid "Error while submitting note" +msgstr "Ошибка при отправке примечаниÑ" + +#: front/src/components/moderation/ReportModal.vue:11 +msgctxt "Popup/Moderation/Error message" +msgid "Error while submitting report" +msgstr "Ошибка при отправке жалобы" #: front/src/components/mixins/Translations.vue:32 #: front/src/components/mixins/Translations.vue:33 @@ -1783,16 +1952,21 @@ msgstr "Ð’Ñе на Ñтом узле" #: front/src/components/mixins/Translations.vue:13 msgctxt "Content/Settings/Dropdown" msgid "Everyone, across all instances" -msgstr "Ð’Ñе на Ñтом узле" +msgstr "Ð’Ñе на вÑех узлах" #: front/src/components/library/radios/Builder.vue:62 msgctxt "Content/Radio/Table.Label/Verb" msgid "Exclude" msgstr "ИÑключить" +#: front/src/components/common/CollapseLink.vue:2 +msgctxt "*/*/Button,Label" +msgid "Expand" +msgstr "РаÑкрыть" + #: front/src/components/manage/users/InvitationsTable.vue:41 -#: front/src/components/mixins/Translations.vue:49 -#: front/src/components/mixins/Translations.vue:50 +#: front/src/components/mixins/Translations.vue:59 +#: front/src/components/mixins/Translations.vue:60 msgctxt "Content/Admin/Table.Label/Noun" msgid "Expiration date" msgstr "Дата иÑтечениÑ" @@ -1809,56 +1983,48 @@ msgstr "ИÑтёк/иÑпользован" #: front/src/components/manage/moderation/InstancePolicyForm.vue:110 msgctxt "Content/Moderation/Help text" -msgid "" -"Explain why you're applying this policy. Depending on your instance " -"configuration, this will help you remember why you acted on this account or " -"domain, and may be displayed publicly to help users understand what " -"moderation rules are in place." -msgstr "" +msgid "Explain why you're applying this policy. Depending on your instance configuration, this will help you remember why you acted on this account or domain, and may be displayed publicly to help users understand what moderation rules are in place." +msgstr "ОбъÑÑните назначение Ñтой политики. Ð’ завиÑимоÑти от наÑтроек Вашего узла, Ñто поможет Вам вÑпомнить, зачем Ð’Ñ‹ назначили её Ð´Ð»Ñ Ñтого аккаунта или домена, так же Ñто может быть доÑтупно публично, чтобы помочь пользователÑм понÑÑ‚ÑŒ дейÑтвующие правила модерации." #: front/src/components/manage/library/UploadsTable.vue:25 #: front/src/views/content/libraries/FilesTable.vue:16 msgctxt "Content/Library/Dropdown" msgid "Failed" -msgstr "Ошибочные треки:" +msgstr "Ошибки" -#: front/src/views/content/remote/Card.vue:62 +#: front/src/views/content/remote/Card.vue:75 msgctxt "Content/Library/Card.List item/Noun" msgid "Failed tracks:" msgstr "Ошибочные треки:" -#: front/src/views/admin/library/AlbumDetail.vue:165 -#: front/src/views/admin/library/ArtistDetail.vue:154 -#: front/src/views/admin/library/TrackDetail.vue:217 +#: front/src/views/admin/library/AlbumDetail.vue:171 +#: front/src/views/admin/library/ArtistDetail.vue:159 +#: front/src/views/admin/library/TrackDetail.vue:223 msgctxt "*/*/*" msgid "Favorited tracks" -msgstr "Ошибочные треки:" +msgstr "Избранные треки" #: front/src/components/Sidebar.vue:66 +#: src/components/mixins/Translations.vue:88 +#: front/src/components/mixins/Translations.vue:89 msgctxt "Sidebar/Favorites/List item.Link/Noun" msgid "Favorites" msgstr "Избранное" -#: front/src/components/mixins/Translations.vue:76 -#: front/src/components/mixins/Translations.vue:77 -msgctxt "Content/OAuth Scopes/Label" -msgid "Favorites" -msgstr "Избранное" - -#: front/src/views/admin/Settings.vue:84 -msgctxt "Content/Admin/Menu" +#: front/src/components/About.vue:110 src/views/admin/Settings.vue:84 +msgctxt "*/*/*" msgid "Federation" msgstr "ФедерациÑ" #: front/src/components/library/TrackDetail.vue:66 msgctxt "Content/*/*/Noun" msgid "Federation ID" -msgstr "ФедерациÑ" +msgstr "ID Федерации" #: front/src/components/library/EditCard.vue:45 msgctxt "Content/Library/Card.Table.Header/Short" msgid "Field" -msgstr "" +msgstr "Поле" #: front/src/components/library/FileUpload.vue:93 msgctxt "Content/Library/Table.Label" @@ -1870,6 +2036,11 @@ msgctxt "Content/Radio/Table.Label/Noun" msgid "Filter name" msgstr "Ð˜Ð¼Ñ Ñ„Ð¸Ð»ÑŒÑ‚Ñ€Ð°" +#: front/src/components/Home.vue:118 +msgctxt "Content/Home/Link" +msgid "Find another pod" +msgstr "Ðайти другой узел" + #: front/src/components/manage/library/UploadsTable.vue:26 #: front/src/components/mixins/Translations.vue:36 #: front/src/views/content/libraries/FilesTable.vue:17 @@ -1879,25 +2050,31 @@ msgid "Finished" msgstr "Завершено" #: front/src/components/manage/moderation/AccountsTable.vue:42 -#: front/src/components/manage/moderation/DomainsTable.vue:41 -#: front/src/views/admin/library/AlbumDetail.vue:149 -#: front/src/views/admin/library/ArtistDetail.vue:138 -#: front/src/views/admin/library/LibraryDetail.vue:153 -#: front/src/views/admin/library/TrackDetail.vue:201 +#: front/src/components/manage/moderation/DomainsTable.vue:49 +#: front/src/views/admin/library/AlbumDetail.vue:155 +#: front/src/views/admin/library/ArtistDetail.vue:143 +#: front/src/views/admin/library/LibraryDetail.vue:162 +#: front/src/views/admin/library/TagDetail.vue:98 +#: front/src/views/admin/library/TrackDetail.vue:207 #: front/src/views/admin/library/UploadDetail.vue:167 -#: front/src/views/admin/moderation/AccountsDetail.vue:235 -#: front/src/views/admin/moderation/DomainsDetail.vue:151 +#: front/src/views/admin/moderation/AccountsDetail.vue:236 +#: front/src/views/admin/moderation/DomainsDetail.vue:188 msgctxt "Content/Moderation/Table.Label/Short (Value is a date)" msgid "First seen" -msgstr "Дата иÑтечениÑ" +msgstr "Впервые увиден" -#: front/src/components/mixins/Translations.vue:46 -#: front/src/components/mixins/Translations.vue:47 +#: front/src/components/mixins/Translations.vue:56 +#: front/src/components/mixins/Translations.vue:57 msgctxt "Content/Moderation/Dropdown/Noun" msgid "First seen date" -msgstr "Дата иÑтечениÑ" +msgstr "Дата первого поÑвлениÑ" + +#: front/src/components/ShortcutsModal.vue:64 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Focus searchbar" +msgstr "Перейти в панель поиÑка" -#: front/src/views/content/remote/Card.vue:87 +#: front/src/views/content/remote/Card.vue:100 msgctxt "Content/Library/Card.Button.Label/Verb" msgid "Follow" msgstr "ПодпиÑатьÑÑ" @@ -1907,211 +2084,164 @@ msgctxt "Content/Library/Title/Verb" msgid "Follow remote libraries" msgstr "ПодпиÑатьÑÑ Ð½Ð° удалённые библиотеки" -#: front/src/views/content/remote/Card.vue:92 +#: front/src/views/content/remote/Card.vue:105 msgctxt "Content/Library/Card.Paragraph" msgid "Follow request pending approval" msgstr "ПодпиÑка требует подтверждениÑ" -#: front/src/components/mixins/Translations.vue:64 -#: front/src/views/admin/library/LibraryDetail.vue:161 +#: front/src/components/manage/library/LibrariesTable.vue:53 +#: front/src/components/mixins/Translations.vue:76 +#: front/src/views/admin/library/LibraryDetail.vue:170 #: front/src/views/content/libraries/Detail.vue:7 -#: front/src/components/mixins/Translations.vue:65 +#: front/src/components/mixins/Translations.vue:77 msgctxt "Content/Federation/*/Noun" msgid "Followers" msgstr "ПодпиÑчики" -#: front/src/components/manage/library/LibrariesTable.vue:53 -msgctxt "Content/*/*/Noun" -msgid "Followers" -msgstr "ПодпиÑчики" - -#: front/src/views/content/remote/Card.vue:103 +#: front/src/views/content/remote/Card.vue:116 msgctxt "Content/Library/Card.Paragraph" msgid "Following" -msgstr "ПодпиÑатьÑÑ" +msgstr "ПодпиÑка" -#: front/src/components/mixins/Translations.vue:84 -#: front/src/components/mixins/Translations.vue:85 +#: front/src/components/mixins/Translations.vue:96 +#: front/src/components/mixins/Translations.vue:97 msgctxt "Content/OAuth Scopes/Label" msgid "Follows" -msgstr "ПодпиÑатьÑÑ" +msgstr "ПодпиÑки" -#: front/src/components/library/TrackBase.vue:17 +#: front/src/components/library/TrackBase.vue:245 msgctxt "Content/Track/Paragraph" -msgid "" -"From album <a class=\"internal\" href=\"%{ albumUrl }\">%{ album }</a> by <a" -" class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" -msgstr "" +msgid "From album <a class=\"internal\" href=\"%{ albumUrl }\">%{ album }</a> by <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" +msgstr "Из альбома <a class=\"internal\" href=\"%{ albumUrl }\">%{ album }</a> от <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" #: front/src/components/auth/Authorize.vue:28 msgctxt "Content/Auth/Label/Noun" msgid "Full access" -msgstr "Отключить доÑтуп" +msgstr "Полный доÑтуп" #: front/src/components/auth/SubsonicTokenForm.vue:7 msgctxt "Content/Settings/Paragraph'" -msgid "" -"Funkwhale is compatible with other music players that support the Subsonic " -"API." -msgstr "" -"Funkwhale ÑовмеÑтим Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸ музыкальными плеерами которые поддерживают " -"Subsonic API." - -#: front/src/components/Home.vue:90 -msgctxt "Content/Home/Paragraph" -msgid "Funkwhale is dead simple to use." -msgstr "Funkwhale чрезвычайно проÑÑ‚ в иÑпользовании." - -#: front/src/components/Home.vue:39 -msgctxt "Content/Home/Paragraph" -msgid "" -"Funkwhale is designed to make it easy to listen to music you like, or to " -"discover new artists." -msgstr "" -"Funkwhale Ñоздан чтобы упроÑтить проÑлушивание любимой музыки и поиÑк новых " -"иÑполнителей." +msgid "Funkwhale is compatible with other music players that support the Subsonic API." +msgstr "Funkwhale ÑовмеÑтим Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸ музыкальными плеерами, которые поддерживают Subsonic API." -#: front/src/components/Home.vue:111 +#: front/src/components/Home.vue:88 msgctxt "Content/Home/Paragraph" -msgid "Funkwhale is free and gives you control on your music." -msgstr "Funkwhale Ñвободен и предоÑтавлÑет вам контроль над вашей музыкой." +msgid "Funkwhale is free and developped by a friendly community of volunteers." +msgstr "Funkwhale беÑплатен и разрабатываетÑÑ Ð´Ñ€ÑƒÐ¶ÐµÐ»ÑŽÐ±Ð½Ð¾Ð¹ командой добровольцев." -#: front/src/components/Home.vue:66 -msgctxt "Content/Home/Paragraph" -msgid "Funkwhale takes care of handling your music" -msgstr "Funkwhale заботитÑÑ Ð¾Ð± управлении вашей музыкой" +#: front/src/components/About.vue:78 +msgctxt "*/*/*" +msgid "Funkwhale version" +msgstr "ВерÑÐ¸Ñ Funkwhale" -#: front/src/components/ShortcutsModal.vue:38 +#: front/src/components/ShortcutsModal.vue:56 msgctxt "Popup/Keyboard shortcuts/Title" msgid "General shortcuts" -msgstr "" +msgstr "Общие горÑчие клавиши" #: front/src/components/manage/users/InvitationForm.vue:16 msgctxt "Content/Admin/Button.Label/Verb" msgid "Get a new invitation" msgstr "Получить приглашение" -#: front/src/components/Home.vue:13 -msgctxt "Content/Home/Button.Label/Verb" -msgid "Get me to the library" -msgstr "Перейти в библиотеку" - -#: front/src/components/Home.vue:70 -msgctxt "Content/Home/List item/Verb" -msgid "" -"Get quality metadata about your music thanks to <a href=\"%{ url }\" " -"target=\"_blank\">MusicBrainz</a>" -msgstr "" -"Получайте качеÑтвенные метаданные о вашей музыке Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ <a href=\"%{ url " -"}\" target=\"_blank\">MusicBrainz</a>" - #: front/src/views/content/Home.vue:12 src/views/content/Home.vue:19 msgctxt "Content/Library/Button.Label/Verb" msgid "Get started" msgstr "Ðачать" -#: front/src/components/Footer.vue:37 +#: front/src/components/Footer.vue:45 +#: src/components/library/ImportStatusModal.vue:45 msgctxt "Footer/*/Link" msgid "Getting help" -msgstr "ÐаÑтройки" - -#: front/src/components/library/ImportStatusModal.vue:45 -msgctxt "Popup/Import/Table.Label/Noun" -msgid "Getting help" -msgstr "ÐаÑтройки" +msgstr "Помощь" #: front/src/components/common/ActionTable.vue:35 #: front/src/components/common/ActionTable.vue:56 msgctxt "Content/*/Button.Label/Short, Verb" msgid "Go" -msgstr "" +msgstr "Перейти" #: front/src/components/PageNotFound.vue:14 msgctxt "Content/*/Button.Label/Verb" msgid "Go to home page" msgstr "Перейти на домашнюю Ñтраницу" +#: front/src/views/Notifications.vue:27 src/views/Notifications.vue:61 +msgctxt "Content/Notifications/Button.Label" +msgid "Got it!" +msgstr "ЯÑно!" + #: front/src/components/auth/Settings.vue:128 msgctxt "Content/Settings/Title" msgid "Hidden artists" -msgstr "ПроÑмотр иÑполнителей" +msgstr "Скрытые иÑполнители" + +#: front/src/components/About.vue:155 +msgctxt "*/*/*/Verb" +msgid "Hide" +msgstr "Скрыть" #: front/src/components/manage/moderation/InstancePolicyForm.vue:114 msgctxt "Content/Moderation/Help text" msgid "Hide account or domain content, except from followers." -msgstr "" +msgstr "Скрыть контент аккаунта или домена от вÑех, кроме подпиÑчиков." #: front/src/components/moderation/FilterModal.vue:40 msgctxt "Popup/*/Button.Label" msgid "Hide content" -msgstr "Добавить Ñодержимое" +msgstr "Скрыть Ñодержимое" -#: front/src/components/audio/PlayButton.vue:26 +#: front/src/components/audio/PlayButton.vue:31 msgctxt "*/Queue/Dropdown/Button/Label/Short" msgid "Hide content from this artist" -msgstr "" +msgstr "Скрыть контент Ñтого иÑполнителÑ" -#: front/src/components/audio/Player.vue:643 +#: front/src/components/audio/Player.vue:669 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Hide content from this artist…" -msgstr "" +msgstr "Скрыть контент Ñтого иÑполнителÑ…" #: front/src/components/library/Home.vue:65 msgctxt "Head/Home/Title" msgid "Home" msgstr "Домой" -#: front/src/components/instance/Stats.vue:36 -msgctxt "Content/About/Paragraph/Unit" -msgid "Hours of music" -msgstr "ЧаÑов музыки" - #: front/src/components/auth/SubsonicTokenForm.vue:10 msgctxt "Content/Settings/Paragraph" -msgid "" -"However, accessing Funkwhale from those clients require a separate password " -"you can set below." -msgstr "" -"Однако, получение доÑтупа к Freewhale из Ñтих клиентов требует отдельного " -"Ð¿Ð°Ñ€Ð¾Ð»Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¹ может быть уÑтановлен ниже." +msgid "However, accessing Funkwhale from those clients require a separate password you can set below." +msgstr "Однако, получение доÑтупа к Freewhale из Ñтих клиентов требует отдельного паролÑ, который может быть задан ниже." #: front/src/views/auth/PasswordResetConfirm.vue:24 msgctxt "Content/Signup/Paragraph" -msgid "" -"If the email address provided in the previous step is valid and binded to a " -"user account, you should receive an email with reset instructions in the " -"next couple of minutes." -msgstr "" -"ЕÑли указанный на предыдущем шаге Ð°Ð´Ñ€ÐµÑ Ñлектронной почты правильный и " -"привÑзан к пользовательÑкому аккаунту, то вы должны получить пиÑьмо Ñ " -"инÑтрукциÑми по ÑброÑу в течение неÑкольких минут." +msgid "If the email address provided in the previous step is valid and linked to a user account, you should receive an email with reset instructions in the next couple of minutes." +msgstr "ЕÑли указанный на предыдущем шаге Ð°Ð´Ñ€ÐµÑ Ñлектронной почты правильный и привÑзан к пользовательÑкому аккаунту, то Ð’Ñ‹ должны получить пиÑьмо Ñ Ð¸Ð½ÑтрукциÑми по ÑброÑу в течение неÑкольких минут." #: front/src/components/auth/Settings.vue:205 msgctxt "Content/Applications/Paragraph" -msgid "" -"If you authorize third-party applications to access your data, those " -"applications will be listed here." -msgstr "" +msgid "If you authorize third-party applications to access your data, those applications will be listed here." +msgstr "ЕÑли Ð’Ñ‹ разрешите Ñторонним приложениÑм доÑтуп к Вашим данным, Ñти Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾ÑвÑÑ‚ÑÑ Ð·Ð´ÐµÑÑŒ." + +#: front/src/components/mixins/Translations.vue:46 +#: front/src/components/mixins/Translations.vue:47 +msgctxt "Content/Moderation/Dropdown" +msgid "Illegal content" +msgstr "Ðезаконное Ñодержимое" #: front/src/components/library/ImportStatusModal.vue:3 msgctxt "Popup/Import/Title" msgid "Import detail" -msgstr "Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð°" +msgstr "Детали импорта" #: front/src/components/library/FileUpload.vue:50 msgctxt "Content/Library/Input.Label/Noun" msgid "Import reference" -msgstr "" +msgstr "СÑылка на импорт" #: front/src/components/manage/library/UploadsTable.vue:20 -#: front/src/views/content/libraries/FilesTable.vue:11 -#: front/src/views/content/libraries/FilesTable.vue:59 -msgctxt "Content/Library/*/Noun" -msgid "Import status" -msgstr "Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð°" - #: front/src/components/manage/library/UploadsTable.vue:64 #: front/src/views/admin/library/UploadDetail.vue:131 +#: front/src/views/content/libraries/FilesTable.vue:11 +#: front/src/views/content/libraries/FilesTable.vue:59 msgctxt "Content/*/*/Noun" msgid "Import status" msgstr "Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð°" @@ -2120,22 +2250,22 @@ msgstr "Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð°" #: front/src/components/mixins/Translations.vue:38 msgctxt "Content/Library/Help text" msgid "Imported" -msgstr "Дата импорта" +msgstr "Импортировано" #: front/src/components/federation/FetchButton.vue:47 msgctxt "*/*/Error" msgid "Impossible to connect to the remote server" -msgstr "" +msgstr "Ðевозможно ÑоединитьÑÑ Ñ ÑƒÐ´Ð°Ð»Ñ‘Ð½Ð½Ñ‹Ð¼ Ñервером" #: front/src/components/moderation/FilterModal.vue:26 msgctxt "Popup/Moderation/List item" msgid "In \"Recently added\" widget" -msgstr "Ðедавно добавленные" +msgstr "Из виджета \"Ðедавно добавленные\"" #: front/src/components/moderation/FilterModal.vue:27 msgctxt "Popup/Moderation/List item" msgid "In artists and album listings" -msgstr "" +msgstr "Ð’ ÑпиÑках иÑполнителей и альбомов" #: front/src/components/favorites/TrackFavoriteIcon.vue:3 msgctxt "Content/Track/Button.Message" @@ -2145,25 +2275,24 @@ msgstr "Ð’ избранном" #: front/src/components/moderation/FilterModal.vue:25 msgctxt "Popup/Moderation/List item" msgid "In other users favorites and listening history" -msgstr "" +msgstr "Ð’ избранном и иÑтории проÑÐ»ÑƒÑˆÐ¸Ð²Ð°Ð½Ð¸Ñ Ð´Ñ€ÑƒÐ³Ð¸Ñ… пользователей" #: front/src/components/moderation/FilterModal.vue:28 msgctxt "Popup/Moderation/List item" msgid "In radio suggestions" -msgstr "" +msgstr "Ð’ рекомендованных радио" -#: front/src/components/manage/users/UsersTable.vue:54 +#: front/src/components/manage/users/UsersTable.vue:55 msgctxt "Content/Admin/Table" msgid "Inactive" msgstr "Ðеактивен(на)" -#: front/src/components/ShortcutsModal.vue:71 +#: front/src/components/ShortcutsModal.vue:124 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Increase volume" -msgstr "" +msgstr "Увеличить громкоÑÑ‚ÑŒ" #: front/src/components/playlists/Editor.vue:41 -#, fuzzy msgctxt "Content/Playlist/Button.Label/Verb" msgid "Insert from queue (%{ count } track)" msgid_plural "Insert from queue (%{ count } tracks)" @@ -2175,12 +2304,12 @@ msgstr[2] "Ð’Ñтавить из очереди (%{ count } треков)" #: front/src/components/mixins/Translations.vue:17 msgctxt "Content/Settings/Dropdown/Short" msgid "Instance" -msgstr "Радио узла" +msgstr "Узел" -#: front/src/views/admin/moderation/DomainsDetail.vue:71 +#: front/src/views/admin/moderation/DomainsDetail.vue:99 msgctxt "Content/Moderation/Title" msgid "Instance data" -msgstr "Радио узла" +msgstr "Данные узла" #: front/src/views/admin/Settings.vue:80 msgctxt "Content/Admin/Menu" @@ -2200,21 +2329,27 @@ msgstr "ÐаÑтройки узла" #: front/src/components/SetInstanceModal.vue:19 msgctxt "Popup/Instance/Input.Label/Noun" msgid "Instance URL" -msgstr "Радио узла" +msgstr "URL узла" + +#: front/src/components/manage/moderation/ReportCard.vue:92 +#: front/src/components/manage/moderation/ReportCard.vue:203 +msgctxt "Content/*/*/Noun" +msgid "Internal notes" +msgstr "Внутренние заметки" #: front/src/components/library/FileUpload.vue:268 msgctxt "Content/Library/Help text" -msgid "" -"Invalid file type, ensure you are uploading an audio file. Supported file " -"extensions are %{ extensions }" -msgstr "" +msgid "Invalid file type, ensure you are uploading an audio file. Supported file extensions are %{ extensions }" +msgstr "Ðеправильный тип файла, убедитеÑÑŒ, что закачиваете аудио-файл. Поддерживаемые типы файлов: %{ extensions }" #: front/src/components/library/ImportStatusModal.vue:139 +#: front/src/components/mixins/Translations.vue:45 +#: front/src/components/mixins/Translations.vue:46 msgctxt "Popup/Import/Error.Label" msgid "Invalid metadata" -msgstr "" +msgstr "Ðеправильные метаданные" -#: front/src/components/auth/Signup.vue:44 +#: front/src/components/auth/SignupForm.vue:40 #: front/src/components/manage/users/InvitationForm.vue:11 msgctxt "Content/*/Input.Label" msgid "Invitation code" @@ -2226,7 +2361,13 @@ msgctxt "*/Admin/*/Noun" msgid "Invitations" msgstr "ПриглашениÑ" -#: front/src/components/Footer.vue:41 +#: front/src/components/manage/moderation/DomainsTable.vue:9 +#: front/src/views/admin/moderation/DomainsDetail.vue:106 +msgctxt "Content/Moderation/*/Adjective" +msgid "Is present on allow-list" +msgstr "ПриÑутÑтвует в \"белом\" ÑпиÑке" + +#: front/src/components/Footer.vue:49 msgctxt "Footer/*/List item.Link" msgid "Issue tracker" msgstr "Багтрекер" @@ -2234,22 +2375,23 @@ msgstr "Багтрекер" #: front/src/components/SetInstanceModal.vue:5 msgctxt "Popup/Instance/Error message.Title" msgid "It is not possible to connect to the given URL" -msgstr "" +msgstr "Ðевозможно ÑоединитьÑÑ Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ñ‹Ð¼ URL" -#: front/src/components/Home.vue:50 -msgctxt "Content/Home/List item/Verb" -msgid "Keep a track of your favorite songs" -msgstr "" +#: front/src/components/mixins/Translations.vue:65 +#: front/src/components/mixins/Translations.vue:66 +msgctxt "*/*/*/Noun" +msgid "Items" +msgstr "Ñлементы" #: front/src/components/Footer.vue:33 src/components/ShortcutsModal.vue:3 msgctxt "*/*/*/Noun" msgid "Keyboard shortcuts" -msgstr "" +msgstr "ГорÑчие клавиши" -#: front/src/views/admin/moderation/DomainsDetail.vue:161 +#: front/src/views/admin/moderation/DomainsDetail.vue:198 msgctxt "Content/Moderation/Table.Label.Link" msgid "Known accounts" -msgstr "Мой аккаунт" +msgstr "ИзвеÑтные аккаунты" #: front/src/views/content/remote/Home.vue:14 msgctxt "Content/Library/Title" @@ -2257,18 +2399,18 @@ msgid "Known libraries" msgstr "ИзвеÑтные библиотеки" #: front/src/components/manage/users/UsersTable.vue:41 -#: front/src/components/mixins/Translations.vue:58 -#: front/src/views/admin/moderation/AccountsDetail.vue:205 -#: front/src/components/mixins/Translations.vue:59 +#: front/src/components/mixins/Translations.vue:70 +#: front/src/views/admin/moderation/AccountsDetail.vue:206 +#: front/src/components/mixins/Translations.vue:71 msgctxt "Content/Profile/Table.Label/Short, Noun (Value is a date)" msgid "Last activity" msgstr "ПоÑледнÑÑ Ð°ÐºÑ‚Ð¸Ð²Ð½Ð¾ÑÑ‚ÑŒ" -#: front/src/views/admin/moderation/AccountsDetail.vue:188 -#: front/src/views/admin/moderation/DomainsDetail.vue:78 +#: front/src/views/admin/moderation/AccountsDetail.vue:189 +#: front/src/views/admin/moderation/DomainsDetail.vue:115 msgctxt "Content/*/Table.Label" msgid "Last checked" -msgstr "ПоÑледнее обновление:" +msgstr "ПоÑледнее обновление" #: front/src/components/playlists/PlaylistModal.vue:46 msgctxt "Popup/Playlist/Table.Label/Short" @@ -2278,15 +2420,15 @@ msgstr "ПоÑледнее изменение" #: front/src/components/manage/moderation/AccountsTable.vue:43 msgctxt "Content/Moderation/Table.Label/Noun" msgid "Last seen" -msgstr "ПоÑледнее обновление:" +msgstr "ПоÑледний раз был виден" -#: front/src/components/mixins/Translations.vue:47 -#: front/src/components/mixins/Translations.vue:48 +#: front/src/components/mixins/Translations.vue:57 +#: front/src/components/mixins/Translations.vue:58 msgctxt "Content/Moderation/Dropdown/Noun" msgid "Last seen date" -msgstr "ПоÑледнее обновление:" +msgstr "Дата поÑледнего поÑвлениÑ" -#: front/src/views/content/remote/Card.vue:60 +#: front/src/views/content/remote/Card.vue:73 msgctxt "Content/Library/Card.List item/Noun" msgid "Last update:" msgstr "ПоÑледнее обновление:" @@ -2296,60 +2438,58 @@ msgctxt "Modal/*/Button.Label/Short, Verb" msgid "Launch" msgstr "ЗапуÑтить" -#: front/src/components/Home.vue:10 -msgctxt "Content/Home/Button.Label/Verb" -msgid "Learn more about this instance" -msgstr "Узнать больше об Ñтом узле" +#: front/src/components/Home.vue:35 +msgctxt "Content/Home/Link" +msgid "Learn more" +msgstr "Узнать больше" #: front/src/components/manage/users/InvitationForm.vue:58 msgctxt "Content/Admin/Input.Placeholder" msgid "Leave empty for a random code" msgstr "ОÑтавьте пуÑтым Ð´Ð»Ñ Ñлучайного кода" -#: front/src/components/audio/EmbedWizard.vue:7 +#: front/src/components/audio/EmbedWizard.vue:17 msgctxt "Popup/Embed/Paragraph" msgid "Leave empty for a responsive widget" -msgstr "ОÑтавьте пуÑтым Ð´Ð»Ñ Ñлучайного кода" +msgstr "ОÑтавьте пуÑтым Ð´Ð»Ñ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑкого виджета" -#: front/src/views/admin/library/AlbumDetail.vue:232 -#: front/src/views/admin/library/ArtistDetail.vue:221 -#: front/src/views/admin/library/TrackDetail.vue:284 -#: front/src/views/admin/moderation/AccountsDetail.vue:327 -#: front/src/views/admin/moderation/DomainsDetail.vue:234 -#: front/src/views/content/Base.vue:5 +#: front/src/components/mixins/Translations.vue:64 +#: front/src/components/mixins/Translations.vue:65 msgctxt "*/*/*/Noun" -msgid "Libraries" -msgstr "Библиотеки" +msgid "Length" +msgstr "Длина" +#: front/src/views/admin/library/AlbumDetail.vue:248 +#: front/src/views/admin/library/ArtistDetail.vue:236 #: front/src/views/admin/library/Base.vue:17 #: front/src/views/admin/library/LibrariesList.vue:24 -msgctxt "*/*/*" +#: front/src/views/admin/library/TrackDetail.vue:300 +#: front/src/views/admin/moderation/AccountsDetail.vue:339 +#: front/src/views/admin/moderation/DomainsDetail.vue:271 +#: front/src/views/content/Base.vue:5 +msgctxt "*/*/*/Noun" msgid "Libraries" msgstr "Библиотеки" -#: front/src/components/mixins/Translations.vue:72 -#: front/src/components/mixins/Translations.vue:73 +#: front/src/components/mixins/Translations.vue:84 +#: front/src/components/mixins/Translations.vue:85 msgctxt "Content/OAuth Scopes/Label" msgid "Libraries and uploads" -msgstr "Библиотека обновлена" +msgstr "Библиотеки и закачки" #: front/src/views/content/libraries/Form.vue:2 msgctxt "Content/Library/Paragraph" -msgid "" -"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." -msgstr "" -"Библиотеки помогают организовывать ваши музыкальные коллекции и делитьÑÑ " -"ими. Ð’Ñ‹ можете загружать вашу музыку на Funkwhale и делитьÑÑ ÐµÑŽ Ñ Ð²Ð°ÑˆÐ¸Ð¼Ð¸ " -"друзьÑми и Ñемьёй." +msgid "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." +msgstr "Библиотеки помогают организовывать Ваши музыкальные коллекции и делитьÑÑ Ð¸Ð¼Ð¸. Ð’Ñ‹ можете загружать Вашу музыку на Funkwhale и делитьÑÑ ÐµÑŽ Ñ Ð’Ð°ÑˆÐ¸Ð¼Ð¸ друзьÑми и Ñемьёй." -#: front/src/components/Sidebar.vue:85 src/components/instance/Stats.vue:30 +#: front/src/components/Sidebar.vue:85 #: front/src/components/manage/library/UploadsTable.vue:60 -#: front/src/components/manage/users/UsersTable.vue:173 +#: front/src/components/manage/users/UsersTable.vue:174 +#: front/src/components/mixins/Report.vue:77 #: front/src/views/admin/library/UploadDetail.vue:144 -#: front/src/views/admin/moderation/AccountsDetail.vue:498 -msgctxt "*/*/*" +#: front/src/views/admin/moderation/AccountsDetail.vue:518 src/entities.js:132 +#: front/src/components/mixins/Report.vue:78 +msgctxt "*/*/*/Noun" msgid "Library" msgstr "Библиотека" @@ -2361,17 +2501,17 @@ msgstr "Библиотека Ñоздана" #: front/src/views/admin/library/LibraryDetail.vue:78 msgctxt "Content/Moderation/Title" msgid "Library data" -msgstr "Библиотека обновлена" +msgstr "Данные библиотеки" #: front/src/views/content/libraries/Form.vue:123 msgctxt "Content/Library/Message" msgid "Library deleted" -msgstr "Библиотека обновлена" +msgstr "Библиотека удалена" #: front/src/views/admin/library/EditsList.vue:4 msgctxt "Content/Admin/Title/Noun" msgid "Library edits" -msgstr "Файлы библиотеки" +msgstr "Правки библиотеки" #: front/src/views/content/libraries/Form.vue:100 msgctxt "Content/Library/Message" @@ -2380,71 +2520,88 @@ msgstr "Библиотека обновлена" #: front/src/components/library/TrackDetail.vue:19 #: front/src/components/manage/library/TracksTable.vue:43 -#: front/src/views/admin/library/TrackDetail.vue:159 src/edits.js:61 +#: front/src/views/admin/library/TrackDetail.vue:165 src/edits.js:84 +#: front/src/entities.js:115 msgctxt "Content/*/*/Noun" msgid "License" -msgstr "" +msgstr "ЛицензиÑ" + +#: front/src/components/Footer.vue:90 +msgctxt "Footer/Settings/Dropdown.Label/Theme name" +msgid "Light" +msgstr "СветлаÑ" + +#: front/src/views/admin/library/AlbumDetail.vue:188 +#: front/src/views/admin/library/ArtistDetail.vue:176 +#: front/src/views/admin/library/LibraryDetail.vue:179 +#: front/src/views/admin/library/TrackDetail.vue:240 +#: front/src/views/admin/moderation/AccountsDetail.vue:269 +msgctxt "Content/Moderation/Table.Label/Noun" +msgid "Linked reports" +msgstr "СвÑзанные жалобы" -#: front/src/views/admin/library/AlbumDetail.vue:157 -#: front/src/views/admin/library/ArtistDetail.vue:146 -#: front/src/views/admin/library/TrackDetail.vue:209 -msgctxt "*/*/*/Noun" -msgid "Listenings" -msgstr "" +#: front/src/components/Home.vue:135 +msgctxt "Content/Home/Link" +msgid "Listen to public albums and playlists shared on this pod" +msgstr "Слушайте публичные альбомы и ÑпиÑки воÑпроизведениÑ, имеющиеÑÑ Ð½Ð° Ñтом узле" -#: front/src/components/mixins/Translations.vue:80 -#: front/src/components/mixins/Translations.vue:81 -msgctxt "Content/OAuth Scopes/Label" +#: front/src/components/mixins/Translations.vue:92 +#: front/src/views/admin/library/AlbumDetail.vue:163 +#: front/src/views/admin/library/ArtistDetail.vue:151 +#: front/src/views/admin/library/TrackDetail.vue:215 +#: front/src/components/mixins/Translations.vue:93 +msgctxt "*/*/*/Noun" msgid "Listenings" -msgstr "" +msgstr "ПроÑлушиваниÑ" #: front/src/components/audio/track/Table.vue:25 #: front/src/components/library/ArtistDetail.vue:28 msgctxt "Content/*/Button.Label" msgid "Load more…" -msgstr "Загружаем подпиÑчиков..." +msgstr "Загрузить ещё…" #: front/src/views/content/libraries/Detail.vue:21 msgctxt "Content/Library/Paragraph" msgid "Loading followers…" -msgstr "Загружаем подпиÑчиков..." +msgstr "Загружаем подпиÑчиков…" #: front/src/views/content/libraries/Home.vue:3 msgctxt "Content/Library/Paragraph" msgid "Loading Libraries…" -msgstr "Загружаем Библиотеки..." +msgstr "Загружаем Библиотеки…" #: front/src/views/content/libraries/Detail.vue:3 #: front/src/views/content/libraries/Upload.vue:3 msgctxt "Content/Library/Paragraph" msgid "Loading library data…" -msgstr "Загружаем данные библиотеки..." +msgstr "Загружаем данные библиотеки…" -#: front/src/views/Notifications.vue:19 +#: front/src/views/Notifications.vue:84 msgctxt "Content/Notifications/Paragraph" msgid "Loading notifications…" -msgstr "Загружаем уведомлениÑ..." +msgstr "Загружаем уведомлениÑ…" #: front/src/views/content/remote/Home.vue:3 msgctxt "Content/Library/Paragraph" msgid "Loading remote libraries…" -msgstr "Загружаем удалённые библиотеки..." +msgstr "Загружаем удалённые библиотеки…" #: front/src/views/content/libraries/Quota.vue:4 msgctxt "Content/Library/Paragraph" msgid "Loading usage data…" -msgstr "Загружаем данные об иÑпользовании..." +msgstr "Загружаем данные об иÑпользовании…" #: front/src/components/favorites/List.vue:5 msgctxt "Content/Favorites/Message" msgid "Loading your favorites…" -msgstr "Загружаем ваше избранное..." +msgstr "Загружаем Ваше избранное…" #: front/src/components/manage/library/AlbumsTable.vue:65 #: front/src/components/manage/library/ArtistsTable.vue:58 #: front/src/components/manage/library/LibrariesTable.vue:75 #: front/src/components/manage/library/TracksTable.vue:71 #: front/src/components/manage/library/UploadsTable.vue:99 +#: front/src/components/manage/moderation/ReportCard.vue:173 #: front/src/views/admin/library/AlbumDetail.vue:19 #: front/src/views/admin/library/ArtistDetail.vue:18 #: front/src/views/admin/library/LibraryDetail.vue:18 @@ -2452,7 +2609,7 @@ msgstr "Загружаем ваше избранное..." #: front/src/views/admin/library/UploadDetail.vue:19 msgctxt "Content/Moderation/*/Short, Noun" msgid "Local" -msgstr "" +msgstr "МеÑтное" #: front/src/components/manage/moderation/AccountsTable.vue:59 #: front/src/views/admin/moderation/AccountsDetail.vue:18 @@ -2460,15 +2617,15 @@ msgctxt "Content/Moderation/*/Short, Noun" msgid "Local account" msgstr "Мой аккаунт" -#: front/src/components/auth/Login.vue:84 +#: front/src/components/Home.vue:96 src/views/auth/Login.vue:29 msgctxt "Head/Login/Title" msgid "Log In" msgstr "Вход" -#: front/src/components/auth/Login.vue:4 +#: front/src/views/auth/Login.vue:4 msgctxt "Content/Login/Title/Verb" msgid "Log in to your Funkwhale account" -msgstr "Войти в ваш аккаунт Funkwhale" +msgstr "Войти в Ваш аккаунт Funkwhale" #: front/src/components/auth/Logout.vue:20 msgctxt "Head/Login/Title" @@ -2480,7 +2637,7 @@ msgctxt "Sidebar/Profile/List item.Link" msgid "Logged in as %{ username }" msgstr "Вошли как %{ username }" -#: front/src/components/Sidebar.vue:54 src/components/auth/Login.vue:42 +#: front/src/components/Sidebar.vue:54 src/components/auth/LoginForm.vue:41 msgctxt "*/Login/*/Verb" msgid "Login" msgstr "Войти" @@ -2498,39 +2655,41 @@ msgstr "Выйти" #: front/src/views/content/libraries/Home.vue:9 msgctxt "Content/Library/Paragraph" msgid "Looks like you don't have a library, it's time to create one." -msgstr "Похоже у Ð²Ð°Ñ ÐµÑ‰Ñ‘ нет ни одной библиотеки, Ñамое Ð²Ñ€ÐµÐ¼Ñ Ñоздать её!" +msgstr "Похоже у Ð’Ð°Ñ ÐµÑ‰Ñ‘ нет ни одной библиотеки, Ñамое Ð²Ñ€ÐµÐ¼Ñ Ñоздать её." -#: front/src/components/audio/Player.vue:632 -#: src/components/audio/Player.vue:633 +#: front/src/components/audio/Player.vue:658 +#: src/components/audio/Player.vue:659 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Looping disabled. Click to switch to single-track looping." -msgstr "" -"Зацикливание отключено. Ðажмите чтобы включить цикличное проигрывание трека." +msgstr "Повтор отключен. Ðажмите чтобы включить проигрывание трека по кругу." -#: front/src/components/audio/Player.vue:635 -#: src/components/audio/Player.vue:636 +#: front/src/components/audio/Player.vue:661 +#: src/components/audio/Player.vue:662 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Looping on a single track. Click to switch to whole queue looping." -msgstr "" -"Зацикливание отключено. Ðажмите чтобы включить цикличное проигрывание трека." +msgstr "Режим повтора трека. Ðажмите, чтобы включить проигрывание вÑего ÑпиÑка по кругу." -#: front/src/components/audio/Player.vue:638 -#: src/components/audio/Player.vue:639 +#: front/src/components/audio/Player.vue:664 +#: src/components/audio/Player.vue:665 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Looping on whole queue. Click to disable looping." -msgstr "" -"Зацикливание отключено. Ðажмите чтобы включить цикличное проигрывание трека." +msgstr "Повтор вÑего ÑпиÑка включён. Ðажмите, чтобы выключить повтор воÑпроизведениÑ." -#: front/src/components/Sidebar.vue:223 +#: front/src/components/Sidebar.vue:230 msgctxt "Sidebar/*/Hidden text" msgid "Main menu" -msgstr "" +msgstr "Главное меню" -#: front/src/views/admin/library/Base.vue:31 +#: front/src/views/admin/library/Base.vue:34 msgctxt "Head/Admin/Title" msgid "Manage library" msgstr "Управление библиотекой" +#: front/src/components/manage/moderation/InstancePolicyModal.vue:8 +msgctxt "Popup/Moderation/Title/Verb" +msgid "Manage moderation rules for %{ obj }" +msgstr "Изменить правила модерации Ð´Ð»Ñ %{ obj }" + #: front/src/components/playlists/PlaylistModal.vue:3 msgctxt "Popup/Playlist/Title/Verb" msgid "Manage playlists" @@ -2544,9 +2703,9 @@ msgstr "УправлÑÑ‚ÑŒ пользователÑми" #: front/src/views/playlists/List.vue:8 msgctxt "Content/Playlist/Button.Label/Verb" msgid "Manage your playlists" -msgstr "УправлÑÑ‚ÑŒ вашими ÑпиÑками воÑпроизведениÑ" +msgstr "УправлÑÑ‚ÑŒ Вашими ÑпиÑками воÑпроизведениÑ" -#: front/src/views/Notifications.vue:14 +#: front/src/views/Notifications.vue:79 msgctxt "Content/Notifications/Button.Label/Verb" msgid "Mark all as read" msgstr "Отметить вÑе как прочитанные" @@ -2554,88 +2713,104 @@ msgstr "Отметить вÑе как прочитанные" #: front/src/components/notifications/NotificationRow.vue:46 msgctxt "Content/Notifications/Button.Tooltip/Verb" msgid "Mark as read" -msgstr "Отметить вÑе как прочитанные" +msgstr "Отметить как прочитанное" #: front/src/components/notifications/NotificationRow.vue:47 msgctxt "Content/Notifications/Button.Tooltip/Verb" msgid "Mark as unread" -msgstr "Отметить вÑе как прочитанные" +msgstr "Отметить как непрочитанное" -#: front/src/views/admin/moderation/AccountsDetail.vue:310 +#: front/src/views/admin/moderation/AccountsDetail.vue:321 msgctxt "Content/*/*/Unit" msgid "MB" msgstr "МБ" -#: front/src/components/audio/Player.vue:625 +#: front/src/components/audio/Player.vue:651 msgctxt "Sidebar/Player/Hidden text" msgid "Media player" -msgstr "" +msgstr "Плеер" #: front/src/components/auth/Profile.vue:12 msgctxt "Content/Profile/Paragraph" msgid "Member since %{ date }" -msgstr "ЗарегиÑтрировано Ñ %{ date }" +msgstr "ЗарегиÑтрирован Ñ %{ date }" + +#: front/src/components/manage/moderation/ReportCard.vue:109 +#: front/src/components/moderation/ReportModal.vue:41 +msgctxt "*/*/Field.Label/Noun" +msgid "Message" +msgstr "Сообщение" #: front/src/components/Footer.vue:32 msgctxt "Footer/*/List item.Link" msgid "Mobile and desktop apps" -msgstr "" +msgstr "Мобильные и ПК приложениÑ" + +#: front/src/components/Home.vue:143 +msgctxt "Content/Home/Link" +msgid "Mobile apps" +msgstr "Мобильные приложениÑ" #: front/src/components/Sidebar.vue:96 -#: src/components/manage/users/UsersTable.vue:177 -#: front/src/views/admin/moderation/AccountsDetail.vue:502 -#: front/src/views/admin/moderation/Base.vue:21 +#: src/components/manage/users/UsersTable.vue:178 +#: front/src/views/admin/Settings.vue:85 +#: front/src/views/admin/moderation/AccountsDetail.vue:522 +#: front/src/views/admin/moderation/Base.vue:43 msgctxt "*/Moderation/*" msgid "Moderation" -msgstr "ФедерациÑ" +msgstr "МодерациÑ" #: front/src/views/admin/moderation/AccountsDetail.vue:78 -#: front/src/views/admin/moderation/DomainsDetail.vue:42 +#: front/src/views/admin/moderation/DomainsDetail.vue:70 msgctxt "Content/Moderation/Card.Paragraph" -msgid "" -"Moderation policies help you control how your instance interact with a given" -" domain or account." -msgstr "" +msgid "Moderation policies help you control how your instance interact with a given domain or account." +msgstr "Политики модерации позволÑÑŽÑ‚ Вам управлÑÑ‚ÑŒ тем, как Ваш узел взаимодейÑтвует Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ñ‹Ð¼ доменом или аккаунтом." + +#: front/src/components/manage/moderation/InstancePolicyModal.vue:4 +msgctxt "Content/Moderation/Button.Label" +msgid "Moderation rules…" +msgstr "Правила модерации…" #: front/src/components/library/EditCard.vue:5 msgctxt "Content/Library/Card/Short" msgid "Modification %{ id }" -msgstr "Дата поÑледнего изменениÑ" +msgstr "Изменение %{ id }" -#: front/src/components/mixins/Translations.vue:48 -#: front/src/components/mixins/Translations.vue:49 +#: front/src/components/mixins/Translations.vue:58 +#: front/src/components/mixins/Translations.vue:59 msgctxt "Content/Playlist/Dropdown/Noun" msgid "Modification date" -msgstr "Дата поÑледнего изменениÑ" +msgstr "Дата изменениÑ" -#: front/src/components/library/AlbumBase.vue:42 -#: front/src/components/library/ArtistBase.vue:53 -#: front/src/components/library/TrackBase.vue:61 +#: front/src/components/audio/PlayButton.vue:100 +#: front/src/components/library/AlbumBase.vue:43 +#: front/src/components/library/ArtistBase.vue:54 +#: front/src/components/library/TrackBase.vue:59 msgctxt "*/*/Button.Label/Noun" msgid "More…" -msgstr "" +msgstr "Ещё…" #: front/src/components/Sidebar.vue:63 src/views/admin/Settings.vue:82 msgctxt "*/*/*/Noun" msgid "Music" msgstr "Музыка" -#: front/src/components/audio/Player.vue:631 +#: front/src/components/audio/Player.vue:657 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Mute" -msgstr "Приглушить" +msgstr "Выключить звук" #: front/src/components/manage/moderation/InstancePolicyCard.vue:24 #: front/src/components/manage/moderation/InstancePolicyForm.vue:115 msgctxt "Content/Moderation/*/Verb" msgid "Mute activity" -msgstr "ПоÑледнÑÑ Ð°ÐºÑ‚Ð¸Ð²Ð½Ð¾ÑÑ‚ÑŒ" +msgstr "Скрывать активноÑÑ‚ÑŒ" #: front/src/components/manage/moderation/InstancePolicyCard.vue:28 #: front/src/components/manage/moderation/InstancePolicyForm.vue:119 msgctxt "Content/Moderation/*/Verb" msgid "Mute notifications" -msgstr "Ваши уведомлениÑ" +msgstr "Скрывать уведомлениÑ" #: front/src/components/Sidebar.vue:34 msgctxt "Sidebar/Profile/Title" @@ -2667,8 +2842,8 @@ msgctxt "Content/Library/Title" msgid "My libraries" msgstr "Мои библиотеки" -#: front/src/components/audio/track/Row.vue:40 -#: src/components/library/EditCard.vue:60 +#: front/src/components/About.vue:105 src/components/audio/track/Row.vue:40 +#: front/src/components/library/EditCard.vue:60 #: front/src/components/library/EditForm.vue:70 #: front/src/components/library/TrackDetail.vue:34 #: front/src/components/library/TrackDetail.vue:43 @@ -2678,54 +2853,56 @@ msgstr "Мои библиотеки" #: front/src/components/manage/library/TracksTable.vue:76 #: front/src/components/manage/library/UploadsTable.vue:121 #: front/src/components/manage/library/UploadsTable.vue:128 -#: front/src/components/manage/users/UsersTable.vue:61 +#: front/src/components/manage/moderation/ReportCard.vue:78 +#: front/src/components/manage/moderation/ReportCard.vue:87 +#: front/src/components/manage/moderation/ReportCard.vue:193 +#: front/src/components/manage/users/UsersTable.vue:62 #: front/src/views/admin/library/UploadDetail.vue:179 #: front/src/views/admin/library/UploadDetail.vue:214 #: front/src/views/admin/library/UploadDetail.vue:233 #: front/src/views/admin/library/UploadDetail.vue:244 #: front/src/views/admin/library/UploadDetail.vue:257 -#: front/src/views/admin/moderation/AccountsDetail.vue:192 -#: front/src/views/admin/moderation/DomainsDetail.vue:82 +#: front/src/views/admin/moderation/AccountsDetail.vue:193 +#: front/src/views/admin/moderation/DomainsDetail.vue:119 #: front/src/views/content/libraries/FilesTable.vue:95 #: front/src/views/content/libraries/FilesTable.vue:101 msgctxt "*/*/*" msgid "N/A" msgstr "Ð/Д" -#: front/src/components/manage/library/LibrariesTable.vue:48 -#: front/src/components/manage/library/UploadsTable.vue:59 -msgctxt "*/*/*" -msgid "Name" -msgstr "ИмÑ" - #: front/src/components/auth/ApplicationForm.vue:9 -msgctxt "Content/Applications/Input.Label/Noun" -msgid "Name" -msgstr "ИмÑ" - #: front/src/components/auth/Settings.vue:133 #: front/src/components/manage/library/ArtistsTable.vue:39 +#: front/src/components/manage/library/LibrariesTable.vue:48 +#: front/src/components/manage/library/TagsTable.vue:41 +#: front/src/components/manage/library/UploadsTable.vue:59 #: front/src/components/manage/moderation/AccountsTable.vue:39 -#: front/src/components/manage/moderation/DomainsTable.vue:38 -#: front/src/components/mixins/Translations.vue:53 +#: front/src/components/manage/moderation/DomainsTable.vue:46 +#: front/src/components/mixins/Translations.vue:63 #: front/src/components/playlists/PlaylistModal.vue:45 -#: front/src/views/admin/library/ArtistDetail.vue:98 +#: front/src/views/admin/library/ArtistDetail.vue:103 #: front/src/views/admin/library/LibraryDetail.vue:85 +#: front/src/views/admin/library/TagDetail.vue:68 #: front/src/views/admin/library/UploadDetail.vue:92 -#: front/src/views/admin/moderation/DomainsDetail.vue:97 -#: front/src/views/content/libraries/Form.vue:10 src/edits.js:10 -#: front/src/components/mixins/Translations.vue:54 +#: front/src/views/admin/moderation/DomainsDetail.vue:134 +#: front/src/views/content/libraries/Form.vue:10 src/edits.js:17 +#: front/src/components/mixins/Translations.vue:64 msgctxt "*/*/*/Noun" msgid "Name" msgstr "ИмÑ" +#: front/src/views/Notifications.vue:24 src/views/Notifications.vue:58 +msgctxt "*/*/*" +msgid "Never" +msgstr "Ðикогда" + #: front/src/components/auth/Settings.vue:88 #: front/src/views/auth/PasswordResetConfirm.vue:14 msgctxt "Content/Settings/Input.Label" msgid "New password" msgstr "Ðовый пароль" -#: front/src/components/Sidebar.vue:173 +#: front/src/components/Sidebar.vue:177 msgctxt "Sidebar/Player/Paragraph" msgid "New tracks will be appended here automatically." msgstr "Ðовые треки будут добавлены Ñюда автоматичеÑки." @@ -2733,58 +2910,69 @@ msgstr "Ðовые треки будут добавлены Ñюда автом #: front/src/components/library/EditCard.vue:47 msgctxt "Content/Library/Card.Table.Header/Short" msgid "New value" -msgstr "" +msgstr "Ðовое значение" -#: front/src/components/audio/Player.vue:629 +#: front/src/components/audio/Player.vue:655 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Next track" msgstr "Следующий трек" -#: front/src/components/Sidebar.vue:130 +#: front/src/components/Sidebar.vue:134 +#: front/src/components/manage/moderation/DomainsTable.vue:13 +#: front/src/views/admin/moderation/DomainsDetail.vue:110 msgctxt "*/*/*" msgid "No" msgstr "Ðет" -#: front/src/components/Home.vue:95 -msgctxt "Content/Home/List item" -msgid "No add-ons, no plugins : you only need a web library" -msgstr "" - #: front/src/components/audio/Search.vue:25 msgctxt "Content/Search/Paragraph" msgid "No album matched your query" -msgstr "Извините, мы не нашли никакого альбома подходÑщего под ваш запроÑ" +msgstr "Ðет альбомов, подходÑщих Вашему запроÑу" #: front/src/components/audio/Search.vue:16 msgctxt "Content/Search/Paragraph" msgid "No artist matched your query" -msgstr "" -"Извините, мы не нашли ни одного иÑÐ¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»Ñ Ð¿Ð¾Ð´Ñ…Ð¾Ð´Ñщего под ваш запроÑ" +msgstr "Ðет иÑполнителей по Вашему запроÑу" #: front/src/components/library/TrackDetail.vue:14 msgctxt "Content/Track/Table.Paragraph" msgid "No copyright information available for this track" -msgstr "ТекÑÑ‚ недоÑтупен Ð´Ð»Ñ Ñтого трека." +msgstr "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ правах недоÑтупна Ð´Ð»Ñ Ñтого трека" + +#: front/src/components/About.vue:25 src/components/Home.vue:25 +msgctxt "Content/Home/Paragraph" +msgid "No description available." +msgstr "Ðет опиÑаниÑ." #: front/src/components/library/TrackDetail.vue:25 msgctxt "Content/Track/Table.Paragraph" msgid "No licensing information for this track" -msgstr "У Ð½Ð°Ñ Ð½ÐµÑ‚ уведомлений Ð´Ð»Ñ Ð¿Ð¾ÐºÐ°Ð·Ð°!" +msgstr "Ðет информации о лицензиÑÑ… Ð´Ð»Ñ Ñтого трека" #: front/src/components/federation/LibraryWidget.vue:6 msgctxt "Content/Federation/Paragraph" msgid "No matching library." msgstr "Ðет подходÑщей библиотеки." -#: front/src/views/Notifications.vue:28 +#: front/src/views/Notifications.vue:93 msgctxt "Content/Notifications/Paragraph" msgid "No notification to show." -msgstr "Ваши уведомлениÑ" +msgstr "Ðет уведомлений." #: front/src/components/common/EmptyState.vue:7 msgctxt "Content/*/Paragraph" msgid "No results were found." -msgstr "" +msgstr "Ðичего не найдено." + +#: front/src/components/About.vue:32 +msgctxt "Content/Home/Paragraph" +msgid "No rules available." +msgstr "Ðет доÑтупных правил." + +#: front/src/components/About.vue:39 +msgctxt "Content/Home/Paragraph" +msgid "No terms available." +msgstr "Ðет доÑтупных уÑловий." #: front/src/components/mixins/Translations.vue:10 #: front/src/components/mixins/Translations.vue:11 @@ -2802,18 +2990,21 @@ msgctxt "Content/Admin/Table" msgid "Not used" msgstr "Ðе иÑпользуетÑÑ" -#: front/src/components/mixins/Translations.vue:100 -#: front/src/components/mixins/Translations.vue:101 -msgctxt "Content/OAuth Scopes/Label" -msgid "Notifications" -msgstr "УведомлениÑ" - -#: front/src/components/Sidebar.vue:46 src/views/Notifications.vue:76 +#: front/src/components/Sidebar.vue:46 +#: src/components/mixins/Translations.vue:112 +#: front/src/views/Notifications.vue:151 +#: src/components/mixins/Translations.vue:113 msgctxt "*/Notifications/*" msgid "Notifications" msgstr "УведомлениÑ" -#: front/src/components/Footer.vue:47 +#: front/src/components/mixins/Translations.vue:47 +#: front/src/components/mixins/Translations.vue:48 +msgctxt "Content/Moderation/Dropdown" +msgid "Offensive content" +msgstr "ОÑкорбительное Ñодержание" + +#: front/src/components/Footer.vue:55 msgctxt "Footer/*/List item.Link" msgid "Official website" msgstr "Официальный веб-Ñайт" @@ -2826,7 +3017,12 @@ msgstr "Старый пароль" #: front/src/components/library/EditCard.vue:46 msgctxt "Content/Library/Card.Table.Header/Short" msgid "Old value" -msgstr "" +msgstr "Старое значение" + +#: front/src/components/About.vue:90 +msgctxt "*/*/*/State of registrations" +msgid "Open" +msgstr "Открыть" #: front/src/components/manage/users/InvitationsTable.vue:20 msgctxt "Content/Admin/Dropdown/Adjective" @@ -2835,27 +3031,29 @@ msgstr "Открыть" #: front/src/components/library/ImportStatusModal.vue:56 msgctxt "Popup/Import/Table.Label/Value" -msgid "" -"Open a support thread (include the debug information below in your message)" -msgstr "" - -#: front/src/components/library/AlbumBase.vue:73 -#: front/src/components/library/ArtistBase.vue:84 -#: front/src/components/library/TrackBase.vue:92 +msgid "Open a support thread (include the debug information below in your message)" +msgstr "Открыть тему в поддержке (вÑтавьте диагноÑтичеÑкую информацию ниже в Ваше Ñообщение)" + +#: front/src/components/library/AlbumBase.vue:87 +#: front/src/components/library/ArtistBase.vue:99 +#: front/src/components/library/TagDetail.vue:11 +#: front/src/components/library/TrackBase.vue:103 +#: front/src/components/manage/moderation/ReportCard.vue:128 msgctxt "Content/Moderation/Link" msgid "Open in moderation interface" -msgstr "Удалить радио" +msgstr "Открыть в режиме модерации" -#: front/src/views/admin/library/AlbumDetail.vue:31 -#: front/src/views/admin/library/ArtistDetail.vue:30 -#: front/src/views/admin/library/TrackDetail.vue:30 +#: front/src/views/admin/library/AlbumDetail.vue:37 +#: front/src/views/admin/library/ArtistDetail.vue:35 +#: front/src/views/admin/library/TagDetail.vue:21 +#: front/src/views/admin/library/TrackDetail.vue:36 msgctxt "Content/Moderation/Link/Verb" msgid "Open local profile" -msgstr "" +msgstr "Открыть локальный профиль" -#: front/src/views/admin/library/AlbumDetail.vue:46 -#: front/src/views/admin/library/ArtistDetail.vue:45 -#: front/src/views/admin/library/TrackDetail.vue:45 +#: front/src/views/admin/library/AlbumDetail.vue:52 +#: front/src/views/admin/library/ArtistDetail.vue:50 +#: front/src/views/admin/library/TrackDetail.vue:51 msgctxt "Content/Moderation/Link/Verb" msgid "Open on MusicBrainz" msgstr "Смотреть на MusicBrainz" @@ -2863,17 +3061,17 @@ msgstr "Смотреть на MusicBrainz" #: front/src/views/admin/moderation/AccountsDetail.vue:23 msgctxt "Content/Moderation/Link/Verb" msgid "Open profile" -msgstr "" +msgstr "Открыть профиль" -#: front/src/views/admin/library/AlbumDetail.vue:54 -#: front/src/views/admin/library/ArtistDetail.vue:53 +#: front/src/views/admin/library/AlbumDetail.vue:60 +#: front/src/views/admin/library/ArtistDetail.vue:58 #: front/src/views/admin/library/LibraryDetail.vue:49 -#: front/src/views/admin/library/TrackDetail.vue:53 +#: front/src/views/admin/library/TrackDetail.vue:59 #: front/src/views/admin/library/UploadDetail.vue:50 #: front/src/views/admin/moderation/AccountsDetail.vue:52 msgctxt "Content/Moderation/Link/Verb" msgid "Open remote profile" -msgstr "" +msgstr "Открыть удалённый профиль" #: front/src/views/admin/moderation/DomainsDetail.vue:16 msgctxt "Content/Moderation/Link/Verb" @@ -2883,12 +3081,13 @@ msgstr "Официальный веб-Ñайт" #: front/src/components/manage/moderation/InstancePolicyForm.vue:40 msgctxt "Content/Moderation/Card.Title" msgid "Or customize your rule" -msgstr "Добавить фильтры чтобы каÑтомизировать Ñвоё радио" +msgstr "Или наÑтройте Ñвоё правило" #: front/src/components/favorites/List.vue:32 #: src/components/library/Radios.vue:41 #: front/src/components/manage/library/EditsCardList.vue:37 #: front/src/components/manage/users/UsersTable.vue:17 +#: front/src/views/admin/moderation/ReportsList.vue:42 #: front/src/views/playlists/List.vue:25 msgctxt "Content/Search/Dropdown.Label/Noun" msgid "Order" @@ -2896,47 +3095,57 @@ msgstr "ПорÑдок" #: front/src/components/favorites/List.vue:24 #: src/components/library/Albums.vue:15 -#: front/src/components/library/Artists.vue:15 +#: front/src/components/library/Artists.vue:19 #: src/components/library/Radios.vue:33 #: front/src/components/manage/library/AlbumsTable.vue:11 #: front/src/components/manage/library/ArtistsTable.vue:11 #: front/src/components/manage/library/EditsCardList.vue:29 #: front/src/components/manage/library/LibrariesTable.vue:20 +#: front/src/components/manage/library/TagsTable.vue:11 #: front/src/components/manage/library/TracksTable.vue:11 #: front/src/components/manage/library/UploadsTable.vue:30 #: front/src/components/manage/moderation/AccountsTable.vue:11 -#: front/src/components/manage/moderation/DomainsTable.vue:9 +#: front/src/components/manage/moderation/DomainsTable.vue:17 #: front/src/components/manage/users/InvitationsTable.vue:9 #: front/src/components/manage/users/UsersTable.vue:9 +#: front/src/views/admin/moderation/ReportsList.vue:34 #: front/src/views/content/libraries/FilesTable.vue:21 #: front/src/views/playlists/List.vue:17 msgctxt "Content/Search/Dropdown.Label/Noun" msgid "Ordering" msgstr "ПорÑдок" -#: front/src/components/library/Albums.vue:23 -#: src/components/library/Artists.vue:23 +#: front/src/components/library/Albums.vue:27 +#: src/components/library/Artists.vue:27 #: front/src/components/manage/library/AlbumsTable.vue:19 #: front/src/components/manage/library/ArtistsTable.vue:19 #: front/src/components/manage/library/LibrariesTable.vue:28 +#: front/src/components/manage/library/TagsTable.vue:19 #: front/src/components/manage/library/TracksTable.vue:19 #: front/src/components/manage/library/UploadsTable.vue:38 #: front/src/components/manage/moderation/AccountsTable.vue:19 -#: front/src/components/manage/moderation/DomainsTable.vue:17 +#: front/src/components/manage/moderation/DomainsTable.vue:25 #: front/src/views/content/libraries/FilesTable.vue:29 msgctxt "Content/Search/Dropdown.Label/Noun" msgid "Ordering direction" msgstr "ПорÑдок" +#: front/src/components/mixins/Translations.vue:48 +#: front/src/components/mixins/Translations.vue:49 +msgctxt "Content/Moderation/Dropdown" +msgid "Other" +msgstr "Другое" + +#: front/src/components/manage/moderation/ReportCard.vue:143 #: front/src/components/manage/users/InvitationsTable.vue:38 -msgctxt "Content/Admin/Table.Label" +msgctxt "*/*/*" msgid "Owner" msgstr "Владелец" #: front/src/components/PageNotFound.vue:33 msgctxt "Head/*/Title" msgid "Page Not Found" -msgstr "Страница не найдена!" +msgstr "Страница не найдена" #: front/src/components/PageNotFound.vue:7 msgctxt "Content/*/Title" @@ -2946,14 +3155,16 @@ msgstr "Страница не найдена!" #: front/src/components/Pagination.vue:39 msgctxt "Content/*/Hidden text/Noun" msgid "Pagination" -msgstr "" +msgstr "Страницы" -#: front/src/components/auth/Login.vue:33 src/components/auth/Signup.vue:40 -msgctxt "Content/*/Input.Label" +#: front/src/components/auth/LoginForm.vue:32 +#: src/components/auth/Settings.vue:291 +#: front/src/components/auth/SignupForm.vue:36 +msgctxt "*/*/*" msgid "Password" msgstr "Пароль" -#: front/src/components/auth/SubsonicTokenForm.vue:94 +#: front/src/components/auth/SubsonicTokenForm.vue:100 msgctxt "Content/Settings/Message" msgid "Password updated" msgstr "Пароль обновлён" @@ -2963,20 +3174,20 @@ msgctxt "Content/Signup/Card.Title" msgid "Password updated successfully" msgstr "Пароль уÑпешно обновлён" -#: front/src/components/audio/Player.vue:628 +#: front/src/components/audio/Player.vue:654 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Pause track" msgstr "ПриоÑтановить трек" -#: front/src/components/ShortcutsModal.vue:59 +#: front/src/components/ShortcutsModal.vue:96 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Pause/play the current track" -msgstr "Проиграть трек" +msgstr "Проиграть/приоÑтановить трек" #: front/src/components/manage/moderation/InstancePolicyCard.vue:12 msgctxt "Content/Moderation/Card.List item" msgid "Paused" -msgstr "" +msgstr "Пауза" #: front/src/components/library/FileUpload.vue:116 #: front/src/components/manage/library/UploadsTable.vue:23 @@ -2997,100 +3208,90 @@ msgctxt "Content/Library/Label" msgid "Pending files" msgstr "Ожидающие файлы" -#: front/src/components/Sidebar.vue:225 +#: front/src/components/Sidebar.vue:232 msgctxt "Sidebar/Notifications/Hidden text" msgid "Pending follow requests" -msgstr "Ожидающие файлы" +msgstr "ЗапроÑÑ‹ на подпиÑку" #: front/src/components/library/EditCard.vue:29 #: front/src/components/manage/library/EditsCardList.vue:18 msgctxt "Content/Admin/*/Noun" msgid "Pending review" -msgstr "Ожидающие файлы" +msgstr "Ожидание одобрениÑ" -#: front/src/components/Sidebar.vue:226 +#: front/src/components/Sidebar.vue:233 msgctxt "Sidebar/Moderation/Hidden text" msgid "Pending review edits" -msgstr "Ожидающие файлы" +msgstr "Правки, ожидающие одобрениÑ" +#: front/src/components/auth/Settings.vue:176 #: front/src/components/manage/users/UsersTable.vue:42 #: front/src/views/admin/moderation/AccountsDetail.vue:166 -msgctxt "Content/Admin/Table.Label/Noun" -msgid "Permissions" -msgstr "РазрешениÑ" - -#: front/src/components/auth/Settings.vue:176 msgctxt "Content/*/*/Noun" msgid "Permissions" msgstr "РазрешениÑ" #: front/src/components/audio/PlayButton.vue:9 -#: front/src/components/library/TrackBase.vue:26 +#: front/src/components/library/TrackBase.vue:24 msgctxt "*/Queue/Button.Label/Short, Verb" msgid "Play" -msgstr "Проиграть вÑÑ‘" +msgstr "Проиграть" #: front/src/components/audio/album/Card.vue:48 -#: front/src/components/audio/artist/Card.vue:44 -#: front/src/components/library/AlbumBase.vue:20 +#: front/src/components/library/AlbumBase.vue:21 #: front/src/components/library/AlbumDetail.vue:11 #: src/views/playlists/Detail.vue:24 msgctxt "Content/Queue/Button.Label/Short, Verb" msgid "Play all" msgstr "Проиграть вÑÑ‘" -#: front/src/components/library/ArtistBase.vue:31 +#: front/src/components/library/ArtistBase.vue:32 msgctxt "Content/Artist/Button.Label/Verb" msgid "Play all albums" msgstr "Проиграть вÑе альбомы" -#: front/src/components/audio/PlayButton.vue:76 +#: front/src/components/audio/PlayButton.vue:92 msgctxt "*/Queue/Dropdown/Button/Title" msgid "Play next" msgstr "Проиграть Ñледующий" -#: front/src/components/ShortcutsModal.vue:67 +#: front/src/components/ShortcutsModal.vue:120 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Play next track" -msgstr "Проиграть трек" +msgstr "Проиграть Ñледующий трек" -#: front/src/components/audio/PlayButton.vue:74 +#: front/src/components/audio/PlayButton.vue:90 msgctxt "*/Queue/Dropdown/Button/Title" msgid "Play now" -msgstr "Ð¡ÐµÐ¹Ñ‡Ð°Ñ Ð¿Ñ€Ð¾Ð¸Ð³Ñ€Ñ‹Ð²Ð°ÐµÑ‚ÑÑ" +msgstr "Играть ÑейчаÑ" -#: front/src/components/ShortcutsModal.vue:63 +#: front/src/components/ShortcutsModal.vue:116 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Play previous track" -msgstr "Предыдущий трек" +msgstr "Проиграть предыдущий трек" -#: front/src/components/audio/PlayButton.vue:77 +#: front/src/components/audio/PlayButton.vue:93 msgctxt "*/Queue/Dropdown/Button/Title" msgid "Play similar songs" -msgstr "" +msgstr "Играть похожие треки" -#: front/src/components/Sidebar.vue:224 +#: front/src/components/Sidebar.vue:231 msgctxt "Sidebar/Player/Hidden text" msgid "Play this track" -msgstr "Проиграть трек" +msgstr "Проиграть Ñтот трек" -#: front/src/components/audio/Player.vue:627 +#: front/src/components/audio/Player.vue:653 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Play track" msgstr "Проиграть трек" -#: front/src/components/audio/PlayButton.vue:82 -msgctxt "*/Queue/Button/Title" -msgid "Play..." -msgstr "" - -#: front/src/views/playlists/Detail.vue:91 -msgctxt "Head/Playlist/Title" +#: front/src/components/mixins/Report.vue:66 src/views/playlists/Detail.vue:121 +#: front/src/components/mixins/Report.vue:67 +msgctxt "*/*/*" msgid "Playlist" msgstr "СпиÑок воÑпроизведениÑ" #: front/src/views/playlists/Detail.vue:12 -#, fuzzy msgctxt "Content/Playlist/Header.Subtitle" msgid "Playlist containing %{ count } track, by %{ username }" msgid_plural "Playlist containing %{ count } tracks, by %{ username }" @@ -3123,60 +3324,62 @@ msgctxt "Content/Playlist/Dropdown.Label" msgid "Playlist visibility" msgstr "ВидимоÑÑ‚ÑŒ ÑпиÑка воÑпроизведениÑ" -#: front/src/components/mixins/Translations.vue:88 -#: front/src/components/mixins/Translations.vue:89 -msgctxt "Content/OAuth Scopes/Label" -msgid "Playlists" -msgstr "СпиÑки воÑпроизведениÑ" - #: front/src/components/Sidebar.vue:71 src/components/library/Home.vue:16 -#: front/src/components/library/Library.vue:16 src/views/admin/Settings.vue:83 -#: front/src/views/admin/library/AlbumDetail.vue:173 -#: front/src/views/admin/library/ArtistDetail.vue:162 -#: front/src/views/admin/library/TrackDetail.vue:225 +#: front/src/components/library/Library.vue:16 +#: front/src/components/mixins/Translations.vue:100 +#: src/views/admin/Settings.vue:83 +#: front/src/views/admin/library/AlbumDetail.vue:179 +#: front/src/views/admin/library/ArtistDetail.vue:167 +#: front/src/views/admin/library/TrackDetail.vue:231 #: src/views/playlists/List.vue:106 +#: front/src/components/mixins/Translations.vue:101 msgctxt "*/*/*" msgid "Playlists" msgstr "СпиÑки воÑпроизведениÑ" -#: front/src/components/Home.vue:56 -msgctxt "Content/Home/List item" -msgid "Playlists? We got them" -msgstr "СпиÑки воÑпроизведениÑ? У Ð½Ð°Ñ Ð¾Ð½Ð¸ еÑÑ‚ÑŒ" +#: front/src/components/audio/EmbedWizard.vue:9 +msgctxt "Content/Embed/Message" +msgid "Please contact your admins and ask them to update the corresponding setting." +msgstr "" +"ПожалуйÑта, ÑвÑжитеÑÑŒ Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñтратором и попроÑите изменить ÑоответÑтвующие " +"наÑтройки." #: front/src/components/auth/Settings.vue:79 msgctxt "Content/Settings/Error message.List item/Call to action" msgid "Please double-check your password is correct" -msgstr "ПожалуйÑта перепроверьте корректноÑÑ‚ÑŒ вашего паролÑ" +msgstr "ПожалуйÑта, перепроверьте правильный ввод паролÑ" -#: front/src/components/auth/Login.vue:9 +#: front/src/components/auth/LoginForm.vue:5 msgctxt "Content/Login/Error message.List item/Call to action" msgid "Please double-check your username/password couple is correct" -msgstr "ПожалуйÑта перепроверьте что ваше Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸ пароль верны" +msgstr "ПожалуйÑта перепроверьте, что Ваше Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸ пароль верны" #: front/src/components/auth/Settings.vue:46 msgctxt "Content/Settings/Paragraph" msgid "PNG, GIF or JPG. At most 2MB. Will be downscaled to 400x400px." msgstr "PNG, GIF или JPG. Ðе больше 2MB. Будет уменьшено до 400x400px." -#: front/src/views/admin/library/TrackDetail.vue:137 -msgctxt "*/*/*/Noun" +#: front/src/components/About.vue:72 +msgctxt "Content/About/Header/Name" +msgid "Pod configuration" +msgstr "ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ ÑƒÐ·Ð»Ð°" + +#: front/src/views/admin/library/TrackDetail.vue:143 src/edits.js:70 +msgctxt "*/*/*/Short, Noun" msgid "Position" -msgstr "ОпиÑание" +msgstr "ПозициÑ" #: front/src/components/manage/moderation/InstancePolicyForm.vue:118 msgctxt "Content/Moderation/Help text" -msgid "" -"Prevent account or domain from triggering notifications, except from " -"followers." -msgstr "" +msgid "Prevent account or domain from triggering notifications, except from followers." +msgstr "Запретить аккаунту или домену приÑылать уведомлениÑ, за иÑключением подпиÑчиков." -#: front/src/components/audio/EmbedWizard.vue:33 +#: front/src/components/audio/EmbedWizard.vue:43 msgctxt "Popup/Embed/Title/Noun" msgid "Preview" -msgstr "" +msgstr "ПредпроÑмотр" -#: front/src/components/audio/Player.vue:626 +#: front/src/components/audio/Player.vue:652 msgctxt "Sidebar/Player/Icon.Tooltip" msgid "Previous track" msgstr "Предыдущий трек" @@ -3185,9 +3388,9 @@ msgstr "Предыдущий трек" #: front/src/components/mixins/Translations.vue:16 msgctxt "Content/Settings/Dropdown/Short" msgid "Private" -msgstr "" +msgstr "Личное" -#: front/src/views/content/remote/Card.vue:43 +#: front/src/views/content/remote/Card.vue:56 msgctxt "Content/Library/Card.List item" msgid "Problem during scanning" msgstr "Ошибка во Ð²Ñ€ÐµÐ¼Ñ ÑканированиÑ" @@ -3201,21 +3404,26 @@ msgstr "Продолжить" #: front/src/views/auth/PasswordResetConfirm.vue:31 msgctxt "Content/Signup/Link/Verb" msgid "Proceed to login" -msgstr "Ðазад ко входу" +msgstr "Перейти ко входу" #: front/src/components/library/FileUpload.vue:17 msgctxt "Content/Library/Tab.Title/Short" msgid "Processing" msgstr "Обработка" -#: front/src/components/mixins/Translations.vue:68 -#: front/src/components/mixins/Translations.vue:69 +#: front/src/components/mixins/Translations.vue:80 +#: front/src/components/mixins/Translations.vue:81 msgctxt "Content/OAuth Scopes/Label" msgid "Profile" -msgstr "" +msgstr "Профиль" + +#: front/src/components/auth/SignupForm.vue:5 +msgctxt "Content/Signup/Form/Paragraph" +msgid "Public registrations are not possible on this instance. You will need an invitation code to sign up." +msgstr "РегиÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ Ð½Ð° Ñтом узле закрыта, Вам понадобитÑÑ ÐºÐ¾Ð´ Ð¿Ñ€Ð¸Ð³Ð»Ð°ÑˆÐµÐ½Ð¸Ñ Ñ‡Ñ‚Ð¾Ð±Ñ‹ зарегиÑтрироватьÑÑ." #: front/src/components/manage/moderation/AccountsTable.vue:188 -#: front/src/components/manage/moderation/DomainsTable.vue:168 +#: front/src/components/manage/moderation/DomainsTable.vue:186 #: front/src/views/content/libraries/Quota.vue:36 #: front/src/views/content/libraries/Quota.vue:39 #: front/src/views/content/libraries/Quota.vue:62 @@ -3246,7 +3454,7 @@ msgctxt "Sidebar/Queue/Tab.Title/Noun" msgid "Queue" msgstr "Очередь" -#: front/src/components/audio/Player.vue:322 +#: front/src/components/audio/Player.vue:329 msgctxt "Content/Queue/Message" msgid "Queue shuffled!" msgstr "Очередь перемешана!" @@ -3278,70 +3486,71 @@ msgstr "Радио обновлено" #: front/src/components/library/Library.vue:13 #: src/components/library/Radios.vue:142 +#: front/src/components/mixins/Translations.vue:104 +#: front/src/components/mixins/Translations.vue:105 msgctxt "*/*/*" msgid "Radios" msgstr "Радио" -#: front/src/components/mixins/Translations.vue:92 -#: front/src/components/mixins/Translations.vue:93 -msgctxt "Content/OAuth Scopes/Label" -msgid "Radios" -msgstr "Радио" - #: front/src/components/auth/ApplicationForm.vue:151 msgctxt "Content/OAuth Scopes/Label/Verb" msgid "Read" -msgstr "" +msgstr "Чтение" #: front/src/components/library/ImportStatusModal.vue:51 msgctxt "Popup/Import/Table.Label/Value" msgid "Read our documentation for this error" -msgstr "" +msgstr "ПоÑмотрите нашу документацию по Ñтой ошибке" #: front/src/components/auth/Authorize.vue:24 msgctxt "Content/Auth/Label/Noun" msgid "Read-only" -msgstr "" +msgstr "Только чтение" #: front/src/components/auth/ApplicationForm.vue:152 msgctxt "Content/OAuth Scopes/Help Text" msgid "Read-only access to user data" -msgstr "" +msgstr "ДоÑтуп к данным Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ" #: front/src/components/manage/moderation/InstancePolicyCard.vue:39 #: front/src/components/manage/moderation/InstancePolicyForm.vue:25 msgctxt "Content/Moderation/*/Noun" msgid "Reason" -msgstr "" +msgstr "Причина" -#: front/src/views/admin/moderation/AccountsDetail.vue:251 -#: front/src/views/admin/moderation/DomainsDetail.vue:179 +#: front/src/views/admin/moderation/AccountsDetail.vue:252 +#: front/src/views/admin/moderation/DomainsDetail.vue:216 msgctxt "Content/Moderation/Table.Label/Noun" msgid "Received library follows" -msgstr "" +msgstr "Полученные подпиÑки на библиотеку" -#: front/src/components/manage/moderation/DomainsTable.vue:40 -#: front/src/components/mixins/Translations.vue:62 -#: front/src/components/mixins/Translations.vue:63 +#: front/src/components/manage/moderation/DomainsTable.vue:48 +#: front/src/components/mixins/Translations.vue:74 +#: front/src/components/mixins/Translations.vue:75 msgctxt "Content/Moderation/*/Noun" msgid "Received messages" -msgstr "" +msgstr "Полученные ÑообщениÑ" #: front/src/components/library/EditForm.vue:27 msgctxt "Content/Library/Paragraph" msgid "Recent edits" -msgstr "Ðедавно добавленные" +msgstr "Ðедавние правки" #: front/src/components/library/EditForm.vue:17 msgctxt "Content/Library/Paragraph" msgid "Recent edits awaiting review" -msgstr "" +msgstr "Свежие правки в ожидании принÑтиÑ" #: front/src/components/library/Home.vue:24 msgctxt "Content/Home/Title" msgid "Recently added" msgstr "Ðедавно добавленные" +#: front/src/components/Home.vue:167 +msgctxt "Content/Home/Title" +msgid "Recently added albums" +msgstr "Ðедавно добавленные альбомы" + #: front/src/components/library/Home.vue:11 msgctxt "Content/Home/Title" msgid "Recently favorited" @@ -3355,7 +3564,7 @@ msgstr "Ðедавно проÑлушанные" #: front/src/components/auth/ApplicationForm.vue:13 msgctxt "Content/Applications/Input.Label/Noun" msgid "Redirect URI" -msgstr "" +msgstr "URI перенаправлениÑ" #: front/src/components/auth/Settings.vue:125 #: src/components/auth/Settings.vue:170 @@ -3368,65 +3577,59 @@ msgstr "Обновить" #: front/src/components/federation/FetchButton.vue:20 msgctxt "Popup/*/Message.Title" msgid "Refresh error" -msgstr "Обновить" +msgstr "Ошибка при обновлении" -#: front/src/views/admin/library/AlbumDetail.vue:50 -#: front/src/views/admin/library/ArtistDetail.vue:49 -#: front/src/views/admin/library/TrackDetail.vue:49 +#: front/src/views/admin/library/AlbumDetail.vue:56 +#: front/src/views/admin/library/ArtistDetail.vue:54 +#: front/src/views/admin/library/TrackDetail.vue:55 msgctxt "Content/Moderation/Button/Verb" msgid "Refresh from remote server" -msgstr "" +msgstr "Обновить Ñ ÑƒÐ´Ð°Ð»Ñ‘Ð½Ð½Ð¾Ð³Ð¾ Ñервера" -#: front/src/views/admin/moderation/DomainsDetail.vue:127 +#: front/src/views/admin/moderation/DomainsDetail.vue:164 msgctxt "Content/Moderation/Button.Label/Verb" msgid "Refresh node info" -msgstr "" +msgstr "Обновить информацию узла" #: front/src/components/federation/FetchButton.vue:79 msgctxt "Popup/*/Message.Title" msgid "Refresh pending" -msgstr "По убыванию" +msgstr "Ожидание обновлениÑ" #: front/src/components/federation/FetchButton.vue:80 msgctxt "Popup/*/Message.Content" -msgid "" -"Refresh request wasn't proceed in time by our server. It will be processed " -"later." -msgstr "" +msgid "Refresh request wasn't proceed in time by our server. It will be processed later." +msgstr "Ð—Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° обновление не был обработан Ð²Ð¾Ð²Ñ€ÐµÐ¼Ñ Ð½Ð°ÑˆÐ¸Ð¼ Ñервером. Он будет обработан позже." #: front/src/components/federation/FetchButton.vue:16 msgctxt "Popup/*/Message.Title" msgid "Refresh successful" -msgstr "" +msgstr "Обновление уÑпешно" #: front/src/components/common/ActionTable.vue:275 msgctxt "Content/*/Button.Tooltip/Verb" msgid "Refresh table content" -msgstr "" +msgstr "Обновить данные таблицы" #: front/src/components/federation/FetchButton.vue:12 msgctxt "Popup/*/Message.Title" msgid "Refresh was skipped" -msgstr "" +msgstr "Обновление было пропущено" #: front/src/components/federation/FetchButton.vue:7 msgctxt "Popup/*/Title" msgid "Refreshing object from remote…" -msgstr "" +msgstr "ОбновлÑем объект Ñ ÑƒÐ´Ð°Ð»Ñ‘Ð½Ð½Ð¾Ð³Ð¾ Ñервера…" -#: front/src/components/auth/Signup.vue:9 -msgctxt "Content/Signup/Form/Paragraph" -msgid "" -"Registration are closed on this instance, you will need an invitation code " -"to signup." -msgstr "" -"РегиÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ Ð½Ð° Ñтом узле закрыта, вам понадобитÑÑ ÐºÐ¾Ð´ Ð¿Ñ€Ð¸Ð³Ð»Ð°ÑˆÐµÐ½Ð¸Ñ Ñ‡Ñ‚Ð¾Ð±Ñ‹ " -"зарегиÑтрироватьÑÑ." +#: front/src/components/About.vue:86 +msgctxt "*/*/*" +msgid "Registrations" +msgstr "РегиÑтрации" -#: front/src/components/manage/users/UsersTable.vue:71 +#: front/src/components/manage/users/UsersTable.vue:72 msgctxt "Content/Admin/Table, User role" msgid "Regular user" -msgstr "обычный пользователь" +msgstr "Обычный пользователь" #: front/src/components/library/EditCard.vue:87 #: front/src/views/content/libraries/Detail.vue:51 @@ -3438,7 +3641,7 @@ msgstr "Отклонить" #: front/src/components/manage/moderation/InstancePolicyForm.vue:123 msgctxt "Content/Moderation/*/Verb" msgid "Reject media" -msgstr "Отклонено" +msgstr "Отклонить" #: front/src/components/library/EditCard.vue:33 #: front/src/components/manage/library/EditsCardList.vue:24 @@ -3448,16 +3651,21 @@ msgid "Rejected" msgstr "Отклонено" #: front/src/components/manage/library/AlbumsTable.vue:43 -#: front/src/components/mixins/Translations.vue:44 src/edits.js:28 -#: front/src/components/mixins/Translations.vue:45 +#: front/src/components/mixins/Translations.vue:54 src/edits.js:43 +#: front/src/components/mixins/Translations.vue:55 msgctxt "Content/*/*/Noun" msgid "Release date" -msgstr "ПоÑледнее обновление:" +msgstr "Дата выпуÑка" #: front/src/components/library/FileUpload.vue:63 msgctxt "Content/Library/Paragraph" msgid "Remaining storage space" -msgstr "" +msgstr "Свободное меÑто" + +#: front/src/views/Notifications.vue:18 src/views/Notifications.vue:52 +msgctxt "Content/Notifications/Label" +msgid "Remind me in:" +msgstr "Ðапомнить мне через:" #: front/src/views/content/remote/Home.vue:6 msgctxt "Content/Library/Title/Noun" @@ -3466,12 +3674,8 @@ msgstr "Удалённые библиотеки" #: front/src/views/content/remote/Home.vue:7 msgctxt "Content/Library/Paragraph" -msgid "" -"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." -msgstr "" -"Удалёнными библиотеками владеют другие пользователи в Ñети. Ð’Ñ‹ можете " -"получить к ним доÑтуп еÑли они публичны или вам предоÑтавлен доÑтуп." +msgid "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." +msgstr "Удалёнными библиотеками владеют другие пользователи в Ñети. Ð’Ñ‹ можете получить к ним доÑтуп еÑли они публичны или Вам предоÑтавлен доÑтуп." #: front/src/components/library/radios/Filter.vue:59 msgctxt "Content/Radio/Button.Label/Verb" @@ -3486,7 +3690,13 @@ msgstr "Удалить аватар" #: front/src/components/library/ArtistDetail.vue:12 msgctxt "Content/Moderation/Button.Label" msgid "Remove filter" -msgstr "Удалить аватар" +msgstr "Удалить фильтр" + +#: front/src/components/manage/moderation/DomainsTable.vue:198 +#: front/src/views/admin/moderation/DomainsDetail.vue:39 +msgctxt "Content/Moderation/Action/Verb" +msgid "Remove from allow-list" +msgstr "Удалить из \"белого\" ÑпиÑка" #: front/src/components/favorites/TrackFavoriteIcon.vue:26 msgctxt "Content/Track/Icon.Tooltip/Verb" @@ -3495,43 +3705,98 @@ msgstr "Удалить из избранного" #: front/src/views/content/libraries/Quota.vue:38 msgctxt "Popup/Library/Paragraph" -msgid "" -"Removes uploaded but yet to be processed tracks completely, adding the " -"corresponding data to your quota." -msgstr "" -"Ðто удалит треки которые были загружены но ещё не обработаны. Файлы будут " -"полноÑтью удалены и вы получите ÑоответÑтвующую квоту." +msgid "Removes uploaded but yet to be processed tracks completely, adding the corresponding data to your quota." +msgstr "Ðто удалит треки которые были загружены но ещё не обработаны. Файлы будут полноÑтью удалены, увеличив доÑтупную квоту." #: front/src/views/content/libraries/Quota.vue:64 msgctxt "Popup/Library/Paragraph" -msgid "" -"Removes uploaded tracks skipped during the import processes completely, " -"adding the corresponding data to your quota." -msgstr "" -"Ðто удалит треки которые были загружены но ещё не обработаны. Файлы будут " -"полноÑтью удалены и вы получите ÑоответÑтвующую квоту." +msgid "Removes uploaded tracks skipped during the import processes completely, adding the corresponding data to your quota." +msgstr "Ðто удалит треки которые были загружены, но пропущены при импорте. Файлы будут полноÑтью удалены и Ñвободное меÑто увеличитÑÑ." #: front/src/views/content/libraries/Quota.vue:90 msgctxt "Popup/Library/Paragraph" -msgid "" -"Removes uploaded tracks that could not be processed by the server " -"completely, adding the corresponding data to your quota." -msgstr "" -"Ðто удалит треки которые были загружены но ещё не обработаны. Файлы будут " -"полноÑтью удалены и вы получите ÑоответÑтвующую квоту." +msgid "Removes uploaded tracks that could not be processed by the server completely, adding the corresponding data to your quota." +msgstr "Ðто удалит треки которые были загружены но ещё не обработаны. Файлы будут полноÑтью удалены и Ñвободное меÑто увеличитÑÑ." + +#: front/src/components/audio/PlayButton.vue:94 +msgctxt "*/Queue/Dropdown/Button/Title" +msgid "Replace current queue" +msgstr "Заменить текущую очередь" + +#: front/src/components/mixins/Report.vue:6 src/components/mixins/Report.vue:7 +msgctxt "*/Moderation/*/Verb" +msgid "Report @%{ username }…" +msgstr "ПожаловатьÑÑ Ð½Ð° @%{ username }…" + +#: front/src/components/manage/moderation/ReportCard.vue:5 +msgctxt "Content/Moderation/Card/Short" +msgid "Report %{ id }" +msgstr "Жалоба %{ id }" + +#: front/src/components/moderation/ReportModal.vue:139 +msgctxt "*/Moderation/Message" +msgid "Report successfully submitted, thank you" +msgstr "Ваша жалоба была уÑпешно отправлена, ÑпаÑибо" + +#: front/src/components/mixins/Report.vue:36 +#: src/components/mixins/Report.vue:37 +msgctxt "*/Moderation/*/Verb" +msgid "Report this album…" +msgstr "ПожаловатьÑÑ Ð½Ð° Ñтот альбом…" + +#: front/src/components/mixins/Report.vue:50 +#: src/components/mixins/Report.vue:51 +msgctxt "*/Moderation/*/Verb" +msgid "Report this artist…" +msgstr "ПожаловатьÑÑ Ð½Ð° Ñтого иÑполнителÑ…" + +#: front/src/components/mixins/Report.vue:72 +#: src/components/mixins/Report.vue:73 +msgctxt "*/Moderation/*/Verb" +msgid "Report this library…" +msgstr "ПожаловатьÑÑ Ð½Ð° Ñту библиотеку…" + +#: front/src/components/mixins/Report.vue:61 +#: src/components/mixins/Report.vue:62 +msgctxt "*/Moderation/*/Verb" +msgid "Report this playlist…" +msgstr "ПожаловатьÑÑ Ð½Ð° Ñтот ÑпиÑок воÑпроизведениÑ…" + +#: front/src/components/mixins/Report.vue:23 +#: src/components/mixins/Report.vue:24 +msgctxt "*/Moderation/*/Verb" +msgid "Report this track…" +msgstr "ПожаловатьÑÑ Ð½Ð° Ñтот трек…" + +#: front/src/components/audio/PlayButton.vue:95 +msgctxt "*/Moderation/*/Button/Label,Verb" +msgid "Report…" +msgstr "ПожаловатьÑÑ…" + +#: front/src/components/manage/moderation/ReportCard.vue:117 +msgctxt "Content/*/*/Short" +msgid "Reported object" +msgstr "Предмет жалобы" + +#: front/src/views/admin/moderation/Base.vue:5 +#: front/src/views/admin/moderation/ReportsList.vue:3 +#: front/src/views/admin/moderation/ReportsList.vue:208 +msgctxt "*/Moderation/*/Noun" +msgid "Reports" +msgstr "Жалобы" -#: front/src/components/auth/SubsonicTokenForm.vue:33 -#: front/src/components/auth/SubsonicTokenForm.vue:36 +#: front/src/components/auth/SubsonicTokenForm.vue:38 +#: front/src/components/auth/SubsonicTokenForm.vue:41 msgctxt "*/Settings/Button.Label/Verb" msgid "Request a new password" msgstr "ЗапроÑить новый пароль" -#: front/src/components/auth/SubsonicTokenForm.vue:34 +#: front/src/components/auth/SubsonicTokenForm.vue:39 msgctxt "Popup/Settings/Title" msgid "Request a new Subsonic API password?" msgstr "ЗапроÑить новый пароль Subsonic API?" -#: front/src/components/auth/SubsonicTokenForm.vue:42 +#: front/src/components/auth/SubsonicTokenForm.vue:47 msgctxt "Content/Settings/Button.Label/Verb" msgid "Request a password" msgstr "ЗапроÑить пароль" @@ -3539,36 +3804,52 @@ msgstr "ЗапроÑить пароль" #: front/src/components/federation/FetchButton.vue:64 msgctxt "Popup/*/Loading.Title" msgid "Requesting a fetch…" -msgstr "" +msgstr "Запрашиваем данные…" -#: front/src/components/library/EditForm.vue:82 +#: front/src/components/library/EditForm.vue:94 msgctxt "Content/Library/Button.Label" -msgid "Reset to initial value: %{ value }" -msgstr "" +msgid "Reset to initial value" +msgstr "Ð¡Ð±Ñ€Ð¾Ñ Ð½Ð° начальное значение" -#: front/src/components/auth/Login.vue:35 src/views/auth/PasswordReset.vue:4 -#: front/src/views/auth/PasswordReset.vue:53 +#: front/src/components/auth/LoginForm.vue:34 +#: src/views/auth/PasswordReset.vue:4 front/src/views/auth/PasswordReset.vue:53 msgctxt "*/Login/*/Verb" msgid "Reset your password" msgstr "СброÑить ваш пароль" +#: front/src/components/manage/moderation/ReportCard.vue:83 +msgctxt "Content/*/*/Noun" +msgid "Resolution date" +msgstr "Дата разрешениÑ" + +#: front/src/components/manage/moderation/ReportCard.vue:218 +msgctxt "Content/*/Button.Label/Verb" +msgid "Resolve" +msgstr "Разрешить" + +#: front/src/components/manage/moderation/ReportCard.vue:62 +#: front/src/views/admin/moderation/ReportsList.vue:20 +msgctxt "Content/*/*/Short" +msgid "Resolved" +msgstr "Решено" + #: front/src/views/content/libraries/FilesTable.vue:223 msgctxt "Content/Library/Dropdown/Verb" msgid "Restart import" msgstr "ПерезапуÑтить импорт" +#: front/src/components/library/EditForm.vue:31 +msgctxt "Content/Library/Button.Label" +msgid "Restrict to unreviewed edits" +msgstr "Ограничить неодобренные правки" + #: front/src/components/favorites/List.vue:39 -#: src/components/library/Albums.vue:30 -#: front/src/components/library/Artists.vue:30 +#: src/components/library/Albums.vue:34 +#: front/src/components/library/Artists.vue:34 #: src/components/library/Radios.vue:52 front/src/views/playlists/List.vue:32 msgctxt "Content/Search/Dropdown.Label/Noun" msgid "Results per page" -msgstr "Результатов на Ñтраницу" - -#: front/src/components/library/EditForm.vue:31 -msgctxt "Content/Library/Button.Label" -msgid "Retrict to unreviewed edits" -msgstr "" +msgstr "Результатов на Ñтранице" #: front/src/views/auth/EmailConfirm.vue:17 msgctxt "Content/Signup/Link/Verb" @@ -3578,78 +3859,79 @@ msgstr "Ðазад ко входу" #: front/src/components/library/ArtistDetail.vue:9 msgctxt "Content/Moderation/Link" msgid "Review my filters" -msgstr "ПроÑмотреть файлы" +msgstr "ПроÑмотреть мои фильтры" #: front/src/components/auth/Settings.vue:192 msgctxt "*/*/*/Verb" msgid "Revoke" -msgstr "" +msgstr "Отозвать" #: front/src/components/auth/Settings.vue:195 msgctxt "*/Settings/Button.Label/Verb" msgid "Revoke access" -msgstr "" +msgstr "Отозвать доÑтуп" #: front/src/components/auth/Settings.vue:193 msgctxt "Popup/Settings/Title" msgid "Revoke access for application \"%{ application }\"?" -msgstr "" +msgstr "Отозвать доÑтуп Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ \"%{ application }\"?" #: front/src/components/manage/moderation/InstancePolicyCard.vue:16 msgctxt "Content/Moderation/Card.Title/Noun" msgid "Rule" -msgstr "" +msgstr "Правило" -#: front/src/components/admin/SettingsGroup.vue:67 +#: front/src/components/About.vue:28 src/components/About.vue:56 +msgctxt "Content/About/Header" +msgid "Rules" +msgstr "Правила" + +#: front/src/components/admin/SettingsGroup.vue:75 #: front/src/components/library/radios/Builder.vue:34 msgctxt "Content/*/Button.Label/Verb" msgid "Save" msgstr "Сохранить" -#: front/src/views/content/remote/Card.vue:175 +#: front/src/views/content/remote/Card.vue:203 msgctxt "Content/Library/Message" msgid "Scan launched" msgstr "Сканирование запущено" -#: front/src/views/content/remote/Card.vue:67 +#: front/src/views/content/remote/Card.vue:80 msgctxt "Content/Library/Card.Button.Label/Verb" msgid "Scan now" -msgstr "Ð¡ÐµÐ¹Ñ‡Ð°Ñ Ð¿Ñ€Ð¾Ð¸Ð³Ñ€Ñ‹Ð²Ð°ÐµÑ‚ÑÑ" +msgstr "Сканировать ÑейчаÑ" -#: front/src/views/content/remote/Card.vue:35 +#: front/src/views/content/remote/Card.vue:48 msgctxt "Content/Library/Card.List item" msgid "Scan pending" -msgstr "По возраÑтанию" +msgstr "Ожидание ÑканированиÑ" -#: front/src/views/content/remote/Card.vue:176 +#: front/src/views/content/remote/Card.vue:204 msgctxt "Content/Library/Message" msgid "Scan skipped (previous scan is too recent)" msgstr "Сканирование пропущено (предыдущее Ñканирование было ÑовÑем недавно)" -#: front/src/views/content/remote/Card.vue:47 +#: front/src/views/content/remote/Card.vue:60 msgctxt "Content/Library/Card.List item" msgid "Scanned" -msgstr "Сканирование запущено" +msgstr "ПроÑканировано" -#: front/src/views/content/remote/Card.vue:51 +#: front/src/views/content/remote/Card.vue:64 msgctxt "Content/Library/Card.List item" msgid "Scanned with errors" msgstr "ПроÑканировано Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°Ð¼Ð¸" -#: front/src/views/content/remote/Card.vue:39 +#: front/src/views/content/remote/Card.vue:52 msgctxt "Content/Library/Card.List item" msgid "Scanning… (%{ progress }%)" -msgstr "Сканирование... (%{ progress }%)" +msgstr "Сканирование… (%{ progress }%)" #: front/src/components/auth/ApplicationForm.vue:22 -msgctxt "Content/Applications/Input.Label/Noun" -msgid "Scopes" -msgstr "" - #: front/src/components/auth/Settings.vue:226 msgctxt "Content/*/*/Noun" msgid "Scopes" -msgstr "" +msgstr "ОблаÑти" #: front/src/components/library/Albums.vue:10 #: src/components/library/Artists.vue:10 @@ -3658,12 +3940,14 @@ msgstr "" #: front/src/components/manage/library/ArtistsTable.vue:5 #: front/src/components/manage/library/EditsCardList.vue:6 #: front/src/components/manage/library/LibrariesTable.vue:5 +#: front/src/components/manage/library/TagsTable.vue:5 #: front/src/components/manage/library/TracksTable.vue:5 #: front/src/components/manage/library/UploadsTable.vue:5 #: front/src/components/manage/moderation/AccountsTable.vue:5 #: front/src/components/manage/moderation/DomainsTable.vue:5 #: front/src/components/manage/users/InvitationsTable.vue:5 #: front/src/components/manage/users/UsersTable.vue:5 +#: front/src/views/admin/moderation/ReportsList.vue:8 #: front/src/views/content/libraries/FilesTable.vue:5 #: src/views/playlists/List.vue:13 msgctxt "Content/Search/Input.Label/Noun" @@ -3676,97 +3960,134 @@ msgid "Search a remote library" msgstr "ИÑкать в удалённой библиотеке" #: front/src/components/manage/library/EditsCardList.vue:211 +#: front/src/views/admin/moderation/ReportsList.vue:207 msgctxt "Content/Search/Input.Placeholder" msgid "Search by account, summary, domain…" -msgstr "ИÑкать по названию, иÑполнителю, домену..." +msgstr "ИÑкать по учетной запиÑи, примечанию, домену…" #: front/src/components/manage/library/LibrariesTable.vue:191 msgctxt "Content/Search/Input.Placeholder" msgid "Search by domain, actor, name, description…" -msgstr "ИÑкать по пользователю, адреÑу Ñлектронной почты, коду..." +msgstr "ИÑкать по домену, иÑполнителю, имени, опиÑанию…" #: front/src/components/manage/library/UploadsTable.vue:241 msgctxt "Content/Search/Input.Placeholder" msgid "Search by domain, actor, name, reference, source…" -msgstr "ИÑкать по пользователю, адреÑу Ñлектронной почты, коду..." +msgstr "ИÑкать по домену, иÑполнителю, имени, Ñправке, иÑточнику…" #: front/src/components/manage/library/ArtistsTable.vue:164 msgctxt "Content/Search/Input.Placeholder" msgid "Search by domain, name, MusicBrainz ID…" -msgstr "ИÑкать по пользователю, адреÑу Ñлектронной почты, коду..." +msgstr "ИÑкать по домену, имени, MusicBrainz ID…" #: front/src/components/manage/library/TracksTable.vue:174 msgctxt "Content/Search/Input.Placeholder" msgid "Search by domain, title, artist, album, MusicBrainz ID…" -msgstr "ИÑкать по названию, иÑполнителю, альбому..." +msgstr "ИÑкать по домену, названию, иÑполнителю, альбому, MusicBrainz ID…" #: front/src/components/manage/library/AlbumsTable.vue:174 msgctxt "Content/Search/Input.Placeholder" msgid "Search by domain, title, artist, MusicBrainz ID…" -msgstr "ИÑкать по названию, иÑполнителю, альбому..." +msgstr "ИÑкать по домену, названию, иÑполнителю, MusicBrainz ID…" #: front/src/components/manage/moderation/AccountsTable.vue:171 msgctxt "Content/Search/Input.Placeholder" msgid "Search by domain, username, bio…" -msgstr "ИÑкать по пользователю, адреÑу Ñлектронной почты, коду..." +msgstr "ИÑкать по домену, имени пользователÑ, информации пользователÑ…" -#: front/src/components/manage/moderation/DomainsTable.vue:151 +#: front/src/components/manage/library/TagsTable.vue:165 +msgctxt "Content/Search/Input.Placeholder" +msgid "Search by name" +msgstr "ИÑкать по имени" + +#: front/src/components/manage/moderation/DomainsTable.vue:168 msgctxt "Content/Search/Input.Placeholder" msgid "Search by name…" -msgstr "ИÑкать по имени пользователÑ, адреÑу Ñлектронной почты, имени..." +msgstr "ИÑкать по имени…" #: front/src/views/content/libraries/FilesTable.vue:208 msgctxt "Content/Library/Input.Placeholder" msgid "Search by title, artist, album…" -msgstr "ИÑкать по названию, иÑполнителю, альбому..." +msgstr "ИÑкать по названию, иÑполнителю, альбому…" #: front/src/components/manage/users/InvitationsTable.vue:153 msgctxt "Content/Admin/Input.Placeholder/Verb" msgid "Search by username, e-mail address, code…" -msgstr "ИÑкать по пользователю, адреÑу Ñлектронной почты, коду..." +msgstr "ИÑкать по пользователю, адреÑу Ñлектронной почты, коду…" -#: front/src/components/manage/users/UsersTable.vue:163 +#: front/src/components/manage/users/UsersTable.vue:164 msgctxt "Content/Search/Input.Placeholder" msgid "Search by username, e-mail address, name…" -msgstr "ИÑкать по имени пользователÑ, адреÑу Ñлектронной почты, имени..." +msgstr "ИÑкать по имени пользователÑ, адреÑу Ñлектронной почты, имени…" -#: front/src/components/audio/SearchBar.vue:20 +#: front/src/components/audio/SearchBar.vue:27 msgctxt "Sidebar/Search/Input.Placeholder" msgid "Search for artists, albums, tracks…" -msgstr "ИÑкать иÑполнителей, альбомы, треки..." +msgstr "ИÑкать иÑполнителей, альбомы, треки…" #: front/src/components/audio/Search.vue:2 msgctxt "Content/Search/Title" msgid "Search for some music" msgstr "ПоиÑкать музыку" -#: front/src/components/library/AlbumBase.vue:57 -#: front/src/components/library/ArtistBase.vue:68 -#: front/src/components/library/TrackBase.vue:76 +#: front/src/components/library/TagsSelector.vue:6 +msgctxt "*/Dropdown/Placeholder/Verb" +msgid "Search for tags…" +msgstr "ИÑкать по тегам…" + +#: front/src/components/library/AlbumBase.vue:66 +#: front/src/components/library/ArtistBase.vue:77 +#: front/src/components/library/TrackBase.vue:82 +msgctxt "Content/*/Button.Label/Verb" +msgid "Search on Discogs" +msgstr "ИÑкать на Discogs" + +#: front/src/components/library/AlbumBase.vue:58 +#: front/src/components/library/ArtistBase.vue:69 +#: front/src/components/library/TrackBase.vue:74 msgctxt "Content/*/Button.Label/Verb" msgid "Search on Wikipedia" msgstr "ИÑкать на Википедии" #: front/src/components/library/Library.vue:35 -#: src/views/admin/library/Base.vue:32 -#: front/src/views/admin/moderation/Base.vue:22 +#: src/views/admin/library/Base.vue:35 +#: front/src/views/admin/moderation/Base.vue:44 #: src/views/admin/users/Base.vue:21 front/src/views/content/Base.vue:19 msgctxt "Menu/*/Hidden text" msgid "Secondary menu" -msgstr "" +msgstr "Дополнительное меню" #: front/src/views/admin/Settings.vue:15 msgctxt "Content/Admin/Menu.Title" msgid "Sections" msgstr "Разделы" +#: front/src/components/ShortcutsModal.vue:108 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek backwards 30s" +msgstr "Перемотать назад на 30Ñек" + +#: front/src/components/ShortcutsModal.vue:100 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek backwards 5s" +msgstr "Перемотать назад на 5Ñек" + +#: front/src/components/ShortcutsModal.vue:112 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek forwards 30s" +msgstr "Перемотать вперёд на 30Ñек" + +#: front/src/components/ShortcutsModal.vue:104 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek forwards 5s" +msgstr "Перемотать вперёд на 5Ñек" + #: front/src/components/library/radios/Builder.vue:46 msgctxt "Content/Radio/Dropdown.Placeholder/Verb" msgid "Select a filter" msgstr "Выберите фильтр" #: front/src/components/common/ActionTable.vue:79 -#, fuzzy msgctxt "Content/*/Link/Verb" msgid "Select all %{ total } elements" msgid_plural "Select all %{ total } elements" @@ -3779,9 +4100,14 @@ msgctxt "Content/*/Link/Verb" msgid "Select only current page" msgstr "Выбрать только текущую Ñтраницу" -#: front/src/components/Sidebar.vue:43 src/components/Sidebar.vue:108 -#: front/src/components/manage/users/UsersTable.vue:181 -#: front/src/views/admin/moderation/AccountsDetail.vue:506 +#: front/src/components/Home.vue:43 +msgctxt "Content/Home/Link" +msgid "Server rules" +msgstr "Правила Ñервера" + +#: front/src/components/Sidebar.vue:43 src/components/Sidebar.vue:112 +#: front/src/components/manage/users/UsersTable.vue:182 +#: front/src/views/admin/moderation/AccountsDetail.vue:526 msgctxt "*/*/*/Noun" msgid "Settings" msgstr "ÐаÑтройки" @@ -3803,20 +4129,28 @@ msgstr "ПоделитьÑÑ ÑÑылкой" #: front/src/views/content/libraries/Detail.vue:15 msgctxt "Content/Library/Paragraph" -msgid "" -"Share this link with other users so they can request access to your library." -msgstr "" -"ПоделитеÑÑŒ Ñтой ÑÑылкой Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸ пользователÑми чтобы они могли запроÑить " -"доÑтуп к вашей библиотеке." +msgid "Share this link with other users so they can request access to your library." +msgstr "ПоделитеÑÑŒ Ñтой ÑÑылкой Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸ пользователÑми чтобы они могли запроÑить доÑтуп к вашей библиотеке." #: front/src/views/content/libraries/Detail.vue:14 -#: front/src/views/content/remote/Card.vue:77 +#: front/src/views/content/remote/Card.vue:90 msgctxt "Content/Library/Title" msgid "Sharing link" msgstr "ПоделитьÑÑ ÑÑылкой" +#: front/src/components/audio/EmbedWizard.vue:5 +msgctxt "Content/Embed/Message" +msgid "Sharing will not work because this pod doesn't allow anonymous users to access content." +msgstr "" +"Общий доÑтуп не будет работать, так как данный узел не разрешает анонимным " +"пользователÑм доÑтуп к Ñодержимому." + +#: front/src/components/About.vue:156 +msgctxt "*/*/*/Verb" +msgid "Show" +msgstr "Показать" + #: front/src/components/audio/album/Card.vue:38 -#, fuzzy msgctxt "Content/Album/Card.Link/Verb" msgid "Show %{ count } more track" msgid_plural "Show %{ count } more tracks" @@ -3824,31 +4158,40 @@ msgstr[0] "Показать больше на %{ count } трек" msgstr[1] "Показать больше на %{ count } трека" msgstr[2] "Показать больше на %{ count } треков" -#: front/src/components/audio/artist/Card.vue:30 -#, fuzzy -msgctxt "Content/Artist/Card.Link" -msgid "Show 1 more album" -msgid_plural "Show %{ count } more albums" -msgstr[0] "Показать больше на %{ count } альбом" -msgstr[1] "Показать больше на %{ count } альбома" -msgstr[2] "Показать больше на %{ count } альбомов" +#: front/src/components/tags/List.vue:11 +msgctxt "Content/*/Button/Label/Verb" +msgid "Show 1 more tag" +msgid_plural "Show %{ count } more tags" +msgstr[0] "Показать ещё один тег" +msgstr[1] "Показать ещё %{ count } тега" +msgstr[2] "Показать ещё %{ count } тегов" #: front/src/components/library/EditForm.vue:21 msgctxt "Content/Library/Button.Label" msgid "Show all edits" -msgstr "" +msgstr "Показать вÑе правки" -#: front/src/components/ShortcutsModal.vue:42 +#: front/src/components/ShortcutsModal.vue:60 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Show available keyboard shortcuts" -msgstr "" +msgstr "Показать доÑтупные горÑчие клавиши" + +#: front/src/components/common/ExpandableDiv.vue:7 +msgctxt "*/*/Button,Label" +msgid "Show less" +msgstr "Показать меньше" + +#: front/src/components/common/ExpandableDiv.vue:8 +msgctxt "*/*/Button,Label" +msgid "Show more" +msgstr "Показать больше" -#: front/src/views/Notifications.vue:7 +#: front/src/views/Notifications.vue:72 msgctxt "Content/Notifications/Form.Label/Verb" msgid "Show read notifications" msgstr "Показывать прочитанные уведомлениÑ" -#: front/src/components/forms/PasswordInput.vue:26 +#: front/src/components/forms/PasswordInput.vue:42 msgctxt "Content/Settings/Button.Tooltip/Verb" msgid "Show/hide password" msgstr "Показать/Ñкрыть пароль" @@ -3857,56 +4200,63 @@ msgstr "Показать/Ñкрыть пароль" #: front/src/components/manage/library/ArtistsTable.vue:84 #: front/src/components/manage/library/EditsCardList.vue:72 #: front/src/components/manage/library/LibrariesTable.vue:110 +#: front/src/components/manage/library/TagsTable.vue:79 #: front/src/components/manage/library/TracksTable.vue:95 #: front/src/components/manage/library/UploadsTable.vue:144 #: front/src/components/manage/moderation/AccountsTable.vue:88 -#: front/src/components/manage/moderation/DomainsTable.vue:74 +#: front/src/components/manage/moderation/DomainsTable.vue:85 #: front/src/components/manage/users/InvitationsTable.vue:76 -#: front/src/components/manage/users/UsersTable.vue:87 +#: front/src/components/manage/users/UsersTable.vue:88 #: front/src/views/content/libraries/FilesTable.vue:117 msgctxt "Content/*/Paragraph" msgid "Showing results %{ start }-%{ end } on %{ total }" msgstr "Показаны результаты %{ start }-%{ end } из %{ total }" -#: front/src/components/ShortcutsModal.vue:83 +#: front/src/components/ShortcutsModal.vue:140 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Shuffle queue" -msgstr "Перемешать вашу очередь" +msgstr "Перемешать очередь" -#: front/src/components/audio/Player.vue:641 +#: front/src/components/audio/Player.vue:667 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Shuffle your queue" -msgstr "Перемешать вашу очередь" +msgstr "Перемешать очередь" -#: front/src/components/auth/Signup.vue:97 +#: front/src/components/Home.vue:103 +msgctxt "*/Signup/Title" +msgid "Sign up" +msgstr "РегиÑтрациÑ" + +#: front/src/views/auth/Signup.vue:37 msgctxt "*/Signup/Title" msgid "Sign Up" msgstr "РегиÑтрациÑ" +#: front/src/components/Home.vue:107 +msgctxt "Content/Home/Paragraph" +msgid "Sign up now to keep a track of your favorites, create playlists, discover new content and much more!" +msgstr "ЗарегиÑтрируйтеÑÑŒ ÑейчаÑ, чтобы добавлÑÑ‚ÑŒ треки в избранное, Ñоздавать ÑпиÑки, находить новую музыку и многое другое!" + #: front/src/components/manage/users/UsersTable.vue:40 msgctxt "Content/Admin/Table.Label/Short, Noun (Value is a date)" msgid "Sign-up" msgstr "РегиÑтрациÑ" -#: front/src/components/mixins/Translations.vue:57 -#: front/src/views/admin/moderation/AccountsDetail.vue:197 -#: front/src/components/mixins/Translations.vue:58 +#: front/src/components/mixins/Translations.vue:69 +#: front/src/views/admin/moderation/AccountsDetail.vue:198 +#: front/src/components/mixins/Translations.vue:70 msgctxt "Content/Admin/Table.Label/Noun" msgid "Sign-up date" msgstr "Дата региÑтрации" -#: front/src/components/manage/library/UploadsTable.vue:65 -#: front/src/views/admin/library/UploadDetail.vue:219 -msgctxt "Content/*/*/Noun" -msgid "Size" -msgstr "Размер" - #: front/src/components/library/FileUpload.vue:94 #: front/src/components/library/TrackDetail.vue:39 -#: front/src/components/mixins/Translations.vue:54 +#: front/src/components/manage/library/UploadsTable.vue:65 +#: front/src/components/mixins/Translations.vue:66 +#: front/src/views/admin/library/UploadDetail.vue:219 #: front/src/views/content/libraries/FilesTable.vue:61 -#: front/src/components/mixins/Translations.vue:55 -msgctxt "Content/Library/*/in MB" +#: front/src/components/mixins/Translations.vue:67 +msgctxt "Content/*/*/Noun" msgid "Size" msgstr "Размер" @@ -3923,102 +4273,78 @@ msgctxt "Content/Library/Label" msgid "Skipped files" msgstr "Пропущенные файлы" -#: front/src/views/admin/moderation/DomainsDetail.vue:89 +#: front/src/views/admin/moderation/DomainsDetail.vue:126 msgctxt "Content/Moderation/Table.Label" msgid "Software" -msgstr "" +msgstr "Программное обеÑпечение" #: front/src/components/playlists/Editor.vue:21 msgctxt "Content/Playlist/Paragraph" msgid "Some tracks in your queue are already in this playlist:" -msgstr "" +msgstr "Ðекоторые треки из очереди уже находÑÑ‚ÑÑ Ð² Ñтом ÑпиÑке воÑпроизведениÑ:" #: front/src/components/PageNotFound.vue:10 msgctxt "Content/*/Paragraph" msgid "Sorry, the page you asked for does not exist:" -msgstr "Извините, Ñтраницы которую вы запрашивали не ÑущеÑтвует:" +msgstr "Извините, Ñтраницы, которую вы запрашивали, не ÑущеÑтвует:" -#: front/src/components/Footer.vue:49 +#: front/src/components/Footer.vue:57 msgctxt "Footer/*/List item.Link" msgid "Source code" msgstr "ИÑходный код" #: front/src/components/auth/Profile.vue:23 -#: front/src/components/manage/users/UsersTable.vue:70 +#: front/src/components/manage/users/UsersTable.vue:71 msgctxt "Content/Profile/User role" msgid "Staff member" -msgstr "" +msgstr "Член команды" -#: front/src/components/audio/PlayButton.vue:23 +#: front/src/components/audio/PlayButton.vue:27 #: src/components/radios/Button.vue:4 msgctxt "*/Queue/Button.Label/Short, Verb" msgid "Start radio" -msgstr "ОÑтановить радио" +msgstr "Включить радио" -#: front/src/views/admin/Settings.vue:86 -msgctxt "Content/Admin/Menu" +#: front/src/components/About.vue:170 src/components/Home.vue:53 +#: front/src/views/admin/Settings.vue:87 +msgctxt "Content/Home/Header" msgid "Statistics" msgstr "СтатиÑтика" -#: front/src/views/admin/moderation/AccountsDetail.vue:490 +#: front/src/views/admin/moderation/AccountsDetail.vue:510 msgctxt "Content/Moderation/Help text" -msgid "" -"Statistics are computed from known activity and content on your instance, " -"and do not reflect general activity for this account" -msgstr "" +msgid "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this account" +msgstr "СтатиÑтика ÑчитаетÑÑ Ð¿Ð¾ извеÑтной активноÑти и Ñодержимому Вашего узла и не отражает вÑÑŽ активноÑÑ‚ÑŒ Ð´Ð»Ñ Ñтого аккаунта" -#: front/src/views/admin/moderation/DomainsDetail.vue:371 +#: front/src/views/admin/moderation/DomainsDetail.vue:418 msgctxt "Content/Moderation/Help text" -msgid "" -"Statistics are computed from known activity and content on your instance, " -"and do not reflect general activity for this domain" -msgstr "" - -#: front/src/views/admin/library/AlbumDetail.vue:329 -#: front/src/views/admin/library/ArtistDetail.vue:328 -#: front/src/views/admin/library/LibraryDetail.vue:316 -#: front/src/views/admin/library/TrackDetail.vue:371 +msgid "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this domain" +msgstr "СтатиÑтика ÑчитаетÑÑ Ð¿Ð¾ извеÑтной активноÑти и Ñодержимому Вашего узла и не отражает вÑÑŽ активноÑÑ‚ÑŒ Ð´Ð»Ñ Ñтого домена" + +#: front/src/views/admin/library/AlbumDetail.vue:346 +#: front/src/views/admin/library/ArtistDetail.vue:345 +#: front/src/views/admin/library/LibraryDetail.vue:356 +#: front/src/views/admin/library/TagDetail.vue:210 +#: front/src/views/admin/library/TrackDetail.vue:389 #: front/src/views/admin/library/UploadDetail.vue:335 msgctxt "Content/Moderation/Help text" -msgid "" -"Statistics are computed from known activity and content on your instance, " -"and do not reflect general activity for this object" -msgstr "" - -#: front/src/views/admin/moderation/DomainsDetail.vue:115 -msgctxt "Content/Moderation/Table.Label (Value is Error message)" -msgid "Status" -msgstr "СтатуÑ" +msgid "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" +msgstr "СтатиÑтика ÑчитаетÑÑ Ð¿Ð¾ извеÑтной активноÑти и Ñодержимому Вашего узла и не отражает вÑÑŽ активноÑÑ‚ÑŒ Ð´Ð»Ñ Ñтого объекта" #: front/src/components/library/FileUpload.vue:95 -msgctxt "Content/Library/Table.Label (Value is Uploading/Uploaded/Error)" -msgid "Status" -msgstr "СтатуÑ" - -#: front/src/views/content/libraries/Detail.vue:28 -msgctxt "Content/Library.Federation/Table.Label (Value is Approved/Rejected)" -msgid "Status" -msgstr "СтатуÑ" - +#: front/src/components/manage/library/EditsCardList.vue:12 +#: front/src/components/manage/moderation/ReportCard.vue:57 #: front/src/components/manage/users/InvitationsTable.vue:17 #: front/src/components/manage/users/InvitationsTable.vue:39 -msgctxt "Content/Admin/*/Noun (Value is Used/Not used)" -msgid "Status" -msgstr "СтатуÑ" - #: front/src/components/manage/users/UsersTable.vue:43 -msgctxt "Content/Admin/Table.Label/Noun (Value is Regular user/Admin)" -msgid "Status" -msgstr "СтатуÑ" - -#: front/src/components/manage/library/EditsCardList.vue:12 -msgctxt "" -"Content/Search/Dropdown.Label (Value is All/Pending " -"review/Approved/Rejected)" +#: front/src/views/admin/moderation/DomainsDetail.vue:152 +#: front/src/views/admin/moderation/ReportsList.vue:14 +#: front/src/views/content/libraries/Detail.vue:28 +msgctxt "*/*/*" msgid "Status" msgstr "СтатуÑ" -#: front/src/components/Sidebar.vue:174 src/components/radios/Button.vue:3 +#: front/src/components/Sidebar.vue:178 src/components/radios/Button.vue:3 msgctxt "*/Player/Button.Label/Short, Verb" msgid "Stop radio" msgstr "ОÑтановить радио" @@ -4028,22 +4354,32 @@ msgctxt "*/*/Button.Label/Verb" msgid "Submit" msgstr "Отправить" -#: front/src/components/library/EditForm.vue:98 +#: front/src/components/library/EditForm.vue:110 msgctxt "Content/Library/Button.Label/Verb" msgid "Submit and apply edit" -msgstr "" +msgstr "Применить изменениÑ" #: front/src/components/library/EditForm.vue:7 msgctxt "Content/Library/Button.Label" msgid "Submit another edit" -msgstr "" +msgstr "Отправить ещё одну правку" -#: front/src/components/library/EditForm.vue:99 +#: front/src/components/moderation/ReportModal.vue:64 +msgctxt "Popup/*/Button.Label" +msgid "Submit report" +msgstr "Отправить жалобу" + +#: front/src/components/library/EditForm.vue:111 msgctxt "Content/Library/Button.Label/Verb" msgid "Submit suggestion" -msgstr "" +msgstr "Отправить предложение" -#: front/src/views/admin/Settings.vue:85 +#: front/src/components/manage/moderation/ReportCard.vue:17 +msgctxt "Content/Moderation/*" +msgid "Submitted by" +msgstr "Отправлено от" + +#: front/src/views/admin/Settings.vue:86 msgctxt "Content/Admin/Menu" msgid "Subsonic" msgstr "Subsonic" @@ -4056,22 +4392,22 @@ msgstr "Пароль Subsonic API" #: front/src/components/library/EditForm.vue:38 msgctxt "Content/Library/Paragraph" msgid "Suggest a change using the form below." -msgstr "" +msgstr "Предложите правку, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ñ„Ð¾Ñ€Ð¼Ñƒ ниже." #: front/src/components/library/AlbumEdit.vue:5 msgctxt "Content/*/Title" msgid "Suggest an edit on this album" -msgstr "Ðам не удалоÑÑŒ добавить трек в ÑпиÑок воÑпроизведениÑ" +msgstr "Предложите правку Ð´Ð»Ñ Ñтого альбома" #: front/src/components/library/ArtistEdit.vue:5 msgctxt "Content/*/Title" msgid "Suggest an edit on this artist" -msgstr "Ðам не удалоÑÑŒ добавить трек в ÑпиÑок воÑпроизведениÑ" +msgstr "Предложите правку Ð´Ð»Ñ Ñтого иÑполнителÑ" #: front/src/components/library/TrackEdit.vue:5 msgctxt "Content/*/Title" msgid "Suggest an edit on this track" -msgstr "Ðам не удалоÑÑŒ добавить трек в ÑпиÑок воÑпроизведениÑ" +msgstr "Предложите правку Ð´Ð»Ñ Ñтого трека" #: front/src/components/SetInstanceModal.vue:31 msgctxt "Popup/Instance/List.Label" @@ -4081,62 +4417,85 @@ msgstr "Предложенные изменениÑ" #: front/src/components/library/FileUpload.vue:3 msgctxt "Content/Library/Tab.Title/Short" msgid "Summary" -msgstr "" +msgstr "Сводка" -#: front/src/components/library/EditForm.vue:87 +#: front/src/components/library/EditForm.vue:99 msgctxt "*/*/*" msgid "Summary (optional)" -msgstr "" +msgstr "Сводка (необÑзательно)" -#: front/src/components/Footer.vue:39 +#: front/src/components/Footer.vue:47 msgctxt "Footer/*/Listitem.Link" msgid "Support forum" -msgstr "" +msgstr "Форум поддержки" + +#: front/src/views/Notifications.vue:10 +msgctxt "Content/Notifications/Header" +msgid "Support this Funkwhale pod" +msgstr "Поддержать Ñтот узел Funkwhale" #: front/src/components/library/FileUpload.vue:85 msgctxt "Content/Library/Paragraph" msgid "Supported extensions: %{ extensions }" -msgstr "" +msgstr "Поддерживаемые раÑширениÑ: %{ extensions }" #: front/src/components/playlists/Editor.vue:9 msgctxt "Content/Playlist/Paragraph" msgid "Syncing changes to server…" -msgstr "Синхронизируем Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñ Ñервером..." +msgstr "Синхронизируем Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñ Ñервером…" -#: front/src/components/audio/EmbedWizard.vue:25 +#: front/src/components/audio/SearchBar.vue:35 +msgctxt "*/*/*/Noun" +msgid "Tag" +msgstr "Тег" + +#: front/src/views/admin/library/TagDetail.vue:61 +msgctxt "Content/Moderation/Title" +msgid "Tag data" +msgstr "Теги" + +#: front/src/components/library/Albums.vue:23 +#: src/components/library/Artists.vue:15 +#: front/src/views/admin/library/Base.vue:23 +#: src/views/admin/library/TagsList.vue:24 front/src/edits.js:24 +#: src/edits.js:50 src/edits.js:91 src/entities.js:120 +msgctxt "*/*/*/Noun" +msgid "Tags" +msgstr "Теги" + +#: front/src/components/mixins/Translations.vue:44 +#: front/src/components/mixins/Translations.vue:45 +msgctxt "Content/Moderation/Dropdown" +msgid "Takedown request" +msgstr "Ð—Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° удаление" + +#: front/src/components/About.vue:35 src/components/About.vue:61 +msgctxt "Content/About/Header" +msgid "Terms and privacy policy" +msgstr "УÑÐ»Ð¾Ð²Ð¸Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸ политика приватноÑти" + +#: front/src/components/audio/EmbedWizard.vue:35 #: front/src/components/common/CopyInput.vue:3 msgctxt "Content/*/Paragraph" msgid "Text copied to clipboard!" msgstr "ТекÑÑ‚ Ñкопирован в буфер обмена!" -#: front/src/components/Home.vue:26 -msgctxt "Content/Home/Paragraph" -msgid "" -"That's simple: we loved Grooveshark and we want to build something even " -"better." -msgstr "" -"Ðто проÑто: нам нравилÑÑ Grooveshark и мы хотели Ñоздать что-то ещё лучшее." - -#: front/src/views/admin/library/AlbumDetail.vue:75 +#: front/src/views/admin/library/AlbumDetail.vue:81 msgctxt "Content/Moderation/Paragraph" -msgid "" -"The album will be removed, as well as associated uploads, tracks, favorites " -"and listening history. This action is irreversible." -msgstr "" +msgid "The album will be removed, as well as associated uploads, tracks, favorites and listening history. This action is irreversible." +msgstr "Ðльбом будет удалён вмеÑте Ñо ÑвÑзанными Ñ Ð½Ð¸Ð¼ закачками, треками, избранным и иÑторией проÑлушиваниÑ. Ðто дейÑтвие Ð½ÐµÐ»ÑŒÐ·Ñ Ð¾Ñ‚Ð¼ÐµÐ½Ð¸Ñ‚ÑŒ." #: front/src/components/auth/Authorize.vue:39 msgctxt "Content/Auth/Paragraph" msgid "The application is also requesting the following unknown permissions:" -msgstr "" +msgstr "Приложение также запрашивает Ñледующие неизвеÑтные разрешениÑ:" -#: front/src/views/admin/library/ArtistDetail.vue:74 +#: front/src/views/admin/library/ArtistDetail.vue:79 msgctxt "Content/Moderation/Paragraph" -msgid "" -"The artist will be removed, as well as associated uploads, tracks, albums, " -"favorites and listening history. This action is irreversible." -msgstr "" +msgid "The artist will be removed, as well as associated uploads, tracks, albums, favorites and listening history. This action is irreversible." +msgstr "ИÑполнитель будет удалён вмеÑте Ñо ÑвÑзанными Ñ Ð½Ð¸Ð¼ закачками, треками, альбомами, избранным и иÑторией проÑлушиваниÑ. Ðто дейÑтвие Ð½ÐµÐ»ÑŒÐ·Ñ Ð¾Ñ‚Ð¼ÐµÐ½Ð¸Ñ‚ÑŒ." -#: front/src/components/Footer.vue:53 +#: front/src/components/Footer.vue:61 msgctxt "Footer/*/List item.Link" msgid "The funkwhale logo was kindly designed and provided by Francis Gading." msgstr "Логотип funkwhale был любезно предоÑтавлен Francis Gading." @@ -4144,108 +4503,102 @@ msgstr "Логотип funkwhale был любезно предоÑтавлен #: front/src/components/SetInstanceModal.vue:8 msgctxt "Popup/Instance/Error message.List item" msgid "The given address is not a Funkwhale server" -msgstr "" +msgstr "Заданный Ð°Ð´Ñ€ÐµÑ Ð½Ðµ ÑвлÑетÑÑ Ñервером Funkwhale" #: front/src/views/content/libraries/Form.vue:34 msgctxt "Popup/Library/Paragraph" -msgid "" -"The library and all its tracks will be deleted. This can not be undone." +msgid "The library and all its tracks will be deleted. This can not be undone." msgstr "Библиотека и вÑе треки в ней будут удалены. Ðто дейÑтвие необратимо." #: front/src/views/admin/library/LibraryDetail.vue:61 msgctxt "Content/Moderation/Paragraph" -msgid "" -"The library will be removed, as well as associated uploads, and follows. " -"This action is irreversible." -msgstr "" +msgid "The library will be removed, as well as associated uploads, and follows. This action is irreversible." +msgstr "Библиотека будет удалена вмеÑте Ñо ÑвÑзанными Ñ Ð½ÐµÐ¹ закачками и подпиÑками. Ðто дейÑтвие Ð½ÐµÐ»ÑŒÐ·Ñ Ð¾Ñ‚Ð¼ÐµÐ½Ð¸Ñ‚ÑŒ." #: front/src/components/library/ImportStatusModal.vue:140 msgctxt "Popup/Import/Error.Label" -msgid "" -"The metadata included in the file is invalid or some mandatory fields are " -"missing." -msgstr "" +msgid "The metadata included in the file is invalid or some mandatory fields are missing." +msgstr "Метаданные файла неправильные или некоторые обÑзательные Ð¿Ð¾Ð»Ñ Ð¾Ñ‚ÑутÑтвуют." #: front/src/components/library/FileUpload.vue:38 msgctxt "Content/Library/List item" msgid "The music files you are uploading are tagged properly." -msgstr "" +msgstr "Закачиваемые вами файлы имеют правильные теги." #: front/src/components/audio/Player.vue:65 msgctxt "Sidebar/Player/Error message.Paragraph" msgid "The next track will play automatically in a few seconds…" -msgstr "" +msgstr "Следующий трек запуÑтитÑÑ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡ÐµÑки через неÑколько Ñекунд…" -#: front/src/components/Home.vue:116 -msgctxt "Content/Home/List item" -msgid "" -"The plaform is free and open-source, you can install it and modify it " -"without worries" -msgstr "" +#: front/src/components/manage/moderation/NotesThread.vue:27 +msgctxt "Content/Moderation/Paragraph" +msgid "The note will be removed. This action is irreversible." +msgstr "Заметка будет удалена. Ðто дейÑтвие Ð½ÐµÐ»ÑŒÐ·Ñ Ð¾Ñ‚Ð¼ÐµÐ½Ð¸Ñ‚ÑŒ." + +#: front/src/components/manage/moderation/ReportCard.vue:120 +msgctxt "Content/Moderation/Message" +msgid "The object associated with this report was deleted." +msgstr "Объект, ÑвÑзанный Ñ Ñтой жалобой, был удалён." #: front/src/components/playlists/Form.vue:14 msgctxt "Content/Playlist/Error message.Title" msgid "The playlist could not be created" -msgstr "СпиÑок воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ñоздан" +msgstr "СпиÑок воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð½Ðµ может быть Ñоздан" #: front/src/components/federation/FetchButton.vue:37 msgctxt "*/*/Error" msgid "The remote server answered with HTTP %{ status }" -msgstr "" +msgstr "Удалённый Ñервер ответил Ñ HTTP %{ status }" #: front/src/components/federation/FetchButton.vue:13 msgctxt "Popup/*/Message.Content" -msgid "" -"The remote server answered, but returned data was unsupported by Funkwhale." -msgstr "" +msgid "The remote server answered, but returned data was unsupported by Funkwhale." +msgstr "Удалённый Ñервер ответил, но ответ не поддерживаетÑÑ Funkwhale." #: front/src/components/federation/FetchButton.vue:44 msgctxt "*/*/Error" -msgid "The remote server didn't answered fast enough" -msgstr "" +msgid "The remote server didn't respond quickly enough" +msgstr "Удалённый Ñервер не ответил доÑтаточно быÑтро" #: front/src/components/federation/FetchButton.vue:50 msgctxt "*/*/Error" -msgid "The return server returned invalid JSON or JSON-LD data" -msgstr "" +msgid "The remote server returned invalid JSON or JSON-LD data" +msgstr "Удалённый Ñервер вернул неправильные JSON или JSON-LD данные" #: front/src/components/manage/library/AlbumsTable.vue:189 msgctxt "Popup/*/Paragraph" -msgid "" -"The selected albums will be removed, as well as associated tracks, uploads, " -"favorites and listening history. This action is irreversible." -msgstr "" +msgid "The selected albums will be removed, as well as associated tracks, uploads, favorites and listening history. This action is irreversible." +msgstr "Выбранные альбомы будут удалены вмеÑте Ñо ÑвÑзанными треками, закачками, избранным и иÑторией проÑлушиваниÑ. Ðто дейÑтвие Ð½ÐµÐ»ÑŒÐ·Ñ Ð¾Ñ‚Ð¼ÐµÐ½Ð¸Ñ‚ÑŒ." #: front/src/components/manage/library/ArtistsTable.vue:179 msgctxt "Popup/*/Paragraph" -msgid "" -"The selected artist will be removed, as well as associated uploads, tracks, " -"albums, favorites and listening history. This action is irreversible." -msgstr "" +msgid "The selected artist will be removed, as well as associated uploads, tracks, albums, favorites and listening history. This action is irreversible." +msgstr "Выбранный иÑполнитель будет удален вмеÑте Ñо ÑвÑзанными закачками, треками, альбомами, избранным и иÑторией проÑлушиваниÑ. Ðто дейÑтвие Ð½ÐµÐ»ÑŒÐ·Ñ Ð¾Ñ‚Ð¼ÐµÐ½Ð¸Ñ‚ÑŒ." #: front/src/components/manage/library/LibrariesTable.vue:206 msgctxt "Popup/*/Paragraph" -msgid "" -"The selected library will be removed, as well as associated uploads and " -"follows. This action is irreversible." -msgstr "" +msgid "The selected library will be removed, as well as associated uploads and follows. This action is irreversible." +msgstr "Ð’Ñ‹Ð±Ñ€Ð°Ð½Ð½Ð°Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐ° будет удалена вмеÑте Ñо ÑвÑзанными закачками и подпиÑками. Ðто дейÑтвие Ð½ÐµÐ»ÑŒÐ·Ñ Ð¾Ñ‚Ð¼ÐµÐ½Ð¸Ñ‚ÑŒ." + +#: front/src/components/manage/library/TagsTable.vue:180 +msgctxt "Popup/*/Paragraph" +msgid "The selected tag will be removed and unlinked with existing content, if any. This action is irreversible." +msgstr "Выбранный тег будет ÑнÑÑ‚ Ñо вÑего ÑвÑзанного Ñ Ð½Ð¸Ð¼ Ñодержимого (еÑли оно еÑÑ‚ÑŒ) и удалён. Ðто дейÑтвие Ð½ÐµÐ»ÑŒÐ·Ñ Ð¾Ñ‚Ð¼ÐµÐ½Ð¸Ñ‚ÑŒ." #: front/src/components/manage/library/TracksTable.vue:189 msgctxt "Popup/*/Paragraph" -msgid "" -"The selected tracks will be removed, as well as associated uploads, " -"favorites and listening history. This action is irreversible." -msgstr "" +msgid "The selected tracks will be removed, as well as associated uploads, favorites and listening history. This action is irreversible." +msgstr "Выбранные треки будут удалены вмеÑте Ñо ÑвÑзанными закачками, избранным и иÑторией проÑлушиваниÑ. Ðто дейÑтвие Ð½ÐµÐ»ÑŒÐ·Ñ Ð¾Ñ‚Ð¼ÐµÐ½Ð¸Ñ‚ÑŒ." #: front/src/components/manage/library/UploadsTable.vue:256 msgctxt "Popup/*/Paragraph" msgid "The selected upload will be removed. This action is irreversible." -msgstr "" +msgstr "Ð’Ñ‹Ð±Ñ€Ð°Ð½Ð½Ð°Ñ Ð·Ð°ÐºÐ°Ñ‡ÐºÐ° будет удалена. Ðто дейÑтвие Ð½ÐµÐ»ÑŒÐ·Ñ Ð¾Ñ‚Ð¼ÐµÐ½Ð¸Ñ‚ÑŒ." #: front/src/components/SetInstanceModal.vue:7 msgctxt "Popup/Instance/Error message.List item" msgid "The server might be down" -msgstr "" +msgstr "Сервер может быть недоÑтупен" #: front/src/components/auth/SubsonicTokenForm.vue:4 msgctxt "Content/Settings/Paragraph" @@ -4254,9 +4607,13 @@ msgstr "Subsonic API недоÑтупен на Ñтом узле Funkwhale." #: front/src/components/library/EditCard.vue:96 msgctxt "Popup/Library/Paragraph" -msgid "" -"The suggestion will be completely removed, this action is irreversible." -msgstr "" +msgid "The suggestion will be completely removed, this action is irreversible." +msgstr "ÐŸÑ€ÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð½Ð°Ñ Ð¿Ñ€Ð°Ð²ÐºÐ° будет удалена, Ñто дейÑтвие Ð½ÐµÐ»ÑŒÐ·Ñ Ð¾Ñ‚Ð¼ÐµÐ½Ð¸Ñ‚ÑŒ." + +#: front/src/views/admin/library/TagDetail.vue:44 +msgctxt "Content/Moderation/Paragraph" +msgid "The tag will be removed and unlinked from any existing entity. This action is irreversible." +msgstr "Тег будет отвÑзан от вÑех ÑущеÑтвующих объектов и удалён. Ðто дейÑтвие Ð½ÐµÐ»ÑŒÐ·Ñ Ð¾Ñ‚Ð¼ÐµÐ½Ð¸Ñ‚ÑŒ." #: front/src/components/playlists/PlaylistModal.vue:34 msgctxt "Popup/Playlist/Error message.Title" @@ -4266,19 +4623,17 @@ msgstr "Ðам не удалоÑÑŒ добавить трек в ÑпиÑок в #: front/src/components/audio/Player.vue:62 msgctxt "Sidebar/Player/Error message.Title" msgid "The track cannot be loaded" -msgstr "" +msgstr "Трек не может быть загружен" -#: front/src/views/admin/library/TrackDetail.vue:74 +#: front/src/views/admin/library/TrackDetail.vue:80 msgctxt "Content/Moderation/Paragraph" -msgid "" -"The track will be removed, as well as associated uploads, favorites and " -"listening history. This action is irreversible." -msgstr "" +msgid "The track will be removed, as well as associated uploads, favorites and listening history. This action is irreversible." +msgstr "Трек будет удалён вмеÑте Ñо ÑвÑзанными закачками, избранным и иÑторией проÑлушиваниÑ. Ðто дейÑтвие Ð½ÐµÐ»ÑŒÐ·Ñ Ð¾Ñ‚Ð¼ÐµÐ½Ð¸Ñ‚ÑŒ." #: front/src/views/admin/library/UploadDetail.vue:68 msgctxt "Content/Moderation/Paragraph" msgid "The upload will be removed. This action is irreversible." -msgstr "" +msgstr "Закачка будет удалена. Ðто дейÑтвие Ð½ÐµÐ»ÑŒÐ·Ñ Ð¾Ñ‚Ð¼ÐµÐ½Ð¸Ñ‚ÑŒ." #: front/src/components/library/FileUpload.vue:42 msgctxt "Content/Library/List item" @@ -4288,12 +4643,12 @@ msgstr "Загружаемые музыкальные файлы в формат #: front/src/views/content/Home.vue:4 msgctxt "Content/Library/Paragraph" msgid "There are various ways to grab new content and make it available here." -msgstr "" +msgstr "ЕÑÑ‚ÑŒ разные ÑпоÑобы получить новый контент и размеÑтить его здеÑÑŒ." #: front/src/components/manage/moderation/InstancePolicyForm.vue:66 msgctxt "Popup/Moderation/Paragraph" msgid "This action is irreversible." -msgstr "" +msgstr "Ðто дейÑтвие Ð½ÐµÐ»ÑŒÐ·Ñ Ð¾Ñ‚Ð¼ÐµÐ½Ð¸Ñ‚ÑŒ." #: front/src/components/library/AlbumDetail.vue:29 msgctxt "Content/Album/Paragraph" @@ -4305,105 +4660,113 @@ msgctxt "Content/Artist/Paragraph" msgid "This artist is present in the following libraries:" msgstr "ИÑполнитель предÑтавлен в Ñледующих библиотеках:" +#: front/src/components/manage/moderation/DomainsTable.vue:169 +msgctxt "Content/Moderation/Popup" +msgid "This domain is present in your allow-list" +msgstr "Ðтот домен приÑутÑтвует в Вашем \"белом\" ÑпиÑке" + #: front/src/views/admin/moderation/AccountsDetail.vue:84 -#: front/src/views/admin/moderation/DomainsDetail.vue:48 +#: front/src/views/admin/moderation/DomainsDetail.vue:76 msgctxt "Content/Moderation/Card.Title" msgid "This domain is subject to specific moderation rules" -msgstr "" +msgstr "К Ñтому домену применÑÑŽÑ‚ÑÑ Ð¾Ñобые правила модерации" + +#: front/src/components/manage/moderation/InstancePolicyModal.vue:16 +msgctxt "Content/Moderation/Card.Title" +msgid "This entity is subject to specific moderation rules" +msgstr "К Ñтому объекту применÑÑŽÑ‚ÑÑ Ð¾Ñобые правила модерации" #: front/src/views/content/Home.vue:9 msgctxt "Content/Library/Paragraph" msgid "This instance offers up to %{quota} of storage space for every user." -msgstr "" -"Ðтот узел предоÑтавлÑет до %{quota} диÑкового проÑтранÑтва каждому " -"пользователю." +msgstr "Ðтот узел предоÑтавлÑет до %{quota} диÑкового проÑтранÑтва каждому пользователю." + +#: front/src/components/auth/Settings.vue:300 +msgctxt "Popup/Settings/Paragraph" +msgid "This is irreversible and will permanently remove your data from our servers. You will we immediatly logged out." +msgstr "Ðто окончательно и беÑповоротно удалит ваши данные Ñ Ð½Ð°ÑˆÐ¸Ñ… Ñерверов. Ð’Ñ‹ немедленно выйдете из ÑиÑтемы." #: front/src/components/auth/Settings.vue:165 msgctxt "Content/Settings/Paragraph" -msgid "" -"This is the list of applications that have access to your account data." -msgstr "" +msgid "This is the list of applications that have access to your account data." +msgstr "Ðто ÑпиÑок приложений, которые имеют доÑтуп к данным Вашего аккаунта." #: front/src/components/auth/Settings.vue:218 msgctxt "Content/Settings/Paragraph" msgid "This is the list of applications that you have created." -msgstr "" +msgstr "Ðто ÑпиÑок приложений, которые Ð’Ñ‹ Ñоздали." #: front/src/components/auth/Profile.vue:16 msgctxt "Content/Profile/Button.Paragraph" msgid "This is you!" -msgstr "Ðто вы!" +msgstr "Ðто Ð’Ñ‹!" #: front/src/views/content/libraries/Form.vue:73 msgctxt "Content/Library/Input.Placeholder" msgid "This library contains my personal music, I hope you like it." -msgstr "Ðта библиотека Ñодержит мою музыку, надеюÑÑŒ она вам понравитÑÑ!" +msgstr "Ðта библиотека Ñодержит мою музыку, надеюÑÑŒ она Вам понравитÑÑ!" -#: front/src/views/content/remote/Card.vue:141 +#: front/src/views/content/remote/Card.vue:169 msgctxt "Content/Library/Card.Help text" -msgid "" -"This library is private and your approval from its owner is needed to access" -" its content" -msgstr "" +msgid "This library is private and your approval from its owner is needed to access its content" +msgstr "Ðто Ð»Ð¸Ñ‡Ð½Ð°Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐ° и Ð´Ð»Ñ Ð´Ð¾Ñтупа к ней необходимо получить разрешение владельца" -#: front/src/views/content/remote/Card.vue:142 +#: front/src/views/content/remote/Card.vue:170 msgctxt "Content/Library/Card.Help text" msgid "This library is public and you can access its content freely" -msgstr "" +msgstr "Ðто Ð¿ÑƒÐ±Ð»Ð¸Ñ‡Ð½Ð°Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐ° и у Ð’Ð°Ñ ÐµÑÑ‚ÑŒ Ñвободный доÑтуп к её Ñодержимому" #: front/src/components/common/ActionTable.vue:47 msgctxt "Modal/*/Paragraph" -msgid "" -"This may affect a lot of elements or have irreversible consequences, please " -"double check this is really what you want." -msgstr "" -"Ðто может повлиÑÑ‚ÑŒ на многие Ñлементы, пожалуйÑта перепроверьте что вы " -"дейÑтвительно хотите Ñтого." +msgid "This may affect a lot of elements or have irreversible consequences, please double check this is really what you want." +msgstr "Ðто может повлиÑÑ‚ÑŒ на многие Ñлементы, пожалуйÑта перепроверьте что Ð’Ñ‹ дейÑтвительно хотите Ñтого." #: front/src/components/library/AlbumEdit.vue:8 #: front/src/components/library/ArtistEdit.vue:8 #: front/src/components/library/TrackEdit.vue:8 msgctxt "Content/*/Message" msgid "This object is managed by another server, you cannot edit it." -msgstr "" +msgstr "Ðтот объект управлÑетÑÑ Ð´Ñ€ÑƒÐ³Ð¸Ð¼ Ñервером, Ð’Ñ‹ не можете редактировать его." + +#: front/src/components/Home.vue:87 +msgctxt "Content/Home/Paragraph" +msgid "This pod runs Funkwhale, a community-driven project that lets you listen and share music and audio within a decentralized, open network." +msgstr "Ðтот узел работает на Funkwhale, общеÑтвенном проекте, который позволÑет Вам Ñлушать и делитьÑÑ Ð¼ÑƒÐ·Ñ‹ÐºÐ¾Ð¹ и другим аудио по децентрализованной открытой Ñети." #: front/src/components/library/FileUpload.vue:51 msgctxt "Content/Library/Paragraph" msgid "This reference will be used to group imported files together." -msgstr "" +msgstr "Ðто примечание будет иÑпользовано Ð´Ð»Ñ Ð¾Ð±Ð¾Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹ файлов, импортированных вмеÑте." #: front/src/components/mixins/Translations.vue:33 #: front/src/components/mixins/Translations.vue:34 msgctxt "Content/Library/Help text" -msgid "This track could not be processed, please it is tagged correctly" -msgstr "" -"Произошла ошибка во Ð²Ñ€ÐµÐ¼Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ Ñтого трека, убедитеÑÑŒ что у него " -"корректные теги" +msgid "This track could not be processed, please make sure it is tagged correctly" +msgstr "Произошла ошибка во Ð²Ñ€ÐµÐ¼Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ Ñтого трека, убедитеÑÑŒ что у него корректные теги" #: front/src/components/mixins/Translations.vue:29 #: front/src/components/mixins/Translations.vue:30 msgctxt "Content/Library/Help text" -msgid "" -"This track has been uploaded, but hasn't been processed by the server yet" -msgstr "Трек загружен но ещё не обработан Ñервером" +msgid "This track has been uploaded, but hasn't been processed by the server yet" +msgstr "Трек загружен, но ещё не обработан Ñервером" #: front/src/components/mixins/Translations.vue:25 #: front/src/components/mixins/Translations.vue:26 msgctxt "Content/Library/Help text" msgid "This track is already present in one of your libraries" -msgstr "Трек уже был предÑтавлен в одной из ваших библиотек" +msgstr "Трек уже находитÑÑ Ð² одной из Ваших библиотек" -#: front/src/components/audio/PlayButton.vue:85 +#: front/src/components/audio/PlayButton.vue:103 msgctxt "*/Queue/Button/Title" msgid "This track is not available in any library you have access to" -msgstr "" +msgstr "Ðтот трек недоÑтупен ни в одной из библиотек, к которым у Ð’Ð°Ñ ÐµÑÑ‚ÑŒ доÑтуп" #: front/src/components/library/TrackDetail.vue:82 msgctxt "Content/Track/Paragraph" msgid "This track is present in the following libraries:" msgstr "Ðтот трек предÑтавлен в Ñледующих библиотеках:" -#: front/src/views/playlists/Detail.vue:38 +#: front/src/views/playlists/Detail.vue:46 msgctxt "Popup/Playlist/Paragraph" msgid "This will completely delete this playlist and cannot be undone." msgstr "Ðто необратимо удалит ÑпиÑок воÑпроизведениÑ." @@ -4413,97 +4776,94 @@ msgctxt "Popup/Radio/Paragraph" msgid "This will completely delete this radio and cannot be undone." msgstr "Ðто радио будет необратимо удалено." -#: front/src/components/auth/SubsonicTokenForm.vue:50 +#: front/src/components/auth/SubsonicTokenForm.vue:55 msgctxt "Popup/Settings/Paragraph" -msgid "" -"This will completely disable access to the Subsonic API using from account." +msgid "This will completely disable access to the Subsonic API using from account." msgstr "Ðто полноÑтью отключит доÑтуп к Subsonic API Ð´Ð»Ñ Ñтого аккаунта." -#: front/src/components/auth/SubsonicTokenForm.vue:35 +#: front/src/components/manage/moderation/ReportCard.vue:359 +msgctxt "Content/Moderation/Popup,Paragraph" +msgid "This will delete the object associated with this report and mark the report as resolved. The deletion is irreversible." +msgstr "Ðто удалит объект, ÑвÑзанный Ñ Ñтой жалобой, и пометит Ñаму жалобу как разрешённую. Ðто дейÑтвие Ð½ÐµÐ»ÑŒÐ·Ñ Ð¾Ñ‚Ð¼ÐµÐ½Ð¸Ñ‚ÑŒ." + +#: front/src/components/auth/SubsonicTokenForm.vue:40 msgctxt "Popup/Settings/Paragraph" -msgid "" -"This will log you out from existing devices that use the current password." -msgstr "" -"Ðто приведёт к отключению уÑтройÑтв которые иÑпользуют текущий пароль." +msgid "This will log you out from existing devices that use the current password." +msgstr "Ðто приведёт к отключению уÑтройÑтв которые иÑпользуют текущий пароль." #: front/src/components/auth/Settings.vue:253 msgctxt "Popup/Settings/Paragraph" -msgid "" -"This will permanently delete the application and all the associated tokens." -msgstr "Ðто необратимо удалит ÑпиÑок воÑпроизведениÑ." +msgid "This will permanently delete the application and all the associated tokens." +msgstr "Ðто необратимо удалит приложение и вÑе ÑвÑзанные Ñ Ð½Ð¸Ð¼ токены." #: front/src/components/auth/Settings.vue:194 msgctxt "Popup/Settings/Paragraph" -msgid "" -"This will prevent this application from accessing the service on your " -"behalf." -msgstr "" +msgid "This will prevent this application from accessing the service on your behalf." +msgstr "Ðто предотвратит доÑтуп Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ðº ÑервиÑу от вашего имени." #: front/src/components/playlists/Editor.vue:54 msgctxt "Popup/Playlist/Paragraph" msgid "This will remove all tracks from this playlist and cannot be undone." msgstr "Ðто необратимо удалит вÑе треки из Ñтого ÑпиÑка воÑпроизведениÑ." -#: front/src/views/admin/library/AlbumDetail.vue:99 -#: front/src/views/admin/library/TrackDetail.vue:98 src/edits.js:21 -#: src/edits.js:39 -msgctxt "*/*/*/Noun" -msgid "Title" -msgstr "Ðазвание" - #: front/src/components/audio/track/Table.vue:7 -#: front/src/views/content/libraries/FilesTable.vue:55 -msgctxt "Content/Track/*/Noun" -msgid "Title" -msgstr "Ðазвание" - #: front/src/components/manage/library/AlbumsTable.vue:39 #: front/src/components/manage/library/TracksTable.vue:39 -msgctxt "*/*/*" +#: front/src/views/admin/library/AlbumDetail.vue:105 +#: front/src/views/admin/library/TrackDetail.vue:104 +#: front/src/views/content/libraries/FilesTable.vue:55 src/edits.js:36 +#: front/src/edits.js:62 +msgctxt "*/*/*/Noun" msgid "Title" msgstr "Ðазвание" #: front/src/components/SetInstanceModal.vue:16 msgctxt "Popup/Instance/Paragraph" -msgid "" -"To continue, please select the Funkwhale instance you want to connect to. " -"Enter the address directly, or select one of the suggested choices." -msgstr "" +msgid "To continue, please select the Funkwhale instance you want to connect to. Enter the address directly, or select one of the suggested choices." +msgstr "Чтобы продолжить, пожалуйÑта выберите узел Funkwhale, к которому Ð’Ñ‹ ÑоединÑетеÑÑŒ. Введите Ñам Ð°Ð´Ñ€ÐµÑ Ð¸Ð»Ð¸ выберите один из предложенных вариантов." -#: front/src/components/ShortcutsModal.vue:79 +#: front/src/components/ShortcutsModal.vue:148 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Toggle favorite" +msgstr "Добавить/убрать из избранного" + +#: front/src/components/ShortcutsModal.vue:132 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Toggle mute" +msgstr "Вкл/откл. звук" + +#: front/src/components/ShortcutsModal.vue:136 msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" msgid "Toggle queue looping" -msgstr "" +msgstr "Включить цикличное проигрывание очереди" -#: front/src/views/admin/library/AlbumDetail.vue:222 -#: front/src/views/admin/library/ArtistDetail.vue:211 -#: front/src/views/admin/library/LibraryDetail.vue:200 -#: front/src/views/admin/library/TrackDetail.vue:274 -#: front/src/views/admin/moderation/AccountsDetail.vue:317 -#: front/src/views/admin/moderation/DomainsDetail.vue:225 +#: front/src/views/admin/library/AlbumDetail.vue:238 +#: front/src/views/admin/library/ArtistDetail.vue:226 +#: front/src/views/admin/library/LibraryDetail.vue:219 +#: front/src/views/admin/library/TrackDetail.vue:290 +#: front/src/views/admin/moderation/AccountsDetail.vue:329 +#: front/src/views/admin/moderation/DomainsDetail.vue:262 msgctxt "Content/Moderation/Table.Label" msgid "Total size" -msgstr "Ðе иÑпользуетÑÑ" +msgstr "Общий размер" #: front/src/views/content/libraries/Card.vue:68 msgctxt "Content/Library/Card.Help text" msgid "Total size of the files in this library" msgstr "Суммарный размер файлов в Ñтой библиотеке" -#: front/src/views/admin/moderation/DomainsDetail.vue:105 +#: front/src/views/admin/moderation/DomainsDetail.vue:142 msgctxt "Content/*/*" msgid "Total users" -msgstr "Ðе иÑпользуетÑÑ" - -#: front/src/views/admin/library/UploadDetail.vue:199 -msgctxt "*/*/*" -msgid "Track" -msgstr "Трек" +msgstr "Ð’Ñего пользователей" -#: front/src/components/audio/SearchBar.vue:27 -#: front/src/components/library/TrackBase.vue:173 +#: front/src/components/audio/SearchBar.vue:34 +#: front/src/components/library/TrackBase.vue:188 #: front/src/components/library/TrackDetail.vue:128 #: front/src/components/metadata/Search.vue:138 +#: src/components/mixins/Report.vue:28 +#: front/src/views/admin/library/UploadDetail.vue:199 +#: front/src/components/mixins/Report.vue:29 msgctxt "*/*/*/Noun" msgid "Track" msgstr "Трек" @@ -4511,42 +4871,40 @@ msgstr "Трек" #: front/src/components/library/EditCard.vue:13 msgctxt "Content/Library/Card/Short" msgid "Track #%{ id } - %{ name }" -msgstr "" +msgstr "Трек #%{ id } - %{ name }" -#: front/src/views/admin/library/TrackDetail.vue:91 +#: front/src/views/admin/library/TrackDetail.vue:97 msgctxt "Content/Moderation/Title" msgid "Track data" -msgstr "Ðазвание трека" +msgstr "Данные трека" #: front/src/components/library/TrackDetail.vue:4 msgctxt "Content/Track/Title/Noun" msgid "Track information" msgstr "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ треке" -#: front/src/components/mixins/Translations.vue:50 -#: front/src/components/mixins/Translations.vue:51 +#: front/src/components/mixins/Translations.vue:60 +#: front/src/components/mixins/Translations.vue:61 msgctxt "Content/*/Dropdown/Noun" msgid "Track name" msgstr "Ðазвание трека" -#: front/src/components/instance/Stats.vue:54 #: front/src/components/library/AlbumDetail.vue:19 -#: front/src/components/playlists/PlaylistModal.vue:47 -#: front/src/views/admin/moderation/AccountsDetail.vue:362 -#: front/src/views/admin/moderation/DomainsDetail.vue:274 -#: front/src/views/content/Base.vue:8 src/views/content/libraries/Detail.vue:8 -#: front/src/views/playlists/Detail.vue:51 src/views/radios/Detail.vue:34 -msgctxt "*/*/*/Noun" -msgid "Tracks" -msgstr "Треки" - +#: front/src/components/library/TagDetail.vue:36 #: front/src/components/manage/library/AlbumsTable.vue:42 #: front/src/components/manage/library/ArtistsTable.vue:42 -#: front/src/views/admin/library/AlbumDetail.vue:252 -#: front/src/views/admin/library/ArtistDetail.vue:251 +#: front/src/components/manage/library/TagsTable.vue:44 +#: front/src/components/playlists/PlaylistModal.vue:47 +#: front/src/views/admin/library/AlbumDetail.vue:268 +#: front/src/views/admin/library/ArtistDetail.vue:266 #: front/src/views/admin/library/Base.vue:14 -#: front/src/views/admin/library/LibraryDetail.vue:229 +#: front/src/views/admin/library/LibraryDetail.vue:248 +#: front/src/views/admin/library/TagDetail.vue:143 #: front/src/views/admin/library/TracksList.vue:24 +#: front/src/views/admin/moderation/AccountsDetail.vue:374 +#: front/src/views/admin/moderation/DomainsDetail.vue:311 +#: front/src/views/content/Base.vue:8 src/views/content/libraries/Detail.vue:8 +#: front/src/views/playlists/Detail.vue:76 src/views/radios/Detail.vue:34 msgctxt "*/*/*" msgid "Tracks" msgstr "Треки" @@ -4556,76 +4914,63 @@ msgctxt "Content/Artist/Title" msgid "Tracks by this artist" msgstr "Треки Ñтого иÑполнителÑ" -#: front/src/components/instance/Stats.vue:25 -msgctxt "Content/About/Paragraph/Unit" -msgid "Tracks favorited" -msgstr "Избранные треки" - -#: front/src/components/instance/Stats.vue:19 -msgctxt "Content/About/Paragraph/Unit" -msgid "tracks listened" -msgstr "треков проÑлушано" - #: front/src/components/library/radios/Filter.vue:44 msgctxt "Popup/Radio/Title/Noun" msgid "Tracks matching filter" -msgstr "Трек подходÑщий под фильтр" +msgstr "Треки, подходÑщие под фильтр" #: front/src/components/library/TrackDetail.vue:57 +#: front/src/components/manage/moderation/ReportCard.vue:134 #: front/src/views/admin/library/UploadDetail.vue:250 +#: front/src/views/admin/moderation/AccountsDetail.vue:181 msgctxt "Content/Track/Table.Label/Noun" msgid "Type" msgstr "Тип" -#: front/src/views/admin/moderation/AccountsDetail.vue:180 -msgctxt "Content/Moderation/Table.Label/Noun" -msgid "Type" -msgstr "Тип" - #: front/src/components/manage/moderation/AccountsTable.vue:44 -#: front/src/components/manage/moderation/DomainsTable.vue:42 +#: front/src/components/manage/moderation/DomainsTable.vue:50 msgctxt "Content/Moderation/Table.Label/Short" msgid "Under moderation rule" -msgstr "Удалить радио" +msgstr "ДейÑтвуют правила модерации" -#: front/src/views/content/remote/Card.vue:109 -#: src/views/content/remote/Card.vue:114 +#: front/src/components/ShortcutsModal.vue:68 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Unfocus searchbar" +msgstr "Выйти из панели поиÑка" + +#: front/src/views/content/remote/Card.vue:122 +#: src/views/content/remote/Card.vue:127 msgctxt "*/Library/Button.Label/Verb" msgid "Unfollow" msgstr "ОтпиÑатьÑÑ" -#: front/src/views/content/remote/Card.vue:110 +#: front/src/views/content/remote/Card.vue:123 msgctxt "Popup/Library/Title" msgid "Unfollow this library?" msgstr "ОтпиÑатьÑÑ Ð¾Ñ‚ Ñтой библиотеки?" -#: front/src/components/About.vue:17 -msgctxt "Content/About/Paragraph" -msgid "" -"Unfortunately, the owners of this instance did not yet take the time to " -"complete this page." -msgstr "К Ñожалению, владельцы Ñтого узла ещё не заполнили Ñту Ñтраницу." - #: front/src/components/federation/FetchButton.vue:54 #: front/src/components/federation/FetchButton.vue:55 -msgctxt "*/*/Error" -msgid "Unknowkn error" -msgstr "" - #: front/src/components/library/ImportStatusModal.vue:144 -msgctxt "Popup/Import/Error.Label" -msgid "Unkwown error" -msgstr "" - -#: front/src/components/Home.vue:37 -msgctxt "Content/Home/Title" -msgid "Unlimited music" -msgstr "Ð‘ÐµÐ·Ð³Ñ€Ð°Ð½Ð¸Ñ‡Ð½Ð°Ñ Ð¼ÑƒÐ·Ñ‹ÐºÐ°" +msgctxt "*/*/Error" +msgid "Unknown error" +msgstr "ÐеизвеÑÑ‚Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°" -#: front/src/components/audio/Player.vue:630 +#: front/src/components/audio/Player.vue:656 msgctxt "Sidebar/Player/Icon.Tooltip/Verb" msgid "Unmute" -msgstr "" +msgstr "Включить звук" + +#: front/src/components/manage/moderation/ReportCard.vue:225 +msgctxt "Content/*/Button.Label" +msgid "Unresolve" +msgstr "Открыть заново" + +#: front/src/components/manage/moderation/ReportCard.vue:67 +#: front/src/views/admin/moderation/ReportsList.vue:23 +msgctxt "Content/*/*/Short" +msgid "Unresolved" +msgstr "Ðерешённые" #: front/src/components/manage/moderation/InstancePolicyForm.vue:57 msgctxt "Content/Moderation/Card.Button.Label/Verb" @@ -4635,7 +4980,7 @@ msgstr "Дата загрузки" #: front/src/components/auth/ApplicationForm.vue:64 msgctxt "Content/Applications/Button.Label/Verb" msgid "Update application" -msgstr "Обновить ÑпиÑок воÑпроизведениÑ" +msgstr "Обновить приложение" #: front/src/components/auth/Settings.vue:50 msgctxt "Content/Settings/Button.Label/Verb" @@ -4660,7 +5005,7 @@ msgstr "Обновить наÑтройки" #: front/src/views/auth/PasswordResetConfirm.vue:21 msgctxt "Content/Signup/Button.Label" msgid "Update your password" -msgstr "Обновите ваш пароль" +msgstr "Обновите Ваш пароль" #: front/src/views/content/libraries/Card.vue:45 #: front/src/views/content/libraries/DetailArea.vue:24 @@ -4681,7 +5026,7 @@ msgstr "Загрузить аудио" #: front/src/views/admin/library/UploadDetail.vue:85 msgctxt "Content/Moderation/Title" msgid "Upload data" -msgstr "Дата загрузки" +msgstr "Загруженные данные" #: front/src/views/content/libraries/FilesTable.vue:58 msgctxt "*/*/*/Noun" @@ -4690,53 +5035,44 @@ msgstr "Дата загрузки" #: front/src/components/library/FileUpload.vue:258 msgctxt "Content/Library/Help text" -msgid "" -"Upload denied, ensure the file is not too big and that you have not reached " -"your quota" -msgstr "" -"Загрузка отклонена, убедитÑÑŒ что файл не Ñлишком большой и вы не превыÑили " -"квоту" +msgid "Upload denied, ensure the file is not too big and that you have not reached your quota" +msgstr "Загрузка отклонена, убедитеÑÑŒ, что файл не Ñлишком большой и Ð’Ñ‹ не превыÑили квоту" #: front/src/components/library/ImportStatusModal.vue:8 msgctxt "Popup/Import/Message" msgid "Upload is still pending and will soon be processed by the server." -msgstr "" +msgstr "Закачка вÑÑ‘ ещё в очереди и Ñкоро будет обработана Ñервером." #: front/src/views/content/Home.vue:7 msgctxt "Content/Library/Paragraph" -msgid "" -"Upload music files (MP3, OGG, FLAC, etc.) from your personal library " -"directly from your browser to enjoy them here." -msgstr "" -"Загрузите музыку (mp3, ogg, flac и Ñ‚.д.) из вашей личной библиотеки прÑмо из" -" вашего браузера и наÑлаждайтеÑÑŒ ей здеÑÑŒ." +msgid "Upload music files (MP3, OGG, FLAC, etc.) from your personal library directly from your browser to enjoy them here." +msgstr "Загрузите музыку (mp3, ogg, flac и Ñ‚.д.) из Вашей личной библиотеки прÑмо из Вашего браузера и наÑлаждайтеÑÑŒ ей здеÑÑŒ." #: front/src/components/library/FileUpload.vue:30 msgctxt "Content/Library/Title/Verb" msgid "Upload new tracks" msgstr "Загрузить новые треки" -#: front/src/views/admin/moderation/AccountsDetail.vue:298 -msgctxt "Content/Moderation/Table.Label/Noun" +#: front/src/components/About.vue:99 +#: front/src/views/admin/moderation/AccountsDetail.vue:309 +msgctxt "*/*/*" msgid "Upload quota" msgstr "Квота загрузки" #: front/src/components/library/FileUpload.vue:267 msgctxt "Content/Library/Help text" msgid "Upload timeout, please try again" -msgstr "" +msgstr "Таймаут загрузки, попробуйте ещё раз" #: front/src/components/library/ImportStatusModal.vue:14 msgctxt "Popup/Import/Message" -msgid "" -"Upload was skipped because a similar one is already available in one of your" -" libraries." -msgstr "" +msgid "Upload was skipped because a similar one is already available in one of your libraries." +msgstr "Закачка была пропущена, так как Ð¿Ð¾Ñ…Ð¾Ð¶Ð°Ñ ÑƒÐ¶Ðµ еÑÑ‚ÑŒ в одной из ваших библиотек." #: front/src/components/library/ImportStatusModal.vue:11 msgctxt "Popup/Import/Message" msgid "Upload was successfully processed by the server." -msgstr "" +msgstr "Закачка была уÑпешно обработана Ñервером." #: front/src/components/library/FileUpload.vue:109 msgctxt "Content/Library/Table" @@ -4751,74 +5087,83 @@ msgstr "ЗагружаетÑÑ" #: front/src/components/library/FileUpload.vue:112 msgctxt "Content/Library/Table" msgid "Uploading…" -msgstr "ЗагружаетÑÑ" +msgstr "ЗагружаетÑÑ…" +#: front/src/components/manage/library/LibrariesTable.vue:52 +#: front/src/components/manage/moderation/AccountsTable.vue:41 +#: front/src/components/mixins/Translations.vue:75 +#: front/src/views/admin/library/AlbumDetail.vue:258 +#: front/src/views/admin/library/ArtistDetail.vue:246 #: front/src/views/admin/library/Base.vue:20 +#: front/src/views/admin/library/LibraryDetail.vue:258 +#: front/src/views/admin/library/TrackDetail.vue:310 #: front/src/views/admin/library/UploadsList.vue:24 +#: front/src/views/admin/moderation/AccountsDetail.vue:349 +#: front/src/views/admin/moderation/DomainsDetail.vue:281 +#: front/src/components/mixins/Translations.vue:76 msgctxt "*/*/*" msgid "Uploads" -msgstr "Загрузить" - -#: front/src/components/manage/moderation/AccountsTable.vue:41 -#: front/src/components/mixins/Translations.vue:63 -#: front/src/views/admin/library/AlbumDetail.vue:242 -#: front/src/views/admin/library/ArtistDetail.vue:231 -#: front/src/views/admin/library/LibraryDetail.vue:239 -#: front/src/views/admin/library/TrackDetail.vue:294 -#: front/src/views/admin/moderation/AccountsDetail.vue:337 -#: front/src/views/admin/moderation/DomainsDetail.vue:244 -#: front/src/components/mixins/Translations.vue:64 -msgctxt "Content/Moderation/Table.Label/Noun" -msgid "Uploads" -msgstr "Загрузить" - -#: front/src/components/manage/library/LibrariesTable.vue:52 -msgctxt "Content/*/*/Noun" -msgid "Uploads" -msgstr "Загрузить" +msgstr "Закачки" #: front/src/components/auth/ApplicationForm.vue:16 msgctxt "Content/Applications/Help Text" -msgid "" -"Use \"urn:ietf:wg:oauth:2.0:oob\" as a redirect URI if your application is " -"not served on the web." -msgstr "" +msgid "Use \"urn:ietf:wg:oauth:2.0:oob\" as a redirect URI if your application is not served on the web." +msgstr "ИÑпользуйте \"urn:ietf:wg:oauth:2.0:oob\" как URI перенаправлениÑ, еÑли Ваше приложение не опубликовано в Интернет." #: front/src/components/Footer.vue:16 msgctxt "Footer/*/List item.Link" msgid "Use another instance" msgstr "ИÑпользовать другой узел" +#: front/src/components/Home.vue:146 +msgctxt "Content/Home/Link" +msgid "Use Funkwhale on other devices with our apps" +msgstr "ИÑпользуйте Funkwhale на других уÑтройÑтвах Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ наших приложений" + +#: front/src/components/moderation/ReportModal.vue:44 +msgctxt "*/*/Field,Help" +msgid "Use this field to provide additional context to the moderator that will handle your report." +msgstr "Укажите здеÑÑŒ дополнительную информацию Ð´Ð»Ñ Ð¼Ð¾Ð´ÐµÑ€Ð°Ñ‚Ð¾Ñ€Ð°, который займётÑÑ Ñ€Ð°ÑÑмотрением вашей жалобы." + #: front/src/views/auth/PasswordReset.vue:12 msgctxt "Content/Signup/Paragraph" -msgid "" -"Use this form to request a password reset. We will send an email to the " -"given address with instructions to reset your password." -msgstr "" -"ИÑпользуйте Ñту форму чтобы запроÑить ÑÐ±Ñ€Ð¾Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ. Мы вышлем пиÑьмо на " -"указанный Ð°Ð´Ñ€ÐµÑ Ñ Ð¸Ð½ÑтрукциÑми по ÑброÑу вашего паролÑ." +msgid "Use this form to request a password reset. We will send an email to the given address with instructions to reset your password." +msgstr "ИÑпользуйте Ñту форму чтобы запроÑить ÑÐ±Ñ€Ð¾Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ. Мы вышлем пиÑьмо на указанный Ð°Ð´Ñ€ÐµÑ Ñ Ð¸Ð½ÑтрукциÑми по ÑброÑу Вашего паролÑ." + +#: front/src/components/moderation/ReportModal.vue:18 +msgctxt "*/Moderation/Popup,Paragraph" +msgid "Use this form to submit a report to our moderation team." +msgstr "С помощью Ñтой формы вы можете отправить жалобу нашим модераторам." #: front/src/components/manage/moderation/InstancePolicyForm.vue:111 msgctxt "Content/Moderation/Help text" -msgid "" -"Use this setting to temporarily enable/disable the policy without completely" -" removing it." -msgstr "" +msgid "Use this setting to temporarily enable/disable the policy without completely removing it." +msgstr "ИÑпользуйте Ñту наÑтройку Ð´Ð»Ñ Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½Ð¾Ð³Ð¾ включениÑ/Ð¾Ñ‚ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»Ð¸Ñ‚Ð¸ÐºÐ¸ без полного её удалениÑ." #: front/src/components/manage/users/InvitationsTable.vue:49 msgctxt "Content/Admin/Table" msgid "Used" msgstr "ИÑпользовано" +#: front/src/components/Home.vue:125 +msgctxt "Content/Home/Header" +msgid "Useful links" +msgstr "Полезные ÑÑылки" + #: front/src/views/content/libraries/Detail.vue:26 msgctxt "Content/Library/Table.Label" msgid "User" msgstr "Пользователь" -#: front/src/components/instance/Stats.vue:5 -msgctxt "Content/About/Title/Noun" -msgid "User activity" -msgstr "ПользовательÑÐºÐ°Ñ Ð°ÐºÑ‚Ð¸Ð²Ð½Ð¾ÑÑ‚ÑŒ" +#: front/src/components/Home.vue:154 +msgctxt "Content/Home/Link" +msgid "User guides" +msgstr "РуководÑтва пользователÑ" + +#: front/src/views/admin/Settings.vue:88 +msgctxt "Content/Admin/Menu" +msgid "User Interface" +msgstr "Ð˜Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ" #: front/src/components/library/AlbumDetail.vue:26 #: front/src/components/library/ArtistDetail.vue:39 @@ -4832,35 +5177,35 @@ msgctxt "Content/Radio/Title" msgid "User radios" msgstr "ПользовательÑкие радио" -#: front/src/components/auth/Signup.vue:19 +#: front/src/components/auth/SignupForm.vue:15 #: front/src/components/manage/users/UsersTable.vue:37 -#: front/src/components/mixins/Translations.vue:59 +#: front/src/components/mixins/Translations.vue:71 #: front/src/views/admin/moderation/AccountsDetail.vue:114 -#: front/src/components/mixins/Translations.vue:60 +#: front/src/components/mixins/Translations.vue:72 msgctxt "Content/*/*" msgid "Username" msgstr "Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ" -#: front/src/components/auth/Login.vue:15 +#: front/src/components/auth/LoginForm.vue:11 msgctxt "Content/Login/Input.Label/Noun" msgid "Username or email" -msgstr "Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð»Ð¸ пароль" +msgstr "Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð»Ð¸ почта" -#: front/src/components/instance/Stats.vue:13 -msgctxt "Content/About/Paragraph/Unit" -msgid "users" -msgstr "пользователи" - -#: front/src/components/Sidebar.vue:102 -#: front/src/components/manage/moderation/DomainsTable.vue:39 -#: front/src/components/mixins/Translations.vue:61 +#: front/src/components/Sidebar.vue:106 +#: front/src/components/manage/moderation/DomainsTable.vue:47 +#: front/src/components/mixins/Translations.vue:73 #: src/views/admin/Settings.vue:81 front/src/views/admin/users/Base.vue:5 #: src/views/admin/users/UsersList.vue:21 -#: front/src/components/mixins/Translations.vue:62 +#: front/src/components/mixins/Translations.vue:74 msgctxt "*/*/*/Noun" msgid "Users" msgstr "Пользователи" +#: front/src/components/Home.vue:110 +msgctxt "Content/Home/Paragraph" +msgid "Users on this pod also get %{ quota } of free storage to upload their own content!" +msgstr "Пользователи Ñтого узла так же получают %{ quota } меÑта беÑплатно, чтобы делитьÑÑ Ñвоей музыкой!" + #: front/src/components/Footer.vue:29 msgctxt "Footer/*/Title" msgid "Using Funkwhale" @@ -4869,7 +5214,7 @@ msgstr "О Funkwhale" #: front/src/components/Footer.vue:13 msgctxt "Footer/*/List item" msgid "Version %{version}" -msgstr "ИÑходный код (%{version})" +msgstr "ВерÑÐ¸Ñ (%{version})" #: front/src/views/content/libraries/Quota.vue:29 #: front/src/views/content/libraries/Quota.vue:56 @@ -4878,124 +5223,139 @@ msgctxt "Content/Library/Link/Verb" msgid "View files" msgstr "ПроÑмотреть файлы" -#: front/src/components/library/AlbumBase.vue:81 -#: front/src/components/library/ArtistBase.vue:92 -#: front/src/components/library/TrackBase.vue:100 -#: front/src/views/admin/library/AlbumDetail.vue:42 -#: front/src/views/admin/library/ArtistDetail.vue:41 +#: front/src/components/library/AlbumBase.vue:95 +#: front/src/components/library/ArtistBase.vue:107 +#: front/src/components/library/TrackBase.vue:111 +#: front/src/views/admin/library/AlbumDetail.vue:48 +#: front/src/views/admin/library/ArtistDetail.vue:46 #: front/src/views/admin/library/LibraryDetail.vue:34 #: front/src/views/admin/library/LibraryDetail.vue:45 -#: front/src/views/admin/library/TrackDetail.vue:41 +#: front/src/views/admin/library/TagDetail.vue:32 +#: front/src/views/admin/library/TrackDetail.vue:47 #: front/src/views/admin/library/UploadDetail.vue:35 #: front/src/views/admin/library/UploadDetail.vue:46 #: front/src/views/admin/moderation/AccountsDetail.vue:37 #: front/src/views/admin/moderation/AccountsDetail.vue:45 +#: front/src/views/admin/moderation/DomainsDetail.vue:30 msgctxt "Content/Moderation/Link/Verb" msgid "View in Django's admin" -msgstr "" +msgstr "ПоÑмотреть в админке Django" + +#: front/src/components/Home.vue:169 +msgctxt "Content/Home/Link" +msgid "View more…" +msgstr "Загрузить ещё…" -#: front/src/components/library/AlbumBase.vue:61 -#: front/src/components/library/ArtistBase.vue:72 -#: front/src/components/library/TrackBase.vue:80 +#: front/src/components/library/AlbumBase.vue:62 +#: front/src/components/library/ArtistBase.vue:73 +#: front/src/components/library/TrackBase.vue:78 #: front/src/components/metadata/ArtistCard.vue:49 #: front/src/components/metadata/ReleaseCard.vue:53 msgctxt "Content/*/*/Clickable, Verb" msgid "View on MusicBrainz" msgstr "Смотреть на MusicBrainz" +#: front/src/components/manage/moderation/ReportCard.vue:124 +msgctxt "Content/Moderation/Link" +msgid "View public page" +msgstr "ПоÑмотреть публичную Ñтраницу" + #: front/src/components/manage/library/LibrariesTable.vue:11 #: front/src/components/manage/library/LibrariesTable.vue:51 #: front/src/components/manage/library/UploadsTable.vue:11 #: front/src/components/manage/library/UploadsTable.vue:63 #: front/src/views/admin/library/LibraryDetail.vue:94 #: front/src/views/admin/library/UploadDetail.vue:101 +#: front/src/views/content/libraries/Form.vue:18 msgctxt "*/*/*" msgid "Visibility" msgstr "ВидимоÑÑ‚ÑŒ" -#: front/src/views/content/libraries/Form.vue:18 -msgctxt "Content/Library/Dropdown.Label" -msgid "Visibility" -msgstr "ВидимоÑÑ‚ÑŒ" +#: front/src/components/Home.vue:91 +msgctxt "Content/Home/Link" +msgid "Visit funkwhale.audio" +msgstr "ПоÑетить funkwhale.audio" #: front/src/components/library/AlbumDetail.vue:4 msgctxt "Content/Album/" msgid "Volume %{ number }" -msgstr "" +msgstr "Том %{ number }" #: front/src/components/federation/FetchButton.vue:69 msgctxt "Popup/*/Loading.Title" msgid "Waiting for result…" -msgstr "Загружаем ваше избранное..." +msgstr "Ждем результатов…" + +#: front/src/components/auth/Settings.vue:285 +msgctxt "Content/Settings/Error message.Title" +msgid "We cannot delete your account" +msgstr "Ðам не удалоÑÑŒ удалить Ваш аккаунт" -#: front/src/components/auth/Login.vue:7 +#: front/src/components/auth/LoginForm.vue:3 msgctxt "Content/Login/Error message.Title" msgid "We cannot log you in" -msgstr "Мы не Ñмогли Ñохранить ваши наÑтройки" +msgstr "Вход не удалÑÑ" #: front/src/components/auth/ApplicationForm.vue:3 msgctxt "Content/*/Error message.Title" msgid "We cannot save your changes" -msgstr "Ðам не удалоÑÑŒ Ñоздать ваш аккаунт" +msgstr "Мы не Ñмогли Ñохранить Ваши изменениÑ" -#: front/src/components/Home.vue:122 -msgctxt "Content/Home/List item" -msgid "We do not track you or bother you with ads" -msgstr "Мы не отÑлеживаем Ð²Ð°Ñ Ð¸ не надоедаем вам рекламой" +#: front/src/views/Notifications.vue:39 +msgctxt "Content/Notifications/Paragraph" +msgid "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!" +msgstr "Мы заметили, Ð’Ñ‹ уже давно Ñ Ð½Ð°Ð¼Ð¸. ЕÑли Funkwhale Вам полезен, Ð’Ñ‹ можете помочь нам Ñделать его ещё лучше!" #: front/src/components/library/FileUpload.vue:39 msgctxt "Content/Library/Link" msgid "We recommend using Picard for that purpose." -msgstr "мы рекомендуем иÑпользовать Picard Ð´Ð»Ñ Ñтого" +msgstr "Мы рекомендуем иÑпользовать Picard Ð´Ð»Ñ Ñтого." -#: front/src/components/Home.vue:7 -msgctxt "Content/Home/Title" -msgid "We think listening to music should be simple." -msgstr "Мы Ñчитаем что проÑлушивание музыки должно быть проÑтым." +#: front/src/components/moderation/ReportModal.vue:35 +msgctxt "*/*/Field,Help" +msgid "We'll use this email if we need to contact you regarding this report." +msgstr "Мы воÑпользуемÑÑ Ñтим адреÑом, еÑли нам потребуетÑÑ ÑвÑзатьÑÑ Ñ Ð’Ð°Ð¼Ð¸ по вопроÑам, ÑвÑзанным Ñ Ð’Ð°ÑˆÐµÐ¹ жалобой." -#: front/src/components/Home.vue:148 +#: front/src/components/Home.vue:207 msgctxt "Head/Home/Title" msgid "Welcome" msgstr "Добро пожаловать" #: front/src/components/Home.vue:5 -msgctxt "Content/Home/Title/Verb" -msgid "Welcome on Funkwhale" -msgstr "Добро пожаловать в Funkwhale" - -#: front/src/components/Home.vue:24 -msgctxt "Content/Home/Title" -msgid "Why funkwhale?" -msgstr "Почему funkwhale?" +msgctxt "Content/Home/Header" +msgid "Welcome to %{ podName }!" +msgstr "Добро пожаловать на %{ podName }!" -#: front/src/components/audio/EmbedWizard.vue:13 +#: front/src/components/audio/EmbedWizard.vue:23 msgctxt "Popup/Embed/Input.Label" msgid "Widget height" -msgstr "" +msgstr "Ð’Ñ‹Ñота виджета" -#: front/src/components/audio/EmbedWizard.vue:6 +#: front/src/components/audio/EmbedWizard.vue:16 msgctxt "Popup/Embed/Input.Label" msgid "Widget width" -msgstr "" +msgstr "Ширина виджета" #: front/src/components/auth/ApplicationForm.vue:157 msgctxt "Content/OAuth Scopes/Label/Verb" msgid "Write" -msgstr "" +msgstr "ЗапиÑÑŒ" #: front/src/components/auth/Authorize.vue:21 msgctxt "Content/Auth/Label/Noun" msgid "Write-only" -msgstr "" +msgstr "Только запиÑÑŒ" #: front/src/components/auth/ApplicationForm.vue:158 msgctxt "Content/OAuth Scopes/Help Text" msgid "Write-only access to user data" -msgstr "" +msgstr "ДоÑтуп к данным Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи" -#: front/src/components/Sidebar.vue:129 +#: front/src/components/Sidebar.vue:133 #: front/src/components/manage/moderation/AccountsTable.vue:72 -#: front/src/components/manage/moderation/DomainsTable.vue:58 +#: front/src/components/manage/moderation/DomainsTable.vue:12 +#: front/src/components/manage/moderation/DomainsTable.vue:69 +#: front/src/views/admin/moderation/DomainsDetail.vue:109 msgctxt "*/*/*" msgid "Yes" msgstr "Да" @@ -5003,39 +5363,27 @@ msgstr "Да" #: front/src/components/auth/Logout.vue:8 msgctxt "Content/Login/Button.Label" msgid "Yes, log me out!" -msgstr "" +msgstr "Да, выйти!" #: front/src/views/content/libraries/Form.vue:19 msgctxt "Content/Library/Paragraph" -msgid "" -"You are able to share your library with other people, regardless of its " -"visibility." -msgstr "" -"Ð’Ñ‹ Ñможете делитьÑÑ Ð²Ð°ÑˆÐµÐ¹ библиотекой Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸ людьми незавиÑимо от её " -"видимоÑти." +msgid "You are able to share your library with other people, regardless of its visibility." +msgstr "Ð’Ñ‹ Ñможете делитьÑÑ Ð’Ð°ÑˆÐµÐ¹ библиотекой Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸ людьми незавиÑимо от её видимоÑти." #: front/src/components/library/FileUpload.vue:32 msgctxt "Content/Library/Paragraph" -msgid "" -"You are about to upload music to your library. Before proceeding, please " -"ensure that:" -msgstr "" -"Ð’Ñ‹ ÑобираетеÑÑŒ загрузить музыку в вашу библиотеку. Перед тем как продолжить," -" убедитеÑÑŒ что:" +msgid "You are about to upload music to your library. Before proceeding, please ensure that:" +msgstr "Ð’Ñ‹ ÑобираетеÑÑŒ загрузить музыку в Вашу библиотеку. Перед тем как продолжить, убедитеÑÑŒ что:" #: front/src/components/SetInstanceModal.vue:12 msgctxt "Popup/Login/Paragraph" -msgid "" -"You are currently connected to <a href=\"%{ url }\" target=\"_blank\">%{ " -"hostname } <i class=\"external icon\"/></a>. If you continue, you will " -"be disconnected from your current instance and all your local data will be " -"deleted." -msgstr "" +msgid "You are currently connected to <a href=\"%{ url }\" target=\"_blank\">%{ hostname } <i class=\"external icon\"/></a>. If you continue, you will be disconnected from your current instance and all your local data will be deleted." +msgstr "Ð’ наÑтоÑщий момент Ð’Ñ‹ Ñоединены Ñ <a href=\"%{ url }\" target=\"_blank\">%{ hostname } <i class=\"external icon\"/></a>. ЕÑли Ð’Ñ‹ продолжите, Ð’Ñ‹ будете отÑоединены от Вашего текущего узла и вÑе Ваши меÑтные данные будут удалены." #: front/src/components/library/ArtistDetail.vue:6 msgctxt "Content/Artist/Paragraph" msgid "You are currently hiding content related to this artist." -msgstr "" +msgstr "Ð¡ÐµÐ¹Ñ‡Ð°Ñ Ð’Ñ‹ Ñкрываете Ñодержимое, ÑвÑзанное Ñ Ñтим иÑполнителем." #: front/src/components/auth/Logout.vue:7 msgctxt "Content/Login/Paragraph" @@ -5044,166 +5392,145 @@ msgstr "Ð’Ñ‹ вошли как %{ username }" #: front/src/components/library/FileUpload.vue:35 msgctxt "Content/Library/List item" -msgid "" -"You are not uploading copyrighted content in a public library, otherwise you" -" may be infringing the law" -msgstr "" +msgid "You are not uploading copyrighted content in a public library, otherwise you may be infringing the law" +msgstr "Ð’Ñ‹ не загружаете контент, защищенный авторÑкими правами, в публичные библиотеки, Ñто может быть нарушением закона" #: front/src/components/SetInstanceModal.vue:98 msgctxt "*/Instance/Message" msgid "You are now using the Funkwhale instance at %{ url }" -msgstr "" +msgstr "Ð’Ñ‹ иÑпользуете узел Funkwhale на %{ url }" #: front/src/views/content/Home.vue:17 msgctxt "Content/Library/Paragraph" -msgid "" -"You can follow libraries from other users to get access to new music. Public" -" libraries can be followed immediatly, while following a private library " -"requires approval from its owner." -msgstr "" -"Ð’Ñ‹ можете подпиÑатьÑÑ Ð½Ð° библиотеки других пользователей чтобы получать " -"доÑтуп к новой музыке. Ðа публичные библиотеки можно подпиÑатьÑÑ Ñразу, в то" -" Ð²Ñ€ÐµÐ¼Ñ ÐºÐ°Ðº подпиÑка на приватную библиотеку требует Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ Ð²Ð»Ð°Ð´ÐµÐ»ÑŒÑ†Ð°." - -#: front/src/components/Home.vue:128 -msgctxt "Content/Home/List item" -msgid "" -"You can invite friends and family to your instance so they can enjoy your " -"music" -msgstr "" -"Ð’Ñ‹ можете приглаÑить друзей и Ñемью на ваш узел чтобы они могли наÑлаждатьÑÑ" -" вашей музыкой" +msgid "You can 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." +msgstr "Ð’Ñ‹ можете подпиÑатьÑÑ Ð½Ð° библиотеки других пользователей чтобы получать доÑтуп к новой музыке. Ðа публичные библиотеки можно подпиÑатьÑÑ Ñразу, в то Ð²Ñ€ÐµÐ¼Ñ ÐºÐ°Ðº подпиÑка на приватную библиотеку требует Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ Ð²Ð»Ð°Ð´ÐµÐ»ÑŒÑ†Ð°." #: front/src/components/moderation/FilterModal.vue:31 msgctxt "Popup/Moderation/Paragraph" -msgid "" -"You can manage and update your filters anytime from your account settings." -msgstr "" +msgid "You can manage and update your filters any time from your account settings." +msgstr "Ð’Ñ‹ можете управлÑÑ‚ÑŒ Ñвоими фильтрами в любой момент через наÑтройки аккаунта." #: front/src/views/auth/EmailConfirm.vue:24 msgctxt "Content/Signup/Paragraph" msgid "You can now use the service without limitations." -msgstr "" -"Ваш Ð°Ð´Ñ€ÐµÑ Ñлектронной почты был подтверждён, теперь вы можете пользоватьÑÑ " -"ÑервиÑом без ограничений." +msgstr "Теперь Ð’Ñ‹ можете пользоватьÑÑ ÑервиÑом без ограничений." + +#: front/src/components/auth/Settings.vue:278 +msgctxt "Content/Settings/Paragraph'" +msgid "You can permanently and irreversibly delete your account and all the associated data using the form below. You will be asked for confirmation." +msgstr "Ð’Ñ‹ можете окончательно и беÑповоротно удалить Ваш аккаунт и вÑе ÑвÑзанные Ñ Ð½Ð¸Ð¼ данные, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ñ„Ð¾Ñ€Ð¼Ñƒ ниже. ПотребуетÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ðµ подтверждение." #: front/src/components/library/radios/Builder.vue:7 msgctxt "Content/Radio/Paragraph" -msgid "" -"You can use this interface to build your own custom radio, which will play " -"tracks according to your criteria." -msgstr "" -"Ð’Ñ‹ можете иÑпользовать Ñтот Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ñ‡Ñ‚Ð¾Ð±Ñ‹ Ñоздать ÑобÑтвенное радио, " -"которое будет проигрывать треки ÑоглаÑно вашим критериÑм." +msgid "You can use this interface to build your own custom radio, which will play tracks according to your criteria." +msgstr "Ð’Ñ‹ можете иÑпользовать Ñтот Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ñ‡Ñ‚Ð¾Ð±Ñ‹ Ñоздать ÑобÑтвенное радио, которое будет проигрывать треки ÑоглаÑно Вашим критериÑм." #: front/src/components/auth/SubsonicTokenForm.vue:7 msgctxt "Content/Settings/Paragraph" -msgid "" -"You can use those to enjoy your playlist and music in offline mode, on your " -"smartphone or tablet, for instance." -msgstr "" -"Ð’Ñ‹ можете наÑлаждатьÑÑ Ð²Ð°ÑˆÐ¸Ð¼ ÑпиÑком воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¸ музыкой в режиме " -"оффлайн, например Ñ Ð²Ð°ÑˆÐµÐ³Ð¾ Ñмартфона или планшета." +msgid "You can use those to enjoy your playlist and music in offline mode, on your smartphone or tablet, for instance." +msgstr "Ð’Ñ‹ можете наÑлаждатьÑÑ Ð’Ð°ÑˆÐ¸Ð¼ ÑпиÑком воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¸ музыкой в режиме оффлайн, например Ñ Ð’Ð°ÑˆÐµÐ³Ð¾ Ñмартфона или планшета." #: front/src/components/auth/Settings.vue:202 msgctxt "Content/Applications/Paragraph" msgid "You don't have any application connected with your account." -msgstr "У Ð½Ð°Ñ Ð½ÐµÑ‚ уведомлений Ð´Ð»Ñ Ð¿Ð¾ÐºÐ°Ð·Ð°!" +msgstr "У Ð’Ð°Ñ Ð½ÐµÑ‚ приложений, ÑвÑзанных Ñ Ð’Ð°ÑˆÐµÐ¹ учётной запиÑью." #: front/src/components/auth/Settings.vue:261 msgctxt "Content/Applications/Paragraph" msgid "You don't have any configured application yet." -msgstr "У Ð½Ð°Ñ Ð½ÐµÑ‚ уведомлений Ð´Ð»Ñ Ð¿Ð¾ÐºÐ°Ð·Ð°!" +msgstr "У Ð’Ð°Ñ Ð¿Ð¾ÐºÐ° нет наÑтроенных приложений." #: front/src/views/admin/moderation/AccountsDetail.vue:75 msgctxt "Content/Moderation/Card.Title" msgid "You don't have any rule in place for this account." -msgstr "У Ð½Ð°Ñ Ð½ÐµÑ‚ уведомлений Ð´Ð»Ñ Ð¿Ð¾ÐºÐ°Ð·Ð°!" +msgstr "У Ð’Ð°Ñ Ð½ÐµÑ‚ уÑтановленных правил Ð´Ð»Ñ Ñтого аккаунта." -#: front/src/views/admin/moderation/DomainsDetail.vue:39 +#: front/src/views/admin/moderation/DomainsDetail.vue:67 msgctxt "Content/Moderation/Card.Title" msgid "You don't have any rule in place for this domain." -msgstr "У Ð½Ð°Ñ Ð½ÐµÑ‚ уведомлений Ð´Ð»Ñ Ð¿Ð¾ÐºÐ°Ð·Ð°!" +msgstr "У Ð’Ð°Ñ Ð½ÐµÑ‚ уÑтановленных правил Ð´Ð»Ñ Ñтого домена." #: front/src/components/library/EditForm.vue:52 msgctxt "Content/Library/Paragraph" -msgid "" -"You don't have the permission to edit this object, but you can suggest " -"changes. Once submitted, suggestions will be reviewed before approval." -msgstr "" +msgid "You don't have the permission to edit this object, but you can suggest changes. Once submitted, suggestions will be reviewed before approval." +msgstr "Ð’Ñ‹ не имеете разрешений Ð´Ð»Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñтого объекта, но Ð’Ñ‹ можете предложить правки. ПоÑле отправки правки будут раÑÑмотрены перед применением." -#: front/src/components/Sidebar.vue:171 +#: front/src/components/Sidebar.vue:175 msgctxt "Sidebar/Player/Title" msgid "You have a radio playing" -msgstr "У Ð²Ð°Ñ Ð¿Ñ€Ð¾Ð¸Ð³Ñ€Ñ‹Ð²Ð°ÐµÑ‚ÑÑ Ñ€Ð°Ð´Ð¸Ð¾" +msgstr "У Ð’Ð°Ñ Ð¿Ñ€Ð¾Ð¸Ð³Ñ€Ñ‹Ð²Ð°ÐµÑ‚ÑÑ Ñ€Ð°Ð´Ð¸Ð¾" #: front/src/components/audio/Player.vue:69 msgctxt "Sidebar/Player/Error message.Paragraph" msgid "You may have a connectivity issue." -msgstr "" +msgstr "У Ð’Ð°Ñ Ð¼Ð¾Ð³ÑƒÑ‚ быть проблемы Ñо ÑвÑзью." #: front/src/components/auth/Settings.vue:100 msgctxt "Popup/Settings/List item" -msgid "" -"You will be logged out from this session and have to log in with the new one" -msgstr "" +msgid "You will be logged out from this session and have to log in with the new one" +msgstr "Ð’Ñ‹ будете отключены от Ñтого ÑеанÑа и Вам нужно будет зайти заново" #: front/src/components/auth/Authorize.vue:51 msgctxt "Content/Auth/Paragraph" msgid "You will be redirected to <strong>%{ url }</strong>" -msgstr "" +msgstr "Ð’Ñ‹ будете перенаправлены на <strong>%{ url }</strong>" #: front/src/components/auth/Authorize.vue:49 msgctxt "Content/Auth/Paragraph" msgid "You will be shown a code to copy-paste in the application." -msgstr "" +msgstr "Вам будет показан код Ð´Ð»Ñ Ð²Ñтавки в приложение." #: front/src/components/auth/Settings.vue:71 msgctxt "Content/Settings/Paragraph" -msgid "" -"You will have to update your password on your clients that use this " -"password." -msgstr "" -"Вам потребуетÑÑ Ð¾Ð±Ð½Ð¾Ð²Ð¸Ñ‚ÑŒ пароль на Ñвоих клиентах чтобы иÑпользовать его." +msgid "You will have to update your password on your clients that use this password." +msgstr "Вам потребуетÑÑ Ð¾Ð±Ð½Ð¾Ð²Ð¸Ñ‚ÑŒ пароль на Ñвоих клиентах, которые иÑпользуют его." #: front/src/components/moderation/FilterModal.vue:20 msgctxt "Popup/Moderation/Paragraph" -msgid "" -"You will not see tracks, albums and user activity linked to this artist " -"anymore:" -msgstr "" +msgid "You will not see tracks, albums and user activity linked to this artist any more:" +msgstr "Ð’Ñ‹ больше не увидите треков, альбомов и активноÑти пользователей, ÑвÑзанной Ñ Ñтим иÑполнителем:" -#: front/src/components/auth/Signup.vue:13 +#: front/src/components/auth/SignupForm.vue:9 msgctxt "Content/Signup/Form/Paragraph" msgid "Your account cannot be created." -msgstr "СпиÑок воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ñоздан" +msgstr "Ваша ÑƒÑ‡Ñ‘Ñ‚Ð½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ не может быть Ñоздана." + +#: front/src/components/auth/Settings.vue:281 +msgctxt "Content/Settings/Paragraph'" +msgid "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." +msgstr "Ваш аккаунт будет удалён Ñ Ð½Ð°ÑˆÐ¸Ñ… Ñерверов в течение неÑкольких минут. Мы Ñообщим об удалении и другим Ñерверам, которые могут иметь чаÑтичные копии Ваших данных, чтобы они тоже произвели удаление. Обратите внимание, что некоторые из них могут быть недоÑтупны или откажутÑÑ Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ Ñту проÑьбу." #: front/src/components/auth/Settings.vue:215 msgctxt "Content/Settings/Title/Noun" msgid "Your applications" -msgstr "Ваши уведомлениÑ" +msgstr "Ваши приложениÑ" #: front/src/components/auth/Settings.vue:38 msgctxt "Content/Settings/Error message.Title" msgid "Your avatar cannot be saved" -msgstr "" +msgstr "Ваш аватар не может быть Ñохранён" + +#: front/src/components/auth/Settings.vue:527 +msgctxt "*/Auth/Message" +msgid "Your deletion request was submitted, your account and content will be deleted shortly" +msgstr "Ваш Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° удаление был отправлен, Ваш аккаунт и данные будут удалены в ближайшее времÑ" #: front/src/components/library/EditForm.vue:3 msgctxt "Content/Library/Paragraph" msgid "Your edit was successfully submitted." -msgstr "" +msgstr "Ваша правка была уÑпешно отправлена." #: front/src/components/favorites/List.vue:116 msgctxt "Head/Favorites/Title" msgid "Your Favorites" msgstr "Ваше избранное" -#: front/src/components/Home.vue:109 -msgctxt "Content/Home/Title" -msgid "Your music, your way" -msgstr "" +#: front/src/views/Notifications.vue:5 +msgctxt "Content/Notifications/Title" +msgid "Your messages" +msgstr "Ваши ÑообщениÑ" -#: front/src/views/Notifications.vue:4 +#: front/src/views/Notifications.vue:69 msgctxt "Content/Notifications/Title" msgid "Your notifications" msgstr "Ваши уведомлениÑ" @@ -5211,7 +5538,7 @@ msgstr "Ваши уведомлениÑ" #: front/src/components/auth/Settings.vue:76 msgctxt "Content/Settings/Error message.Title" msgid "Your password cannot be changed" -msgstr "" +msgstr "Ваш пароль не может быть изменён" #: front/src/views/auth/PasswordResetConfirm.vue:29 msgctxt "Content/Signup/Card.Paragraph" @@ -5220,43 +5547,38 @@ msgstr "Ваш пароль был уÑпешно обновлён." #: front/src/components/auth/Settings.vue:14 msgctxt "Content/Settings/Error message.Title" -msgid "Your settings can't be updateds" -msgstr "ÐаÑтройки обновлены" +msgid "Your settings can't be updated" +msgstr "ÐаÑтройки не могут быть обновлены" #: front/src/components/auth/Settings.vue:101 msgctxt "Popup/Settings/List item" -msgid "" -"Your Subsonic password will be changed to a new, random one, logging you out" -" from devices that used the old Subsonic password" -msgstr "" -"Ваш пароль Subsonic будет изменён на новый Ñлучайный, что приведёт к " -"отключению вÑех уÑтройÑтв, которые иÑпользовали Ñтарый пароль Subsonic" +msgid "Your Subsonic password will be changed to a new, random one, logging you out from devices that used the old Subsonic password" +msgstr "Ваш пароль Subsonic будет изменён на новый Ñлучайный, что приведёт к отключению вÑех уÑтройÑтв, которые иÑпользовали Ñтарый пароль Subsonic" -#: front/src/edits.js:47 -msgctxt "*/*/*/Short, Noun" -msgid "Position" -msgstr "ОпиÑание" +#: front/src/entities.js:126 +msgctxt "*/*/*/Noun" +msgid "MusicBrainz ID" +msgstr "Смотреть на MusicBrainz" -#: front/src/edits.js:54 -msgctxt "Content/Track/*/Noun" -msgid "Copyright" -msgstr "Копировать" +#: front/src/main.js:110 +msgctxt "*/Error/Paragraph" +msgid "You sent too many requests and have been rate limited, please try again in %{ delay }" +msgstr "Ð’Ñ‹ отправили Ñлишком много запроÑов и попали под временное ограничение, пожалуйÑта, попробуйте Ñнова через %{ delay }" -#: front/src/components/library/AlbumBase.vue:183 -#, fuzzy +#: front/src/main.js:113 +msgctxt "*/Error/Paragraph" +msgid "You sent too many requests and have been rate limited, please try again later" +msgstr "Ð’Ñ‹ отправили Ñлишком много запроÑов и попали под ограничение, пожалуйÑта, попробуйте позже" + +#: front/src/components/library/AlbumBase.vue:208 msgctxt "Content/Album/Header.Title" -msgid "" -"Album containing %{ count } track, by <a class=\"internal\" href=\"%{ " -"artistUrl }\">%{ artist }</a>" -msgid_plural "" -"Album containing %{ count } tracks, by <a class=\"internal\" href=\"%{ " -"artistUrl }\">%{ artist }</a>" -msgstr[0] "Ðльбом Ñодержит %{ count } трек от %{ artist }" -msgstr[1] "Ðльбом Ñодержит %{ count } трека от %{ artist }" -msgstr[2] "Ðльбом Ñодержит %{ count } треков от %{ artist }" - -#: front/src/components/audio/PlayButton.vue:220 -#, fuzzy +msgid "Album containing %{ count } track, by <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" +msgid_plural "Album containing %{ count } tracks, by <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" +msgstr[0] "Ðльбом Ñодержит %{ count } трек от <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" +msgstr[1] "Ðльбом Ñодержит %{ count } трека от <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" +msgstr[2] "Ðльбом Ñодержит %{ count } треков от <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" + +#: front/src/components/audio/PlayButton.vue:246 msgctxt "*/Queue/Message" msgid "%{ count } track was added to your queue" msgid_plural "%{ count } tracks were added to your queue" diff --git a/front/locales/sv/LC_MESSAGES/app.po b/front/locales/sv/LC_MESSAGES/app.po index 25c3596a676c575f82e9711ba0c461ce0bdb4b5d..5d4226f662af7df7f51c9b5dd88bb266c8f8f979 100644 --- a/front/locales/sv/LC_MESSAGES/app.po +++ b/front/locales/sv/LC_MESSAGES/app.po @@ -195,8 +195,8 @@ msgstr "Lägg till i favoriter" #: front/src/components/playlists/TrackPlaylistIcon.vue:6 #: front/src/components/playlists/TrackPlaylistIcon.vue:32 -msgid "Add to playlist..." -msgstr "Lägg till i spellista..." +msgid "Add to playlist…" +msgstr "Lägg till i spellista…" #: front/src/components/audio/PlayButton.vue:14 msgid "Add to queue" @@ -313,8 +313,8 @@ msgid "Artist page" msgstr "Artistsida" #: front/src/components/audio/Search.vue:65 -msgid "Artist, album, track..." -msgstr "Artist, album, spÃ¥r..." +msgid "Artist, album, track…" +msgstr "Artist, album, spÃ¥r…" #: front/src/components/audio/Search.vue:10 src/components/instance/Stats.vue:42 #: front/src/components/library/Artists.vue:119 src/components/library/Library.vue:7 @@ -702,8 +702,8 @@ msgid "Edit instance info" msgstr "Redigera info om instans" #: front/src/components/radios/Card.vue:20 src/views/playlists/Detail.vue:30 -msgid "Edit..." -msgstr "Redigera..." +msgid "Edit…" +msgstr "Redigera…" #: front/src/components/auth/Signup.vue:29 #: front/src/components/manage/users/UsersTable.vue:38 @@ -727,20 +727,20 @@ msgid "Ensure your music files are properly tagged before uploading them." msgstr "Se till att dina musikfiler är korrekt taggade innan du laddar upp dem." #: front/src/components/library/Radios.vue:140 -msgid "Enter a radio name..." -msgstr "Ange namn pÃ¥ radiostation..." +msgid "Enter a radio name…" +msgstr "Ange namn pÃ¥ radiostation…" #: front/src/components/library/Artists.vue:118 -msgid "Enter an artist name..." -msgstr "Ange ett artistnamn..." +msgid "Enter an artist name…" +msgstr "Ange ett artistnamn…" #: front/src/views/federation/LibraryList.vue:122 -msgid "Enter an library domain name..." +msgid "Enter an library domain name…" msgstr "" #: front/src/views/playlists/List.vue:104 -msgid "Enter an playlist name..." -msgstr "Ange ett spellistenamn..." +msgid "Enter an playlist name…" +msgstr "Ange ett spellistenamn…" #: front/src/components/auth/Signup.vue:98 msgid "Enter your email" @@ -751,8 +751,8 @@ msgid "Enter your invitation code (case insensitive)" msgstr "Ange din inbjudningskod (skiftlägesokänsligt)" #: front/src/components/metadata/Search.vue:114 -msgid "Enter your search query..." -msgstr "Ange dina söktermer..." +msgid "Enter your search query…" +msgstr "Ange dina söktermer…" #: front/src/components/auth/Signup.vue:97 msgid "Enter your username" @@ -1240,11 +1240,11 @@ msgid "Links" msgstr "" #: front/src/views/instance/Timeline.vue:4 -msgid "Loading timeline..." +msgid "Loading timeline…" msgstr "" #: front/src/components/favorites/List.vue:5 -msgid "Loading your favorites..." +msgid "Loading your favorites…" msgstr "" #: front/src/components/auth/Login.vue:78 @@ -1773,36 +1773,36 @@ msgid "Search an entity you want to import:" msgstr "" #: front/src/components/manage/library/RequestsTable.vue:180 -msgid "Search by artist, username, comment..." +msgid "Search by artist, username, comment…" msgstr "" #: front/src/components/library/import/BatchDetail.vue:188 -msgid "Search by source..." +msgid "Search by source…" msgstr "" #: front/src/components/library/import/BatchList.vue:116 -msgid "Search by submitter, source..." +msgid "Search by submitter, source…" msgstr "" #: front/src/components/federation/LibraryTrackTable.vue:182 #: front/src/components/manage/library/FilesTable.vue:175 -msgid "Search by title, artist, domain..." +msgid "Search by title, artist, domain…" msgstr "" #: front/src/components/federation/LibraryFollowTable.vue:140 -msgid "Search by username, domain..." +msgid "Search by username, domain…" msgstr "" #: front/src/components/manage/users/InvitationsTable.vue:152 -msgid "Search by username, email, code..." +msgid "Search by username, email, code…" msgstr "" #: front/src/components/manage/users/UsersTable.vue:162 -msgid "Search by username, email, name..." +msgid "Search by username, email, name…" msgstr "" #: front/src/components/audio/SearchBar.vue:20 -msgid "Search for artists, albums, tracks..." +msgid "Search for artists, albums, tracks…" msgstr "" #: front/src/components/audio/Search.vue:2 @@ -1837,7 +1837,7 @@ msgstr[0] "" msgstr[1] "" #: front/src/components/library/import/FileUpload.vue:22 -msgid "Select files to upload..." +msgid "Select files to upload…" msgstr "" #: front/src/components/common/ActionTable.vue:69 @@ -1866,7 +1866,7 @@ msgid "Settings updated successfully." msgstr "" #: front/src/components/auth/Profile.vue:24 -msgid "Settings..." +msgid "Settings…" msgstr "" #: front/src/components/manage/users/InvitationForm.vue:27 @@ -2030,7 +2030,7 @@ msgid "Suggested choices" msgstr "" #: front/src/components/playlists/Editor.vue:9 -msgid "Syncing changes to server..." +msgid "Syncing changes to server…" msgstr "" #: front/src/components/Home.vue:26 @@ -2206,7 +2206,7 @@ msgid "Uploaded files or external source" msgstr "" #: front/src/components/library/import/FileUpload.vue:57 -msgid "Uploading..." +msgid "Uploading…" msgstr "" #: front/src/App.vue:45 diff --git a/front/locales/zh_Hant/LC_MESSAGES/app.po b/front/locales/zh_Hant/LC_MESSAGES/app.po new file mode 100644 index 0000000000000000000000000000000000000000..d8a02a12216243f75a7fb2ed13c980f319a6bb08 --- /dev/null +++ b/front/locales/zh_Hant/LC_MESSAGES/app.po @@ -0,0 +1,5556 @@ +# Chinese translations for front package. +# Copyright (C) 2019 THE front'S COPYRIGHT HOLDER +# This file is distributed under the same license as the front package. +# Automatically generated, 2019. +# +msgid "" +msgstr "" +"Project-Id-Version: front 0.1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-10-01 15:15+0200\n" +"PO-Revision-Date: 2019-09-23 11:57+0200\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: zh_Hant\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" + +#: front/src/components/playlists/PlaylistModal.vue:9 +msgctxt "Popup/Playlist/Paragraph" +msgid "\"%{ title }\", by %{ artist }" +msgstr "" + +#: front/src/components/Sidebar.vue:24 +msgctxt "Sidebar/Queue/Tab.Title" +msgid "(%{ index } of %{ length })" +msgstr "" + +#: front/src/components/Sidebar.vue:22 +msgctxt "Sidebar/Queue/Tab.Title" +msgid "(empty)" +msgstr "" + +#: front/src/components/auth/Authorize.vue:16 +msgctxt "Content/Auth/Title" +msgid "%{ app } wants to access your Funkwhale account" +msgstr "" + +#: front/src/components/About.vue:173 src/components/Home.vue:56 +msgctxt "Content/Home/Stat" +msgid "%{ count } active user" +msgid_plural "%{ count } active users" +msgstr[0] "" +msgstr[1] "" + +#: front/src/components/About.vue:182 +msgctxt "Content/Home/Stat" +msgid "%{ count } albums" +msgid_plural "%{ count } albums" +msgstr[0] "" +msgstr[1] "" + +#: front/src/components/About.vue:152 +msgctxt "*/*/*" +msgid "%{ count } allowed domains" +msgid_plural "%{ count } allowed domains" +msgstr[0] "" +msgstr[1] "" + +#: front/src/components/About.vue:179 +msgctxt "Content/Home/Stat" +msgid "%{ count } artists" +msgid_plural "%{ count } artists" +msgstr[0] "" +msgstr[1] "" + +#: front/src/components/About.vue:176 src/components/Home.vue:59 +msgctxt "Content/Home/Stat" +msgid "%{ count } hour of music" +msgid_plural "%{ count } hours of music" +msgstr[0] "" +msgstr[1] "" + +#: front/src/components/About.vue:188 +msgctxt "Content/Home/Stat" +msgid "%{ count } listenings" +msgid_plural "%{ count } listenings" +msgstr[0] "" +msgstr[1] "" + +#: front/src/components/common/ActionTable.vue:68 +msgctxt "Content/*/Paragraph" +msgid "%{ count } on %{ total } selected" +msgid_plural "%{ count } on %{ total } selected" +msgstr[0] "" +msgstr[1] "" + +#: front/src/components/Sidebar.vue:125 src/components/audio/album/Card.vue:52 +#: front/src/views/content/libraries/Card.vue:40 +#: src/views/content/remote/Card.vue:43 +msgctxt "*/*/*" +msgid "%{ count } track" +msgid_plural "%{ count } tracks" +msgstr[0] "" +msgstr[1] "" + +#: front/src/components/library/ArtistBase.vue:13 +msgctxt "Content/Artist/Paragraph" +msgid "%{ count } track in %{ albumsCount } albums" +msgid_plural "%{ count } tracks in %{ albumsCount } albums" +msgstr[0] "" +msgstr[1] "" + +#: front/src/components/library/radios/Builder.vue:81 +msgctxt "Content/Radio/Table.Paragraph/Short" +msgid "%{ count } track matching combined filters" +msgid_plural "%{ count } tracks matching combined filters" +msgstr[0] "" +msgstr[1] "" + +#: front/src/components/About.vue:185 +msgctxt "Content/Home/Stat" +msgid "%{ count } tracks" +msgid_plural "%{ count } tracks" +msgstr[0] "" +msgstr[1] "" + +#: front/src/components/playlists/Card.vue:28 +msgctxt "Content/*/Card/List item" +msgid "%{ count} track" +msgid_plural "%{ count } tracks" +msgstr[0] "" +msgstr[1] "" + +#: front/src/views/content/libraries/Quota.vue:11 +msgctxt "Content/Library/Paragraph" +msgid "%{ current } used on %{ max } allowed" +msgstr "" + +#: front/src/components/common/Duration.vue:2 +msgctxt "Content/*/Paragraph" +msgid "%{ hours } h %{ minutes } min" +msgstr "" + +#: front/src/components/common/Duration.vue:5 +msgctxt "Content/*/Paragraph" +msgid "%{ minutes } min" +msgstr "" + +#: front/src/components/notifications/NotificationRow.vue:40 +msgctxt "Content/Notifications/Paragraph" +msgid "%{ username } accepted your follow on library \"%{ library }\"" +msgstr "" + +#: front/src/components/notifications/NotificationRow.vue:39 +msgctxt "Content/Notifications/Paragraph" +msgid "%{ username } followed your library \"%{ library }\"" +msgstr "" + +#: front/src/components/notifications/NotificationRow.vue:41 +msgctxt "Content/Notifications/Paragraph" +msgid "%{ username } wants to follow your library \"%{ library }\"" +msgstr "" + +#: front/src/components/auth/Profile.vue:46 +msgctxt "Head/Profile/Title" +msgid "%{ username }'s profile" +msgstr "" + +#: front/src/components/playlists/PlaylistModal.vue:21 +msgctxt "Popup/Playlist/Paragraph" +msgid "<strong>%{ track }</strong> is already in <strong>%{ playlist }</strong>." +msgstr "" + +#: front/src/components/audio/artist/Card.vue:11 +msgctxt "Content/Artist/Card" +msgid "1 album" +msgid_plural "%{ count } albums" +msgstr[0] "" +msgstr[1] "" + +#: front/src/components/favorites/List.vue:10 +msgctxt "Content/Favorites/Title" +msgid "1 favorite" +msgid_plural "%{ count } favorites" +msgstr[0] "" +msgstr[1] "" + +#: front/src/components/audio/artist/Card.vue:15 +msgctxt "Content/Artist/Card" +msgid "1 track" +msgid_plural "%{ count } tracks" +msgstr[0] "" +msgstr[1] "" + +#: front/src/views/Notifications.vue:21 src/views/Notifications.vue:55 +msgctxt "*/*/*" +msgid "30 days" +msgstr "" + +#: front/src/views/Notifications.vue:22 src/views/Notifications.vue:56 +msgctxt "*/*/*" +msgid "60 days" +msgstr "" + +#: front/src/views/Notifications.vue:23 src/views/Notifications.vue:57 +msgctxt "*/*/*" +msgid "90 days" +msgstr "" + +#: front/src/components/library/FileUpload.vue:264 +msgctxt "Content/Library/Help text" +msgid "A network error occurred while uploading this file" +msgstr "" + +#: front/src/components/library/EditForm.vue:161 +msgctxt "*/*/Placeholder" +msgid "A short summary describing your changes." +msgstr "" + +#: front/src/components/About.vue:5 +msgctxt "Content/Home/Header" +msgid "About %{ podName }" +msgstr "" + +#: front/src/components/Footer.vue:6 +msgctxt "Footer/About/Title" +msgid "About %{instanceName}" +msgstr "" + +#: front/src/components/Footer.vue:53 src/components/Home.vue:85 +msgctxt "Footer/*/Title/Short" +msgid "About Funkwhale" +msgstr "" + +#: front/src/components/Footer.vue:10 +msgctxt "Footer/About/List item.Link" +msgid "About page" +msgstr "" + +#: front/src/components/Home.vue:19 +msgctxt "Content/Home/Header" +msgid "About this Funkwhale pod" +msgstr "" + +#: front/src/components/About.vue:21 src/components/About.vue:51 +msgctxt "Content/About/Header" +msgid "About this pod" +msgstr "" + +#: front/src/views/content/libraries/Detail.vue:48 +msgctxt "Content/Library/Button.Label" +msgid "Accept" +msgstr "" + +#: front/src/views/content/libraries/Detail.vue:40 +msgctxt "Content/Library/Table/Short" +msgid "Accepted" +msgstr "" + +#: front/src/components/auth/SubsonicTokenForm.vue:117 +msgctxt "Content/Settings/Message" +msgid "Access disabled" +msgstr "" + +#: front/src/components/mixins/Translations.vue:85 +#: front/src/components/mixins/Translations.vue:86 +msgctxt "Content/OAuth Scopes/Paragraph" +msgid "Access to audio files, libraries, artists, albums and tracks" +msgstr "" + +#: front/src/components/mixins/Translations.vue:109 +#: front/src/components/mixins/Translations.vue:110 +msgctxt "Content/OAuth Scopes/Paragraph" +msgid "Access to content filters" +msgstr "" + +#: front/src/components/mixins/Translations.vue:117 +#: front/src/components/mixins/Translations.vue:118 +msgctxt "Content/OAuth Scopes/Paragraph" +msgid "Access to edits" +msgstr "" + +#: front/src/components/mixins/Translations.vue:81 +#: front/src/components/mixins/Translations.vue:82 +msgctxt "Content/OAuth Scopes/Paragraph" +msgid "Access to email, username, and profile information" +msgstr "" + +#: front/src/components/mixins/Translations.vue:89 +#: front/src/components/mixins/Translations.vue:90 +msgctxt "Content/OAuth Scopes/Paragraph" +msgid "Access to favorites" +msgstr "" + +#: front/src/components/mixins/Translations.vue:97 +#: front/src/components/mixins/Translations.vue:98 +msgctxt "Content/OAuth Scopes/Paragraph" +msgid "Access to follows" +msgstr "" + +#: front/src/components/mixins/Translations.vue:93 +#: front/src/components/mixins/Translations.vue:94 +msgctxt "Content/OAuth Scopes/Paragraph" +msgid "Access to listening history" +msgstr "" + +#: front/src/components/mixins/Translations.vue:113 +#: front/src/components/mixins/Translations.vue:114 +msgctxt "Content/OAuth Scopes/Paragraph" +msgid "Access to notifications" +msgstr "" + +#: front/src/components/mixins/Translations.vue:101 +#: front/src/components/mixins/Translations.vue:102 +msgctxt "Content/OAuth Scopes/Paragraph" +msgid "Access to playlists" +msgstr "" + +#: front/src/components/mixins/Translations.vue:105 +#: front/src/components/mixins/Translations.vue:106 +msgctxt "Content/OAuth Scopes/Paragraph" +msgid "Access to radios" +msgstr "" + +#: front/src/components/manage/library/UploadsTable.vue:67 +#: front/src/components/mixins/Translations.vue:55 +#: front/src/views/admin/library/UploadDetail.vue:175 +#: front/src/components/mixins/Translations.vue:56 +msgctxt "Content/*/*/Noun" +msgid "Accessed date" +msgstr "" + +#: front/src/components/manage/library/LibrariesTable.vue:49 +#: front/src/components/manage/library/UploadsTable.vue:61 +#: front/src/components/manage/moderation/ReportCard.vue:156 +#: front/src/components/mixins/Report.vue:13 +#: front/src/views/admin/library/LibraryDetail.vue:113 +#: front/src/views/admin/library/UploadDetail.vue:111 +#: front/src/components/mixins/Report.vue:14 +msgctxt "*/*/*/Noun" +msgid "Account" +msgstr "" + +#: front/src/views/admin/moderation/AccountsDetail.vue:107 +msgctxt "Content/Moderation/Title" +msgid "Account data" +msgstr "" + +#: front/src/components/auth/Settings.vue:5 +msgctxt "Content/Settings/Title" +msgid "Account settings" +msgstr "" + +#: front/src/components/auth/Settings.vue:544 +msgctxt "Head/Settings/Title" +msgid "Account Settings" +msgstr "" + +#: front/src/components/manage/users/UsersTable.vue:39 +msgctxt "Content/Admin/Table.Label/Short, Noun" +msgid "Account status" +msgstr "" + +#: front/src/views/auth/PasswordReset.vue:14 +msgctxt "Content/Signup/Input.Label" +msgid "Account's email" +msgstr "" + +#: front/src/views/admin/moderation/AccountsList.vue:3 +#: front/src/views/admin/moderation/AccountsList.vue:24 +#: front/src/views/admin/moderation/Base.vue:11 +msgctxt "*/Moderation/Title" +msgid "Accounts" +msgstr "" + +#: front/src/views/content/libraries/Detail.vue:29 +msgctxt "Content/Library/Table.Label" +msgid "Action" +msgstr "" + +#: front/src/components/common/ActionTable.vue:101 +msgctxt "Content/*/Paragraph" +msgid "Action %{ action } was launched successfully on %{ count } element" +msgid_plural "Action %{ action } was launched successfully on %{ count } elements" +msgstr[0] "" +msgstr[1] "" + +#: front/src/components/common/ActionTable.vue:22 +#: front/src/components/library/radios/Builder.vue:65 +#: front/src/components/manage/moderation/ReportCard.vue:210 +msgctxt "Content/*/*/Noun" +msgid "Actions" +msgstr "" + +#: front/src/components/manage/users/UsersTable.vue:54 +msgctxt "Content/Admin/Table" +msgid "Active" +msgstr "" + +#: front/src/views/admin/library/AlbumDetail.vue:140 +#: front/src/views/admin/library/ArtistDetail.vue:128 +#: front/src/views/admin/library/LibraryDetail.vue:147 +#: front/src/views/admin/library/TagDetail.vue:83 +#: front/src/views/admin/library/TrackDetail.vue:192 +#: front/src/views/admin/library/UploadDetail.vue:160 +#: front/src/views/admin/moderation/AccountsDetail.vue:221 +#: front/src/views/admin/moderation/DomainsDetail.vue:173 +msgctxt "Content/Moderation/Title" +msgid "Activity" +msgstr "" + +#: front/src/components/mixins/Translations.vue:7 +#: front/src/components/mixins/Translations.vue:8 +msgctxt "Content/Settings/Dropdown.Label/Noun" +msgid "Activity visibility" +msgstr "" + +#: front/src/views/admin/moderation/DomainsList.vue:22 +msgctxt "Content/Moderation/Button/Verb" +msgid "Add" +msgstr "" + +#: front/src/views/admin/moderation/DomainsList.vue:13 +msgctxt "Content/Moderation/Form.Label/Verb" +msgid "Add a domain" +msgstr "" + +#: front/src/views/admin/moderation/AccountsDetail.vue:79 +msgctxt "Content/Moderation/Button/Verb" +msgid "Add a moderation policy" +msgstr "" + +#: front/src/components/manage/moderation/InstancePolicyForm.vue:4 +msgctxt "Content/Moderation/Card.Button.Label/Verb" +msgid "Add a new moderation rule" +msgstr "" + +#: front/src/views/content/Home.vue:35 +msgctxt "Content/Library/Title/Verb" +msgid "Add and manage content" +msgstr "" + +#: front/src/components/playlists/Editor.vue:28 +#: front/src/components/playlists/PlaylistModal.vue:31 +msgctxt "*/Playlist/Button.Label/Verb" +msgid "Add anyways" +msgstr "" + +#: front/src/components/Sidebar.vue:75 src/views/content/Base.vue:18 +msgctxt "*/Library/*/Verb" +msgid "Add content" +msgstr "" + +#: front/src/components/library/radios/Builder.vue:51 +msgctxt "Content/Radio/Button.Label/Verb" +msgid "Add filter" +msgstr "" + +#: front/src/components/library/radios/Builder.vue:41 +msgctxt "Content/Radio/Paragraph" +msgid "Add filters to customize your radio" +msgstr "" + +#: front/src/components/manage/moderation/NoteForm.vue:12 +msgctxt "Content/Moderation/Button.Label/Verb" +msgid "Add note" +msgstr "" + +#: front/src/components/manage/moderation/DomainsTable.vue:191 +#: front/src/views/admin/moderation/DomainsDetail.vue:46 +#: front/src/views/admin/moderation/DomainsList.vue:18 +msgctxt "Content/Moderation/Action/Verb" +msgid "Add to allow-list" +msgstr "" + +#: front/src/components/audio/PlayButton.vue:91 +msgctxt "*/Queue/Dropdown/Button/Title" +msgid "Add to current queue" +msgstr "" + +#: front/src/components/favorites/TrackFavoriteIcon.vue:4 +#: front/src/components/favorites/TrackFavoriteIcon.vue:28 +msgctxt "Content/Track/*/Verb" +msgid "Add to favorites" +msgstr "" + +#: front/src/components/playlists/TrackPlaylistIcon.vue:6 +#: front/src/components/playlists/TrackPlaylistIcon.vue:34 +msgctxt "Sidebar/Player/Icon.Tooltip/Verb" +msgid "Add to playlist…" +msgstr "" + +#: front/src/components/audio/PlayButton.vue:15 +msgctxt "*/Queue/Dropdown/Button/Label/Short" +msgid "Add to queue" +msgstr "" + +#: front/src/components/playlists/PlaylistModal.vue:142 +msgctxt "Popup/Playlist/Table.Button.Tooltip/Verb" +msgid "Add to this playlist" +msgstr "" + +#: front/src/components/playlists/PlaylistModal.vue:68 +msgctxt "Popup/Playlist/Table.Button.Label/Verb" +msgid "Add track" +msgstr "" + +#: front/src/components/manage/users/UsersTable.vue:70 +msgctxt "Content/Admin/Table.User role" +msgid "Admin" +msgstr "" + +#: front/src/components/Sidebar.vue:79 +msgctxt "Sidebar/Admin/Title/Noun" +msgid "Administration" +msgstr "" + +#: front/src/components/audio/SearchBar.vue:33 +#: src/components/audio/track/Table.vue:9 +#: front/src/components/library/AlbumBase.vue:170 +#: front/src/components/library/ArtistBase.vue:212 +#: front/src/components/manage/library/TracksTable.vue:40 +#: front/src/components/metadata/Search.vue:134 +#: src/components/mixins/Report.vue:41 +#: front/src/views/admin/library/TrackDetail.vue:113 +#: front/src/views/content/libraries/FilesTable.vue:57 +#: front/src/components/mixins/Report.vue:42 +msgctxt "*/*/*" +msgid "Album" +msgstr "" + +#: front/src/views/admin/library/TrackDetail.vue:134 +msgctxt "*/*/*/Noun" +msgid "Album artist" +msgstr "" + +#: front/src/views/admin/library/AlbumDetail.vue:98 +msgctxt "Content/Moderation/Title" +msgid "Album data" +msgstr "" + +#: front/src/components/mixins/Translations.vue:61 +#: front/src/components/mixins/Translations.vue:62 +msgctxt "Content/*/Dropdown/Noun" +msgid "Album name" +msgstr "" + +#: front/src/components/audio/Search.vue:19 +#: src/components/library/Albums.vue:129 +#: front/src/components/library/Library.vue:7 +#: src/components/library/TagDetail.vue:28 +#: front/src/components/manage/library/ArtistsTable.vue:41 +#: front/src/components/manage/library/TagsTable.vue:43 +#: front/src/views/admin/library/AlbumsList.vue:24 +#: front/src/views/admin/library/ArtistDetail.vue:256 +#: front/src/views/admin/library/Base.vue:11 +#: front/src/views/admin/library/LibraryDetail.vue:238 +#: front/src/views/admin/library/TagDetail.vue:133 +#: front/src/views/admin/moderation/AccountsDetail.vue:366 +#: front/src/views/admin/moderation/DomainsDetail.vue:301 +msgctxt "*/*/*" +msgid "Albums" +msgstr "" + +#: front/src/components/library/ArtistDetail.vue:21 +msgctxt "Content/Artist/Title" +msgid "Albums by this artist" +msgstr "" + +#: front/src/components/manage/library/EditsCardList.vue:15 +#: front/src/components/manage/library/LibrariesTable.vue:13 +#: front/src/components/manage/library/UploadsTable.vue:13 +#: front/src/components/manage/library/UploadsTable.vue:22 +#: front/src/components/manage/moderation/DomainsTable.vue:11 +#: front/src/components/manage/users/InvitationsTable.vue:19 +#: front/src/components/moderation/ReportCategoryDropdown.vue:32 +#: front/src/views/admin/moderation/ReportsList.vue:17 +#: front/src/views/content/libraries/FilesTable.vue:13 +msgctxt "Content/*/Dropdown" +msgid "All" +msgstr "" + +#: front/src/components/common/ActionTable.vue:59 +msgctxt "Content/*/Paragraph" +msgid "All %{ count } element selected" +msgid_plural "All %{ count } elements selected" +msgstr[0] "" +msgstr[1] "" + +#: front/src/components/auth/Authorize.vue:107 +msgctxt "Head/Authorize/Title" +msgid "Allow application" +msgstr "" + +#: front/src/components/About.vue:136 +msgctxt "*/*/*" +msgid "Allow-list" +msgstr "" + +#: front/src/components/About.vue:149 +msgctxt "*/*/*" +msgid "Allowed domains" +msgstr "" + +#: front/src/components/library/ImportStatusModal.vue:17 +msgctxt "Popup/Import/Message" +msgid "An error occurred during upload processing. You will find more information below." +msgstr "" + +#: front/src/components/playlists/Editor.vue:13 +msgctxt "Content/Playlist/Error message.Title" +msgid "An error occurred while saving your changes" +msgstr "" + +#: front/src/components/federation/FetchButton.vue:21 +msgctxt "Popup/*/Message.Content" +msgid "An error occurred while trying to refresh data:" +msgstr "" + +#: front/src/components/federation/FetchButton.vue:41 +msgctxt "*/*/Error" +msgid "An HTTP error occurred while contacting the remote server" +msgstr "" + +#: front/src/components/library/ImportStatusModal.vue:145 +msgctxt "Popup/Import/Error.Label" +msgid "An unknown error occurred" +msgstr "" + +#: front/src/components/About.vue:123 +msgctxt "*/*/*" +msgid "Anonymous access" +msgstr "" + +#: front/src/components/moderation/ReportModal.vue:54 +msgctxt "Popup/Moderation/Error message" +msgid "Anonymous reports are disabled, please sign-in to submit a report." +msgstr "" + +#: front/src/components/auth/Settings.vue:175 +#: src/components/auth/Settings.vue:225 +msgctxt "*/*/*/Noun" +msgid "Application" +msgstr "" + +#: front/src/components/auth/ApplicationEdit.vue:12 +msgctxt "Content/Applications/Title" +msgid "Application details" +msgstr "" + +#: front/src/components/auth/ApplicationEdit.vue:21 +msgctxt "Content/Applications/Label" +msgid "Application ID" +msgstr "" + +#: front/src/components/auth/ApplicationEdit.vue:16 +msgctxt "Content/Application/Paragraph/" +msgid "Application ID and secret are really sensitive values and must be treated like passwords. Do not share those with anyone else." +msgstr "" + +#: front/src/components/auth/ApplicationEdit.vue:25 +msgctxt "Content/Applications/Label" +msgid "Application secret" +msgstr "" + +#: front/src/components/library/EditCard.vue:81 +#: front/src/components/notifications/NotificationRow.vue:66 +msgctxt "Content/*/Button.Label/Verb" +msgid "Approve" +msgstr "" + +#: front/src/components/library/EditCard.vue:25 +#: front/src/components/manage/library/EditsCardList.vue:21 +msgctxt "Content/*/*/Short" +msgid "Approved" +msgstr "" + +#: front/src/components/library/EditCard.vue:21 +msgctxt "Content/Library/Card/Short" +msgid "Approved and applied" +msgstr "" + +#: front/src/components/auth/Logout.vue:5 +msgctxt "Content/Login/Title" +msgid "Are you sure you want to log out?" +msgstr "" + +#: front/src/components/audio/SearchBar.vue:32 +#: src/components/audio/track/Table.vue:8 +#: front/src/components/manage/library/AlbumsTable.vue:40 +#: front/src/components/manage/library/TracksTable.vue:41 +#: front/src/components/metadata/Search.vue:130 +#: src/components/mixins/Report.vue:55 +#: front/src/views/admin/library/AlbumDetail.vue:114 +#: front/src/views/admin/library/TrackDetail.vue:124 +#: front/src/views/content/libraries/FilesTable.vue:56 src/entities.js:12 +#: front/src/components/mixins/Report.vue:56 +msgctxt "*/*/*/Noun" +msgid "Artist" +msgstr "" + +#: front/src/views/admin/library/ArtistDetail.vue:96 +msgctxt "Content/Moderation/Title" +msgid "Artist data" +msgstr "" + +#: front/src/components/mixins/Translations.vue:62 +#: front/src/components/mixins/Translations.vue:63 +msgctxt "Content/*/Dropdown/Noun" +msgid "Artist name" +msgstr "" + +#: front/src/components/audio/Search.vue:65 +msgctxt "*/Search/Input.Placeholder" +msgid "Artist, album, track…" +msgstr "" + +#: front/src/components/audio/Search.vue:10 +#: src/components/library/Artists.vue:117 +#: front/src/components/library/Library.vue:10 +#: front/src/components/library/TagDetail.vue:19 +#: front/src/components/manage/library/TagsTable.vue:42 +#: front/src/views/admin/library/ArtistsList.vue:24 +#: front/src/views/admin/library/Base.vue:8 +#: front/src/views/admin/library/LibraryDetail.vue:228 +#: front/src/views/admin/library/TagDetail.vue:123 +#: front/src/views/admin/moderation/AccountsDetail.vue:358 +#: front/src/views/admin/moderation/DomainsDetail.vue:291 +msgctxt "*/*/*/Noun" +msgid "Artists" +msgstr "" + +#: front/src/components/favorites/List.vue:34 +#: src/components/library/Albums.vue:29 +#: front/src/components/library/Artists.vue:29 +#: src/components/library/Radios.vue:44 +#: front/src/components/manage/library/AlbumsTable.vue:21 +#: front/src/components/manage/library/ArtistsTable.vue:21 +#: front/src/components/manage/library/EditsCardList.vue:39 +#: front/src/components/manage/library/LibrariesTable.vue:30 +#: front/src/components/manage/library/TagsTable.vue:21 +#: front/src/components/manage/library/TracksTable.vue:21 +#: front/src/components/manage/library/UploadsTable.vue:40 +#: front/src/components/manage/moderation/AccountsTable.vue:21 +#: front/src/components/manage/moderation/DomainsTable.vue:27 +#: front/src/components/manage/users/UsersTable.vue:19 +#: front/src/views/admin/moderation/ReportsList.vue:44 +#: front/src/views/content/libraries/FilesTable.vue:31 +#: front/src/views/playlists/List.vue:27 +msgctxt "Content/Search/Dropdown" +msgid "Ascending" +msgstr "" + +#: front/src/views/auth/PasswordReset.vue:28 +msgctxt "Content/Signup/Button.Label/Verb" +msgid "Ask for a password reset" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:72 +msgctxt "Content/Moderation/*" +msgid "Assigned to" +msgstr "" + +#: front/src/views/admin/library/AlbumDetail.vue:214 +#: front/src/views/admin/library/ArtistDetail.vue:202 +#: front/src/views/admin/library/LibraryDetail.vue:195 +#: front/src/views/admin/library/TagDetail.vue:113 +#: front/src/views/admin/library/TrackDetail.vue:266 +#: front/src/views/admin/library/UploadDetail.vue:191 +#: front/src/views/admin/moderation/AccountsDetail.vue:285 +#: front/src/views/admin/moderation/DomainsDetail.vue:239 +msgctxt "Content/Moderation/Title" +msgid "Audio content" +msgstr "" + +#: front/src/components/ShortcutsModal.vue:92 +msgctxt "Popup/Keyboard shortcuts/Title" +msgid "Audio player shortcuts" +msgstr "" + +#: front/src/components/auth/Authorize.vue:47 +msgctxt "Content/Signup/Button.Label/Verb" +msgid "Authorize %{ app }" +msgstr "" + +#: front/src/components/auth/Authorize.vue:4 +msgctxt "Content/Auth/Title/Verb" +msgid "Authorize third-party app" +msgstr "" + +#: front/src/components/auth/Settings.vue:162 +msgctxt "Content/Settings/Title/Noun" +msgid "Authorized apps" +msgstr "" + +#: front/src/components/playlists/PlaylistModal.vue:40 +msgctxt "Popup/Playlist/Title" +msgid "Available playlists" +msgstr "" + +#: front/src/components/auth/Settings.vue:34 +msgctxt "Content/Settings/Title" +msgid "Avatar" +msgstr "" + +#: front/src/views/auth/PasswordReset.vue:25 +#: front/src/views/auth/PasswordResetConfirm.vue:18 +msgctxt "Content/Signup/Link" +msgid "Back to login" +msgstr "" + +#: front/src/components/auth/ApplicationEdit.vue:9 +#: front/src/components/auth/ApplicationNew.vue:5 +msgctxt "Content/Applications/Link" +msgid "Back to settings" +msgstr "" + +#: front/src/components/library/TrackDetail.vue:48 +#: front/src/components/mixins/Translations.vue:67 +#: front/src/views/admin/library/UploadDetail.vue:227 +#: front/src/components/mixins/Translations.vue:68 +msgctxt "Content/Track/*/Noun" +msgid "Bitrate" +msgstr "" + +#: front/src/components/manage/moderation/InstancePolicyCard.vue:19 +#: front/src/components/manage/moderation/InstancePolicyForm.vue:34 +msgctxt "Content/Moderation/*/Verb" +msgid "Block everything" +msgstr "" + +#: front/src/components/manage/moderation/InstancePolicyForm.vue:112 +msgctxt "Content/Moderation/Help text" +msgid "Block everything from this account or domain. This will prevent any interaction with the entity, and purge related content (uploads, libraries, follows, etc.)" +msgstr "" + +#: front/src/components/Sidebar.vue:18 src/components/library/Library.vue:4 +msgctxt "*/Library/*/Verb" +msgid "Browse" +msgstr "" + +#: front/src/components/Sidebar.vue:65 +msgctxt "Sidebar/Library/List item.Link/Verb" +msgid "Browse library" +msgstr "" + +#: front/src/components/Home.vue:132 +msgctxt "Content/Home/Link" +msgid "Browse public content" +msgstr "" + +#: front/src/components/library/Albums.vue:4 +msgctxt "Content/Album/Title" +msgid "Browsing albums" +msgstr "" + +#: front/src/components/library/Artists.vue:4 +msgctxt "Content/Artist/Title" +msgid "Browsing artists" +msgstr "" + +#: front/src/views/playlists/List.vue:3 +msgctxt "Content/Playlist/Title" +msgid "Browsing playlists" +msgstr "" + +#: front/src/components/library/Radios.vue:4 +msgctxt "Content/Radio/Title" +msgid "Browsing radios" +msgstr "" + +#: front/src/components/library/radios/Builder.vue:5 +msgctxt "Content/Radio/Title" +msgid "Builder" +msgstr "" + +#: front/src/components/audio/album/Card.vue:13 +msgctxt "Content/Album/Card" +msgid "By %{ artist }" +msgstr "" + +#: front/src/views/content/remote/Card.vue:125 +msgctxt "Popup/Library/Paragraph" +msgid "By unfollowing this library, you loose access to its content." +msgstr "" + +#: front/src/views/admin/library/AlbumDetail.vue:230 +#: front/src/views/admin/library/ArtistDetail.vue:218 +#: front/src/views/admin/library/LibraryDetail.vue:211 +#: front/src/views/admin/library/TrackDetail.vue:282 +#: front/src/views/admin/library/UploadDetail.vue:208 +#: front/src/views/admin/moderation/AccountsDetail.vue:301 +#: front/src/views/admin/moderation/DomainsDetail.vue:254 +msgctxt "Content/Moderation/Table.Label/Noun" +msgid "Cached size" +msgstr "" + +#: front/src/components/SetInstanceModal.vue:37 +#: front/src/components/common/DangerousButton.vue:17 +#: front/src/components/library/AlbumBase.vue:37 +#: front/src/components/library/ArtistBase.vue:48 +#: front/src/components/library/EditForm.vue:107 +#: front/src/components/library/TrackBase.vue:53 +#: front/src/components/library/radios/Filter.vue:53 +#: front/src/components/manage/moderation/InstancePolicyForm.vue:54 +#: front/src/components/moderation/FilterModal.vue:39 +#: front/src/components/moderation/ReportModal.vue:59 +#: front/src/components/playlists/PlaylistModal.vue:26 +#: front/src/components/playlists/PlaylistModal.vue:77 +#: front/src/views/playlists/Detail.vue:62 +msgctxt "*/*/Button.Label/Verb" +msgid "Cancel" +msgstr "" + +#: front/src/views/content/remote/Card.vue:110 +msgctxt "Content/Library/Card.Paragraph" +msgid "Cancel follow request" +msgstr "" + +#: front/src/components/library/radios/Builder.vue:64 +msgctxt "Content/Radio/Table.Label/Noun (Value is a number of Tracks)" +msgid "Candidates" +msgstr "" + +#: front/src/components/library/FileUpload.vue:261 +msgctxt "Content/Library/Help text" +msgid "Cannot upload this file, ensure it is not too big" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:30 +#: front/src/components/mixins/Translations.vue:42 +#: front/src/components/moderation/ReportCategoryDropdown.vue:2 +#: front/src/components/mixins/Translations.vue:43 +msgctxt "*/*/*" +msgid "Category" +msgstr "" + +#: front/src/components/Footer.vue:21 +msgctxt "Footer/Settings/Dropdown.Label/Short, Verb" +msgid "Change language" +msgstr "" + +#: front/src/components/auth/Settings.vue:68 +msgctxt "Content/Settings/Title/Verb" +msgid "Change my password" +msgstr "" + +#: front/src/components/auth/Settings.vue:95 +msgctxt "Content/Settings/Button.Label" +msgid "Change password" +msgstr "" + +#: front/src/components/Footer.vue:37 +msgctxt "Footer/Settings/Dropdown.Label/Short, Verb" +msgid "Change theme" +msgstr "" + +#: front/src/views/auth/PasswordResetConfirm.vue:62 +msgctxt "*/Signup/Title" +msgid "Change your password" +msgstr "" + +#: front/src/components/auth/Settings.vue:96 +msgctxt "Popup/Settings/Title" +msgid "Change your password?" +msgstr "" + +#: front/src/components/playlists/Editor.vue:31 +msgctxt "Content/Playlist/Paragraph" +msgid "Changes synced with server" +msgstr "" + +#: front/src/components/auth/Settings.vue:71 +msgctxt "Content/Settings/Paragraph'" +msgid "Changing your password will also change your Subsonic API password if you have requested one." +msgstr "" + +#: front/src/components/auth/Settings.vue:98 +msgctxt "Popup/Settings/Paragraph" +msgid "Changing your password will have the following consequences:" +msgstr "" + +#: front/src/components/Footer.vue:48 +msgctxt "Footer/*/List item.Link" +msgid "Chat room" +msgstr "" + +#: front/src/components/auth/ApplicationForm.vue:24 +msgctxt "Content/Applications/Paragraph/" +msgid "Checking the parent \"Read\" or \"Write\" scopes implies access to all the corresponding children scopes." +msgstr "" + +#: front/src/components/SetInstanceModal.vue:2 +msgctxt "Popup/Instance/Title" +msgid "Choose your instance" +msgstr "" + +#: front/src/components/library/EditForm.vue:75 +#: front/src/components/library/EditForm.vue:88 +#: front/src/components/manage/users/InvitationForm.vue:37 +msgctxt "Content/Library/Button.Label" +msgid "Clear" +msgstr "" + +#: front/src/components/playlists/Editor.vue:50 +#: front/src/components/playlists/Editor.vue:55 +msgctxt "*/Playlist/Button.Label/Verb" +msgid "Clear playlist" +msgstr "" + +#: front/src/components/ShortcutsModal.vue:144 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Clear queue" +msgstr "" + +#: front/src/components/audio/Player.vue:668 +msgctxt "Sidebar/Player/Icon.Tooltip/Verb" +msgid "Clear your queue" +msgstr "" + +#: front/src/components/mixins/Translations.vue:21 +#: front/src/components/mixins/Translations.vue:22 +msgctxt "Content/Library/Link.Title" +msgid "Click to display more information about the import process for this upload" +msgstr "" + +#: front/src/components/library/FileUpload.vue:82 +msgctxt "Content/Library/Paragraph/Call to action" +msgid "Click to select files to upload or drag and drop files or directories" +msgstr "" + +#: front/src/components/ShortcutsModal.vue:38 +#: front/src/components/federation/FetchButton.vue:85 +#: front/src/components/library/ImportStatusModal.vue:79 +#: front/src/components/manage/moderation/InstancePolicyModal.vue:34 +msgctxt "*/*/Button.Label/Verb" +msgid "Close" +msgstr "" + +#: front/src/components/federation/FetchButton.vue:88 +msgctxt "*/*/Button.Label/Verb" +msgid "Close and reload page" +msgstr "" + +#: front/src/components/About.vue:94 +msgctxt "*/*/*/State of registrations" +msgid "Closed" +msgstr "" + +#: front/src/components/manage/users/InvitationForm.vue:26 +#: front/src/components/manage/users/InvitationsTable.vue:42 +msgctxt "Content/Admin/Table.Label/Noun" +msgid "Code" +msgstr "" + +#: front/src/components/audio/album/Card.vue:41 +#: front/src/components/common/CollapseLink.vue:3 +msgctxt "*/*/Button,Label" +msgid "Collapse" +msgstr "" + +#: front/src/components/library/radios/Builder.vue:63 +msgctxt "Content/Radio/Table.Label/Verb (Value is a List of Parameters)" +msgid "Config" +msgstr "" + +#: front/src/components/common/DangerousButton.vue:21 +msgctxt "Modal/*/Button.Label/Short, Verb" +msgid "Confirm" +msgstr "" + +#: front/src/views/auth/EmailConfirm.vue:51 +msgctxt "Head/Signup/Title" +msgid "Confirm your e-mail address" +msgstr "" + +#: front/src/views/auth/EmailConfirm.vue:13 +msgctxt "Content/Signup/Form.Label" +msgid "Confirmation code" +msgstr "" + +#: front/src/components/About.vue:67 src/components/Home.vue:65 +msgctxt "Content/Home/Header/Name" +msgid "Contact" +msgstr "" + +#: front/src/components/moderation/FilterModal.vue:90 +msgctxt "*/Moderation/Message" +msgid "Content filter successfully added" +msgstr "" + +#: front/src/components/auth/Settings.vue:116 +#: front/src/components/mixins/Translations.vue:108 +#: front/src/components/mixins/Translations.vue:109 +msgctxt "Content/Settings/Title/Noun" +msgid "Content filters" +msgstr "" + +#: front/src/components/auth/Settings.vue:119 +msgctxt "Content/Settings/Paragraph" +msgid "Content filters help you hide content you don't want to see on the service." +msgstr "" + +#: front/src/components/common/ActionTable.vue:8 +msgctxt "Content/*/Button.Help text.Paragraph" +msgid "Content have been updated, click refresh to see up-to-date content" +msgstr "" + +#: front/src/components/About.vue:46 +msgctxt "Content/About/Header" +msgid "Contents" +msgstr "" + +#: front/src/components/Footer.vue:56 +msgctxt "Footer/*/List item.Link" +msgid "Contribute" +msgstr "" + +#: front/src/components/audio/EmbedWizard.vue:29 +#: front/src/components/common/CopyInput.vue:8 +#: front/src/components/forms/PasswordInput.vue:43 +msgctxt "*/*/Button.Label/Short, Verb" +msgid "Copy" +msgstr "" + +#: front/src/components/playlists/Editor.vue:194 +msgctxt "Content/Playlist/Button.Tooltip/Verb" +msgid "Copy queued tracks to playlist" +msgstr "" + +#: front/src/components/auth/Authorize.vue:55 +msgctxt "Content/Auth/Paragraph" +msgid "Copy-paste the following code in the application:" +msgstr "" + +#: front/src/components/audio/EmbedWizard.vue:31 +msgctxt "Popup/Embed/Paragraph" +msgid "Copy/paste this code in your website HTML" +msgstr "" + +#: front/src/components/library/TrackDetail.vue:10 +#: front/src/views/admin/library/TrackDetail.vue:159 src/edits.js:77 +msgctxt "Content/Track/*/Noun" +msgid "Copyright" +msgstr "" + +#: front/src/views/auth/EmailConfirm.vue:7 +msgctxt "Content/Signup/Paragraph" +msgid "Could not confirm your e-mail address" +msgstr "" + +#: front/src/views/content/remote/ScanForm.vue:3 +msgctxt "Content/Library/Error message.Title" +msgid "Could not fetch remote library" +msgstr "" + +#: front/src/components/manage/moderation/InstancePolicyForm.vue:58 +msgctxt "Content/Moderation/Card.Button.Label/Verb" +msgid "Create" +msgstr "" + +#: front/src/views/auth/Signup.vue:4 +msgctxt "Content/Signup/Title" +msgid "Create a funkwhale account" +msgstr "" + +#: front/src/components/auth/ApplicationNew.vue:8 +#: front/src/components/auth/ApplicationNew.vue:41 +#: front/src/components/auth/Settings.vue:220 +msgctxt "Content/Settings/Button.Label" +msgid "Create a new application" +msgstr "" + +#: front/src/views/content/libraries/Home.vue:14 +msgctxt "Content/Library/Link/Verb" +msgid "Create a new library" +msgstr "" + +#: front/src/components/playlists/Form.vue:2 +msgctxt "Popup/Playlist/Title/Verb" +msgid "Create a new playlist" +msgstr "" + +#: front/src/components/Sidebar.vue:57 src/components/auth/LoginForm.vue:15 +msgctxt "*/Signup/Link/Verb" +msgid "Create an account" +msgstr "" + +#: front/src/components/auth/ApplicationForm.vue:65 +msgctxt "Content/Applications/Button.Label/Verb" +msgid "Create application" +msgstr "" + +#: front/src/views/content/libraries/Form.vue:26 +msgctxt "Content/Library/Button.Label/Verb" +msgid "Create library" +msgstr "" + +#: front/src/components/auth/SignupForm.vue:49 +msgctxt "Content/Signup/Button.Label" +msgid "Create my account" +msgstr "" + +#: front/src/components/auth/Settings.vue:264 +msgctxt "Content/Applications/Paragraph" +msgid "Create one to integrate Funkwhale with third-party applications." +msgstr "" + +#: front/src/components/playlists/Form.vue:34 +msgctxt "Content/Playlist/Button.Label/Verb" +msgid "Create playlist" +msgstr "" + +#: front/src/components/library/Radios.vue:23 +msgctxt "Content/Radio/Button.Label/Verb" +msgid "Create your own radio" +msgstr "" + +#: front/src/components/auth/Settings.vue:134 +#: src/components/auth/Settings.vue:227 +#: front/src/components/manage/library/AlbumsTable.vue:44 +#: front/src/components/manage/library/ArtistsTable.vue:43 +#: front/src/components/manage/library/LibrariesTable.vue:54 +#: front/src/components/manage/library/TagsTable.vue:45 +#: front/src/components/manage/library/TracksTable.vue:44 +#: front/src/components/manage/library/UploadsTable.vue:66 +#: front/src/components/manage/moderation/ReportCard.vue:43 +#: front/src/components/manage/users/InvitationsTable.vue:40 +#: front/src/components/mixins/Translations.vue:53 +#: front/src/components/mixins/Translations.vue:54 +msgctxt "Content/*/*/Noun" +msgid "Creation date" +msgstr "" + +#: front/src/components/auth/Settings.vue:54 +msgctxt "Content/Settings/Title/Noun" +msgid "Current avatar" +msgstr "" + +#: front/src/components/admin/SettingsGroup.vue:67 +msgctxt "Content/Settings/Title/Noun" +msgid "Current image" +msgstr "" + +#: front/src/views/content/libraries/DetailArea.vue:4 +msgctxt "Content/Library/Title" +msgid "Current library" +msgstr "" + +#: front/src/components/playlists/PlaylistModal.vue:8 +msgctxt "Popup/Playlist/Title" +msgid "Current track" +msgstr "" + +#: front/src/views/content/libraries/Quota.vue:2 +msgctxt "Content/Library/Title" +msgid "Current usage" +msgstr "" + +#: front/src/components/Footer.vue:94 +msgctxt "Footer/Settings/Dropdown.Label/Theme name" +msgid "Dark" +msgstr "" + +#: front/src/components/federation/FetchButton.vue:53 +msgctxt "*/*/Error" +msgid "Data returned by the remote server had invalid or missing attributes" +msgstr "" + +#: front/src/components/federation/FetchButton.vue:17 +msgctxt "Popup/*/Message.Content" +msgid "Data was refreshed successfully from remote server." +msgstr "" + +#: front/src/views/content/libraries/Detail.vue:27 +msgctxt "Content/Library/Table.Label" +msgid "Date" +msgstr "" + +#: front/src/components/library/ImportStatusModal.vue:64 +msgctxt "Popup/Import/Table.Label/Noun" +msgid "Debug information" +msgstr "" + +#: front/src/components/ShortcutsModal.vue:128 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Decrease volume" +msgstr "" + +#: front/src/components/auth/Settings.vue:150 +#: src/components/auth/Settings.vue:251 +#: front/src/components/library/EditCard.vue:93 +#: front/src/components/library/EditCard.vue:98 +#: front/src/components/manage/library/AlbumsTable.vue:188 +#: front/src/components/manage/library/ArtistsTable.vue:178 +#: front/src/components/manage/library/LibrariesTable.vue:205 +#: front/src/components/manage/library/TagsTable.vue:179 +#: front/src/components/manage/library/TracksTable.vue:188 +#: front/src/components/manage/library/UploadsTable.vue:255 +#: front/src/components/manage/moderation/InstancePolicyForm.vue:61 +#: front/src/components/manage/moderation/NotesThread.vue:24 +#: front/src/components/manage/moderation/NotesThread.vue:29 +#: front/src/components/manage/moderation/ReportCard.vue:360 +#: front/src/components/manage/users/InvitationsTable.vue:167 +#: front/src/views/admin/library/AlbumDetail.vue:78 +#: front/src/views/admin/library/AlbumDetail.vue:83 +#: front/src/views/admin/library/ArtistDetail.vue:76 +#: front/src/views/admin/library/ArtistDetail.vue:81 +#: front/src/views/admin/library/LibraryDetail.vue:58 +#: front/src/views/admin/library/LibraryDetail.vue:63 +#: front/src/views/admin/library/TagDetail.vue:41 +#: front/src/views/admin/library/TagDetail.vue:46 +#: front/src/views/admin/library/TrackDetail.vue:77 +#: front/src/views/admin/library/TrackDetail.vue:82 +#: front/src/views/admin/library/UploadDetail.vue:65 +#: front/src/views/admin/library/UploadDetail.vue:70 +#: front/src/views/content/libraries/FilesTable.vue:222 +#: front/src/views/content/libraries/Form.vue:29 +#: src/views/playlists/Detail.vue:42 +msgctxt "*/*/*/Verb" +msgid "Delete" +msgstr "" + +#: front/src/components/auth/Settings.vue:254 +msgctxt "*/Settings/Button.Label/Verb" +msgid "Delete application" +msgstr "" + +#: front/src/components/auth/Settings.vue:252 +msgctxt "Popup/Settings/Title" +msgid "Delete application \"%{ application }\"?" +msgstr "" + +#: front/src/views/content/libraries/Form.vue:39 +msgctxt "Popup/Library/Button.Label/Verb" +msgid "Delete library" +msgstr "" + +#: front/src/components/manage/moderation/InstancePolicyForm.vue:69 +msgctxt "Popup/Moderation/Button.Label/Verb" +msgid "Delete moderation rule" +msgstr "" + +#: front/src/components/auth/Settings.vue:274 +#: src/components/auth/Settings.vue:302 +msgctxt "*/*/Button.Label" +msgid "Delete my account" +msgstr "" + +#: front/src/components/auth/Settings.vue:297 +msgctxt "*/*/Button.Label" +msgid "Delete my account…" +msgstr "" + +#: front/src/views/playlists/Detail.vue:47 +msgctxt "Popup/Playlist/Button.Label/Verb" +msgid "Delete playlist" +msgstr "" + +#: front/src/views/radios/Detail.vue:28 +msgctxt "Popup/Radio/Button.Label/Verb" +msgid "Delete radio" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:357 +msgctxt "Content/Moderation/Button/Verb" +msgid "Delete reported object" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:358 +msgctxt "Content/Moderation/Popup/Header" +msgid "Delete reported object?" +msgstr "" + +#: front/src/views/admin/library/AlbumDetail.vue:79 +#: front/src/views/admin/library/TrackDetail.vue:78 +msgctxt "Popup/Library/Title" +msgid "Delete this album?" +msgstr "" + +#: front/src/views/admin/library/ArtistDetail.vue:77 +msgctxt "Popup/Library/Title" +msgid "Delete this artist?" +msgstr "" + +#: front/src/views/admin/library/LibraryDetail.vue:59 +#: front/src/views/content/libraries/Form.vue:31 +msgctxt "Popup/Library/Title" +msgid "Delete this library?" +msgstr "" + +#: front/src/components/manage/moderation/InstancePolicyForm.vue:63 +msgctxt "Popup/Moderation/Title" +msgid "Delete this moderation rule?" +msgstr "" + +#: front/src/components/manage/moderation/NotesThread.vue:25 +msgctxt "Popup/Moderation/Title" +msgid "Delete this note?" +msgstr "" + +#: front/src/components/library/EditCard.vue:94 +msgctxt "Popup/Library/Title" +msgid "Delete this suggestion?" +msgstr "" + +#: front/src/views/admin/library/TagDetail.vue:42 +msgctxt "Popup/Library/Title" +msgid "Delete this tag?" +msgstr "" + +#: front/src/views/admin/library/UploadDetail.vue:66 +msgctxt "Popup/Library/Title" +msgid "Delete this upload?" +msgstr "" + +#: front/src/components/favorites/List.vue:35 +#: src/components/library/Albums.vue:30 +#: front/src/components/library/Artists.vue:30 +#: src/components/library/Radios.vue:47 +#: front/src/components/manage/library/AlbumsTable.vue:22 +#: front/src/components/manage/library/ArtistsTable.vue:22 +#: front/src/components/manage/library/EditsCardList.vue:40 +#: front/src/components/manage/library/LibrariesTable.vue:31 +#: front/src/components/manage/library/TagsTable.vue:22 +#: front/src/components/manage/library/TracksTable.vue:22 +#: front/src/components/manage/library/UploadsTable.vue:41 +#: front/src/components/manage/moderation/AccountsTable.vue:22 +#: front/src/components/manage/moderation/DomainsTable.vue:28 +#: front/src/components/manage/users/UsersTable.vue:20 +#: front/src/views/admin/moderation/ReportsList.vue:45 +#: front/src/views/content/libraries/FilesTable.vue:32 +#: front/src/views/playlists/List.vue:28 +msgctxt "Content/Search/Dropdown" +msgid "Descending" +msgstr "" + +#: front/src/components/manage/moderation/NoteForm.vue:37 +msgctxt "Content/Moderation/Placeholder" +msgid "Describe what actions have been taken, or any other related updates…" +msgstr "" + +#: front/src/components/library/radios/Builder.vue:25 +#: front/src/views/admin/library/LibraryDetail.vue:132 +#: front/src/views/content/libraries/Form.vue:14 +msgctxt "*/*/*/Noun" +msgid "Description" +msgstr "" + +#: front/src/views/content/libraries/Card.vue:48 +#: src/views/content/remote/Card.vue:67 +msgctxt "Content/Library/Card.Button.Label/Noun" +msgid "Details" +msgstr "" + +#: front/src/views/admin/moderation/AccountsDetail.vue:511 +msgctxt "Content/Moderation/Help text" +msgid "Determine how much content the user can upload. Leave empty to use the default value of the instance." +msgstr "" + +#: front/src/components/mixins/Translations.vue:8 +#: front/src/components/mixins/Translations.vue:9 +msgctxt "Content/Settings/Dropdown.Help text" +msgid "Determine the visibility level of your activity" +msgstr "" + +#: front/src/components/auth/Settings.vue:104 +#: front/src/components/auth/SubsonicTokenForm.vue:56 +msgctxt "Popup/Settings/Button.Label" +msgid "Disable access" +msgstr "" + +#: front/src/components/auth/SubsonicTokenForm.vue:53 +msgctxt "Content/Settings/Button.Label/Verb" +msgid "Disable Subsonic access" +msgstr "" + +#: front/src/components/auth/SubsonicTokenForm.vue:54 +msgctxt "Popup/Settings/Title" +msgid "Disable Subsonic API access?" +msgstr "" + +#: front/src/components/About.vue:118 src/components/About.vue:131 +#: front/src/components/About.vue:144 +#: front/src/components/manage/moderation/InstancePolicyForm.vue:18 +#: front/src/views/admin/moderation/AccountsDetail.vue:157 +#: front/src/views/admin/moderation/AccountsDetail.vue:161 +msgctxt "*/*/*/State of feature" +msgid "Disabled" +msgstr "" + +#: front/src/views/admin/library/TrackDetail.vue:151 +msgctxt "*/*/*/Noun" +msgid "Disc number" +msgstr "" + +#: front/src/components/Home.vue:157 +msgctxt "Content/Home/Link" +msgid "Discover everything you need to know about Funkwhale and its features" +msgstr "" + +#: front/src/components/auth/SubsonicTokenForm.vue:13 +msgctxt "Content/Settings/Link" +msgid "Discover how to use Funkwhale from other apps" +msgstr "" + +#: front/src/views/Notifications.vue:45 +msgctxt "Content/Notifications/Button.Label/Verb" +msgid "Discover other ways to help" +msgstr "" + +#: front/src/views/admin/moderation/AccountsDetail.vue:132 +msgctxt "'Content/*/*/Noun'" +msgid "Display name" +msgstr "" + +#: front/src/components/library/radios/Builder.vue:30 +msgctxt "Content/Radio/Checkbox.Label/Verb" +msgid "Display publicly" +msgstr "" + +#: front/src/components/manage/moderation/InstancePolicyForm.vue:122 +msgctxt "Content/Moderation/Help text" +msgid "Do not download any media file (audio, album cover, account avatar…) from this account or domain. This will purge existing content as well." +msgstr "" + +#: front/src/views/Notifications.vue:36 +msgctxt "Content/Notifications/Header" +msgid "Do you like Funkwhale?" +msgstr "" + +#: front/src/components/playlists/Editor.vue:51 +msgctxt "Popup/Playlist/Title" +msgid "Do you want to clear the playlist \"%{ playlist }\"?" +msgstr "" + +#: front/src/components/common/DangerousButton.vue:7 +msgctxt "Modal/*/Title" +msgid "Do you want to confirm this action?" +msgstr "" + +#: front/src/views/playlists/Detail.vue:43 +msgctxt "Popup/Playlist/Title/Call to action" +msgid "Do you want to delete the playlist \"%{ playlist }\"?" +msgstr "" + +#: front/src/views/radios/Detail.vue:26 +msgctxt "Popup/Radio/Title" +msgid "Do you want to delete the radio \"%{ radio }\"?" +msgstr "" + +#: front/src/components/auth/Settings.vue:298 +msgctxt "Popup/Settings/Title" +msgid "Do you want to delete your account?" +msgstr "" + +#: front/src/components/moderation/FilterModal.vue:3 +msgctxt "Popup/Moderation/Title/Verb" +msgid "Do you want to hide content from artist \"%{ name }\"?" +msgstr "" + +#: front/src/components/common/ActionTable.vue:37 +msgctxt "Modal/*/Title" +msgid "Do you want to launch %{ action } on %{ count } element?" +msgid_plural "Do you want to launch %{ action } on %{ count } elements?" +msgstr[0] "" +msgstr[1] "" + +#: front/src/components/moderation/ReportModal.vue:3 +msgctxt "Popup/Moderation/Title/Verb" +msgid "Do you want to report this object?" +msgstr "" + +#: front/src/components/Sidebar.vue:122 +msgctxt "Sidebar/Queue/Message" +msgid "Do you want to restore your previous queue?" +msgstr "" + +#: front/src/components/Footer.vue:31 +msgctxt "Footer/*/List item.Link/Short, Noun" +msgid "Documentation" +msgstr "" + +#: front/src/components/manage/library/AlbumsTable.vue:41 +#: front/src/components/manage/library/ArtistsTable.vue:40 +#: front/src/components/manage/library/LibrariesTable.vue:50 +#: front/src/components/manage/library/TracksTable.vue:42 +#: front/src/components/manage/library/UploadsTable.vue:62 +#: front/src/components/manage/moderation/AccountsTable.vue:40 +#: front/src/components/manage/moderation/ReportCard.vue:169 +#: front/src/components/manage/moderation/ReportCard.vue:179 +#: front/src/components/mixins/Translations.vue:72 +#: front/src/views/admin/library/AlbumDetail.vue:124 +#: front/src/views/admin/library/ArtistDetail.vue:112 +#: front/src/views/admin/library/LibraryDetail.vue:123 +#: front/src/views/admin/library/TrackDetail.vue:176 +#: front/src/views/admin/library/UploadDetail.vue:121 +#: front/src/views/admin/moderation/AccountsDetail.vue:123 +#: front/src/components/mixins/Translations.vue:73 +msgctxt "Content/Moderation/*/Noun" +msgid "Domain" +msgstr "" + +#: front/src/views/admin/moderation/Base.vue:8 +#: front/src/views/admin/moderation/DomainsList.vue:3 +#: front/src/views/admin/moderation/DomainsList.vue:54 +msgctxt "*/Moderation/*/Noun" +msgid "Domains" +msgstr "" + +#: front/src/views/Notifications.vue:42 +msgctxt "Content/Notifications/Button.Label/Verb" +msgid "Donate" +msgstr "" + +#: front/src/components/library/TrackBase.vue:37 +#: front/src/views/admin/library/UploadDetail.vue:58 +msgctxt "Content/Track/Link/Verb" +msgid "Download" +msgstr "" + +#: front/src/components/playlists/Editor.vue:59 +msgctxt "Content/Playlist/Paragraph/Call to action" +msgid "Drag and drop rows to reorder tracks in the playlist" +msgstr "" + +#: front/src/components/audio/track/Table.vue:10 +#: front/src/components/library/TrackDetail.vue:30 +#: front/src/components/mixins/Translations.vue:68 +#: front/src/views/admin/library/UploadDetail.vue:238 +#: front/src/views/content/libraries/FilesTable.vue:60 +#: front/src/components/mixins/Translations.vue:69 +msgctxt "Content/*/*" +msgid "Duration" +msgstr "" + +#: front/src/views/auth/EmailConfirm.vue:23 +msgctxt "Content/Signup/Message" +msgid "E-mail address confirmed" +msgstr "" + +#: front/src/components/auth/Settings.vue:246 +#: src/components/library/AlbumBase.vue:73 +#: front/src/components/library/ArtistBase.vue:84 +#: front/src/components/library/TrackBase.vue:89 +#: front/src/components/manage/moderation/InstancePolicyCard.vue:45 +#: front/src/components/radios/Card.vue:23 +#: src/views/admin/library/AlbumDetail.vue:71 +#: front/src/views/admin/library/ArtistDetail.vue:69 +#: front/src/views/admin/library/TrackDetail.vue:70 +#: front/src/views/content/libraries/Detail.vue:9 +#: src/views/playlists/Detail.vue:31 +msgctxt "Content/*/Button.Label/Verb" +msgid "Edit" +msgstr "" + +#: front/src/components/auth/ApplicationEdit.vue:30 +#: front/src/components/auth/ApplicationEdit.vue:75 +msgctxt "Content/Applications/Title" +msgid "Edit application" +msgstr "" + +#: front/src/components/manage/moderation/InstancePolicyForm.vue:3 +msgctxt "Content/Moderation/Card.Title/Verb" +msgid "Edit moderation rule" +msgstr "" + +#: front/src/components/library/AlbumEdit.vue:4 +msgctxt "Content/*/Title" +msgid "Edit this album" +msgstr "" + +#: front/src/components/library/ArtistEdit.vue:4 +msgctxt "Content/*/Title" +msgid "Edit this artist" +msgstr "" + +#: front/src/components/library/TrackEdit.vue:4 +msgctxt "Content/*/Title" +msgid "Edit this track" +msgstr "" + +#: front/src/components/mixins/Translations.vue:116 +#: front/src/views/admin/library/AlbumDetail.vue:198 +#: front/src/views/admin/library/ArtistDetail.vue:186 +#: front/src/views/admin/library/Base.vue:5 +#: src/views/admin/library/EditsList.vue:24 +#: front/src/views/admin/library/TrackDetail.vue:250 +#: front/src/components/mixins/Translations.vue:117 +msgctxt "*/Admin/*/Noun" +msgid "Edits" +msgstr "" + +#: front/src/components/auth/SignupForm.vue:26 +#: front/src/components/manage/users/UsersTable.vue:38 +#: front/src/components/moderation/ReportModal.vue:31 +msgctxt "Content/*/*/Noun" +msgid "Email" +msgstr "" + +#: front/src/views/admin/moderation/AccountsDetail.vue:140 +msgctxt "Content/*/*" +msgid "Email address" +msgstr "" + +#: front/src/components/library/AlbumBase.vue:54 +#: front/src/components/library/ArtistBase.vue:65 +#: front/src/components/library/TrackBase.vue:70 +#: src/views/playlists/Detail.vue:38 +msgctxt "Content/*/Button.Label/Verb" +msgid "Embed" +msgstr "" + +#: front/src/components/audio/EmbedWizard.vue:30 +msgctxt "Popup/Embed/Input.Label/Noun" +msgid "Embed code" +msgstr "" + +#: front/src/components/library/AlbumBase.vue:27 +msgctxt "Popup/Album/Title/Verb" +msgid "Embed this album on your website" +msgstr "" + +#: front/src/components/library/ArtistBase.vue:38 +msgctxt "Popup/Artist/Title/Verb" +msgid "Embed this artist work on your website" +msgstr "" + +#: front/src/views/playlists/Detail.vue:52 +msgctxt "Popup/Album/Title/Verb" +msgid "Embed this playlist on your website" +msgstr "" + +#: front/src/components/library/TrackBase.vue:43 +msgctxt "Popup/Track/Title" +msgid "Embed this track on your website" +msgstr "" + +#: front/src/views/admin/moderation/AccountsDetail.vue:260 +#: front/src/views/admin/moderation/DomainsDetail.vue:224 +msgctxt "Content/Moderation/Table.Label/Noun" +msgid "Emitted library follows" +msgstr "" + +#: front/src/views/admin/moderation/AccountsDetail.vue:244 +#: front/src/views/admin/moderation/DomainsDetail.vue:208 +msgctxt "Content/Moderation/Table.Label/Noun" +msgid "Emitted messages" +msgstr "" + +#: front/src/components/About.vue:114 src/components/About.vue:127 +#: front/src/components/About.vue:140 +#: front/src/components/manage/moderation/InstancePolicyCard.vue:8 +#: front/src/components/manage/moderation/InstancePolicyForm.vue:17 +#: front/src/views/admin/moderation/AccountsDetail.vue:156 +#: front/src/views/admin/moderation/AccountsDetail.vue:160 +msgctxt "*/*/*/State of feature" +msgid "Enabled" +msgstr "" + +#: front/src/views/playlists/Detail.vue:30 +msgctxt "Content/Playlist/Button.Label/Verb" +msgid "End edition" +msgstr "" + +#: front/src/views/content/remote/ScanForm.vue:50 +msgctxt "Content/Library/Input.Placeholder" +msgid "Enter a library URL" +msgstr "" + +#: front/src/components/library/Radios.vue:141 +msgctxt "Content/Search/Input.Placeholder" +msgid "Enter a radio name…" +msgstr "" + +#: front/src/components/library/Albums.vue:128 +msgctxt "Content/Search/Input.Placeholder" +msgid "Enter album title…" +msgstr "" + +#: front/src/components/library/Artists.vue:116 +msgctxt "Content/Search/Input.Placeholder" +msgid "Enter artist name…" +msgstr "" + +#: front/src/views/playlists/List.vue:107 +msgctxt "Content/Playlist/Placeholder/Call to action" +msgid "Enter playlist name…" +msgstr "" + +#: front/src/views/auth/PasswordReset.vue:54 +msgctxt "Content/Signup/Input.Placeholder" +msgid "Enter the email address linked to your account" +msgstr "" + +#: front/src/components/auth/SignupForm.vue:96 +msgctxt "Content/Signup/Form/Placeholder" +msgid "Enter your email" +msgstr "" + +#: front/src/components/auth/SignupForm.vue:91 +#: src/components/auth/SignupForm.vue:93 +msgctxt "Content/Signup/Form/Placeholder" +msgid "Enter your invitation code (case insensitive)" +msgstr "" + +#: front/src/components/metadata/Search.vue:114 +msgctxt "Content/Library/Input.Placeholder/Verb" +msgid "Enter your search query…" +msgstr "" + +#: front/src/components/auth/SignupForm.vue:95 +msgctxt "Content/Signup/Form/Placeholder" +msgid "Enter your username" +msgstr "" + +#: front/src/components/auth/LoginForm.vue:81 +msgctxt "Content/Login/Input.Placeholder" +msgid "Enter your username or email" +msgstr "" + +#: front/src/components/auth/SubsonicTokenForm.vue:19 +#: front/src/views/content/libraries/Form.vue:4 +msgctxt "Content/*/Error message.Title" +msgid "Error" +msgstr "" + +#: front/src/components/federation/FetchButton.vue:34 +#: front/src/components/library/ImportStatusModal.vue:32 +msgctxt "Popup/Import/Table.Label/Noun" +msgid "Error detail" +msgstr "" + +#: front/src/views/admin/Settings.vue:89 +msgctxt "Content/Admin/Menu" +msgid "Error reporting" +msgstr "" + +#: front/src/components/federation/FetchButton.vue:26 +#: front/src/components/library/ImportStatusModal.vue:24 +msgctxt "Popup/Import/Table.Label/Noun" +msgid "Error type" +msgstr "" + +#: front/src/components/common/ActionTable.vue:94 +msgctxt "Content/*/Error message/Header" +msgid "Error while applying action" +msgstr "" + +#: front/src/views/auth/PasswordReset.vue:7 +msgctxt "Content/Signup/Card.Title" +msgid "Error while asking for a password reset" +msgstr "" + +#: front/src/components/auth/Authorize.vue:6 +msgctxt "Popup/Moderation/Error message" +msgid "Error while authorizing application" +msgstr "" + +#: front/src/views/auth/PasswordResetConfirm.vue:7 +msgctxt "Content/Signup/Card.Title" +msgid "Error while changing your password" +msgstr "" + +#: front/src/views/admin/moderation/DomainsList.vue:6 +msgctxt "Content/Moderation/Message.Title" +msgid "Error while creating domain" +msgstr "" + +#: front/src/components/moderation/FilterModal.vue:13 +msgctxt "Popup/Moderation/Error message" +msgid "Error while creating filter" +msgstr "" + +#: front/src/components/manage/users/InvitationForm.vue:4 +msgctxt "Content/Admin/Error message.Title" +msgid "Error while creating invitation" +msgstr "" + +#: front/src/components/manage/moderation/InstancePolicyForm.vue:7 +msgctxt "Content/Moderation/Error message.Title" +msgid "Error while creating rule" +msgstr "" + +#: front/src/components/auth/Authorize.vue:7 +msgctxt "Popup/Moderation/Error message" +msgid "Error while fetching application data" +msgstr "" + +#: front/src/views/admin/moderation/DomainsDetail.vue:155 +msgctxt "Content/Moderation/Table" +msgid "Error while fetching node info" +msgstr "" + +#: front/src/components/admin/SettingsGroup.vue:5 +#: front/src/components/federation/FetchButton.vue:73 +msgctxt "Content/*/Error message.Title" +msgid "Error while saving settings" +msgstr "" + +#: front/src/components/library/EditForm.vue:46 +msgctxt "Content/Library/Error message.Title" +msgid "Error while submitting edit" +msgstr "" + +#: front/src/components/manage/moderation/NoteForm.vue:3 +msgctxt "Content/Moderation/Error message.Title" +msgid "Error while submitting note" +msgstr "" + +#: front/src/components/moderation/ReportModal.vue:11 +msgctxt "Popup/Moderation/Error message" +msgid "Error while submitting report" +msgstr "" + +#: front/src/components/mixins/Translations.vue:32 +#: front/src/components/mixins/Translations.vue:33 +msgctxt "Content/Library/Table/Short" +msgid "Errored" +msgstr "" + +#: front/src/views/content/libraries/Quota.vue:75 +msgctxt "Content/Library/Label" +msgid "Errored files" +msgstr "" + +#: front/src/components/mixins/Translations.vue:17 +#: front/src/components/mixins/Translations.vue:18 +msgctxt "Content/Settings/Dropdown/Short" +msgid "Everyone" +msgstr "" + +#: front/src/components/mixins/Translations.vue:11 +#: front/src/components/mixins/Translations.vue:12 +msgctxt "Content/Settings/Dropdown" +msgid "Everyone on this instance" +msgstr "" + +#: front/src/components/mixins/Translations.vue:12 +#: front/src/components/mixins/Translations.vue:13 +msgctxt "Content/Settings/Dropdown" +msgid "Everyone, across all instances" +msgstr "" + +#: front/src/components/library/radios/Builder.vue:62 +msgctxt "Content/Radio/Table.Label/Verb" +msgid "Exclude" +msgstr "" + +#: front/src/components/common/CollapseLink.vue:2 +msgctxt "*/*/Button,Label" +msgid "Expand" +msgstr "" + +#: front/src/components/manage/users/InvitationsTable.vue:41 +#: front/src/components/mixins/Translations.vue:59 +#: front/src/components/mixins/Translations.vue:60 +msgctxt "Content/Admin/Table.Label/Noun" +msgid "Expiration date" +msgstr "" + +#: front/src/components/manage/users/InvitationsTable.vue:50 +msgctxt "Content/Admin/Table" +msgid "Expired" +msgstr "" + +#: front/src/components/manage/users/InvitationsTable.vue:21 +msgctxt "Content/Admin/Dropdown/Adjective" +msgid "Expired/used" +msgstr "" + +#: front/src/components/manage/moderation/InstancePolicyForm.vue:110 +msgctxt "Content/Moderation/Help text" +msgid "Explain why you're applying this policy. Depending on your instance configuration, this will help you remember why you acted on this account or domain, and may be displayed publicly to help users understand what moderation rules are in place." +msgstr "" + +#: front/src/components/manage/library/UploadsTable.vue:25 +#: front/src/views/content/libraries/FilesTable.vue:16 +msgctxt "Content/Library/Dropdown" +msgid "Failed" +msgstr "" + +#: front/src/views/content/remote/Card.vue:75 +msgctxt "Content/Library/Card.List item/Noun" +msgid "Failed tracks:" +msgstr "" + +#: front/src/views/admin/library/AlbumDetail.vue:171 +#: front/src/views/admin/library/ArtistDetail.vue:159 +#: front/src/views/admin/library/TrackDetail.vue:223 +msgctxt "*/*/*" +msgid "Favorited tracks" +msgstr "" + +#: front/src/components/Sidebar.vue:66 +#: src/components/mixins/Translations.vue:88 +#: front/src/components/mixins/Translations.vue:89 +msgctxt "Sidebar/Favorites/List item.Link/Noun" +msgid "Favorites" +msgstr "" + +#: front/src/components/About.vue:110 src/views/admin/Settings.vue:84 +msgctxt "*/*/*" +msgid "Federation" +msgstr "" + +#: front/src/components/library/TrackDetail.vue:66 +msgctxt "Content/*/*/Noun" +msgid "Federation ID" +msgstr "" + +#: front/src/components/library/EditCard.vue:45 +msgctxt "Content/Library/Card.Table.Header/Short" +msgid "Field" +msgstr "" + +#: front/src/components/library/FileUpload.vue:93 +msgctxt "Content/Library/Table.Label" +msgid "Filename" +msgstr "" + +#: front/src/components/library/radios/Builder.vue:61 +msgctxt "Content/Radio/Table.Label/Noun" +msgid "Filter name" +msgstr "" + +#: front/src/components/Home.vue:118 +msgctxt "Content/Home/Link" +msgid "Find another pod" +msgstr "" + +#: front/src/components/manage/library/UploadsTable.vue:26 +#: front/src/components/mixins/Translations.vue:36 +#: front/src/views/content/libraries/FilesTable.vue:17 +#: front/src/components/mixins/Translations.vue:37 +msgctxt "Content/Library/*" +msgid "Finished" +msgstr "" + +#: front/src/components/manage/moderation/AccountsTable.vue:42 +#: front/src/components/manage/moderation/DomainsTable.vue:49 +#: front/src/views/admin/library/AlbumDetail.vue:155 +#: front/src/views/admin/library/ArtistDetail.vue:143 +#: front/src/views/admin/library/LibraryDetail.vue:162 +#: front/src/views/admin/library/TagDetail.vue:98 +#: front/src/views/admin/library/TrackDetail.vue:207 +#: front/src/views/admin/library/UploadDetail.vue:167 +#: front/src/views/admin/moderation/AccountsDetail.vue:236 +#: front/src/views/admin/moderation/DomainsDetail.vue:188 +msgctxt "Content/Moderation/Table.Label/Short (Value is a date)" +msgid "First seen" +msgstr "" + +#: front/src/components/mixins/Translations.vue:56 +#: front/src/components/mixins/Translations.vue:57 +msgctxt "Content/Moderation/Dropdown/Noun" +msgid "First seen date" +msgstr "" + +#: front/src/components/ShortcutsModal.vue:64 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Focus searchbar" +msgstr "" + +#: front/src/views/content/remote/Card.vue:100 +msgctxt "Content/Library/Card.Button.Label/Verb" +msgid "Follow" +msgstr "" + +#: front/src/views/content/Home.vue:16 +msgctxt "Content/Library/Title/Verb" +msgid "Follow remote libraries" +msgstr "" + +#: front/src/views/content/remote/Card.vue:105 +msgctxt "Content/Library/Card.Paragraph" +msgid "Follow request pending approval" +msgstr "" + +#: front/src/components/manage/library/LibrariesTable.vue:53 +#: front/src/components/mixins/Translations.vue:76 +#: front/src/views/admin/library/LibraryDetail.vue:170 +#: front/src/views/content/libraries/Detail.vue:7 +#: front/src/components/mixins/Translations.vue:77 +msgctxt "Content/Federation/*/Noun" +msgid "Followers" +msgstr "" + +#: front/src/views/content/remote/Card.vue:116 +msgctxt "Content/Library/Card.Paragraph" +msgid "Following" +msgstr "" + +#: front/src/components/mixins/Translations.vue:96 +#: front/src/components/mixins/Translations.vue:97 +msgctxt "Content/OAuth Scopes/Label" +msgid "Follows" +msgstr "" + +#: front/src/components/library/TrackBase.vue:245 +msgctxt "Content/Track/Paragraph" +msgid "From album <a class=\"internal\" href=\"%{ albumUrl }\">%{ album }</a> by <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" +msgstr "" + +#: front/src/components/auth/Authorize.vue:28 +msgctxt "Content/Auth/Label/Noun" +msgid "Full access" +msgstr "" + +#: front/src/components/auth/SubsonicTokenForm.vue:7 +msgctxt "Content/Settings/Paragraph'" +msgid "Funkwhale is compatible with other music players that support the Subsonic API." +msgstr "" + +#: front/src/components/Home.vue:88 +msgctxt "Content/Home/Paragraph" +msgid "Funkwhale is free and developped by a friendly community of volunteers." +msgstr "" + +#: front/src/components/About.vue:78 +msgctxt "*/*/*" +msgid "Funkwhale version" +msgstr "" + +#: front/src/components/ShortcutsModal.vue:56 +msgctxt "Popup/Keyboard shortcuts/Title" +msgid "General shortcuts" +msgstr "" + +#: front/src/components/manage/users/InvitationForm.vue:16 +msgctxt "Content/Admin/Button.Label/Verb" +msgid "Get a new invitation" +msgstr "" + +#: front/src/views/content/Home.vue:12 src/views/content/Home.vue:19 +msgctxt "Content/Library/Button.Label/Verb" +msgid "Get started" +msgstr "" + +#: front/src/components/Footer.vue:45 +#: src/components/library/ImportStatusModal.vue:45 +msgctxt "Footer/*/Link" +msgid "Getting help" +msgstr "" + +#: front/src/components/common/ActionTable.vue:35 +#: front/src/components/common/ActionTable.vue:56 +msgctxt "Content/*/Button.Label/Short, Verb" +msgid "Go" +msgstr "" + +#: front/src/components/PageNotFound.vue:14 +msgctxt "Content/*/Button.Label/Verb" +msgid "Go to home page" +msgstr "" + +#: front/src/views/Notifications.vue:27 src/views/Notifications.vue:61 +msgctxt "Content/Notifications/Button.Label" +msgid "Got it!" +msgstr "" + +#: front/src/components/auth/Settings.vue:128 +msgctxt "Content/Settings/Title" +msgid "Hidden artists" +msgstr "" + +#: front/src/components/About.vue:155 +msgctxt "*/*/*/Verb" +msgid "Hide" +msgstr "" + +#: front/src/components/manage/moderation/InstancePolicyForm.vue:114 +msgctxt "Content/Moderation/Help text" +msgid "Hide account or domain content, except from followers." +msgstr "" + +#: front/src/components/moderation/FilterModal.vue:40 +msgctxt "Popup/*/Button.Label" +msgid "Hide content" +msgstr "" + +#: front/src/components/audio/PlayButton.vue:31 +msgctxt "*/Queue/Dropdown/Button/Label/Short" +msgid "Hide content from this artist" +msgstr "" + +#: front/src/components/audio/Player.vue:669 +msgctxt "Sidebar/Player/Icon.Tooltip/Verb" +msgid "Hide content from this artist…" +msgstr "" + +#: front/src/components/library/Home.vue:65 +msgctxt "Head/Home/Title" +msgid "Home" +msgstr "" + +#: front/src/components/auth/SubsonicTokenForm.vue:10 +msgctxt "Content/Settings/Paragraph" +msgid "However, accessing Funkwhale from those clients require a separate password you can set below." +msgstr "" + +#: front/src/views/auth/PasswordResetConfirm.vue:24 +msgctxt "Content/Signup/Paragraph" +msgid "If the email address provided in the previous step is valid and linked to a user account, you should receive an email with reset instructions in the next couple of minutes." +msgstr "" + +#: front/src/components/auth/Settings.vue:205 +msgctxt "Content/Applications/Paragraph" +msgid "If you authorize third-party applications to access your data, those applications will be listed here." +msgstr "" + +#: front/src/components/mixins/Translations.vue:46 +#: front/src/components/mixins/Translations.vue:47 +msgctxt "Content/Moderation/Dropdown" +msgid "Illegal content" +msgstr "" + +#: front/src/components/library/ImportStatusModal.vue:3 +msgctxt "Popup/Import/Title" +msgid "Import detail" +msgstr "" + +#: front/src/components/library/FileUpload.vue:50 +msgctxt "Content/Library/Input.Label/Noun" +msgid "Import reference" +msgstr "" + +#: front/src/components/manage/library/UploadsTable.vue:20 +#: front/src/components/manage/library/UploadsTable.vue:64 +#: front/src/views/admin/library/UploadDetail.vue:131 +#: front/src/views/content/libraries/FilesTable.vue:11 +#: front/src/views/content/libraries/FilesTable.vue:59 +msgctxt "Content/*/*/Noun" +msgid "Import status" +msgstr "" + +#: front/src/components/mixins/Translations.vue:37 +#: front/src/components/mixins/Translations.vue:38 +msgctxt "Content/Library/Help text" +msgid "Imported" +msgstr "" + +#: front/src/components/federation/FetchButton.vue:47 +msgctxt "*/*/Error" +msgid "Impossible to connect to the remote server" +msgstr "" + +#: front/src/components/moderation/FilterModal.vue:26 +msgctxt "Popup/Moderation/List item" +msgid "In \"Recently added\" widget" +msgstr "" + +#: front/src/components/moderation/FilterModal.vue:27 +msgctxt "Popup/Moderation/List item" +msgid "In artists and album listings" +msgstr "" + +#: front/src/components/favorites/TrackFavoriteIcon.vue:3 +msgctxt "Content/Track/Button.Message" +msgid "In favorites" +msgstr "" + +#: front/src/components/moderation/FilterModal.vue:25 +msgctxt "Popup/Moderation/List item" +msgid "In other users favorites and listening history" +msgstr "" + +#: front/src/components/moderation/FilterModal.vue:28 +msgctxt "Popup/Moderation/List item" +msgid "In radio suggestions" +msgstr "" + +#: front/src/components/manage/users/UsersTable.vue:55 +msgctxt "Content/Admin/Table" +msgid "Inactive" +msgstr "" + +#: front/src/components/ShortcutsModal.vue:124 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Increase volume" +msgstr "" + +#: front/src/components/playlists/Editor.vue:41 +msgctxt "Content/Playlist/Button.Label/Verb" +msgid "Insert from queue (%{ count } track)" +msgid_plural "Insert from queue (%{ count } tracks)" +msgstr[0] "" +msgstr[1] "" + +#: front/src/components/mixins/Translations.vue:16 +#: front/src/components/mixins/Translations.vue:17 +msgctxt "Content/Settings/Dropdown/Short" +msgid "Instance" +msgstr "" + +#: front/src/views/admin/moderation/DomainsDetail.vue:99 +msgctxt "Content/Moderation/Title" +msgid "Instance data" +msgstr "" + +#: front/src/views/admin/Settings.vue:80 +msgctxt "Content/Admin/Menu" +msgid "Instance information" +msgstr "" + +#: front/src/components/library/Radios.vue:9 +msgctxt "Content/Radio/Title" +msgid "Instance radios" +msgstr "" + +#: front/src/views/admin/Settings.vue:75 +msgctxt "Head/Admin/Title" +msgid "Instance settings" +msgstr "" + +#: front/src/components/SetInstanceModal.vue:19 +msgctxt "Popup/Instance/Input.Label/Noun" +msgid "Instance URL" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:92 +#: front/src/components/manage/moderation/ReportCard.vue:203 +msgctxt "Content/*/*/Noun" +msgid "Internal notes" +msgstr "" + +#: front/src/components/library/FileUpload.vue:268 +msgctxt "Content/Library/Help text" +msgid "Invalid file type, ensure you are uploading an audio file. Supported file extensions are %{ extensions }" +msgstr "" + +#: front/src/components/library/ImportStatusModal.vue:139 +#: front/src/components/mixins/Translations.vue:45 +#: front/src/components/mixins/Translations.vue:46 +msgctxt "Popup/Import/Error.Label" +msgid "Invalid metadata" +msgstr "" + +#: front/src/components/auth/SignupForm.vue:40 +#: front/src/components/manage/users/InvitationForm.vue:11 +msgctxt "Content/*/Input.Label" +msgid "Invitation code" +msgstr "" + +#: front/src/views/admin/users/Base.vue:8 +#: front/src/views/admin/users/InvitationsList.vue:24 +msgctxt "*/Admin/*/Noun" +msgid "Invitations" +msgstr "" + +#: front/src/components/manage/moderation/DomainsTable.vue:9 +#: front/src/views/admin/moderation/DomainsDetail.vue:106 +msgctxt "Content/Moderation/*/Adjective" +msgid "Is present on allow-list" +msgstr "" + +#: front/src/components/Footer.vue:49 +msgctxt "Footer/*/List item.Link" +msgid "Issue tracker" +msgstr "" + +#: front/src/components/SetInstanceModal.vue:5 +msgctxt "Popup/Instance/Error message.Title" +msgid "It is not possible to connect to the given URL" +msgstr "" + +#: front/src/components/mixins/Translations.vue:65 +#: front/src/components/mixins/Translations.vue:66 +msgctxt "*/*/*/Noun" +msgid "Items" +msgstr "" + +#: front/src/components/Footer.vue:33 src/components/ShortcutsModal.vue:3 +msgctxt "*/*/*/Noun" +msgid "Keyboard shortcuts" +msgstr "" + +#: front/src/views/admin/moderation/DomainsDetail.vue:198 +msgctxt "Content/Moderation/Table.Label.Link" +msgid "Known accounts" +msgstr "" + +#: front/src/views/content/remote/Home.vue:14 +msgctxt "Content/Library/Title" +msgid "Known libraries" +msgstr "" + +#: front/src/components/manage/users/UsersTable.vue:41 +#: front/src/components/mixins/Translations.vue:70 +#: front/src/views/admin/moderation/AccountsDetail.vue:206 +#: front/src/components/mixins/Translations.vue:71 +msgctxt "Content/Profile/Table.Label/Short, Noun (Value is a date)" +msgid "Last activity" +msgstr "" + +#: front/src/views/admin/moderation/AccountsDetail.vue:189 +#: front/src/views/admin/moderation/DomainsDetail.vue:115 +msgctxt "Content/*/Table.Label" +msgid "Last checked" +msgstr "" + +#: front/src/components/playlists/PlaylistModal.vue:46 +msgctxt "Popup/Playlist/Table.Label/Short" +msgid "Last modification" +msgstr "" + +#: front/src/components/manage/moderation/AccountsTable.vue:43 +msgctxt "Content/Moderation/Table.Label/Noun" +msgid "Last seen" +msgstr "" + +#: front/src/components/mixins/Translations.vue:57 +#: front/src/components/mixins/Translations.vue:58 +msgctxt "Content/Moderation/Dropdown/Noun" +msgid "Last seen date" +msgstr "" + +#: front/src/views/content/remote/Card.vue:73 +msgctxt "Content/Library/Card.List item/Noun" +msgid "Last update:" +msgstr "" + +#: front/src/components/common/ActionTable.vue:49 +msgctxt "Modal/*/Button.Label/Short, Verb" +msgid "Launch" +msgstr "" + +#: front/src/components/Home.vue:35 +msgctxt "Content/Home/Link" +msgid "Learn more" +msgstr "" + +#: front/src/components/manage/users/InvitationForm.vue:58 +msgctxt "Content/Admin/Input.Placeholder" +msgid "Leave empty for a random code" +msgstr "" + +#: front/src/components/audio/EmbedWizard.vue:17 +msgctxt "Popup/Embed/Paragraph" +msgid "Leave empty for a responsive widget" +msgstr "" + +#: front/src/components/mixins/Translations.vue:64 +#: front/src/components/mixins/Translations.vue:65 +msgctxt "*/*/*/Noun" +msgid "Length" +msgstr "" + +#: front/src/views/admin/library/AlbumDetail.vue:248 +#: front/src/views/admin/library/ArtistDetail.vue:236 +#: front/src/views/admin/library/Base.vue:17 +#: front/src/views/admin/library/LibrariesList.vue:24 +#: front/src/views/admin/library/TrackDetail.vue:300 +#: front/src/views/admin/moderation/AccountsDetail.vue:339 +#: front/src/views/admin/moderation/DomainsDetail.vue:271 +#: front/src/views/content/Base.vue:5 +msgctxt "*/*/*/Noun" +msgid "Libraries" +msgstr "" + +#: front/src/components/mixins/Translations.vue:84 +#: front/src/components/mixins/Translations.vue:85 +msgctxt "Content/OAuth Scopes/Label" +msgid "Libraries and uploads" +msgstr "" + +#: front/src/views/content/libraries/Form.vue:2 +msgctxt "Content/Library/Paragraph" +msgid "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." +msgstr "" + +#: front/src/components/Sidebar.vue:85 +#: front/src/components/manage/library/UploadsTable.vue:60 +#: front/src/components/manage/users/UsersTable.vue:174 +#: front/src/components/mixins/Report.vue:77 +#: front/src/views/admin/library/UploadDetail.vue:144 +#: front/src/views/admin/moderation/AccountsDetail.vue:518 src/entities.js:132 +#: front/src/components/mixins/Report.vue:78 +msgctxt "*/*/*/Noun" +msgid "Library" +msgstr "" + +#: front/src/views/content/libraries/Form.vue:103 +msgctxt "Content/Library/Message" +msgid "Library created" +msgstr "" + +#: front/src/views/admin/library/LibraryDetail.vue:78 +msgctxt "Content/Moderation/Title" +msgid "Library data" +msgstr "" + +#: front/src/views/content/libraries/Form.vue:123 +msgctxt "Content/Library/Message" +msgid "Library deleted" +msgstr "" + +#: front/src/views/admin/library/EditsList.vue:4 +msgctxt "Content/Admin/Title/Noun" +msgid "Library edits" +msgstr "" + +#: front/src/views/content/libraries/Form.vue:100 +msgctxt "Content/Library/Message" +msgid "Library updated" +msgstr "" + +#: front/src/components/library/TrackDetail.vue:19 +#: front/src/components/manage/library/TracksTable.vue:43 +#: front/src/views/admin/library/TrackDetail.vue:165 src/edits.js:84 +#: front/src/entities.js:115 +msgctxt "Content/*/*/Noun" +msgid "License" +msgstr "" + +#: front/src/components/Footer.vue:90 +msgctxt "Footer/Settings/Dropdown.Label/Theme name" +msgid "Light" +msgstr "" + +#: front/src/views/admin/library/AlbumDetail.vue:188 +#: front/src/views/admin/library/ArtistDetail.vue:176 +#: front/src/views/admin/library/LibraryDetail.vue:179 +#: front/src/views/admin/library/TrackDetail.vue:240 +#: front/src/views/admin/moderation/AccountsDetail.vue:269 +msgctxt "Content/Moderation/Table.Label/Noun" +msgid "Linked reports" +msgstr "" + +#: front/src/components/Home.vue:135 +msgctxt "Content/Home/Link" +msgid "Listen to public albums and playlists shared on this pod" +msgstr "" + +#: front/src/components/mixins/Translations.vue:92 +#: front/src/views/admin/library/AlbumDetail.vue:163 +#: front/src/views/admin/library/ArtistDetail.vue:151 +#: front/src/views/admin/library/TrackDetail.vue:215 +#: front/src/components/mixins/Translations.vue:93 +msgctxt "*/*/*/Noun" +msgid "Listenings" +msgstr "" + +#: front/src/components/audio/track/Table.vue:25 +#: front/src/components/library/ArtistDetail.vue:28 +msgctxt "Content/*/Button.Label" +msgid "Load more…" +msgstr "" + +#: front/src/views/content/libraries/Detail.vue:21 +msgctxt "Content/Library/Paragraph" +msgid "Loading followers…" +msgstr "" + +#: front/src/views/content/libraries/Home.vue:3 +msgctxt "Content/Library/Paragraph" +msgid "Loading Libraries…" +msgstr "" + +#: front/src/views/content/libraries/Detail.vue:3 +#: front/src/views/content/libraries/Upload.vue:3 +msgctxt "Content/Library/Paragraph" +msgid "Loading library data…" +msgstr "" + +#: front/src/views/Notifications.vue:84 +msgctxt "Content/Notifications/Paragraph" +msgid "Loading notifications…" +msgstr "" + +#: front/src/views/content/remote/Home.vue:3 +msgctxt "Content/Library/Paragraph" +msgid "Loading remote libraries…" +msgstr "" + +#: front/src/views/content/libraries/Quota.vue:4 +msgctxt "Content/Library/Paragraph" +msgid "Loading usage data…" +msgstr "" + +#: front/src/components/favorites/List.vue:5 +msgctxt "Content/Favorites/Message" +msgid "Loading your favorites…" +msgstr "" + +#: front/src/components/manage/library/AlbumsTable.vue:65 +#: front/src/components/manage/library/ArtistsTable.vue:58 +#: front/src/components/manage/library/LibrariesTable.vue:75 +#: front/src/components/manage/library/TracksTable.vue:71 +#: front/src/components/manage/library/UploadsTable.vue:99 +#: front/src/components/manage/moderation/ReportCard.vue:173 +#: front/src/views/admin/library/AlbumDetail.vue:19 +#: front/src/views/admin/library/ArtistDetail.vue:18 +#: front/src/views/admin/library/LibraryDetail.vue:18 +#: front/src/views/admin/library/TrackDetail.vue:18 +#: front/src/views/admin/library/UploadDetail.vue:19 +msgctxt "Content/Moderation/*/Short, Noun" +msgid "Local" +msgstr "" + +#: front/src/components/manage/moderation/AccountsTable.vue:59 +#: front/src/views/admin/moderation/AccountsDetail.vue:18 +msgctxt "Content/Moderation/*/Short, Noun" +msgid "Local account" +msgstr "" + +#: front/src/components/Home.vue:96 src/views/auth/Login.vue:29 +msgctxt "Head/Login/Title" +msgid "Log In" +msgstr "" + +#: front/src/views/auth/Login.vue:4 +msgctxt "Content/Login/Title/Verb" +msgid "Log in to your Funkwhale account" +msgstr "" + +#: front/src/components/auth/Logout.vue:20 +msgctxt "Head/Login/Title" +msgid "Log Out" +msgstr "" + +#: front/src/components/Sidebar.vue:38 +msgctxt "Sidebar/Profile/List item.Link" +msgid "Logged in as %{ username }" +msgstr "" + +#: front/src/components/Sidebar.vue:54 src/components/auth/LoginForm.vue:41 +msgctxt "*/Login/*/Verb" +msgid "Login" +msgstr "" + +#: front/src/views/admin/moderation/AccountsDetail.vue:148 +msgctxt "Content/*/*/Noun" +msgid "Login status" +msgstr "" + +#: front/src/components/Sidebar.vue:52 +msgctxt "Sidebar/Login/List item.Link/Verb" +msgid "Logout" +msgstr "" + +#: front/src/views/content/libraries/Home.vue:9 +msgctxt "Content/Library/Paragraph" +msgid "Looks like you don't have a library, it's time to create one." +msgstr "" + +#: front/src/components/audio/Player.vue:658 +#: src/components/audio/Player.vue:659 +msgctxt "Sidebar/Player/Icon.Tooltip" +msgid "Looping disabled. Click to switch to single-track looping." +msgstr "" + +#: front/src/components/audio/Player.vue:661 +#: src/components/audio/Player.vue:662 +msgctxt "Sidebar/Player/Icon.Tooltip" +msgid "Looping on a single track. Click to switch to whole queue looping." +msgstr "" + +#: front/src/components/audio/Player.vue:664 +#: src/components/audio/Player.vue:665 +msgctxt "Sidebar/Player/Icon.Tooltip" +msgid "Looping on whole queue. Click to disable looping." +msgstr "" + +#: front/src/components/Sidebar.vue:230 +msgctxt "Sidebar/*/Hidden text" +msgid "Main menu" +msgstr "" + +#: front/src/views/admin/library/Base.vue:34 +msgctxt "Head/Admin/Title" +msgid "Manage library" +msgstr "" + +#: front/src/components/manage/moderation/InstancePolicyModal.vue:8 +msgctxt "Popup/Moderation/Title/Verb" +msgid "Manage moderation rules for %{ obj }" +msgstr "" + +#: front/src/components/playlists/PlaylistModal.vue:3 +msgctxt "Popup/Playlist/Title/Verb" +msgid "Manage playlists" +msgstr "" + +#: front/src/views/admin/users/Base.vue:20 +msgctxt "Head/Admin/Title" +msgid "Manage users" +msgstr "" + +#: front/src/views/playlists/List.vue:8 +msgctxt "Content/Playlist/Button.Label/Verb" +msgid "Manage your playlists" +msgstr "" + +#: front/src/views/Notifications.vue:79 +msgctxt "Content/Notifications/Button.Label/Verb" +msgid "Mark all as read" +msgstr "" + +#: front/src/components/notifications/NotificationRow.vue:46 +msgctxt "Content/Notifications/Button.Tooltip/Verb" +msgid "Mark as read" +msgstr "" + +#: front/src/components/notifications/NotificationRow.vue:47 +msgctxt "Content/Notifications/Button.Tooltip/Verb" +msgid "Mark as unread" +msgstr "" + +#: front/src/views/admin/moderation/AccountsDetail.vue:321 +msgctxt "Content/*/*/Unit" +msgid "MB" +msgstr "" + +#: front/src/components/audio/Player.vue:651 +msgctxt "Sidebar/Player/Hidden text" +msgid "Media player" +msgstr "" + +#: front/src/components/auth/Profile.vue:12 +msgctxt "Content/Profile/Paragraph" +msgid "Member since %{ date }" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:109 +#: front/src/components/moderation/ReportModal.vue:41 +msgctxt "*/*/Field.Label/Noun" +msgid "Message" +msgstr "" + +#: front/src/components/Footer.vue:32 +msgctxt "Footer/*/List item.Link" +msgid "Mobile and desktop apps" +msgstr "" + +#: front/src/components/Home.vue:143 +msgctxt "Content/Home/Link" +msgid "Mobile apps" +msgstr "" + +#: front/src/components/Sidebar.vue:96 +#: src/components/manage/users/UsersTable.vue:178 +#: front/src/views/admin/Settings.vue:85 +#: front/src/views/admin/moderation/AccountsDetail.vue:522 +#: front/src/views/admin/moderation/Base.vue:43 +msgctxt "*/Moderation/*" +msgid "Moderation" +msgstr "" + +#: front/src/views/admin/moderation/AccountsDetail.vue:78 +#: front/src/views/admin/moderation/DomainsDetail.vue:70 +msgctxt "Content/Moderation/Card.Paragraph" +msgid "Moderation policies help you control how your instance interact with a given domain or account." +msgstr "" + +#: front/src/components/manage/moderation/InstancePolicyModal.vue:4 +msgctxt "Content/Moderation/Button.Label" +msgid "Moderation rules…" +msgstr "" + +#: front/src/components/library/EditCard.vue:5 +msgctxt "Content/Library/Card/Short" +msgid "Modification %{ id }" +msgstr "" + +#: front/src/components/mixins/Translations.vue:58 +#: front/src/components/mixins/Translations.vue:59 +msgctxt "Content/Playlist/Dropdown/Noun" +msgid "Modification date" +msgstr "" + +#: front/src/components/audio/PlayButton.vue:100 +#: front/src/components/library/AlbumBase.vue:43 +#: front/src/components/library/ArtistBase.vue:54 +#: front/src/components/library/TrackBase.vue:59 +msgctxt "*/*/Button.Label/Noun" +msgid "More…" +msgstr "" + +#: front/src/components/Sidebar.vue:63 src/views/admin/Settings.vue:82 +msgctxt "*/*/*/Noun" +msgid "Music" +msgstr "" + +#: front/src/components/audio/Player.vue:657 +msgctxt "Sidebar/Player/Icon.Tooltip/Verb" +msgid "Mute" +msgstr "" + +#: front/src/components/manage/moderation/InstancePolicyCard.vue:24 +#: front/src/components/manage/moderation/InstancePolicyForm.vue:115 +msgctxt "Content/Moderation/*/Verb" +msgid "Mute activity" +msgstr "" + +#: front/src/components/manage/moderation/InstancePolicyCard.vue:28 +#: front/src/components/manage/moderation/InstancePolicyForm.vue:119 +msgctxt "Content/Moderation/*/Verb" +msgid "Mute notifications" +msgstr "" + +#: front/src/components/Sidebar.vue:34 +msgctxt "Sidebar/Profile/Title" +msgid "My account" +msgstr "" + +#: front/src/components/library/radios/Builder.vue:238 +msgctxt "Content/Radio/Input.Placeholder" +msgid "My awesome description" +msgstr "" + +#: front/src/views/content/libraries/Form.vue:72 +msgctxt "Content/Library/Input.Placeholder" +msgid "My awesome library" +msgstr "" + +#: front/src/components/playlists/Form.vue:76 +msgctxt "Content/Playlist/Input.Placeholder" +msgid "My awesome playlist" +msgstr "" + +#: front/src/components/library/radios/Builder.vue:237 +msgctxt "Content/Radio/Input.Placeholder" +msgid "My awesome radio" +msgstr "" + +#: front/src/views/content/libraries/Home.vue:6 +msgctxt "Content/Library/Title" +msgid "My libraries" +msgstr "" + +#: front/src/components/About.vue:105 src/components/audio/track/Row.vue:40 +#: front/src/components/library/EditCard.vue:60 +#: front/src/components/library/EditForm.vue:70 +#: front/src/components/library/TrackDetail.vue:34 +#: front/src/components/library/TrackDetail.vue:43 +#: front/src/components/library/TrackDetail.vue:52 +#: front/src/components/library/TrackDetail.vue:61 +#: front/src/components/manage/library/AlbumsTable.vue:73 +#: front/src/components/manage/library/TracksTable.vue:76 +#: front/src/components/manage/library/UploadsTable.vue:121 +#: front/src/components/manage/library/UploadsTable.vue:128 +#: front/src/components/manage/moderation/ReportCard.vue:78 +#: front/src/components/manage/moderation/ReportCard.vue:87 +#: front/src/components/manage/moderation/ReportCard.vue:193 +#: front/src/components/manage/users/UsersTable.vue:62 +#: front/src/views/admin/library/UploadDetail.vue:179 +#: front/src/views/admin/library/UploadDetail.vue:214 +#: front/src/views/admin/library/UploadDetail.vue:233 +#: front/src/views/admin/library/UploadDetail.vue:244 +#: front/src/views/admin/library/UploadDetail.vue:257 +#: front/src/views/admin/moderation/AccountsDetail.vue:193 +#: front/src/views/admin/moderation/DomainsDetail.vue:119 +#: front/src/views/content/libraries/FilesTable.vue:95 +#: front/src/views/content/libraries/FilesTable.vue:101 +msgctxt "*/*/*" +msgid "N/A" +msgstr "" + +#: front/src/components/auth/ApplicationForm.vue:9 +#: front/src/components/auth/Settings.vue:133 +#: front/src/components/manage/library/ArtistsTable.vue:39 +#: front/src/components/manage/library/LibrariesTable.vue:48 +#: front/src/components/manage/library/TagsTable.vue:41 +#: front/src/components/manage/library/UploadsTable.vue:59 +#: front/src/components/manage/moderation/AccountsTable.vue:39 +#: front/src/components/manage/moderation/DomainsTable.vue:46 +#: front/src/components/mixins/Translations.vue:63 +#: front/src/components/playlists/PlaylistModal.vue:45 +#: front/src/views/admin/library/ArtistDetail.vue:103 +#: front/src/views/admin/library/LibraryDetail.vue:85 +#: front/src/views/admin/library/TagDetail.vue:68 +#: front/src/views/admin/library/UploadDetail.vue:92 +#: front/src/views/admin/moderation/DomainsDetail.vue:134 +#: front/src/views/content/libraries/Form.vue:10 src/edits.js:17 +#: front/src/components/mixins/Translations.vue:64 +msgctxt "*/*/*/Noun" +msgid "Name" +msgstr "" + +#: front/src/views/Notifications.vue:24 src/views/Notifications.vue:58 +msgctxt "*/*/*" +msgid "Never" +msgstr "" + +#: front/src/components/auth/Settings.vue:88 +#: front/src/views/auth/PasswordResetConfirm.vue:14 +msgctxt "Content/Settings/Input.Label" +msgid "New password" +msgstr "" + +#: front/src/components/Sidebar.vue:177 +msgctxt "Sidebar/Player/Paragraph" +msgid "New tracks will be appended here automatically." +msgstr "" + +#: front/src/components/library/EditCard.vue:47 +msgctxt "Content/Library/Card.Table.Header/Short" +msgid "New value" +msgstr "" + +#: front/src/components/audio/Player.vue:655 +msgctxt "Sidebar/Player/Icon.Tooltip" +msgid "Next track" +msgstr "" + +#: front/src/components/Sidebar.vue:134 +#: front/src/components/manage/moderation/DomainsTable.vue:13 +#: front/src/views/admin/moderation/DomainsDetail.vue:110 +msgctxt "*/*/*" +msgid "No" +msgstr "" + +#: front/src/components/audio/Search.vue:25 +msgctxt "Content/Search/Paragraph" +msgid "No album matched your query" +msgstr "" + +#: front/src/components/audio/Search.vue:16 +msgctxt "Content/Search/Paragraph" +msgid "No artist matched your query" +msgstr "" + +#: front/src/components/library/TrackDetail.vue:14 +msgctxt "Content/Track/Table.Paragraph" +msgid "No copyright information available for this track" +msgstr "" + +#: front/src/components/About.vue:25 src/components/Home.vue:25 +msgctxt "Content/Home/Paragraph" +msgid "No description available." +msgstr "" + +#: front/src/components/library/TrackDetail.vue:25 +msgctxt "Content/Track/Table.Paragraph" +msgid "No licensing information for this track" +msgstr "" + +#: front/src/components/federation/LibraryWidget.vue:6 +msgctxt "Content/Federation/Paragraph" +msgid "No matching library." +msgstr "" + +#: front/src/views/Notifications.vue:93 +msgctxt "Content/Notifications/Paragraph" +msgid "No notification to show." +msgstr "" + +#: front/src/components/common/EmptyState.vue:7 +msgctxt "Content/*/Paragraph" +msgid "No results were found." +msgstr "" + +#: front/src/components/About.vue:32 +msgctxt "Content/Home/Paragraph" +msgid "No rules available." +msgstr "" + +#: front/src/components/About.vue:39 +msgctxt "Content/Home/Paragraph" +msgid "No terms available." +msgstr "" + +#: front/src/components/mixins/Translations.vue:10 +#: front/src/components/mixins/Translations.vue:11 +msgctxt "Content/Settings/Dropdown" +msgid "Nobody except me" +msgstr "" + +#: front/src/views/content/libraries/Detail.vue:57 +msgctxt "Content/Library/Paragraph" +msgid "Nobody is following this library" +msgstr "" + +#: front/src/components/manage/users/InvitationsTable.vue:51 +msgctxt "Content/Admin/Table" +msgid "Not used" +msgstr "" + +#: front/src/components/Sidebar.vue:46 +#: src/components/mixins/Translations.vue:112 +#: front/src/views/Notifications.vue:151 +#: src/components/mixins/Translations.vue:113 +msgctxt "*/Notifications/*" +msgid "Notifications" +msgstr "" + +#: front/src/components/mixins/Translations.vue:47 +#: front/src/components/mixins/Translations.vue:48 +msgctxt "Content/Moderation/Dropdown" +msgid "Offensive content" +msgstr "" + +#: front/src/components/Footer.vue:55 +msgctxt "Footer/*/List item.Link" +msgid "Official website" +msgstr "" + +#: front/src/components/auth/Settings.vue:83 +msgctxt "Content/Settings/Input.Label" +msgid "Old password" +msgstr "" + +#: front/src/components/library/EditCard.vue:46 +msgctxt "Content/Library/Card.Table.Header/Short" +msgid "Old value" +msgstr "" + +#: front/src/components/About.vue:90 +msgctxt "*/*/*/State of registrations" +msgid "Open" +msgstr "" + +#: front/src/components/manage/users/InvitationsTable.vue:20 +msgctxt "Content/Admin/Dropdown/Adjective" +msgid "Open" +msgstr "" + +#: front/src/components/library/ImportStatusModal.vue:56 +msgctxt "Popup/Import/Table.Label/Value" +msgid "Open a support thread (include the debug information below in your message)" +msgstr "" + +#: front/src/components/library/AlbumBase.vue:87 +#: front/src/components/library/ArtistBase.vue:99 +#: front/src/components/library/TagDetail.vue:11 +#: front/src/components/library/TrackBase.vue:103 +#: front/src/components/manage/moderation/ReportCard.vue:128 +msgctxt "Content/Moderation/Link" +msgid "Open in moderation interface" +msgstr "" + +#: front/src/views/admin/library/AlbumDetail.vue:37 +#: front/src/views/admin/library/ArtistDetail.vue:35 +#: front/src/views/admin/library/TagDetail.vue:21 +#: front/src/views/admin/library/TrackDetail.vue:36 +msgctxt "Content/Moderation/Link/Verb" +msgid "Open local profile" +msgstr "" + +#: front/src/views/admin/library/AlbumDetail.vue:52 +#: front/src/views/admin/library/ArtistDetail.vue:50 +#: front/src/views/admin/library/TrackDetail.vue:51 +msgctxt "Content/Moderation/Link/Verb" +msgid "Open on MusicBrainz" +msgstr "" + +#: front/src/views/admin/moderation/AccountsDetail.vue:23 +msgctxt "Content/Moderation/Link/Verb" +msgid "Open profile" +msgstr "" + +#: front/src/views/admin/library/AlbumDetail.vue:60 +#: front/src/views/admin/library/ArtistDetail.vue:58 +#: front/src/views/admin/library/LibraryDetail.vue:49 +#: front/src/views/admin/library/TrackDetail.vue:59 +#: front/src/views/admin/library/UploadDetail.vue:50 +#: front/src/views/admin/moderation/AccountsDetail.vue:52 +msgctxt "Content/Moderation/Link/Verb" +msgid "Open remote profile" +msgstr "" + +#: front/src/views/admin/moderation/DomainsDetail.vue:16 +msgctxt "Content/Moderation/Link/Verb" +msgid "Open website" +msgstr "" + +#: front/src/components/manage/moderation/InstancePolicyForm.vue:40 +msgctxt "Content/Moderation/Card.Title" +msgid "Or customize your rule" +msgstr "" + +#: front/src/components/favorites/List.vue:32 +#: src/components/library/Radios.vue:41 +#: front/src/components/manage/library/EditsCardList.vue:37 +#: front/src/components/manage/users/UsersTable.vue:17 +#: front/src/views/admin/moderation/ReportsList.vue:42 +#: front/src/views/playlists/List.vue:25 +msgctxt "Content/Search/Dropdown.Label/Noun" +msgid "Order" +msgstr "" + +#: front/src/components/favorites/List.vue:24 +#: src/components/library/Albums.vue:15 +#: front/src/components/library/Artists.vue:19 +#: src/components/library/Radios.vue:33 +#: front/src/components/manage/library/AlbumsTable.vue:11 +#: front/src/components/manage/library/ArtistsTable.vue:11 +#: front/src/components/manage/library/EditsCardList.vue:29 +#: front/src/components/manage/library/LibrariesTable.vue:20 +#: front/src/components/manage/library/TagsTable.vue:11 +#: front/src/components/manage/library/TracksTable.vue:11 +#: front/src/components/manage/library/UploadsTable.vue:30 +#: front/src/components/manage/moderation/AccountsTable.vue:11 +#: front/src/components/manage/moderation/DomainsTable.vue:17 +#: front/src/components/manage/users/InvitationsTable.vue:9 +#: front/src/components/manage/users/UsersTable.vue:9 +#: front/src/views/admin/moderation/ReportsList.vue:34 +#: front/src/views/content/libraries/FilesTable.vue:21 +#: front/src/views/playlists/List.vue:17 +msgctxt "Content/Search/Dropdown.Label/Noun" +msgid "Ordering" +msgstr "" + +#: front/src/components/library/Albums.vue:27 +#: src/components/library/Artists.vue:27 +#: front/src/components/manage/library/AlbumsTable.vue:19 +#: front/src/components/manage/library/ArtistsTable.vue:19 +#: front/src/components/manage/library/LibrariesTable.vue:28 +#: front/src/components/manage/library/TagsTable.vue:19 +#: front/src/components/manage/library/TracksTable.vue:19 +#: front/src/components/manage/library/UploadsTable.vue:38 +#: front/src/components/manage/moderation/AccountsTable.vue:19 +#: front/src/components/manage/moderation/DomainsTable.vue:25 +#: front/src/views/content/libraries/FilesTable.vue:29 +msgctxt "Content/Search/Dropdown.Label/Noun" +msgid "Ordering direction" +msgstr "" + +#: front/src/components/mixins/Translations.vue:48 +#: front/src/components/mixins/Translations.vue:49 +msgctxt "Content/Moderation/Dropdown" +msgid "Other" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:143 +#: front/src/components/manage/users/InvitationsTable.vue:38 +msgctxt "*/*/*" +msgid "Owner" +msgstr "" + +#: front/src/components/PageNotFound.vue:33 +msgctxt "Head/*/Title" +msgid "Page Not Found" +msgstr "" + +#: front/src/components/PageNotFound.vue:7 +msgctxt "Content/*/Title" +msgid "Page not found!" +msgstr "" + +#: front/src/components/Pagination.vue:39 +msgctxt "Content/*/Hidden text/Noun" +msgid "Pagination" +msgstr "" + +#: front/src/components/auth/LoginForm.vue:32 +#: src/components/auth/Settings.vue:291 +#: front/src/components/auth/SignupForm.vue:36 +msgctxt "*/*/*" +msgid "Password" +msgstr "" + +#: front/src/components/auth/SubsonicTokenForm.vue:100 +msgctxt "Content/Settings/Message" +msgid "Password updated" +msgstr "" + +#: front/src/views/auth/PasswordResetConfirm.vue:28 +msgctxt "Content/Signup/Card.Title" +msgid "Password updated successfully" +msgstr "" + +#: front/src/components/audio/Player.vue:654 +msgctxt "Sidebar/Player/Icon.Tooltip/Verb" +msgid "Pause track" +msgstr "" + +#: front/src/components/ShortcutsModal.vue:96 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Pause/play the current track" +msgstr "" + +#: front/src/components/manage/moderation/InstancePolicyCard.vue:12 +msgctxt "Content/Moderation/Card.List item" +msgid "Paused" +msgstr "" + +#: front/src/components/library/FileUpload.vue:116 +#: front/src/components/manage/library/UploadsTable.vue:23 +#: front/src/components/mixins/Translations.vue:28 +#: front/src/views/content/libraries/FilesTable.vue:14 +#: front/src/components/mixins/Translations.vue:29 +msgctxt "Content/Library/*/Short" +msgid "Pending" +msgstr "" + +#: front/src/views/content/libraries/Detail.vue:37 +msgctxt "Content/Library/Table/Short" +msgid "Pending approval" +msgstr "" + +#: front/src/views/content/libraries/Quota.vue:22 +msgctxt "Content/Library/Label" +msgid "Pending files" +msgstr "" + +#: front/src/components/Sidebar.vue:232 +msgctxt "Sidebar/Notifications/Hidden text" +msgid "Pending follow requests" +msgstr "" + +#: front/src/components/library/EditCard.vue:29 +#: front/src/components/manage/library/EditsCardList.vue:18 +msgctxt "Content/Admin/*/Noun" +msgid "Pending review" +msgstr "" + +#: front/src/components/Sidebar.vue:233 +msgctxt "Sidebar/Moderation/Hidden text" +msgid "Pending review edits" +msgstr "" + +#: front/src/components/auth/Settings.vue:176 +#: front/src/components/manage/users/UsersTable.vue:42 +#: front/src/views/admin/moderation/AccountsDetail.vue:166 +msgctxt "Content/*/*/Noun" +msgid "Permissions" +msgstr "" + +#: front/src/components/audio/PlayButton.vue:9 +#: front/src/components/library/TrackBase.vue:24 +msgctxt "*/Queue/Button.Label/Short, Verb" +msgid "Play" +msgstr "" + +#: front/src/components/audio/album/Card.vue:48 +#: front/src/components/library/AlbumBase.vue:21 +#: front/src/components/library/AlbumDetail.vue:11 +#: src/views/playlists/Detail.vue:24 +msgctxt "Content/Queue/Button.Label/Short, Verb" +msgid "Play all" +msgstr "" + +#: front/src/components/library/ArtistBase.vue:32 +msgctxt "Content/Artist/Button.Label/Verb" +msgid "Play all albums" +msgstr "" + +#: front/src/components/audio/PlayButton.vue:92 +msgctxt "*/Queue/Dropdown/Button/Title" +msgid "Play next" +msgstr "" + +#: front/src/components/ShortcutsModal.vue:120 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Play next track" +msgstr "" + +#: front/src/components/audio/PlayButton.vue:90 +msgctxt "*/Queue/Dropdown/Button/Title" +msgid "Play now" +msgstr "" + +#: front/src/components/ShortcutsModal.vue:116 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Play previous track" +msgstr "" + +#: front/src/components/audio/PlayButton.vue:93 +msgctxt "*/Queue/Dropdown/Button/Title" +msgid "Play similar songs" +msgstr "" + +#: front/src/components/Sidebar.vue:231 +msgctxt "Sidebar/Player/Hidden text" +msgid "Play this track" +msgstr "" + +#: front/src/components/audio/Player.vue:653 +msgctxt "Sidebar/Player/Icon.Tooltip/Verb" +msgid "Play track" +msgstr "" + +#: front/src/components/mixins/Report.vue:66 src/views/playlists/Detail.vue:121 +#: front/src/components/mixins/Report.vue:67 +msgctxt "*/*/*" +msgid "Playlist" +msgstr "" + +#: front/src/views/playlists/Detail.vue:12 +msgctxt "Content/Playlist/Header.Subtitle" +msgid "Playlist containing %{ count } track, by %{ username }" +msgid_plural "Playlist containing %{ count } tracks, by %{ username }" +msgstr[0] "" +msgstr[1] "" + +#: front/src/components/playlists/Form.vue:9 +msgctxt "Content/Playlist/Message" +msgid "Playlist created" +msgstr "" + +#: front/src/components/playlists/Editor.vue:4 +msgctxt "Content/Playlist/Title" +msgid "Playlist editor" +msgstr "" + +#: front/src/components/playlists/Form.vue:21 +msgctxt "Content/Playlist/Input.Label" +msgid "Playlist name" +msgstr "" + +#: front/src/components/playlists/Form.vue:6 +msgctxt "Content/Playlist/Message" +msgid "Playlist updated" +msgstr "" + +#: front/src/components/playlists/Form.vue:25 +msgctxt "Content/Playlist/Dropdown.Label" +msgid "Playlist visibility" +msgstr "" + +#: front/src/components/Sidebar.vue:71 src/components/library/Home.vue:16 +#: front/src/components/library/Library.vue:16 +#: front/src/components/mixins/Translations.vue:100 +#: src/views/admin/Settings.vue:83 +#: front/src/views/admin/library/AlbumDetail.vue:179 +#: front/src/views/admin/library/ArtistDetail.vue:167 +#: front/src/views/admin/library/TrackDetail.vue:231 +#: src/views/playlists/List.vue:106 +#: front/src/components/mixins/Translations.vue:101 +msgctxt "*/*/*" +msgid "Playlists" +msgstr "" + +#: front/src/components/audio/EmbedWizard.vue:9 +msgctxt "Content/Embed/Message" +msgid "Please contact your admins and ask them to update the corresponding setting." +msgstr "" + +#: front/src/components/auth/Settings.vue:79 +msgctxt "Content/Settings/Error message.List item/Call to action" +msgid "Please double-check your password is correct" +msgstr "" + +#: front/src/components/auth/LoginForm.vue:5 +msgctxt "Content/Login/Error message.List item/Call to action" +msgid "Please double-check your username/password couple is correct" +msgstr "" + +#: front/src/components/auth/Settings.vue:46 +msgctxt "Content/Settings/Paragraph" +msgid "PNG, GIF or JPG. At most 2MB. Will be downscaled to 400x400px." +msgstr "" + +#: front/src/components/About.vue:72 +msgctxt "Content/About/Header/Name" +msgid "Pod configuration" +msgstr "" + +#: front/src/views/admin/library/TrackDetail.vue:143 src/edits.js:70 +msgctxt "*/*/*/Short, Noun" +msgid "Position" +msgstr "" + +#: front/src/components/manage/moderation/InstancePolicyForm.vue:118 +msgctxt "Content/Moderation/Help text" +msgid "Prevent account or domain from triggering notifications, except from followers." +msgstr "" + +#: front/src/components/audio/EmbedWizard.vue:43 +msgctxt "Popup/Embed/Title/Noun" +msgid "Preview" +msgstr "" + +#: front/src/components/audio/Player.vue:652 +msgctxt "Sidebar/Player/Icon.Tooltip" +msgid "Previous track" +msgstr "" + +#: front/src/components/mixins/Translations.vue:15 +#: front/src/components/mixins/Translations.vue:16 +msgctxt "Content/Settings/Dropdown/Short" +msgid "Private" +msgstr "" + +#: front/src/views/content/remote/Card.vue:56 +msgctxt "Content/Library/Card.List item" +msgid "Problem during scanning" +msgstr "" + +#: front/src/components/library/FileUpload.vue:57 +msgctxt "Content/Library/Button.Label" +msgid "Proceed" +msgstr "" + +#: front/src/views/auth/EmailConfirm.vue:26 +#: front/src/views/auth/PasswordResetConfirm.vue:31 +msgctxt "Content/Signup/Link/Verb" +msgid "Proceed to login" +msgstr "" + +#: front/src/components/library/FileUpload.vue:17 +msgctxt "Content/Library/Tab.Title/Short" +msgid "Processing" +msgstr "" + +#: front/src/components/mixins/Translations.vue:80 +#: front/src/components/mixins/Translations.vue:81 +msgctxt "Content/OAuth Scopes/Label" +msgid "Profile" +msgstr "" + +#: front/src/components/auth/SignupForm.vue:5 +msgctxt "Content/Signup/Form/Paragraph" +msgid "Public registrations are not possible on this instance. You will need an invitation code to sign up." +msgstr "" + +#: front/src/components/manage/moderation/AccountsTable.vue:188 +#: front/src/components/manage/moderation/DomainsTable.vue:186 +#: front/src/views/content/libraries/Quota.vue:36 +#: front/src/views/content/libraries/Quota.vue:39 +#: front/src/views/content/libraries/Quota.vue:62 +#: front/src/views/content/libraries/Quota.vue:65 +#: front/src/views/content/libraries/Quota.vue:88 +#: front/src/views/content/libraries/Quota.vue:91 +msgctxt "*/*/*/Verb" +msgid "Purge" +msgstr "" + +#: front/src/views/content/libraries/Quota.vue:89 +msgctxt "Popup/Library/Title" +msgid "Purge errored files?" +msgstr "" + +#: front/src/views/content/libraries/Quota.vue:37 +msgctxt "Popup/Library/Title" +msgid "Purge pending files?" +msgstr "" + +#: front/src/views/content/libraries/Quota.vue:63 +msgctxt "Popup/Library/Title" +msgid "Purge skipped files?" +msgstr "" + +#: front/src/components/Sidebar.vue:20 +msgctxt "Sidebar/Queue/Tab.Title/Noun" +msgid "Queue" +msgstr "" + +#: front/src/components/audio/Player.vue:329 +msgctxt "Content/Queue/Message" +msgid "Queue shuffled!" +msgstr "" + +#: front/src/views/radios/Detail.vue:80 +msgctxt "Head/Radio/Title" +msgid "Radio" +msgstr "" + +#: front/src/components/library/radios/Builder.vue:235 +msgctxt "Head/Radio/Title" +msgid "Radio Builder" +msgstr "" + +#: front/src/components/library/radios/Builder.vue:15 +msgctxt "Content/Radio/Message" +msgid "Radio created" +msgstr "" + +#: front/src/components/library/radios/Builder.vue:21 +msgctxt "Content/Radio/Input.Label/Noun" +msgid "Radio name" +msgstr "" + +#: front/src/components/library/radios/Builder.vue:12 +msgctxt "Content/Radio/Message" +msgid "Radio updated" +msgstr "" + +#: front/src/components/library/Library.vue:13 +#: src/components/library/Radios.vue:142 +#: front/src/components/mixins/Translations.vue:104 +#: front/src/components/mixins/Translations.vue:105 +msgctxt "*/*/*" +msgid "Radios" +msgstr "" + +#: front/src/components/auth/ApplicationForm.vue:151 +msgctxt "Content/OAuth Scopes/Label/Verb" +msgid "Read" +msgstr "" + +#: front/src/components/library/ImportStatusModal.vue:51 +msgctxt "Popup/Import/Table.Label/Value" +msgid "Read our documentation for this error" +msgstr "" + +#: front/src/components/auth/Authorize.vue:24 +msgctxt "Content/Auth/Label/Noun" +msgid "Read-only" +msgstr "" + +#: front/src/components/auth/ApplicationForm.vue:152 +msgctxt "Content/OAuth Scopes/Help Text" +msgid "Read-only access to user data" +msgstr "" + +#: front/src/components/manage/moderation/InstancePolicyCard.vue:39 +#: front/src/components/manage/moderation/InstancePolicyForm.vue:25 +msgctxt "Content/Moderation/*/Noun" +msgid "Reason" +msgstr "" + +#: front/src/views/admin/moderation/AccountsDetail.vue:252 +#: front/src/views/admin/moderation/DomainsDetail.vue:216 +msgctxt "Content/Moderation/Table.Label/Noun" +msgid "Received library follows" +msgstr "" + +#: front/src/components/manage/moderation/DomainsTable.vue:48 +#: front/src/components/mixins/Translations.vue:74 +#: front/src/components/mixins/Translations.vue:75 +msgctxt "Content/Moderation/*/Noun" +msgid "Received messages" +msgstr "" + +#: front/src/components/library/EditForm.vue:27 +msgctxt "Content/Library/Paragraph" +msgid "Recent edits" +msgstr "" + +#: front/src/components/library/EditForm.vue:17 +msgctxt "Content/Library/Paragraph" +msgid "Recent edits awaiting review" +msgstr "" + +#: front/src/components/library/Home.vue:24 +msgctxt "Content/Home/Title" +msgid "Recently added" +msgstr "" + +#: front/src/components/Home.vue:167 +msgctxt "Content/Home/Title" +msgid "Recently added albums" +msgstr "" + +#: front/src/components/library/Home.vue:11 +msgctxt "Content/Home/Title" +msgid "Recently favorited" +msgstr "" + +#: front/src/components/library/Home.vue:6 +msgctxt "Content/Home/Title" +msgid "Recently listened" +msgstr "" + +#: front/src/components/auth/ApplicationForm.vue:13 +msgctxt "Content/Applications/Input.Label/Noun" +msgid "Redirect URI" +msgstr "" + +#: front/src/components/auth/Settings.vue:125 +#: src/components/auth/Settings.vue:170 +#: front/src/components/common/EmptyState.vue:16 +#: src/views/content/remote/Home.vue:15 +msgctxt "Content/*/Button.Label/Short, Verb" +msgid "Refresh" +msgstr "" + +#: front/src/components/federation/FetchButton.vue:20 +msgctxt "Popup/*/Message.Title" +msgid "Refresh error" +msgstr "" + +#: front/src/views/admin/library/AlbumDetail.vue:56 +#: front/src/views/admin/library/ArtistDetail.vue:54 +#: front/src/views/admin/library/TrackDetail.vue:55 +msgctxt "Content/Moderation/Button/Verb" +msgid "Refresh from remote server" +msgstr "" + +#: front/src/views/admin/moderation/DomainsDetail.vue:164 +msgctxt "Content/Moderation/Button.Label/Verb" +msgid "Refresh node info" +msgstr "" + +#: front/src/components/federation/FetchButton.vue:79 +msgctxt "Popup/*/Message.Title" +msgid "Refresh pending" +msgstr "" + +#: front/src/components/federation/FetchButton.vue:80 +msgctxt "Popup/*/Message.Content" +msgid "Refresh request wasn't proceed in time by our server. It will be processed later." +msgstr "" + +#: front/src/components/federation/FetchButton.vue:16 +msgctxt "Popup/*/Message.Title" +msgid "Refresh successful" +msgstr "" + +#: front/src/components/common/ActionTable.vue:275 +msgctxt "Content/*/Button.Tooltip/Verb" +msgid "Refresh table content" +msgstr "" + +#: front/src/components/federation/FetchButton.vue:12 +msgctxt "Popup/*/Message.Title" +msgid "Refresh was skipped" +msgstr "" + +#: front/src/components/federation/FetchButton.vue:7 +msgctxt "Popup/*/Title" +msgid "Refreshing object from remote…" +msgstr "" + +#: front/src/components/About.vue:86 +msgctxt "*/*/*" +msgid "Registrations" +msgstr "" + +#: front/src/components/manage/users/UsersTable.vue:72 +msgctxt "Content/Admin/Table, User role" +msgid "Regular user" +msgstr "" + +#: front/src/components/library/EditCard.vue:87 +#: front/src/views/content/libraries/Detail.vue:51 +msgctxt "Content/Library/Button.Label" +msgid "Reject" +msgstr "" + +#: front/src/components/manage/moderation/InstancePolicyCard.vue:32 +#: front/src/components/manage/moderation/InstancePolicyForm.vue:123 +msgctxt "Content/Moderation/*/Verb" +msgid "Reject media" +msgstr "" + +#: front/src/components/library/EditCard.vue:33 +#: front/src/components/manage/library/EditsCardList.vue:24 +#: front/src/views/content/libraries/Detail.vue:43 +msgctxt "Content/Library/*/Short" +msgid "Rejected" +msgstr "" + +#: front/src/components/manage/library/AlbumsTable.vue:43 +#: front/src/components/mixins/Translations.vue:54 src/edits.js:43 +#: front/src/components/mixins/Translations.vue:55 +msgctxt "Content/*/*/Noun" +msgid "Release date" +msgstr "" + +#: front/src/components/library/FileUpload.vue:63 +msgctxt "Content/Library/Paragraph" +msgid "Remaining storage space" +msgstr "" + +#: front/src/views/Notifications.vue:18 src/views/Notifications.vue:52 +msgctxt "Content/Notifications/Label" +msgid "Remind me in:" +msgstr "" + +#: front/src/views/content/remote/Home.vue:6 +msgctxt "Content/Library/Title/Noun" +msgid "Remote libraries" +msgstr "" + +#: front/src/views/content/remote/Home.vue:7 +msgctxt "Content/Library/Paragraph" +msgid "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." +msgstr "" + +#: front/src/components/library/radios/Filter.vue:59 +msgctxt "Content/Radio/Button.Label/Verb" +msgid "Remove" +msgstr "" + +#: front/src/components/auth/Settings.vue:58 +msgctxt "Content/Settings/Button.Label/Verb" +msgid "Remove avatar" +msgstr "" + +#: front/src/components/library/ArtistDetail.vue:12 +msgctxt "Content/Moderation/Button.Label" +msgid "Remove filter" +msgstr "" + +#: front/src/components/manage/moderation/DomainsTable.vue:198 +#: front/src/views/admin/moderation/DomainsDetail.vue:39 +msgctxt "Content/Moderation/Action/Verb" +msgid "Remove from allow-list" +msgstr "" + +#: front/src/components/favorites/TrackFavoriteIcon.vue:26 +msgctxt "Content/Track/Icon.Tooltip/Verb" +msgid "Remove from favorites" +msgstr "" + +#: front/src/views/content/libraries/Quota.vue:38 +msgctxt "Popup/Library/Paragraph" +msgid "Removes uploaded but yet to be processed tracks completely, adding the corresponding data to your quota." +msgstr "" + +#: front/src/views/content/libraries/Quota.vue:64 +msgctxt "Popup/Library/Paragraph" +msgid "Removes uploaded tracks skipped during the import processes completely, adding the corresponding data to your quota." +msgstr "" + +#: front/src/views/content/libraries/Quota.vue:90 +msgctxt "Popup/Library/Paragraph" +msgid "Removes uploaded tracks that could not be processed by the server completely, adding the corresponding data to your quota." +msgstr "" + +#: front/src/components/audio/PlayButton.vue:94 +msgctxt "*/Queue/Dropdown/Button/Title" +msgid "Replace current queue" +msgstr "" + +#: front/src/components/mixins/Report.vue:6 src/components/mixins/Report.vue:7 +msgctxt "*/Moderation/*/Verb" +msgid "Report @%{ username }…" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:5 +msgctxt "Content/Moderation/Card/Short" +msgid "Report %{ id }" +msgstr "" + +#: front/src/components/moderation/ReportModal.vue:139 +msgctxt "*/Moderation/Message" +msgid "Report successfully submitted, thank you" +msgstr "" + +#: front/src/components/mixins/Report.vue:36 +#: src/components/mixins/Report.vue:37 +msgctxt "*/Moderation/*/Verb" +msgid "Report this album…" +msgstr "" + +#: front/src/components/mixins/Report.vue:50 +#: src/components/mixins/Report.vue:51 +msgctxt "*/Moderation/*/Verb" +msgid "Report this artist…" +msgstr "" + +#: front/src/components/mixins/Report.vue:72 +#: src/components/mixins/Report.vue:73 +msgctxt "*/Moderation/*/Verb" +msgid "Report this library…" +msgstr "" + +#: front/src/components/mixins/Report.vue:61 +#: src/components/mixins/Report.vue:62 +msgctxt "*/Moderation/*/Verb" +msgid "Report this playlist…" +msgstr "" + +#: front/src/components/mixins/Report.vue:23 +#: src/components/mixins/Report.vue:24 +msgctxt "*/Moderation/*/Verb" +msgid "Report this track…" +msgstr "" + +#: front/src/components/audio/PlayButton.vue:95 +msgctxt "*/Moderation/*/Button/Label,Verb" +msgid "Report…" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:117 +msgctxt "Content/*/*/Short" +msgid "Reported object" +msgstr "" + +#: front/src/views/admin/moderation/Base.vue:5 +#: front/src/views/admin/moderation/ReportsList.vue:3 +#: front/src/views/admin/moderation/ReportsList.vue:208 +msgctxt "*/Moderation/*/Noun" +msgid "Reports" +msgstr "" + +#: front/src/components/auth/SubsonicTokenForm.vue:38 +#: front/src/components/auth/SubsonicTokenForm.vue:41 +msgctxt "*/Settings/Button.Label/Verb" +msgid "Request a new password" +msgstr "" + +#: front/src/components/auth/SubsonicTokenForm.vue:39 +msgctxt "Popup/Settings/Title" +msgid "Request a new Subsonic API password?" +msgstr "" + +#: front/src/components/auth/SubsonicTokenForm.vue:47 +msgctxt "Content/Settings/Button.Label/Verb" +msgid "Request a password" +msgstr "" + +#: front/src/components/federation/FetchButton.vue:64 +msgctxt "Popup/*/Loading.Title" +msgid "Requesting a fetch…" +msgstr "" + +#: front/src/components/library/EditForm.vue:94 +msgctxt "Content/Library/Button.Label" +msgid "Reset to initial value" +msgstr "" + +#: front/src/components/auth/LoginForm.vue:34 +#: src/views/auth/PasswordReset.vue:4 front/src/views/auth/PasswordReset.vue:53 +msgctxt "*/Login/*/Verb" +msgid "Reset your password" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:83 +msgctxt "Content/*/*/Noun" +msgid "Resolution date" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:218 +msgctxt "Content/*/Button.Label/Verb" +msgid "Resolve" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:62 +#: front/src/views/admin/moderation/ReportsList.vue:20 +msgctxt "Content/*/*/Short" +msgid "Resolved" +msgstr "" + +#: front/src/views/content/libraries/FilesTable.vue:223 +msgctxt "Content/Library/Dropdown/Verb" +msgid "Restart import" +msgstr "" + +#: front/src/components/library/EditForm.vue:31 +msgctxt "Content/Library/Button.Label" +msgid "Restrict to unreviewed edits" +msgstr "" + +#: front/src/components/favorites/List.vue:39 +#: src/components/library/Albums.vue:34 +#: front/src/components/library/Artists.vue:34 +#: src/components/library/Radios.vue:52 front/src/views/playlists/List.vue:32 +msgctxt "Content/Search/Dropdown.Label/Noun" +msgid "Results per page" +msgstr "" + +#: front/src/views/auth/EmailConfirm.vue:17 +msgctxt "Content/Signup/Link/Verb" +msgid "Return to login" +msgstr "" + +#: front/src/components/library/ArtistDetail.vue:9 +msgctxt "Content/Moderation/Link" +msgid "Review my filters" +msgstr "" + +#: front/src/components/auth/Settings.vue:192 +msgctxt "*/*/*/Verb" +msgid "Revoke" +msgstr "" + +#: front/src/components/auth/Settings.vue:195 +msgctxt "*/Settings/Button.Label/Verb" +msgid "Revoke access" +msgstr "" + +#: front/src/components/auth/Settings.vue:193 +msgctxt "Popup/Settings/Title" +msgid "Revoke access for application \"%{ application }\"?" +msgstr "" + +#: front/src/components/manage/moderation/InstancePolicyCard.vue:16 +msgctxt "Content/Moderation/Card.Title/Noun" +msgid "Rule" +msgstr "" + +#: front/src/components/About.vue:28 src/components/About.vue:56 +msgctxt "Content/About/Header" +msgid "Rules" +msgstr "" + +#: front/src/components/admin/SettingsGroup.vue:75 +#: front/src/components/library/radios/Builder.vue:34 +msgctxt "Content/*/Button.Label/Verb" +msgid "Save" +msgstr "" + +#: front/src/views/content/remote/Card.vue:203 +msgctxt "Content/Library/Message" +msgid "Scan launched" +msgstr "" + +#: front/src/views/content/remote/Card.vue:80 +msgctxt "Content/Library/Card.Button.Label/Verb" +msgid "Scan now" +msgstr "" + +#: front/src/views/content/remote/Card.vue:48 +msgctxt "Content/Library/Card.List item" +msgid "Scan pending" +msgstr "" + +#: front/src/views/content/remote/Card.vue:204 +msgctxt "Content/Library/Message" +msgid "Scan skipped (previous scan is too recent)" +msgstr "" + +#: front/src/views/content/remote/Card.vue:60 +msgctxt "Content/Library/Card.List item" +msgid "Scanned" +msgstr "" + +#: front/src/views/content/remote/Card.vue:64 +msgctxt "Content/Library/Card.List item" +msgid "Scanned with errors" +msgstr "" + +#: front/src/views/content/remote/Card.vue:52 +msgctxt "Content/Library/Card.List item" +msgid "Scanning… (%{ progress }%)" +msgstr "" + +#: front/src/components/auth/ApplicationForm.vue:22 +#: front/src/components/auth/Settings.vue:226 +msgctxt "Content/*/*/Noun" +msgid "Scopes" +msgstr "" + +#: front/src/components/library/Albums.vue:10 +#: src/components/library/Artists.vue:10 +#: front/src/components/library/Radios.vue:29 +#: front/src/components/manage/library/AlbumsTable.vue:5 +#: front/src/components/manage/library/ArtistsTable.vue:5 +#: front/src/components/manage/library/EditsCardList.vue:6 +#: front/src/components/manage/library/LibrariesTable.vue:5 +#: front/src/components/manage/library/TagsTable.vue:5 +#: front/src/components/manage/library/TracksTable.vue:5 +#: front/src/components/manage/library/UploadsTable.vue:5 +#: front/src/components/manage/moderation/AccountsTable.vue:5 +#: front/src/components/manage/moderation/DomainsTable.vue:5 +#: front/src/components/manage/users/InvitationsTable.vue:5 +#: front/src/components/manage/users/UsersTable.vue:5 +#: front/src/views/admin/moderation/ReportsList.vue:8 +#: front/src/views/content/libraries/FilesTable.vue:5 +#: src/views/playlists/List.vue:13 +msgctxt "Content/Search/Input.Label/Noun" +msgid "Search" +msgstr "" + +#: front/src/views/content/remote/ScanForm.vue:9 +msgctxt "Content/Library/Input.Label/Verb" +msgid "Search a remote library" +msgstr "" + +#: front/src/components/manage/library/EditsCardList.vue:211 +#: front/src/views/admin/moderation/ReportsList.vue:207 +msgctxt "Content/Search/Input.Placeholder" +msgid "Search by account, summary, domain…" +msgstr "" + +#: front/src/components/manage/library/LibrariesTable.vue:191 +msgctxt "Content/Search/Input.Placeholder" +msgid "Search by domain, actor, name, description…" +msgstr "" + +#: front/src/components/manage/library/UploadsTable.vue:241 +msgctxt "Content/Search/Input.Placeholder" +msgid "Search by domain, actor, name, reference, source…" +msgstr "" + +#: front/src/components/manage/library/ArtistsTable.vue:164 +msgctxt "Content/Search/Input.Placeholder" +msgid "Search by domain, name, MusicBrainz ID…" +msgstr "" + +#: front/src/components/manage/library/TracksTable.vue:174 +msgctxt "Content/Search/Input.Placeholder" +msgid "Search by domain, title, artist, album, MusicBrainz ID…" +msgstr "" + +#: front/src/components/manage/library/AlbumsTable.vue:174 +msgctxt "Content/Search/Input.Placeholder" +msgid "Search by domain, title, artist, MusicBrainz ID…" +msgstr "" + +#: front/src/components/manage/moderation/AccountsTable.vue:171 +msgctxt "Content/Search/Input.Placeholder" +msgid "Search by domain, username, bio…" +msgstr "" + +#: front/src/components/manage/library/TagsTable.vue:165 +msgctxt "Content/Search/Input.Placeholder" +msgid "Search by name" +msgstr "" + +#: front/src/components/manage/moderation/DomainsTable.vue:168 +msgctxt "Content/Search/Input.Placeholder" +msgid "Search by name…" +msgstr "" + +#: front/src/views/content/libraries/FilesTable.vue:208 +msgctxt "Content/Library/Input.Placeholder" +msgid "Search by title, artist, album…" +msgstr "" + +#: front/src/components/manage/users/InvitationsTable.vue:153 +msgctxt "Content/Admin/Input.Placeholder/Verb" +msgid "Search by username, e-mail address, code…" +msgstr "" + +#: front/src/components/manage/users/UsersTable.vue:164 +msgctxt "Content/Search/Input.Placeholder" +msgid "Search by username, e-mail address, name…" +msgstr "" + +#: front/src/components/audio/SearchBar.vue:27 +msgctxt "Sidebar/Search/Input.Placeholder" +msgid "Search for artists, albums, tracks…" +msgstr "" + +#: front/src/components/audio/Search.vue:2 +msgctxt "Content/Search/Title" +msgid "Search for some music" +msgstr "" + +#: front/src/components/library/TagsSelector.vue:6 +msgctxt "*/Dropdown/Placeholder/Verb" +msgid "Search for tags…" +msgstr "" + +#: front/src/components/library/AlbumBase.vue:66 +#: front/src/components/library/ArtistBase.vue:77 +#: front/src/components/library/TrackBase.vue:82 +msgctxt "Content/*/Button.Label/Verb" +msgid "Search on Discogs" +msgstr "" + +#: front/src/components/library/AlbumBase.vue:58 +#: front/src/components/library/ArtistBase.vue:69 +#: front/src/components/library/TrackBase.vue:74 +msgctxt "Content/*/Button.Label/Verb" +msgid "Search on Wikipedia" +msgstr "" + +#: front/src/components/library/Library.vue:35 +#: src/views/admin/library/Base.vue:35 +#: front/src/views/admin/moderation/Base.vue:44 +#: src/views/admin/users/Base.vue:21 front/src/views/content/Base.vue:19 +msgctxt "Menu/*/Hidden text" +msgid "Secondary menu" +msgstr "" + +#: front/src/views/admin/Settings.vue:15 +msgctxt "Content/Admin/Menu.Title" +msgid "Sections" +msgstr "" + +#: front/src/components/ShortcutsModal.vue:108 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek backwards 30s" +msgstr "" + +#: front/src/components/ShortcutsModal.vue:100 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek backwards 5s" +msgstr "" + +#: front/src/components/ShortcutsModal.vue:112 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek forwards 30s" +msgstr "" + +#: front/src/components/ShortcutsModal.vue:104 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Seek forwards 5s" +msgstr "" + +#: front/src/components/library/radios/Builder.vue:46 +msgctxt "Content/Radio/Dropdown.Placeholder/Verb" +msgid "Select a filter" +msgstr "" + +#: front/src/components/common/ActionTable.vue:79 +msgctxt "Content/*/Link/Verb" +msgid "Select all %{ total } elements" +msgid_plural "Select all %{ total } elements" +msgstr[0] "" +msgstr[1] "" + +#: front/src/components/common/ActionTable.vue:88 +msgctxt "Content/*/Link/Verb" +msgid "Select only current page" +msgstr "" + +#: front/src/components/Home.vue:43 +msgctxt "Content/Home/Link" +msgid "Server rules" +msgstr "" + +#: front/src/components/Sidebar.vue:43 src/components/Sidebar.vue:112 +#: front/src/components/manage/users/UsersTable.vue:182 +#: front/src/views/admin/moderation/AccountsDetail.vue:526 +msgctxt "*/*/*/Noun" +msgid "Settings" +msgstr "" + +#: front/src/components/auth/Settings.vue:10 +msgctxt "Content/Settings/Message" +msgid "Settings updated" +msgstr "" + +#: front/src/components/admin/SettingsGroup.vue:11 +msgctxt "Content/Settings/Paragraph" +msgid "Settings updated successfully." +msgstr "" + +#: front/src/components/manage/users/InvitationForm.vue:27 +msgctxt "Content/Admin/Table.Label/Noun" +msgid "Share link" +msgstr "" + +#: front/src/views/content/libraries/Detail.vue:15 +msgctxt "Content/Library/Paragraph" +msgid "Share this link with other users so they can request access to your library." +msgstr "" + +#: front/src/views/content/libraries/Detail.vue:14 +#: front/src/views/content/remote/Card.vue:90 +msgctxt "Content/Library/Title" +msgid "Sharing link" +msgstr "" + +#: front/src/components/audio/EmbedWizard.vue:5 +msgctxt "Content/Embed/Message" +msgid "Sharing will not work because this pod doesn't allow anonymous users to access content." +msgstr "" + +#: front/src/components/About.vue:156 +msgctxt "*/*/*/Verb" +msgid "Show" +msgstr "" + +#: front/src/components/audio/album/Card.vue:38 +msgctxt "Content/Album/Card.Link/Verb" +msgid "Show %{ count } more track" +msgid_plural "Show %{ count } more tracks" +msgstr[0] "" +msgstr[1] "" + +#: front/src/components/tags/List.vue:11 +msgctxt "Content/*/Button/Label/Verb" +msgid "Show 1 more tag" +msgid_plural "Show %{ count } more tags" +msgstr[0] "" +msgstr[1] "" + +#: front/src/components/library/EditForm.vue:21 +msgctxt "Content/Library/Button.Label" +msgid "Show all edits" +msgstr "" + +#: front/src/components/ShortcutsModal.vue:60 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Show available keyboard shortcuts" +msgstr "" + +#: front/src/components/common/ExpandableDiv.vue:7 +msgctxt "*/*/Button,Label" +msgid "Show less" +msgstr "" + +#: front/src/components/common/ExpandableDiv.vue:8 +msgctxt "*/*/Button,Label" +msgid "Show more" +msgstr "" + +#: front/src/views/Notifications.vue:72 +msgctxt "Content/Notifications/Form.Label/Verb" +msgid "Show read notifications" +msgstr "" + +#: front/src/components/forms/PasswordInput.vue:42 +msgctxt "Content/Settings/Button.Tooltip/Verb" +msgid "Show/hide password" +msgstr "" + +#: front/src/components/manage/library/AlbumsTable.vue:93 +#: front/src/components/manage/library/ArtistsTable.vue:84 +#: front/src/components/manage/library/EditsCardList.vue:72 +#: front/src/components/manage/library/LibrariesTable.vue:110 +#: front/src/components/manage/library/TagsTable.vue:79 +#: front/src/components/manage/library/TracksTable.vue:95 +#: front/src/components/manage/library/UploadsTable.vue:144 +#: front/src/components/manage/moderation/AccountsTable.vue:88 +#: front/src/components/manage/moderation/DomainsTable.vue:85 +#: front/src/components/manage/users/InvitationsTable.vue:76 +#: front/src/components/manage/users/UsersTable.vue:88 +#: front/src/views/content/libraries/FilesTable.vue:117 +msgctxt "Content/*/Paragraph" +msgid "Showing results %{ start }-%{ end } on %{ total }" +msgstr "" + +#: front/src/components/ShortcutsModal.vue:140 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Shuffle queue" +msgstr "" + +#: front/src/components/audio/Player.vue:667 +msgctxt "Sidebar/Player/Icon.Tooltip/Verb" +msgid "Shuffle your queue" +msgstr "" + +#: front/src/components/Home.vue:103 +msgctxt "*/Signup/Title" +msgid "Sign up" +msgstr "" + +#: front/src/views/auth/Signup.vue:37 +msgctxt "*/Signup/Title" +msgid "Sign Up" +msgstr "" + +#: front/src/components/Home.vue:107 +msgctxt "Content/Home/Paragraph" +msgid "Sign up now to keep a track of your favorites, create playlists, discover new content and much more!" +msgstr "" + +#: front/src/components/manage/users/UsersTable.vue:40 +msgctxt "Content/Admin/Table.Label/Short, Noun (Value is a date)" +msgid "Sign-up" +msgstr "" + +#: front/src/components/mixins/Translations.vue:69 +#: front/src/views/admin/moderation/AccountsDetail.vue:198 +#: front/src/components/mixins/Translations.vue:70 +msgctxt "Content/Admin/Table.Label/Noun" +msgid "Sign-up date" +msgstr "" + +#: front/src/components/library/FileUpload.vue:94 +#: front/src/components/library/TrackDetail.vue:39 +#: front/src/components/manage/library/UploadsTable.vue:65 +#: front/src/components/mixins/Translations.vue:66 +#: front/src/views/admin/library/UploadDetail.vue:219 +#: front/src/views/content/libraries/FilesTable.vue:61 +#: front/src/components/mixins/Translations.vue:67 +msgctxt "Content/*/*/Noun" +msgid "Size" +msgstr "" + +#: front/src/components/manage/library/UploadsTable.vue:24 +#: front/src/components/mixins/Translations.vue:24 +#: front/src/views/content/libraries/FilesTable.vue:15 +#: front/src/components/mixins/Translations.vue:25 +msgctxt "Content/Library/*" +msgid "Skipped" +msgstr "" + +#: front/src/views/content/libraries/Quota.vue:49 +msgctxt "Content/Library/Label" +msgid "Skipped files" +msgstr "" + +#: front/src/views/admin/moderation/DomainsDetail.vue:126 +msgctxt "Content/Moderation/Table.Label" +msgid "Software" +msgstr "" + +#: front/src/components/playlists/Editor.vue:21 +msgctxt "Content/Playlist/Paragraph" +msgid "Some tracks in your queue are already in this playlist:" +msgstr "" + +#: front/src/components/PageNotFound.vue:10 +msgctxt "Content/*/Paragraph" +msgid "Sorry, the page you asked for does not exist:" +msgstr "" + +#: front/src/components/Footer.vue:57 +msgctxt "Footer/*/List item.Link" +msgid "Source code" +msgstr "" + +#: front/src/components/auth/Profile.vue:23 +#: front/src/components/manage/users/UsersTable.vue:71 +msgctxt "Content/Profile/User role" +msgid "Staff member" +msgstr "" + +#: front/src/components/audio/PlayButton.vue:27 +#: src/components/radios/Button.vue:4 +msgctxt "*/Queue/Button.Label/Short, Verb" +msgid "Start radio" +msgstr "" + +#: front/src/components/About.vue:170 src/components/Home.vue:53 +#: front/src/views/admin/Settings.vue:87 +msgctxt "Content/Home/Header" +msgid "Statistics" +msgstr "" + +#: front/src/views/admin/moderation/AccountsDetail.vue:510 +msgctxt "Content/Moderation/Help text" +msgid "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this account" +msgstr "" + +#: front/src/views/admin/moderation/DomainsDetail.vue:418 +msgctxt "Content/Moderation/Help text" +msgid "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this domain" +msgstr "" + +#: front/src/views/admin/library/AlbumDetail.vue:346 +#: front/src/views/admin/library/ArtistDetail.vue:345 +#: front/src/views/admin/library/LibraryDetail.vue:356 +#: front/src/views/admin/library/TagDetail.vue:210 +#: front/src/views/admin/library/TrackDetail.vue:389 +#: front/src/views/admin/library/UploadDetail.vue:335 +msgctxt "Content/Moderation/Help text" +msgid "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" +msgstr "" + +#: front/src/components/library/FileUpload.vue:95 +#: front/src/components/manage/library/EditsCardList.vue:12 +#: front/src/components/manage/moderation/ReportCard.vue:57 +#: front/src/components/manage/users/InvitationsTable.vue:17 +#: front/src/components/manage/users/InvitationsTable.vue:39 +#: front/src/components/manage/users/UsersTable.vue:43 +#: front/src/views/admin/moderation/DomainsDetail.vue:152 +#: front/src/views/admin/moderation/ReportsList.vue:14 +#: front/src/views/content/libraries/Detail.vue:28 +msgctxt "*/*/*" +msgid "Status" +msgstr "" + +#: front/src/components/Sidebar.vue:178 src/components/radios/Button.vue:3 +msgctxt "*/Player/Button.Label/Short, Verb" +msgid "Stop radio" +msgstr "" + +#: front/src/components/SetInstanceModal.vue:23 +msgctxt "*/*/Button.Label/Verb" +msgid "Submit" +msgstr "" + +#: front/src/components/library/EditForm.vue:110 +msgctxt "Content/Library/Button.Label/Verb" +msgid "Submit and apply edit" +msgstr "" + +#: front/src/components/library/EditForm.vue:7 +msgctxt "Content/Library/Button.Label" +msgid "Submit another edit" +msgstr "" + +#: front/src/components/moderation/ReportModal.vue:64 +msgctxt "Popup/*/Button.Label" +msgid "Submit report" +msgstr "" + +#: front/src/components/library/EditForm.vue:111 +msgctxt "Content/Library/Button.Label/Verb" +msgid "Submit suggestion" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:17 +msgctxt "Content/Moderation/*" +msgid "Submitted by" +msgstr "" + +#: front/src/views/admin/Settings.vue:86 +msgctxt "Content/Admin/Menu" +msgid "Subsonic" +msgstr "" + +#: front/src/components/auth/SubsonicTokenForm.vue:2 +msgctxt "Content/Settings/Title" +msgid "Subsonic API password" +msgstr "" + +#: front/src/components/library/EditForm.vue:38 +msgctxt "Content/Library/Paragraph" +msgid "Suggest a change using the form below." +msgstr "" + +#: front/src/components/library/AlbumEdit.vue:5 +msgctxt "Content/*/Title" +msgid "Suggest an edit on this album" +msgstr "" + +#: front/src/components/library/ArtistEdit.vue:5 +msgctxt "Content/*/Title" +msgid "Suggest an edit on this artist" +msgstr "" + +#: front/src/components/library/TrackEdit.vue:5 +msgctxt "Content/*/Title" +msgid "Suggest an edit on this track" +msgstr "" + +#: front/src/components/SetInstanceModal.vue:31 +msgctxt "Popup/Instance/List.Label" +msgid "Suggested choices" +msgstr "" + +#: front/src/components/library/FileUpload.vue:3 +msgctxt "Content/Library/Tab.Title/Short" +msgid "Summary" +msgstr "" + +#: front/src/components/library/EditForm.vue:99 +msgctxt "*/*/*" +msgid "Summary (optional)" +msgstr "" + +#: front/src/components/Footer.vue:47 +msgctxt "Footer/*/Listitem.Link" +msgid "Support forum" +msgstr "" + +#: front/src/views/Notifications.vue:10 +msgctxt "Content/Notifications/Header" +msgid "Support this Funkwhale pod" +msgstr "" + +#: front/src/components/library/FileUpload.vue:85 +msgctxt "Content/Library/Paragraph" +msgid "Supported extensions: %{ extensions }" +msgstr "" + +#: front/src/components/playlists/Editor.vue:9 +msgctxt "Content/Playlist/Paragraph" +msgid "Syncing changes to server…" +msgstr "" + +#: front/src/components/audio/SearchBar.vue:35 +msgctxt "*/*/*/Noun" +msgid "Tag" +msgstr "" + +#: front/src/views/admin/library/TagDetail.vue:61 +msgctxt "Content/Moderation/Title" +msgid "Tag data" +msgstr "" + +#: front/src/components/library/Albums.vue:23 +#: src/components/library/Artists.vue:15 +#: front/src/views/admin/library/Base.vue:23 +#: src/views/admin/library/TagsList.vue:24 front/src/edits.js:24 +#: src/edits.js:50 src/edits.js:91 src/entities.js:120 +msgctxt "*/*/*/Noun" +msgid "Tags" +msgstr "" + +#: front/src/components/mixins/Translations.vue:44 +#: front/src/components/mixins/Translations.vue:45 +msgctxt "Content/Moderation/Dropdown" +msgid "Takedown request" +msgstr "" + +#: front/src/components/About.vue:35 src/components/About.vue:61 +msgctxt "Content/About/Header" +msgid "Terms and privacy policy" +msgstr "" + +#: front/src/components/audio/EmbedWizard.vue:35 +#: front/src/components/common/CopyInput.vue:3 +msgctxt "Content/*/Paragraph" +msgid "Text copied to clipboard!" +msgstr "" + +#: front/src/views/admin/library/AlbumDetail.vue:81 +msgctxt "Content/Moderation/Paragraph" +msgid "The album will be removed, as well as associated uploads, tracks, favorites and listening history. This action is irreversible." +msgstr "" + +#: front/src/components/auth/Authorize.vue:39 +msgctxt "Content/Auth/Paragraph" +msgid "The application is also requesting the following unknown permissions:" +msgstr "" + +#: front/src/views/admin/library/ArtistDetail.vue:79 +msgctxt "Content/Moderation/Paragraph" +msgid "The artist will be removed, as well as associated uploads, tracks, albums, favorites and listening history. This action is irreversible." +msgstr "" + +#: front/src/components/Footer.vue:61 +msgctxt "Footer/*/List item.Link" +msgid "The funkwhale logo was kindly designed and provided by Francis Gading." +msgstr "" + +#: front/src/components/SetInstanceModal.vue:8 +msgctxt "Popup/Instance/Error message.List item" +msgid "The given address is not a Funkwhale server" +msgstr "" + +#: front/src/views/content/libraries/Form.vue:34 +msgctxt "Popup/Library/Paragraph" +msgid "The library and all its tracks will be deleted. This can not be undone." +msgstr "" + +#: front/src/views/admin/library/LibraryDetail.vue:61 +msgctxt "Content/Moderation/Paragraph" +msgid "The library will be removed, as well as associated uploads, and follows. This action is irreversible." +msgstr "" + +#: front/src/components/library/ImportStatusModal.vue:140 +msgctxt "Popup/Import/Error.Label" +msgid "The metadata included in the file is invalid or some mandatory fields are missing." +msgstr "" + +#: front/src/components/library/FileUpload.vue:38 +msgctxt "Content/Library/List item" +msgid "The music files you are uploading are tagged properly." +msgstr "" + +#: front/src/components/audio/Player.vue:65 +msgctxt "Sidebar/Player/Error message.Paragraph" +msgid "The next track will play automatically in a few seconds…" +msgstr "" + +#: front/src/components/manage/moderation/NotesThread.vue:27 +msgctxt "Content/Moderation/Paragraph" +msgid "The note will be removed. This action is irreversible." +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:120 +msgctxt "Content/Moderation/Message" +msgid "The object associated with this report was deleted." +msgstr "" + +#: front/src/components/playlists/Form.vue:14 +msgctxt "Content/Playlist/Error message.Title" +msgid "The playlist could not be created" +msgstr "" + +#: front/src/components/federation/FetchButton.vue:37 +msgctxt "*/*/Error" +msgid "The remote server answered with HTTP %{ status }" +msgstr "" + +#: front/src/components/federation/FetchButton.vue:13 +msgctxt "Popup/*/Message.Content" +msgid "The remote server answered, but returned data was unsupported by Funkwhale." +msgstr "" + +#: front/src/components/federation/FetchButton.vue:44 +msgctxt "*/*/Error" +msgid "The remote server didn't respond quickly enough" +msgstr "" + +#: front/src/components/federation/FetchButton.vue:50 +msgctxt "*/*/Error" +msgid "The remote server returned invalid JSON or JSON-LD data" +msgstr "" + +#: front/src/components/manage/library/AlbumsTable.vue:189 +msgctxt "Popup/*/Paragraph" +msgid "The selected albums will be removed, as well as associated tracks, uploads, favorites and listening history. This action is irreversible." +msgstr "" + +#: front/src/components/manage/library/ArtistsTable.vue:179 +msgctxt "Popup/*/Paragraph" +msgid "The selected artist will be removed, as well as associated uploads, tracks, albums, favorites and listening history. This action is irreversible." +msgstr "" + +#: front/src/components/manage/library/LibrariesTable.vue:206 +msgctxt "Popup/*/Paragraph" +msgid "The selected library will be removed, as well as associated uploads and follows. This action is irreversible." +msgstr "" + +#: front/src/components/manage/library/TagsTable.vue:180 +msgctxt "Popup/*/Paragraph" +msgid "The selected tag will be removed and unlinked with existing content, if any. This action is irreversible." +msgstr "" + +#: front/src/components/manage/library/TracksTable.vue:189 +msgctxt "Popup/*/Paragraph" +msgid "The selected tracks will be removed, as well as associated uploads, favorites and listening history. This action is irreversible." +msgstr "" + +#: front/src/components/manage/library/UploadsTable.vue:256 +msgctxt "Popup/*/Paragraph" +msgid "The selected upload will be removed. This action is irreversible." +msgstr "" + +#: front/src/components/SetInstanceModal.vue:7 +msgctxt "Popup/Instance/Error message.List item" +msgid "The server might be down" +msgstr "" + +#: front/src/components/auth/SubsonicTokenForm.vue:4 +msgctxt "Content/Settings/Paragraph" +msgid "The Subsonic API is not available on this Funkwhale instance." +msgstr "" + +#: front/src/components/library/EditCard.vue:96 +msgctxt "Popup/Library/Paragraph" +msgid "The suggestion will be completely removed, this action is irreversible." +msgstr "" + +#: front/src/views/admin/library/TagDetail.vue:44 +msgctxt "Content/Moderation/Paragraph" +msgid "The tag will be removed and unlinked from any existing entity. This action is irreversible." +msgstr "" + +#: front/src/components/playlists/PlaylistModal.vue:34 +msgctxt "Popup/Playlist/Error message.Title" +msgid "The track can't be added to a playlist" +msgstr "" + +#: front/src/components/audio/Player.vue:62 +msgctxt "Sidebar/Player/Error message.Title" +msgid "The track cannot be loaded" +msgstr "" + +#: front/src/views/admin/library/TrackDetail.vue:80 +msgctxt "Content/Moderation/Paragraph" +msgid "The track will be removed, as well as associated uploads, favorites and listening history. This action is irreversible." +msgstr "" + +#: front/src/views/admin/library/UploadDetail.vue:68 +msgctxt "Content/Moderation/Paragraph" +msgid "The upload will be removed. This action is irreversible." +msgstr "" + +#: front/src/components/library/FileUpload.vue:42 +msgctxt "Content/Library/List item" +msgid "The uploaded music files are in OGG, Flac or MP3 format" +msgstr "" + +#: front/src/views/content/Home.vue:4 +msgctxt "Content/Library/Paragraph" +msgid "There are various ways to grab new content and make it available here." +msgstr "" + +#: front/src/components/manage/moderation/InstancePolicyForm.vue:66 +msgctxt "Popup/Moderation/Paragraph" +msgid "This action is irreversible." +msgstr "" + +#: front/src/components/library/AlbumDetail.vue:29 +msgctxt "Content/Album/Paragraph" +msgid "This album is present in the following libraries:" +msgstr "" + +#: front/src/components/library/ArtistDetail.vue:42 +msgctxt "Content/Artist/Paragraph" +msgid "This artist is present in the following libraries:" +msgstr "" + +#: front/src/components/manage/moderation/DomainsTable.vue:169 +msgctxt "Content/Moderation/Popup" +msgid "This domain is present in your allow-list" +msgstr "" + +#: front/src/views/admin/moderation/AccountsDetail.vue:84 +#: front/src/views/admin/moderation/DomainsDetail.vue:76 +msgctxt "Content/Moderation/Card.Title" +msgid "This domain is subject to specific moderation rules" +msgstr "" + +#: front/src/components/manage/moderation/InstancePolicyModal.vue:16 +msgctxt "Content/Moderation/Card.Title" +msgid "This entity is subject to specific moderation rules" +msgstr "" + +#: front/src/views/content/Home.vue:9 +msgctxt "Content/Library/Paragraph" +msgid "This instance offers up to %{quota} of storage space for every user." +msgstr "" + +#: front/src/components/auth/Settings.vue:300 +msgctxt "Popup/Settings/Paragraph" +msgid "This is irreversible and will permanently remove your data from our servers. You will we immediatly logged out." +msgstr "" + +#: front/src/components/auth/Settings.vue:165 +msgctxt "Content/Settings/Paragraph" +msgid "This is the list of applications that have access to your account data." +msgstr "" + +#: front/src/components/auth/Settings.vue:218 +msgctxt "Content/Settings/Paragraph" +msgid "This is the list of applications that you have created." +msgstr "" + +#: front/src/components/auth/Profile.vue:16 +msgctxt "Content/Profile/Button.Paragraph" +msgid "This is you!" +msgstr "" + +#: front/src/views/content/libraries/Form.vue:73 +msgctxt "Content/Library/Input.Placeholder" +msgid "This library contains my personal music, I hope you like it." +msgstr "" + +#: front/src/views/content/remote/Card.vue:169 +msgctxt "Content/Library/Card.Help text" +msgid "This library is private and your approval from its owner is needed to access its content" +msgstr "" + +#: front/src/views/content/remote/Card.vue:170 +msgctxt "Content/Library/Card.Help text" +msgid "This library is public and you can access its content freely" +msgstr "" + +#: front/src/components/common/ActionTable.vue:47 +msgctxt "Modal/*/Paragraph" +msgid "This may affect a lot of elements or have irreversible consequences, please double check this is really what you want." +msgstr "" + +#: front/src/components/library/AlbumEdit.vue:8 +#: front/src/components/library/ArtistEdit.vue:8 +#: front/src/components/library/TrackEdit.vue:8 +msgctxt "Content/*/Message" +msgid "This object is managed by another server, you cannot edit it." +msgstr "" + +#: front/src/components/Home.vue:87 +msgctxt "Content/Home/Paragraph" +msgid "This pod runs Funkwhale, a community-driven project that lets you listen and share music and audio within a decentralized, open network." +msgstr "" + +#: front/src/components/library/FileUpload.vue:51 +msgctxt "Content/Library/Paragraph" +msgid "This reference will be used to group imported files together." +msgstr "" + +#: front/src/components/mixins/Translations.vue:33 +#: front/src/components/mixins/Translations.vue:34 +msgctxt "Content/Library/Help text" +msgid "This track could not be processed, please make sure it is tagged correctly" +msgstr "" + +#: front/src/components/mixins/Translations.vue:29 +#: front/src/components/mixins/Translations.vue:30 +msgctxt "Content/Library/Help text" +msgid "This track has been uploaded, but hasn't been processed by the server yet" +msgstr "" + +#: front/src/components/mixins/Translations.vue:25 +#: front/src/components/mixins/Translations.vue:26 +msgctxt "Content/Library/Help text" +msgid "This track is already present in one of your libraries" +msgstr "" + +#: front/src/components/audio/PlayButton.vue:103 +msgctxt "*/Queue/Button/Title" +msgid "This track is not available in any library you have access to" +msgstr "" + +#: front/src/components/library/TrackDetail.vue:82 +msgctxt "Content/Track/Paragraph" +msgid "This track is present in the following libraries:" +msgstr "" + +#: front/src/views/playlists/Detail.vue:46 +msgctxt "Popup/Playlist/Paragraph" +msgid "This will completely delete this playlist and cannot be undone." +msgstr "" + +#: front/src/views/radios/Detail.vue:27 +msgctxt "Popup/Radio/Paragraph" +msgid "This will completely delete this radio and cannot be undone." +msgstr "" + +#: front/src/components/auth/SubsonicTokenForm.vue:55 +msgctxt "Popup/Settings/Paragraph" +msgid "This will completely disable access to the Subsonic API using from account." +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:359 +msgctxt "Content/Moderation/Popup,Paragraph" +msgid "This will delete the object associated with this report and mark the report as resolved. The deletion is irreversible." +msgstr "" + +#: front/src/components/auth/SubsonicTokenForm.vue:40 +msgctxt "Popup/Settings/Paragraph" +msgid "This will log you out from existing devices that use the current password." +msgstr "" + +#: front/src/components/auth/Settings.vue:253 +msgctxt "Popup/Settings/Paragraph" +msgid "This will permanently delete the application and all the associated tokens." +msgstr "" + +#: front/src/components/auth/Settings.vue:194 +msgctxt "Popup/Settings/Paragraph" +msgid "This will prevent this application from accessing the service on your behalf." +msgstr "" + +#: front/src/components/playlists/Editor.vue:54 +msgctxt "Popup/Playlist/Paragraph" +msgid "This will remove all tracks from this playlist and cannot be undone." +msgstr "" + +#: front/src/components/audio/track/Table.vue:7 +#: front/src/components/manage/library/AlbumsTable.vue:39 +#: front/src/components/manage/library/TracksTable.vue:39 +#: front/src/views/admin/library/AlbumDetail.vue:105 +#: front/src/views/admin/library/TrackDetail.vue:104 +#: front/src/views/content/libraries/FilesTable.vue:55 src/edits.js:36 +#: front/src/edits.js:62 +msgctxt "*/*/*/Noun" +msgid "Title" +msgstr "" + +#: front/src/components/SetInstanceModal.vue:16 +msgctxt "Popup/Instance/Paragraph" +msgid "To continue, please select the Funkwhale instance you want to connect to. Enter the address directly, or select one of the suggested choices." +msgstr "" + +#: front/src/components/ShortcutsModal.vue:148 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Toggle favorite" +msgstr "" + +#: front/src/components/ShortcutsModal.vue:132 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Toggle mute" +msgstr "" + +#: front/src/components/ShortcutsModal.vue:136 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Toggle queue looping" +msgstr "" + +#: front/src/views/admin/library/AlbumDetail.vue:238 +#: front/src/views/admin/library/ArtistDetail.vue:226 +#: front/src/views/admin/library/LibraryDetail.vue:219 +#: front/src/views/admin/library/TrackDetail.vue:290 +#: front/src/views/admin/moderation/AccountsDetail.vue:329 +#: front/src/views/admin/moderation/DomainsDetail.vue:262 +msgctxt "Content/Moderation/Table.Label" +msgid "Total size" +msgstr "" + +#: front/src/views/content/libraries/Card.vue:68 +msgctxt "Content/Library/Card.Help text" +msgid "Total size of the files in this library" +msgstr "" + +#: front/src/views/admin/moderation/DomainsDetail.vue:142 +msgctxt "Content/*/*" +msgid "Total users" +msgstr "" + +#: front/src/components/audio/SearchBar.vue:34 +#: front/src/components/library/TrackBase.vue:188 +#: front/src/components/library/TrackDetail.vue:128 +#: front/src/components/metadata/Search.vue:138 +#: src/components/mixins/Report.vue:28 +#: front/src/views/admin/library/UploadDetail.vue:199 +#: front/src/components/mixins/Report.vue:29 +msgctxt "*/*/*/Noun" +msgid "Track" +msgstr "" + +#: front/src/components/library/EditCard.vue:13 +msgctxt "Content/Library/Card/Short" +msgid "Track #%{ id } - %{ name }" +msgstr "" + +#: front/src/views/admin/library/TrackDetail.vue:97 +msgctxt "Content/Moderation/Title" +msgid "Track data" +msgstr "" + +#: front/src/components/library/TrackDetail.vue:4 +msgctxt "Content/Track/Title/Noun" +msgid "Track information" +msgstr "" + +#: front/src/components/mixins/Translations.vue:60 +#: front/src/components/mixins/Translations.vue:61 +msgctxt "Content/*/Dropdown/Noun" +msgid "Track name" +msgstr "" + +#: front/src/components/library/AlbumDetail.vue:19 +#: front/src/components/library/TagDetail.vue:36 +#: front/src/components/manage/library/AlbumsTable.vue:42 +#: front/src/components/manage/library/ArtistsTable.vue:42 +#: front/src/components/manage/library/TagsTable.vue:44 +#: front/src/components/playlists/PlaylistModal.vue:47 +#: front/src/views/admin/library/AlbumDetail.vue:268 +#: front/src/views/admin/library/ArtistDetail.vue:266 +#: front/src/views/admin/library/Base.vue:14 +#: front/src/views/admin/library/LibraryDetail.vue:248 +#: front/src/views/admin/library/TagDetail.vue:143 +#: front/src/views/admin/library/TracksList.vue:24 +#: front/src/views/admin/moderation/AccountsDetail.vue:374 +#: front/src/views/admin/moderation/DomainsDetail.vue:311 +#: front/src/views/content/Base.vue:8 src/views/content/libraries/Detail.vue:8 +#: front/src/views/playlists/Detail.vue:76 src/views/radios/Detail.vue:34 +msgctxt "*/*/*" +msgid "Tracks" +msgstr "" + +#: front/src/components/library/ArtistDetail.vue:33 +msgctxt "Content/Artist/Title" +msgid "Tracks by this artist" +msgstr "" + +#: front/src/components/library/radios/Filter.vue:44 +msgctxt "Popup/Radio/Title/Noun" +msgid "Tracks matching filter" +msgstr "" + +#: front/src/components/library/TrackDetail.vue:57 +#: front/src/components/manage/moderation/ReportCard.vue:134 +#: front/src/views/admin/library/UploadDetail.vue:250 +#: front/src/views/admin/moderation/AccountsDetail.vue:181 +msgctxt "Content/Track/Table.Label/Noun" +msgid "Type" +msgstr "" + +#: front/src/components/manage/moderation/AccountsTable.vue:44 +#: front/src/components/manage/moderation/DomainsTable.vue:50 +msgctxt "Content/Moderation/Table.Label/Short" +msgid "Under moderation rule" +msgstr "" + +#: front/src/components/ShortcutsModal.vue:68 +msgctxt "Popup/Keyboard shortcuts/Table.Label/Verb" +msgid "Unfocus searchbar" +msgstr "" + +#: front/src/views/content/remote/Card.vue:122 +#: src/views/content/remote/Card.vue:127 +msgctxt "*/Library/Button.Label/Verb" +msgid "Unfollow" +msgstr "" + +#: front/src/views/content/remote/Card.vue:123 +msgctxt "Popup/Library/Title" +msgid "Unfollow this library?" +msgstr "" + +#: front/src/components/federation/FetchButton.vue:54 +#: front/src/components/federation/FetchButton.vue:55 +#: front/src/components/library/ImportStatusModal.vue:144 +msgctxt "*/*/Error" +msgid "Unknown error" +msgstr "" + +#: front/src/components/audio/Player.vue:656 +msgctxt "Sidebar/Player/Icon.Tooltip/Verb" +msgid "Unmute" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:225 +msgctxt "Content/*/Button.Label" +msgid "Unresolve" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:67 +#: front/src/views/admin/moderation/ReportsList.vue:23 +msgctxt "Content/*/*/Short" +msgid "Unresolved" +msgstr "" + +#: front/src/components/manage/moderation/InstancePolicyForm.vue:57 +msgctxt "Content/Moderation/Card.Button.Label/Verb" +msgid "Update" +msgstr "" + +#: front/src/components/auth/ApplicationForm.vue:64 +msgctxt "Content/Applications/Button.Label/Verb" +msgid "Update application" +msgstr "" + +#: front/src/components/auth/Settings.vue:50 +msgctxt "Content/Settings/Button.Label/Verb" +msgid "Update avatar" +msgstr "" + +#: front/src/views/content/libraries/Form.vue:25 +msgctxt "Content/Library/Button.Label/Verb" +msgid "Update library" +msgstr "" + +#: front/src/components/playlists/Form.vue:33 +msgctxt "Content/Playlist/Button.Label/Verb" +msgid "Update playlist" +msgstr "" + +#: front/src/components/auth/Settings.vue:27 +msgctxt "Content/Settings/Button.Label/Verb" +msgid "Update settings" +msgstr "" + +#: front/src/views/auth/PasswordResetConfirm.vue:21 +msgctxt "Content/Signup/Button.Label" +msgid "Update your password" +msgstr "" + +#: front/src/views/content/libraries/Card.vue:45 +#: front/src/views/content/libraries/DetailArea.vue:24 +msgctxt "Content/Library/Card.Button.Label/Verb" +msgid "Upload" +msgstr "" + +#: front/src/components/auth/Settings.vue:45 +msgctxt "Content/Settings/Title/Verb" +msgid "Upload a new avatar" +msgstr "" + +#: front/src/views/content/Home.vue:6 +msgctxt "Content/Library/Title/Verb" +msgid "Upload audio content" +msgstr "" + +#: front/src/views/admin/library/UploadDetail.vue:85 +msgctxt "Content/Moderation/Title" +msgid "Upload data" +msgstr "" + +#: front/src/views/content/libraries/FilesTable.vue:58 +msgctxt "*/*/*/Noun" +msgid "Upload date" +msgstr "" + +#: front/src/components/library/FileUpload.vue:258 +msgctxt "Content/Library/Help text" +msgid "Upload denied, ensure the file is not too big and that you have not reached your quota" +msgstr "" + +#: front/src/components/library/ImportStatusModal.vue:8 +msgctxt "Popup/Import/Message" +msgid "Upload is still pending and will soon be processed by the server." +msgstr "" + +#: front/src/views/content/Home.vue:7 +msgctxt "Content/Library/Paragraph" +msgid "Upload music files (MP3, OGG, FLAC, etc.) from your personal library directly from your browser to enjoy them here." +msgstr "" + +#: front/src/components/library/FileUpload.vue:30 +msgctxt "Content/Library/Title/Verb" +msgid "Upload new tracks" +msgstr "" + +#: front/src/components/About.vue:99 +#: front/src/views/admin/moderation/AccountsDetail.vue:309 +msgctxt "*/*/*" +msgid "Upload quota" +msgstr "" + +#: front/src/components/library/FileUpload.vue:267 +msgctxt "Content/Library/Help text" +msgid "Upload timeout, please try again" +msgstr "" + +#: front/src/components/library/ImportStatusModal.vue:14 +msgctxt "Popup/Import/Message" +msgid "Upload was skipped because a similar one is already available in one of your libraries." +msgstr "" + +#: front/src/components/library/ImportStatusModal.vue:11 +msgctxt "Popup/Import/Message" +msgid "Upload was successfully processed by the server." +msgstr "" + +#: front/src/components/library/FileUpload.vue:109 +msgctxt "Content/Library/Table" +msgid "Uploaded" +msgstr "" + +#: front/src/components/library/FileUpload.vue:5 +msgctxt "Content/Library/Tab.Title/Short" +msgid "Uploading" +msgstr "" + +#: front/src/components/library/FileUpload.vue:112 +msgctxt "Content/Library/Table" +msgid "Uploading…" +msgstr "" + +#: front/src/components/manage/library/LibrariesTable.vue:52 +#: front/src/components/manage/moderation/AccountsTable.vue:41 +#: front/src/components/mixins/Translations.vue:75 +#: front/src/views/admin/library/AlbumDetail.vue:258 +#: front/src/views/admin/library/ArtistDetail.vue:246 +#: front/src/views/admin/library/Base.vue:20 +#: front/src/views/admin/library/LibraryDetail.vue:258 +#: front/src/views/admin/library/TrackDetail.vue:310 +#: front/src/views/admin/library/UploadsList.vue:24 +#: front/src/views/admin/moderation/AccountsDetail.vue:349 +#: front/src/views/admin/moderation/DomainsDetail.vue:281 +#: front/src/components/mixins/Translations.vue:76 +msgctxt "*/*/*" +msgid "Uploads" +msgstr "" + +#: front/src/components/auth/ApplicationForm.vue:16 +msgctxt "Content/Applications/Help Text" +msgid "Use \"urn:ietf:wg:oauth:2.0:oob\" as a redirect URI if your application is not served on the web." +msgstr "" + +#: front/src/components/Footer.vue:16 +msgctxt "Footer/*/List item.Link" +msgid "Use another instance" +msgstr "" + +#: front/src/components/Home.vue:146 +msgctxt "Content/Home/Link" +msgid "Use Funkwhale on other devices with our apps" +msgstr "" + +#: front/src/components/moderation/ReportModal.vue:44 +msgctxt "*/*/Field,Help" +msgid "Use this field to provide additional context to the moderator that will handle your report." +msgstr "" + +#: front/src/views/auth/PasswordReset.vue:12 +msgctxt "Content/Signup/Paragraph" +msgid "Use this form to request a password reset. We will send an email to the given address with instructions to reset your password." +msgstr "" + +#: front/src/components/moderation/ReportModal.vue:18 +msgctxt "*/Moderation/Popup,Paragraph" +msgid "Use this form to submit a report to our moderation team." +msgstr "" + +#: front/src/components/manage/moderation/InstancePolicyForm.vue:111 +msgctxt "Content/Moderation/Help text" +msgid "Use this setting to temporarily enable/disable the policy without completely removing it." +msgstr "" + +#: front/src/components/manage/users/InvitationsTable.vue:49 +msgctxt "Content/Admin/Table" +msgid "Used" +msgstr "" + +#: front/src/components/Home.vue:125 +msgctxt "Content/Home/Header" +msgid "Useful links" +msgstr "" + +#: front/src/views/content/libraries/Detail.vue:26 +msgctxt "Content/Library/Table.Label" +msgid "User" +msgstr "" + +#: front/src/components/Home.vue:154 +msgctxt "Content/Home/Link" +msgid "User guides" +msgstr "" + +#: front/src/views/admin/Settings.vue:88 +msgctxt "Content/Admin/Menu" +msgid "User Interface" +msgstr "" + +#: front/src/components/library/AlbumDetail.vue:26 +#: front/src/components/library/ArtistDetail.vue:39 +#: front/src/components/library/TrackDetail.vue:79 +msgctxt "Content/*/Title/Noun" +msgid "User libraries" +msgstr "" + +#: front/src/components/library/Radios.vue:20 +msgctxt "Content/Radio/Title" +msgid "User radios" +msgstr "" + +#: front/src/components/auth/SignupForm.vue:15 +#: front/src/components/manage/users/UsersTable.vue:37 +#: front/src/components/mixins/Translations.vue:71 +#: front/src/views/admin/moderation/AccountsDetail.vue:114 +#: front/src/components/mixins/Translations.vue:72 +msgctxt "Content/*/*" +msgid "Username" +msgstr "" + +#: front/src/components/auth/LoginForm.vue:11 +msgctxt "Content/Login/Input.Label/Noun" +msgid "Username or email" +msgstr "" + +#: front/src/components/Sidebar.vue:106 +#: front/src/components/manage/moderation/DomainsTable.vue:47 +#: front/src/components/mixins/Translations.vue:73 +#: src/views/admin/Settings.vue:81 front/src/views/admin/users/Base.vue:5 +#: src/views/admin/users/UsersList.vue:21 +#: front/src/components/mixins/Translations.vue:74 +msgctxt "*/*/*/Noun" +msgid "Users" +msgstr "" + +#: front/src/components/Home.vue:110 +msgctxt "Content/Home/Paragraph" +msgid "Users on this pod also get %{ quota } of free storage to upload their own content!" +msgstr "" + +#: front/src/components/Footer.vue:29 +msgctxt "Footer/*/Title" +msgid "Using Funkwhale" +msgstr "" + +#: front/src/components/Footer.vue:13 +msgctxt "Footer/*/List item" +msgid "Version %{version}" +msgstr "" + +#: front/src/views/content/libraries/Quota.vue:29 +#: front/src/views/content/libraries/Quota.vue:56 +#: front/src/views/content/libraries/Quota.vue:82 +msgctxt "Content/Library/Link/Verb" +msgid "View files" +msgstr "" + +#: front/src/components/library/AlbumBase.vue:95 +#: front/src/components/library/ArtistBase.vue:107 +#: front/src/components/library/TrackBase.vue:111 +#: front/src/views/admin/library/AlbumDetail.vue:48 +#: front/src/views/admin/library/ArtistDetail.vue:46 +#: front/src/views/admin/library/LibraryDetail.vue:34 +#: front/src/views/admin/library/LibraryDetail.vue:45 +#: front/src/views/admin/library/TagDetail.vue:32 +#: front/src/views/admin/library/TrackDetail.vue:47 +#: front/src/views/admin/library/UploadDetail.vue:35 +#: front/src/views/admin/library/UploadDetail.vue:46 +#: front/src/views/admin/moderation/AccountsDetail.vue:37 +#: front/src/views/admin/moderation/AccountsDetail.vue:45 +#: front/src/views/admin/moderation/DomainsDetail.vue:30 +msgctxt "Content/Moderation/Link/Verb" +msgid "View in Django's admin" +msgstr "" + +#: front/src/components/Home.vue:169 +msgctxt "Content/Home/Link" +msgid "View more…" +msgstr "" + +#: front/src/components/library/AlbumBase.vue:62 +#: front/src/components/library/ArtistBase.vue:73 +#: front/src/components/library/TrackBase.vue:78 +#: front/src/components/metadata/ArtistCard.vue:49 +#: front/src/components/metadata/ReleaseCard.vue:53 +msgctxt "Content/*/*/Clickable, Verb" +msgid "View on MusicBrainz" +msgstr "" + +#: front/src/components/manage/moderation/ReportCard.vue:124 +msgctxt "Content/Moderation/Link" +msgid "View public page" +msgstr "" + +#: front/src/components/manage/library/LibrariesTable.vue:11 +#: front/src/components/manage/library/LibrariesTable.vue:51 +#: front/src/components/manage/library/UploadsTable.vue:11 +#: front/src/components/manage/library/UploadsTable.vue:63 +#: front/src/views/admin/library/LibraryDetail.vue:94 +#: front/src/views/admin/library/UploadDetail.vue:101 +#: front/src/views/content/libraries/Form.vue:18 +msgctxt "*/*/*" +msgid "Visibility" +msgstr "" + +#: front/src/components/Home.vue:91 +msgctxt "Content/Home/Link" +msgid "Visit funkwhale.audio" +msgstr "" + +#: front/src/components/library/AlbumDetail.vue:4 +msgctxt "Content/Album/" +msgid "Volume %{ number }" +msgstr "" + +#: front/src/components/federation/FetchButton.vue:69 +msgctxt "Popup/*/Loading.Title" +msgid "Waiting for result…" +msgstr "" + +#: front/src/components/auth/Settings.vue:285 +msgctxt "Content/Settings/Error message.Title" +msgid "We cannot delete your account" +msgstr "" + +#: front/src/components/auth/LoginForm.vue:3 +msgctxt "Content/Login/Error message.Title" +msgid "We cannot log you in" +msgstr "" + +#: front/src/components/auth/ApplicationForm.vue:3 +msgctxt "Content/*/Error message.Title" +msgid "We cannot save your changes" +msgstr "" + +#: front/src/views/Notifications.vue:39 +msgctxt "Content/Notifications/Paragraph" +msgid "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!" +msgstr "" + +#: front/src/components/library/FileUpload.vue:39 +msgctxt "Content/Library/Link" +msgid "We recommend using Picard for that purpose." +msgstr "" + +#: front/src/components/moderation/ReportModal.vue:35 +msgctxt "*/*/Field,Help" +msgid "We'll use this email if we need to contact you regarding this report." +msgstr "" + +#: front/src/components/Home.vue:207 +msgctxt "Head/Home/Title" +msgid "Welcome" +msgstr "" + +#: front/src/components/Home.vue:5 +msgctxt "Content/Home/Header" +msgid "Welcome to %{ podName }!" +msgstr "" + +#: front/src/components/audio/EmbedWizard.vue:23 +msgctxt "Popup/Embed/Input.Label" +msgid "Widget height" +msgstr "" + +#: front/src/components/audio/EmbedWizard.vue:16 +msgctxt "Popup/Embed/Input.Label" +msgid "Widget width" +msgstr "" + +#: front/src/components/auth/ApplicationForm.vue:157 +msgctxt "Content/OAuth Scopes/Label/Verb" +msgid "Write" +msgstr "" + +#: front/src/components/auth/Authorize.vue:21 +msgctxt "Content/Auth/Label/Noun" +msgid "Write-only" +msgstr "" + +#: front/src/components/auth/ApplicationForm.vue:158 +msgctxt "Content/OAuth Scopes/Help Text" +msgid "Write-only access to user data" +msgstr "" + +#: front/src/components/Sidebar.vue:133 +#: front/src/components/manage/moderation/AccountsTable.vue:72 +#: front/src/components/manage/moderation/DomainsTable.vue:12 +#: front/src/components/manage/moderation/DomainsTable.vue:69 +#: front/src/views/admin/moderation/DomainsDetail.vue:109 +msgctxt "*/*/*" +msgid "Yes" +msgstr "" + +#: front/src/components/auth/Logout.vue:8 +msgctxt "Content/Login/Button.Label" +msgid "Yes, log me out!" +msgstr "" + +#: front/src/views/content/libraries/Form.vue:19 +msgctxt "Content/Library/Paragraph" +msgid "You are able to share your library with other people, regardless of its visibility." +msgstr "" + +#: front/src/components/library/FileUpload.vue:32 +msgctxt "Content/Library/Paragraph" +msgid "You are about to upload music to your library. Before proceeding, please ensure that:" +msgstr "" + +#: front/src/components/SetInstanceModal.vue:12 +msgctxt "Popup/Login/Paragraph" +msgid "You are currently connected to <a href=\"%{ url }\" target=\"_blank\">%{ hostname } <i class=\"external icon\"/></a>. If you continue, you will be disconnected from your current instance and all your local data will be deleted." +msgstr "" + +#: front/src/components/library/ArtistDetail.vue:6 +msgctxt "Content/Artist/Paragraph" +msgid "You are currently hiding content related to this artist." +msgstr "" + +#: front/src/components/auth/Logout.vue:7 +msgctxt "Content/Login/Paragraph" +msgid "You are currently logged in as %{ username }" +msgstr "" + +#: front/src/components/library/FileUpload.vue:35 +msgctxt "Content/Library/List item" +msgid "You are not uploading copyrighted content in a public library, otherwise you may be infringing the law" +msgstr "" + +#: front/src/components/SetInstanceModal.vue:98 +msgctxt "*/Instance/Message" +msgid "You are now using the Funkwhale instance at %{ url }" +msgstr "" + +#: front/src/views/content/Home.vue:17 +msgctxt "Content/Library/Paragraph" +msgid "You can 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." +msgstr "" + +#: front/src/components/moderation/FilterModal.vue:31 +msgctxt "Popup/Moderation/Paragraph" +msgid "You can manage and update your filters any time from your account settings." +msgstr "" + +#: front/src/views/auth/EmailConfirm.vue:24 +msgctxt "Content/Signup/Paragraph" +msgid "You can now use the service without limitations." +msgstr "" + +#: front/src/components/auth/Settings.vue:278 +msgctxt "Content/Settings/Paragraph'" +msgid "You can permanently and irreversibly delete your account and all the associated data using the form below. You will be asked for confirmation." +msgstr "" + +#: front/src/components/library/radios/Builder.vue:7 +msgctxt "Content/Radio/Paragraph" +msgid "You can use this interface to build your own custom radio, which will play tracks according to your criteria." +msgstr "" + +#: front/src/components/auth/SubsonicTokenForm.vue:7 +msgctxt "Content/Settings/Paragraph" +msgid "You can use those to enjoy your playlist and music in offline mode, on your smartphone or tablet, for instance." +msgstr "" + +#: front/src/components/auth/Settings.vue:202 +msgctxt "Content/Applications/Paragraph" +msgid "You don't have any application connected with your account." +msgstr "" + +#: front/src/components/auth/Settings.vue:261 +msgctxt "Content/Applications/Paragraph" +msgid "You don't have any configured application yet." +msgstr "" + +#: front/src/views/admin/moderation/AccountsDetail.vue:75 +msgctxt "Content/Moderation/Card.Title" +msgid "You don't have any rule in place for this account." +msgstr "" + +#: front/src/views/admin/moderation/DomainsDetail.vue:67 +msgctxt "Content/Moderation/Card.Title" +msgid "You don't have any rule in place for this domain." +msgstr "" + +#: front/src/components/library/EditForm.vue:52 +msgctxt "Content/Library/Paragraph" +msgid "You don't have the permission to edit this object, but you can suggest changes. Once submitted, suggestions will be reviewed before approval." +msgstr "" + +#: front/src/components/Sidebar.vue:175 +msgctxt "Sidebar/Player/Title" +msgid "You have a radio playing" +msgstr "" + +#: front/src/components/audio/Player.vue:69 +msgctxt "Sidebar/Player/Error message.Paragraph" +msgid "You may have a connectivity issue." +msgstr "" + +#: front/src/components/auth/Settings.vue:100 +msgctxt "Popup/Settings/List item" +msgid "You will be logged out from this session and have to log in with the new one" +msgstr "" + +#: front/src/components/auth/Authorize.vue:51 +msgctxt "Content/Auth/Paragraph" +msgid "You will be redirected to <strong>%{ url }</strong>" +msgstr "" + +#: front/src/components/auth/Authorize.vue:49 +msgctxt "Content/Auth/Paragraph" +msgid "You will be shown a code to copy-paste in the application." +msgstr "" + +#: front/src/components/auth/Settings.vue:71 +msgctxt "Content/Settings/Paragraph" +msgid "You will have to update your password on your clients that use this password." +msgstr "" + +#: front/src/components/moderation/FilterModal.vue:20 +msgctxt "Popup/Moderation/Paragraph" +msgid "You will not see tracks, albums and user activity linked to this artist any more:" +msgstr "" + +#: front/src/components/auth/SignupForm.vue:9 +msgctxt "Content/Signup/Form/Paragraph" +msgid "Your account cannot be created." +msgstr "" + +#: front/src/components/auth/Settings.vue:281 +msgctxt "Content/Settings/Paragraph'" +msgid "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." +msgstr "" + +#: front/src/components/auth/Settings.vue:215 +msgctxt "Content/Settings/Title/Noun" +msgid "Your applications" +msgstr "" + +#: front/src/components/auth/Settings.vue:38 +msgctxt "Content/Settings/Error message.Title" +msgid "Your avatar cannot be saved" +msgstr "" + +#: front/src/components/auth/Settings.vue:527 +msgctxt "*/Auth/Message" +msgid "Your deletion request was submitted, your account and content will be deleted shortly" +msgstr "" + +#: front/src/components/library/EditForm.vue:3 +msgctxt "Content/Library/Paragraph" +msgid "Your edit was successfully submitted." +msgstr "" + +#: front/src/components/favorites/List.vue:116 +msgctxt "Head/Favorites/Title" +msgid "Your Favorites" +msgstr "" + +#: front/src/views/Notifications.vue:5 +msgctxt "Content/Notifications/Title" +msgid "Your messages" +msgstr "" + +#: front/src/views/Notifications.vue:69 +msgctxt "Content/Notifications/Title" +msgid "Your notifications" +msgstr "" + +#: front/src/components/auth/Settings.vue:76 +msgctxt "Content/Settings/Error message.Title" +msgid "Your password cannot be changed" +msgstr "" + +#: front/src/views/auth/PasswordResetConfirm.vue:29 +msgctxt "Content/Signup/Card.Paragraph" +msgid "Your password has been updated successfully." +msgstr "" + +#: front/src/components/auth/Settings.vue:14 +msgctxt "Content/Settings/Error message.Title" +msgid "Your settings can't be updated" +msgstr "" + +#: front/src/components/auth/Settings.vue:101 +msgctxt "Popup/Settings/List item" +msgid "Your Subsonic password will be changed to a new, random one, logging you out from devices that used the old Subsonic password" +msgstr "" + +#: front/src/entities.js:126 +msgctxt "*/*/*/Noun" +msgid "MusicBrainz ID" +msgstr "" + +#: front/src/main.js:110 +msgctxt "*/Error/Paragraph" +msgid "You sent too many requests and have been rate limited, please try again in %{ delay }" +msgstr "" + +#: front/src/main.js:113 +msgctxt "*/Error/Paragraph" +msgid "You sent too many requests and have been rate limited, please try again later" +msgstr "" + +#: front/src/components/library/AlbumBase.vue:208 +msgctxt "Content/Album/Header.Title" +msgid "Album containing %{ count } track, by <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" +msgid_plural "Album containing %{ count } tracks, by <a class=\"internal\" href=\"%{ artistUrl }\">%{ artist }</a>" +msgstr[0] "" +msgstr[1] "" + +#: front/src/components/audio/PlayButton.vue:246 +msgctxt "*/Queue/Message" +msgid "%{ count } track was added to your queue" +msgid_plural "%{ count } tracks were added to your queue" +msgstr[0] "" +msgstr[1] "" diff --git a/front/package.json b/front/package.json index 22b5f3bb5ed35aebd5cb562c5f752ec2a65f8533..c6b71944e8e59ebad4df087562dbd368c17fe64c 100644 --- a/front/package.json +++ b/front/package.json @@ -15,13 +15,15 @@ "dateformat": "^3.0.3", "diff": "^4.0.1", "django-channels": "^1.1.6", + "fomantic-ui-css": "^2.7", "howler": "^2.0.14", "js-logger": "^1.4.1", "jwt-decode": "^2.2.0", "lodash": "^4.17.10", "masonry-layout": "^4.2.2", "moment": "^2.22.2", - "semantic-ui-css": "^2.4.1", + "qs": "^6.7.0", + "sanitize-html": "^1.20.1", "showdown": "^1.8.6", "vue": "^2.5.17", "vue-gettext": "^2.1.0", @@ -44,9 +46,11 @@ "chai": "^4.1.2", "easygettext": "^2.6.3", "eslint-plugin-html": "^4.0.5", + "glob-all": "^3.1.0", "mocha": "^5.2.0", "moxios": "^0.4.0", "node-sass": "^4.9.3", + "purgecss-webpack-plugin": "^1.6.0", "sass-loader": "^7.1.0", "sinon": "^6.1.5", "vue-template-compiler": "^2.5.17", @@ -85,9 +89,20 @@ } }, "browserslist": [ - "> 1%", - "last 2 versions", - "not ie <= 8" + "IE >= 11", + "Firefox >= 52", + "ChromeAndroid >= 70", + "Chrome >= 49", + "Safari >= 9", + "Edge >= 16", + "Opera >= 57", + "OperaMini >= 57", + "Samsung >= 7", + "FirefoxAndroid >= 63", + "UCAndroid >= 11", + "iOS >= 9", + "Android >= 4", + "not dead" ], "author": "Eliot Berriot <contact@eliotberriot.com>", "description": "Funkwhale front-end" diff --git a/front/public/index.html b/front/public/index.html index 7b09feaf028a141997212222c7967639038a1bd1..142419ca63f3295dadbf8773931f2cbe7e37e1cc 100644 --- a/front/public/index.html +++ b/front/public/index.html @@ -9,7 +9,7 @@ <title>Funkwhale</title> </head> -<body> +<body class="theme-light" id="body"> <noscript> <strong>We're sorry but Funkwhale doesn't work properly without JavaScript enabled. Please enable it to continue.</strong> </noscript> diff --git a/front/scripts/i18n-extract.sh b/front/scripts/i18n-extract.sh index 1b36d7b1cc635da1e34531b29a5dad3dcd1b36d8..df2c37ea523c066da48e145b14f5149479af8278 100755 --- a/front/scripts/i18n-extract.sh +++ b/front/scripts/i18n-extract.sh @@ -4,7 +4,7 @@ locales_dir="locales" sources=$(find src -name '*.vue' -o -name '*.html' 2> /dev/null) js_sources=$(find src -name '*.vue' -o -name '*.js') touch $locales_dir/app.pot - +GENERATE=${GENERATE-true} # Create a main .pot template, then generate .po files for each available language. # Extract gettext strings from templates files and create a POT dictionary template. $(yarn bin)/gettext-extract --attribute v-translate --quiet --output $locales_dir/app.pot $sources @@ -18,12 +18,14 @@ xgettext --language=JavaScript --keyword=npgettext:1c,2,3 \ # Fix broken files path/lines in pot sed -e 's|#: src/|#: front/src/|' -i $locales_dir/app.pot -# Generate .po files for each available language. -echo $locales -for lang in $locales; do \ - po_file=$locales_dir/$lang/LC_MESSAGES/app.po; \ - echo "msgmerge --update $po_file "; \ - mkdir -p $(dirname $po_file); \ - [ -f $po_file ] && msgmerge --lang=$lang --update $po_file $locales_dir/app.pot --no-wrap || msginit --no-wrap --no-translator --locale=$lang --input=$locales_dir/app.pot --output-file=$po_file; \ - msgattrib --no-wrap --no-obsolete -o $po_file $po_file; \ -done; +if [ $GENERATE = 'true' ]; then + # Generate .po files for each available language. + echo $locales + for lang in $locales; do \ + po_file=$locales_dir/$lang/LC_MESSAGES/app.po; \ + echo "msgmerge --update $po_file "; \ + mkdir -p $(dirname $po_file); \ + [ -f $po_file ] && msgmerge --lang=$lang --update $po_file $locales_dir/app.pot --no-wrap || msginit --no-wrap --no-translator --locale=$lang --input=$locales_dir/app.pot --output-file=$po_file; \ + msgattrib --no-wrap --no-obsolete -o $po_file $po_file; \ + done; +fi diff --git a/front/scripts/print-duplicates-source.py b/front/scripts/print-duplicates-source.py new file mode 100644 index 0000000000000000000000000000000000000000..9d7733b6b7044a6d84761c6ce531e4643e6be326 --- /dev/null +++ b/front/scripts/print-duplicates-source.py @@ -0,0 +1,33 @@ +import argparse +import collections +import polib + + +def print_duplicates(path): + pofile = polib.pofile(path) + + contexts_by_id = collections.defaultdict(list) + for e in pofile: + contexts_by_id[e.msgid].append(e.msgctxt) + count = collections.Counter( + [e.msgid for e in pofile] + ) + duplicates = [ + (k, v) for k, v in count.items() + if v > 1 + ] + for k, v in sorted(duplicates, key=lambda r: r[1], reverse=True): + print('{} entries - {}:'.format(v, k)) + for ctx in contexts_by_id[k]: + print(' - {}'.format(ctx)) + print() + + total_duplicates = sum([v - 1 for _, v in duplicates]) + print('{} total duplicates'.format(total_duplicates)) + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument("po", help="Path of the po file to use as a source") + args = parser.parse_args() + + print_duplicates(path=args.po) diff --git a/front/src/App.vue b/front/src/App.vue index 5711466c5bb9cd29eaec058174a9fe7a4c5376b9..5be97dfb5655f43f5093353fcfffd55e034aa310 100644 --- a/front/src/App.vue +++ b/front/src/App.vue @@ -21,6 +21,7 @@ ></app-footer> <playlist-modal v-if="$store.state.auth.authenticated"></playlist-modal> <filter-modal v-if="$store.state.auth.authenticated"></filter-modal> + <report-modal></report-modal> <shortcuts-modal @update:show="showShortcutsModal = $event" :show="showShortcutsModal"></shortcuts-modal> <GlobalEvents @keydown.h.exact="showShortcutsModal = !showShortcutsModal"/> </template> @@ -41,6 +42,7 @@ import moment from 'moment' import locales from './locales' import PlaylistModal from '@/components/playlists/PlaylistModal' import FilterModal from '@/components/moderation/FilterModal' +import ReportModal from '@/components/moderation/ReportModal' import ShortcutsModal from '@/components/ShortcutsModal' import SetInstanceModal from '@/components/SetInstanceModal' @@ -50,6 +52,7 @@ export default { Sidebar, AppFooter, FilterModal, + ReportModal, PlaylistModal, ShortcutsModal, GlobalEvents, @@ -59,21 +62,27 @@ export default { data () { return { bridge: null, - nodeinfo: null, instanceUrl: null, showShortcutsModal: false, showSetInstanceModal: false, } }, - created () { + async created () { this.openWebsocket() let self = this - this.autodetectLanguage() + if (!this.$store.state.ui.selectedLanguage) { + this.autodetectLanguage() + } setInterval(() => { // used to redraw ago dates every minute self.$store.commit('ui/computeLastDate') }, 1000 * 60) - if (!this.$store.state.instance.instanceUrl) { + const urlParams = new URLSearchParams(window.location.search); + const serverUrl = urlParams.get('_server') + if (serverUrl) { + this.$store.commit('instance/instanceUrl', serverUrl) + } + else if (!this.$store.state.instance.instanceUrl) { // we have several way to guess the API server url. By order of precedence: // 1. use the url provided in settings.json, if any // 2. use the url specified when building via VUE_APP_INSTANCE_URL @@ -84,9 +93,9 @@ export default { // needed to trigger initialization of axios this.$store.commit('instance/instanceUrl', this.$store.state.instance.instanceUrl) } + await this.fetchNodeInfo() this.$store.dispatch('auth/check') this.$store.dispatch('instance/fetchSettings') - this.fetchNodeInfo() this.$store.commit('ui/addWebsocketEventHandler', { eventName: 'inbox.item_added', id: 'sidebarCount', @@ -102,6 +111,11 @@ export default { id: 'sidebarReviewEditCount', handler: this.incrementReviewEditCountInSidebar }) + this.$store.commit('ui/addWebsocketEventHandler', { + eventName: 'report.created', + id: 'sidebarPendingReviewReportCount', + handler: this.incrementPendingReviewReportsCountInSidebar + }) }, mounted () { let self = this @@ -128,6 +142,10 @@ export default { eventName: 'mutation.updated', id: 'sidebarReviewEditCount', }) + this.$store.commit('ui/removeWebsocketEventHandler', { + eventName: 'mutation.updated', + id: 'sidebarPendingReviewReportCount', + }) this.disconnect() }, methods: { @@ -137,11 +155,12 @@ export default { incrementReviewEditCountInSidebar (event) { this.$store.commit('ui/incrementNotifications', {type: 'pendingReviewEdits', value: event.pending_review_count}) }, - fetchNodeInfo () { - let self = this - axios.get('instance/nodeinfo/2.0/').then(response => { - self.nodeinfo = response.data - }) + incrementPendingReviewReportsCountInSidebar (event) { + this.$store.commit('ui/incrementNotifications', {type: 'pendingReviewReports', value: event.unresolved_count}) + }, + async fetchNodeInfo () { + let response = await axios.get('instance/nodeinfo/2.0/') + this.$store.commit('instance/nodeinfo', response.data) }, autodetectLanguage () { let userLanguage = navigator.language || navigator.userLanguage @@ -217,7 +236,8 @@ export default { }, computed: { ...mapState({ - messages: state => state.ui.messages + messages: state => state.ui.messages, + nodeinfo: state => state.instance.nodeinfo, }), ...mapGetters({ currentTrack: 'queue/currentTrack' @@ -251,6 +271,14 @@ export default { this.$store.dispatch('instance/fetchSettings') this.fetchNodeInfo() }, + '$store.state.ui.theme': { + immediate: true, + handler (newValue, oldValue) { + let oldTheme = oldValue || 'light' + document.body.classList.remove(`theme-${oldTheme}`) + document.body.classList.add(`theme-${newValue}`) + }, + }, '$store.state.auth.authenticated' (newValue) { if (!newValue) { this.disconnect() diff --git a/front/src/EmbedFrame.vue b/front/src/EmbedFrame.vue index 9c677e56e3a52ac1845460e86657c04fda60e873..f44f1ba4d2d07654ac5857f75eaf69cf70c5cbea 100644 --- a/front/src/EmbedFrame.vue +++ b/front/src/EmbedFrame.vue @@ -72,10 +72,10 @@ <span v-else-if="error === 'invalid_id'" class="error">Widget improperly configured (missing resource id).</span> <span v-else-if="error === 'server_not_found'" class="error">Track not found.</span> <span v-else-if="error === 'server_requires_auth'" class="error">You need to login to access this resource.</span> - <span v-else-if="error === 'server_error'" class="error">A server error occured.</span> - <span v-else-if="error === 'server_error'" class="error">An unknown error occured while loading track data from server.</span> + <span v-else-if="error === 'server_error'" class="error">A server error occurred.</span> + <span v-else-if="error === 'server_error'" class="error">An unknown error occurred while loading track data from server.</span> <span v-else-if="currentTrack && currentTrack.sources.length === 0" class="error">This track is unavailable.</span> - <span v-else class="error">An unknown error occured while loading track data.</span> + <span v-else class="error">An unknown error occurred while loading track data.</span> </div> <a title="Funkwhale" href="https://funkwhale.audio" target="_blank" rel="noopener noreferrer" class="logo-wrapper"> <logo :fill="currentTheme.textColor" class="logo"></logo> @@ -139,7 +139,7 @@ export default { data () { return { time, - supportedTypes: ['track', 'album', 'artist'], + supportedTypes: ['track', 'album', 'artist', 'playlist'], baseUrl: '', error: null, type: null, @@ -235,6 +235,9 @@ export default { if (type === 'artist') { this.fetchTracks({artist: id, playable: true, ordering: "-release_date,disc_number,position"}) } + if (type === 'playlist') { + this.fetchTracks({}, `/api/v1/playlists/${id}/tracks/`) + } }, play (index) { this.currentIndex = index @@ -269,9 +272,10 @@ export default { self.isLoading = false; }) }, - fetchTracks (filters) { + fetchTracks (filters, path) { + path = path || "/api/v1/tracks/" let self = this - let url = `${this.baseUrl}/api/v1/tracks/` + let url = `${this.baseUrl}${path}` axios.get(url, {params: filters}).then(response => { self.tracks = self.parseTracks(response.data.results) self.isLoading = false; @@ -297,6 +301,11 @@ export default { }, parseTracks (tracks) { let self = this + if (this.type === 'playlist') { + tracks = tracks.map((t) => { + return t.track + }) + } return tracks.map(t => { return { id: t.id, @@ -374,6 +383,8 @@ export default { </script> <style lang="scss"> +@import "~plyr/src/sass/plyr.scss"; + html, body, main { diff --git a/front/src/assets/network.png b/front/src/assets/network.png new file mode 100644 index 0000000000000000000000000000000000000000..e9d5f4ddd465afcb18acd5d7359c4b788b706d9a Binary files /dev/null and b/front/src/assets/network.png differ diff --git a/front/src/components/About.vue b/front/src/components/About.vue index 87f741aa819f38ba84c856522979f25e6f6016d1..3c84b48f9642bc132b54cd16a8b0508fb669711e 100644 --- a/front/src/components/About.vue +++ b/front/src/components/About.vue @@ -1,38 +1,197 @@ <template> - <main class="main pusher" v-title="labels.title"> - <section class="ui vertical center aligned stripe segment"> - <div class="ui text container"> - <h1 class="ui huge header"> - <span v-translate="{instance: instance.name.value}" translate-context="Content/About/Title/Short, Noun" v-if="instance.name.value" :translate-params="{instance: instance.name.value}"> - About %{ instance } - </span> - <translate translate-context="Content/About/Title" v-else>About this instance</translate> + <main class="main pusher"> + <section :class="['ui', 'head', {'with-background': banner}, 'vertical', 'center', 'aligned', 'stripe', 'segment']" :style="headerStyle"> + <div class="segment-content"> + <h1 class="ui center aligned large header"> + <translate translate-context="Content/Home/Header" + :translate-params="{podName: podName}"> + About %{ podName } + </translate> + <div v-if="shortDescription" class="sub header"> + {{ shortDescription }} + </div> </h1> - <stats></stats> </div> </section> <section class="ui vertical stripe segment"> - <div - class="ui middle aligned stackable text container"> - <p - v-if="!instance.short_description.value && !instance.long_description.value"><translate translate-context="Content/About/Paragraph">Unfortunately, the owners of this instance did not yet take the time to complete this page.</translate></p> - <router-link - class="ui button" - v-if="$store.state.auth.availablePermissions['settings']" - :to="{path: '/manage/settings', hash: 'instance'}"> - <i class="pencil icon"></i><translate translate-context="Content/Settings/Button.Label/Verb">Edit instance info</translate> - </router-link> - <div class="ui hidden divider"></div> - </div> - <div - v-if="instance.short_description.value" - class="ui middle aligned stackable text container"> - <p>{{ instance.short_description.value }}</p> - </div> - <div - v-if="markdown && instance.long_description.value" - class="ui middle aligned stackable text container" - v-html="markdown.makeHtml(instance.long_description.value)"> + <div class="ui container"> + <div class="ui mobile reversed stackable grid"> + <div class="ten wide column"> + <div class="ui text container"> + <h3 class="ui header" id="description"> + <translate translate-context="Content/About/Header">About this pod</translate> + </h3> + <div v-html="markdown.makeHtml(longDescription)" v-if="longDescription"></div> + <p v-else> + <translate translate-context="Content/Home/Paragraph">No description available.</translate> + </p> + <h3 class="ui header" id="rules"> + <translate translate-context="Content/About/Header">Rules</translate> + </h3> + <div v-html="markdown.makeHtml(rules)" v-if="rules"></div> + <p v-else> + <translate translate-context="Content/Home/Paragraph">No rules available.</translate> + </p> + <h3 class="ui header" id="terms"> + <translate translate-context="Content/About/Header">Terms and privacy policy</translate> + </h3> + <div v-html="markdown.makeHtml(terms)" v-if="terms"></div> + <p v-else> + <translate translate-context="Content/Home/Paragraph">No terms available.</translate> + </p> + </div> + </div> + <div class="six wide column"> + <div class="ui raised segment"> + <h3 class="ui header"> + <translate translate-context="Content/About/Header">Contents</translate> + </h3> + <div class="ui list"> + <div class="ui item"> + <a href="#description"> + <translate translate-context="Content/About/Header">About this pod</translate> + </a> + </div> + <div class="ui item"> + <a href="#rules"> + <translate translate-context="Content/About/Header">Rules</translate> + </a> + </div> + <div class="ui item"> + <a href="#terms"> + <translate translate-context="Content/About/Header">Terms and privacy policy</translate> + </a> + </div> + </div> + <template v-if="contactEmail"> + <h3 class="header"> + <translate translate-context="Content/Home/Header/Name">Contact</translate> + </h3> + <a :href="`mailto:${contactEmail}`">{{ contactEmail }}</a> + </template> + <h3 class="header"> + <translate translate-context="Content/About/Header/Name">Pod configuration</translate> + </h3> + <table class="ui very basic table"> + <tbody> + <tr v-if="version"> + <td> + <translate translate-context="*/*/*">Funkwhale version</translate> + </td> + <td> + {{ version }} + </td> + </tr> + <tr> + <td> + <translate translate-context="*/*/*">Registrations</translate> + </td> + <td v-if="openRegistrations"> + <i class="check icon"></i> + <translate translate-context="*/*/*/State of registrations">Open</translate> + </td> + <td v-else> + <i class="x icon"></i> + <translate translate-context="*/*/*/State of registrations">Closed</translate> + </td> + </tr> + <tr> + <td> + <translate translate-context="*/*/*">Upload quota</translate> + </td> + <td v-if="defaultUploadQuota"> + {{ defaultUploadQuota * 1000 * 1000 | humanSize }} + </td> + <td v-else> + <translate translate-context="*/*/*">N/A</translate> + </td> + </tr> + <tr> + <td> + <translate translate-context="*/*/*">Federation</translate> + </td> + <td v-if="federationEnabled"> + <i class="check icon"></i> + <translate translate-context="*/*/*/State of feature">Enabled</translate> + </td> + <td v-else> + <i class="x icon"></i> + <translate translate-context="*/*/*/State of feature">Disabled</translate> + </td> + </tr> + <tr> + <td> + <translate translate-context="*/*/*">Anonymous access</translate> + </td> + <td v-if="anonymousCanListen"> + <i class="check icon"></i> + <translate translate-context="*/*/*/State of feature">Enabled</translate> + </td> + <td v-else> + <i class="x icon"></i> + <translate translate-context="*/*/*/State of feature">Disabled</translate> + </td> + </tr> + <tr> + <td> + <translate translate-context="*/*/*">Allow-list</translate> + </td> + <td v-if="allowListEnabled"> + <i class="check icon"></i> + <translate translate-context="*/*/*/State of feature">Enabled</translate> + </td> + <td v-else> + <i class="x icon"></i> + <translate translate-context="*/*/*/State of feature">Disabled</translate> + </td> + </tr> + <tr v-if="allowListDomains"> + <td> + <translate translate-context="*/*/*">Allowed domains</translate> + </td> + <td> + <translate :translate-n="allowListDomains.length" translate-plural="%{ count } allowed domains" :translate-params="{count: allowListDomains.length}" translate-context="*/*/*">%{ count } allowed domains</translate> + <br> + <a @click.prevent="showAllowedDomains = !showAllowedDomains"> + <translate v-if="showAllowedDomains" key="1" translate-context="*/*/*/Verb">Hide</translate> + <translate v-else key="2" translate-context="*/*/*/Verb">Show</translate> + </a> + <ul class="ui list" v-if="showAllowedDomains"> + <li v-for="domain in allowListDomains" :key="domain"> + <a :href="`https://${domain}`" target="_blank" rel="noopener">{{ domain }}</a> + </li> + </ul> + </td> + </tr> + </tbody> + </table> + + <template v-if="stats"> + <h3 class="header"> + <translate translate-context="Content/Home/Header">Statistics</translate> + </h3> + <p> + <i class="user grey icon"></i><translate translate-context="Content/Home/Stat" :translate-params="{count: stats.users.toLocaleString($store.state.ui.momentLocale) }" :translate-n="stats.users" translate-plural="%{ count } active users">%{ count } active user</translate> + </p> + <p> + <i class="music grey icon"></i><translate translate-context="Content/Home/Stat" :translate-params="{count: parseInt(stats.hours).toLocaleString($store.state.ui.momentLocale)}" :translate-n="parseInt(stats.hours)" translate-plural="%{ count } hours of music">%{ count } hour of music</translate> + </p> + <p v-if="stats.artists"> + <i class="users grey icon"></i><translate translate-context="Content/Home/Stat" :translate-params="{count: stats.artists.toLocaleString($store.state.ui.momentLocale) }" :translate-n="stats.artists" translate-plural="%{ count } artists">%{ count } artists</translate> + </p> + <p v-if="stats.albums"> + <i class="headphones grey icon"></i><translate translate-context="Content/Home/Stat" :translate-params="{count: stats.albums.toLocaleString($store.state.ui.momentLocale) }" :translate-n="stats.albums" translate-plural="%{ count } albums">%{ count } albums</translate> + </p> + <p v-if="stats.tracks"> + <i class="file grey icon"></i><translate translate-context="Content/Home/Stat" :translate-params="{count: stats.tracks.toLocaleString($store.state.ui.momentLocale) }" :translate-n="stats.tracks" translate-plural="%{ count } tracks">%{ count } tracks</translate> + </p> + <p v-if="stats.listenings"> + <i class="play grey icon"></i><translate translate-context="Content/Home/Stat" :translate-params="{count: stats.listenings.toLocaleString($store.state.ui.momentLocale) }" :translate-n="stats.listenings" translate-plural="%{ count } listenings">%{ count } listenings</translate> + </p> + </template> + </div> + </div> + </div> </div> </section> </main> @@ -40,37 +199,122 @@ <script> import { mapState } from "vuex" -import Stats from "@/components/instance/Stats" +import _ from '@/lodash' +import showdown from 'showdown' export default { - components: { - Stats - }, data () { return { - markdown: null + markdown: new showdown.Converter(), + showAllowedDomains: false, } }, - created () { - this.$store.dispatch("instance/fetchSettings") - let self = this - import('showdown').then(module => { - self.markdown = new module.default.Converter() - }) - }, computed: { - ...mapState({ - instance: state => state.instance.settings.instance + + ...mapState({ + nodeinfo: state => state.instance.nodeinfo, }), - labels() { - return { - title: this.$pgettext('Content/About/Title', "About this instance") + podName() { + return _.get(this.nodeinfo, 'metadata.nodeName') || "Funkwhale" + }, + banner () { + return _.get(this.nodeinfo, 'metadata.banner') + }, + shortDescription () { + return _.get(this.nodeinfo, 'metadata.shortDescription') + }, + longDescription () { + return _.get(this.nodeinfo, 'metadata.longDescription') + }, + rules () { + return _.get(this.nodeinfo, 'metadata.rules') + }, + terms () { + return _.get(this.nodeinfo, 'metadata.terms') + }, + stats () { + let data = { + users: _.get(this.nodeinfo, 'usage.users.activeMonth', null), + hours: _.get(this.nodeinfo, 'metadata.library.music.hours', null), + artists: _.get(this.nodeinfo, 'metadata.library.artists.total', null), + albums: _.get(this.nodeinfo, 'metadata.library.albums.total', null), + tracks: _.get(this.nodeinfo, 'metadata.library.tracks.total', null), + listenings: _.get(this.nodeinfo, 'metadata.usage.listenings.total', null), } - } + if (data.users === null || data.artists === null) { + return + } + return data + }, + contactEmail () { + return _.get(this.nodeinfo, 'metadata.contactEmail') + }, + anonymousCanListen () { + return _.get(this.nodeinfo, 'metadata.library.anonymousCanListen') + }, + allowListEnabled () { + return _.get(this.nodeinfo, 'metadata.allowList.enabled') + }, + allowListDomains () { + return _.get(this.nodeinfo, 'metadata.allowList.domains') + }, + version () { + return _.get(this.nodeinfo, 'software.version') + }, + openRegistrations () { + return _.get(this.nodeinfo, 'openRegistrations') + }, + defaultUploadQuota () { + return _.get(this.nodeinfo, 'metadata.defaultUploadQuota') + }, + federationEnabled () { + return _.get(this.nodeinfo, 'metadata.library.federationEnabled') + }, + headerStyle() { + if (!this.banner) { + return "" + } + return ( + "background-image: url(" + + this.$store.getters["instance/absoluteUrl"](this.banner) + + ")" + ) + }, } } </script> <!-- Add "scoped" attribute to limit CSS to this component only --> -<style scoped> + +<!-- Add "scoped" attribute to limit CSS to this component only --> +<style scoped lang="scss"> + +.ui.list .list.icon { + padding: 0; +} + +h1.header, h1 .sub.header { + text-shadow: 0 2px 0 rgba(0,0,0,.8); + color: #fff !important; +} +h1.ui.header { + font-size: 3em; +} +h1.ui.header .sub.header { + font-size: 0.8em; +} +.main.pusher { + margin-top: 0; + min-height: 10em; +} +section.segment.head { + padding: 8em 3em; + background: linear-gradient(90deg, rgba(40,88,125,1) 0%, rgba(64,130,180,1) 100%); + background-repeat: no-repeat; + background-size: cover; +} +#pod { + font-size: 110%; + display: block; +} </style> diff --git a/front/src/components/Footer.vue b/front/src/components/Footer.vue index 2d06b50c768e368c538b15bbcf6b33a00c6b42ab..d758b456bf9edaea8b6af87efe6e349a7e640778 100644 --- a/front/src/components/Footer.vue +++ b/front/src/components/Footer.vue @@ -33,6 +33,14 @@ <a href="https://funkwhale.audio/apps" class="item" target="_blank"><translate translate-context="Footer/*/List item.Link">Mobile and desktop apps</translate></a> <div role="button" class="item" @click="$emit('show:shortcuts-modal')"><translate translate-context="*/*/*/Noun">Keyboard shortcuts</translate></div> </div> + <div class="ui form"> + <div class="ui field"> + <label><translate translate-context="Footer/Settings/Dropdown.Label/Short, Verb">Change theme</translate></label> + <select class="ui dropdown" :value="$store.state.ui.theme" @change="$store.commit('ui/theme', $event.target.value)"> + <option v-for="theme in themes" :key="theme.key" :value="theme.key">{{ theme.name }}</option> + </select> + </div> + </div> </section> <section class="four wide column"> <h4 v-translate translate-context="Footer/*/Link" class="ui header">Getting help</h4> @@ -76,15 +84,18 @@ export default { parser.href = url return parser.hostname }, + themes () { + return [ + { + name: this.$pgettext('Footer/Settings/Dropdown.Label/Theme name', 'Light'), + key: 'light' + }, + { + name: this.$pgettext('Footer/Settings/Dropdown.Label/Theme name', 'Dark'), + key: 'dark' + } + ] + } } } </script> -<style scoped> -footer p { - color: grey; -} - -footer#footer div.item:hover { - color: rgba(0, 0, 0, 0.87); -} -</style> diff --git a/front/src/components/Home.vue b/front/src/components/Home.vue index bbcc9a8f959a89b9d20ffadc402acfa74da5274b..34bc19a32c3fd836af59ec0abd260c196e0c5174 100644 --- a/front/src/components/Home.vue +++ b/front/src/components/Home.vue @@ -1,152 +1,276 @@ <template> <main class="main pusher" v-title="labels.title"> - <section class="ui vertical center aligned stripe segment"> - <div class="ui text container"> - <h1 class="ui huge header"> - <translate translate-context="Content/Home/Title/Verb">Welcome on Funkwhale</translate> + <section :class="['ui', 'head', {'with-background': banner}, 'vertical', 'center', 'aligned', 'stripe', 'segment']" :style="headerStyle"> + <div class="segment-content"> + <h1 class="ui center aligned large header"> + <translate translate-context="Content/Home/Header" + :translate-params="{podName: podName}"> + Welcome to %{ podName }! + </translate> + <div v-if="shortDescription" class="sub header"> + {{ shortDescription }} + </div> </h1> - <p><translate translate-context="Content/Home/Title">We think listening to music should be simple.</translate></p> - <router-link class="ui icon button" to="/about"> - <i class="info icon"></i> - <translate translate-context="Content/Home/Button.Label/Verb">Learn more about this instance</translate> - </router-link> - <router-link class="ui icon teal button" to="/library"> - <translate translate-context="Content/Home/Button.Label/Verb">Get me to the library</translate> - <i class="right arrow icon"></i> - </router-link> </div> </section> <section class="ui vertical stripe segment"> - <div class="ui middle aligned stackable text container"> - <div class="ui grid"> - <div class="row"> - <div class="eight wide left floated column"> - <h2 class="ui header"> - <translate translate-context="Content/Home/Title">Why funkwhale?</translate> - </h2> - <p><translate translate-context="Content/Home/Paragraph">That's simple: we loved Grooveshark and we want to build something even better.</translate></p> - </div> - <div class="four wide left floated column"> - <img class="ui medium image" src="../assets/logo/logo.png" /> + <div class="ui stackable grid"> + <div class="ten wide column"> + <h3 class="header"> + <translate translate-context="Content/Home/Header">About this Funkwhale pod</translate> + </h3> + <div class="ui raised segment" id="pod"> + <div class="ui stackable grid"> + <div class="eight wide column"> + <p v-if="!truncatedDescription"> + <translate translate-context="Content/Home/Paragraph">No description available.</translate> + </p> + <template v-if="truncatedDescription || rules"> + <div v-if="truncatedDescription" v-html="truncatedDescription"></div> + <div v-if="truncatedDescription" class="ui hidden divider"></div> + <div class="ui relaxed list"> + <div class="item" v-if="truncatedDescription"> + <i class="arrow right grey icon"></i> + <div class="content"> + <router-link class="ui link" :to="{name: 'about'}"> + <translate translate-context="Content/Home/Link">Learn more</translate> + </router-link> + </div> + </div> + <div class="item" v-if="rules"> + <i class="book open grey icon"></i> + <div class="content"> + <router-link class="ui link" v-if="rules" :to="{name: 'about', hash: '#rules'}"> + <translate translate-context="Content/Home/Link">Server rules</translate> + </router-link> + </div> + </div> + </div> + </template> + </div> + <div class="eight wide column"> + <template v-if="stats"> + <h3 class="sub header"> + <translate translate-context="Content/Home/Header">Statistics</translate> + </h3> + <p> + <i class="user grey icon"></i><translate translate-context="Content/Home/Stat" :translate-params="{count: stats.users.toLocaleString($store.state.ui.momentLocale) }" :translate-n="stats.users" translate-plural="%{ count } active users">%{ count } active user</translate> + </p> + <p> + <i class="music grey icon"></i><translate translate-context="Content/Home/Stat" :translate-params="{count: parseInt(stats.hours).toLocaleString($store.state.ui.momentLocale)}" :translate-n="parseInt(stats.hours)" translate-plural="%{ count } hours of music">%{ count } hour of music</translate> + </p> + + </template> + <template v-if="contactEmail"> + <h3 class="sub header"> + <translate translate-context="Content/Home/Header/Name">Contact</translate> + </h3> + <i class="at grey icon"></i> + <a :href="`mailto:${contactEmail}`">{{ contactEmail }}</a> + </template> + + </div> </div> </div> </div> - </div> - <div class="ui middle aligned stackable text container"> - <div class="ui hidden divider"></div> - <h2 class="ui header"> - <translate translate-context="Content/Home/Title">Unlimited music</translate> - </h2> - <p><translate translate-context="Content/Home/Paragraph">Funkwhale is designed to make it easy to listen to music you like, or to discover new artists.</translate></p> - <div class="ui list"> - <div class="item"> - <i class="sound icon"></i> - <div class="content"> - <translate translate-context="Content/Home/List item/Verb">Click once, listen for hours using built-in radios</translate> - </div> - </div> - <div class="item"> - <i class="heart icon"></i> - <div class="content"> - <translate translate-context="Content/Home/List item/Verb">Keep a track of your favorite songs</translate> - </div> - </div> - <div class="item"> - <i class="list icon"></i> - <div class="content"> - <translate translate-context="Content/Home/List item">Playlists? We got them</translate> - </div> - </div> + + <div class="six wide column"> + <img class="ui image" src="../assets/network.png" /> </div> </div> - <div class="ui middle aligned stackable text container"> - <div class="ui hidden divider"></div> - <h2 class="ui header"> - <translate translate-context="Content/Home/Title">A clean library</translate> - </h2> - <p><translate translate-context="Content/Home/Paragraph">Funkwhale takes care of handling your music</translate>.</p> - <div class="ui list"> - <div class="item"> - <i class="tag icon"></i> - <div class="content" v-html="musicbrainzItem"></div> - </div> - <div class="item"> - <i class="plus icon"></i> - <div class="content"> - <translate translate-context="Content/Home/List item">Covers, lyrics, our goal is to have them all ;)</translate> - </div> - </div> + <div class="ui hidden divider"></div> + <div class="ui hidden divider"></div> + <div class="ui stackable grid"> + <div class="four wide column"> + <h3 class="header"> + <translate translate-context="Footer/*/Title/Short">About Funkwhale</translate> + </h3> + <p v-translate translate-context="Content/Home/Paragraph">This pod runs Funkwhale, a community-driven project that lets you listen and share music and audio within a decentralized, open network.</p> + <p v-translate translate-context="Content/Home/Paragraph">Funkwhale is free and developped by a friendly community of volunteers.</p> + <a target="_blank" rel="noopener" href="https://funkwhale.audio"> + <i class="external alternate icon"></i> + <translate translate-context="Content/Home/Link">Visit funkwhale.audio</translate> + </a> </div> - </div> - <div class="ui middle aligned stackable text container"> - <div class="ui hidden divider"></div> - <h2 class="ui header"> - <translate translate-context="Content/Home/Title">Easy to use</translate> - </h2> - <p><translate translate-context="Content/Home/Paragraph">Funkwhale is dead simple to use.</translate></p> - <div class="ui list"> - <div class="item"> - <i class="book icon"></i> - <div class="content"> - <translate translate-context="Content/Home/List item">No add-ons, no plugins : you only need a web library</translate> - </div> - </div> - <div class="item"> - <i class="wizard icon"></i> - <div class="content"> - <translate translate-context="Content/Home/List item">Access your music from a clean interface that focuses on what really matters</translate> - </div> + <div class="four wide column"> + <h3 class="header"> + <translate translate-context="Head/Login/Title">Log In</translate> + </h3> + <login-form button-classes="basic green" :show-signup="false"></login-form> + <div class="ui hidden clearing divider"></div> + </div> + <div class="four wide column"> + <h3 class="header"> + <translate translate-context="*/Signup/Title">Sign up</translate> + </h3> + <template v-if="openRegistrations"> + <p> + <translate translate-context="Content/Home/Paragraph">Sign up now to keep a track of your favorites, create playlists, discover new content and much more!</translate> + </p> + <p v-if="defaultUploadQuota"> + <translate translate-context="Content/Home/Paragraph" :translate-params="{quota: humanSize(defaultUploadQuota * 1000 * 1000)}">Users on this pod also get %{ quota } of free storage to upload their own content!</translate> + </p> + <signup-form button-classes="basic green" :show-login="false"></signup-form> + </template> + <div v-else> + <p translate-context="Content/Home/Paragraph">Registrations are closed on this pod. You can signup on another pod using the link below.</p> + <a target="_blank" rel="noopener" href="https://funkwhale.audio/#get-started"> + <i class="external alternate icon"></i> + <translate translate-context="Content/Home/Link">Find another pod</translate> + </a> </div> </div> - </div> - <div class="ui middle aligned stackable text container"> - <div class="ui hidden divider"></div> - <h2 class="ui header"> - <translate translate-context="Content/Home/Title">Your music, your way</translate> - </h2> - <p><translate translate-context="Content/Home/Paragraph">Funkwhale is free and gives you control on your music.</translate></p> - <div class="ui list"> - <div class="item"> - <i class="smile icon"></i> - <div class="content"> - <translate translate-context="Content/Home/List item">The plaform is free and open-source, you can install it and modify it without worries</translate> + + <div class="four wide column"> + <h3 class="header"> + <translate translate-context="Content/Home/Header">Useful links</translate> + </h3> + <div class="ui relaxed list"> + <div class="item"> + <i class="headphones icon"></i> + <div class="content"> + <router-link v-if="anonymousCanListen" class="header" to="/library"> + <translate translate-context="Content/Home/Link">Browse public content</translate> + </router-link> + <div class="description"> + <translate translate-context="Content/Home/Link">Listen to public albums and playlists shared on this pod</translate> + </div> + </div> </div> - </div> - <div class="item"> - <i class="protect icon"></i> - <div class="content"> - <translate translate-context="Content/Home/List item">We do not track you or bother you with ads</translate> + <div class="item"> + <i class="mobile alternate icon"></i> + <div class="content"> + <a class="header" href="https://funkwhale.audio/apps" target="_blank" rel="noopener"> + <translate translate-context="Content/Home/Link">Mobile apps</translate> + </a> + <div class="description"> + <translate translate-context="Content/Home/Link">Use Funkwhale on other devices with our apps</translate> + </div> + </div> </div> - </div> - <div class="item"> - <i class="users icon"></i> - <div class="content"> - <translate translate-context="Content/Home/List item">You can invite friends and family to your instance so they can enjoy your music</translate> + <div class="item"> + <i class="book icon"></i> + <div class="content"> + <a class="header" href="https://docs.funkwhale.audio/users/index.html" target="_blank" rel="noopener"> + <translate translate-context="Content/Home/Link">User guides</translate> + </a> + <div class="description"> + <translate translate-context="Content/Home/Link">Discover everything you need to know about Funkwhale and its features</translate> + </div> + </div> </div> </div> </div> </div> </section> + <section v-if="anonymousCanListen" class="ui vertical stripe segment"> + <album-widget :filters="{playable: true, ordering: '-creation_date'}" :limit="10"> + <template slot="title"><translate translate-context="Content/Home/Title">Recently added albums</translate></template> + <router-link to="/library"> + <translate translate-context="Content/Home/Link">View more…</translate> + <div class="ui hidden divider"></div> + </router-link> + </album-widget> + </section> </main> </template> <script> +import $ from 'jquery' +import _ from '@/lodash' +import {mapState} from 'vuex' +import showdown from 'showdown' +import AlbumWidget from "@/components/audio/album/Widget" +import LoginForm from "@/components/auth/LoginForm" +import SignupForm from "@/components/auth/SignupForm" +import {humanSize } from '@/filters' + export default { - data() { + components: { + AlbumWidget, + LoginForm, + SignupForm, + }, + data () { return { - musicbrainzUrl: "https://musicbrainz.org/" + markdown: new showdown.Converter(), + excerptLength: 2, // html nodes, + humanSize } }, computed: { + ...mapState({ + nodeinfo: state => state.instance.nodeinfo, + }), labels() { return { title: this.$pgettext('Head/Home/Title', "Welcome") } }, - musicbrainzItem () { - let msg = this.$pgettext('Content/Home/List item/Verb', 'Get quality metadata about your music thanks to <a href="%{ url }" target="_blank">MusicBrainz</a>') - return this.$gettextInterpolate(msg, {url: this.musicbrainzUrl}) - } + podName() { + return _.get(this.nodeinfo, 'metadata.nodeName') || "Funkwhale" + }, + banner () { + return _.get(this.nodeinfo, 'metadata.banner') + }, + shortDescription () { + return _.get(this.nodeinfo, 'metadata.shortDescription') + }, + longDescription () { + return _.get(this.nodeinfo, 'metadata.longDescription') + }, + rules () { + return _.get(this.nodeinfo, 'metadata.rules') + }, + truncatedDescription () { + if (!this.longDescription) { + return + } + let doc = this.markdown.makeHtml(this.longDescription) + let nodes = $.parseHTML(doc) + let excerptParts = [] + let handled = 0 + nodes.forEach((n) => { + let content = n.innerHTML || n.nodeValue + if (handled < this.excerptLength && content.trim()) { + excerptParts.push(n) + handled += 1 + } + }) + return excerptParts.map((p) => { return p.outerHTML }).join('') + }, + stats () { + let data = { + users: _.get(this.nodeinfo, 'usage.users.activeMonth', null), + hours: _.get(this.nodeinfo, 'metadata.library.music.hours', null), + } + if (data.users === null || data.artists === null) { + return + } + return data + }, + contactEmail () { + return _.get(this.nodeinfo, 'metadata.contactEmail') + }, + defaultUploadQuota () { + return _.get(this.nodeinfo, 'metadata.defaultUploadQuota') + }, + anonymousCanListen () { + return _.get(this.nodeinfo, 'metadata.library.anonymousCanListen') + }, + openRegistrations () { + return _.get(this.nodeinfo, 'openRegistrations') + }, + headerStyle() { + if (!this.banner) { + return "" + } + return ( + "background-image: url(" + + this.$store.getters["instance/absoluteUrl"](this.banner) + + ")" + ) + }, }, watch: { '$store.state.auth.authenticated': { @@ -164,11 +288,37 @@ export default { </script> <!-- Add "scoped" attribute to limit CSS to this component only --> -<style scoped> -.stripe p { - font-size: 120%; -} +<style scoped lang="scss"> +@import "../style/vendor/media"; + .ui.list .list.icon { padding: 0; } + +h1.header, h1 .sub.header { + text-shadow: 1px 1px 2px rgba(0,0,0,.8); + color: #fff !important; +} +h1.ui.header { + @include media(">tablet") { + font-size: 3em; + } +} +h1.ui.header .sub.header { + font-size: 0.8em; +} +.main.pusher { + margin-top: 0; + min-height: 10em; +} +section.segment.head { + padding: 8em 3em; + background: linear-gradient(90deg, rgba(40,88,125,1) 0%, rgba(64,130,180,1) 100%); + background-repeat: no-repeat; + background-size: cover; +} +#pod { + font-size: 110%; + display: block; +} </style> diff --git a/front/src/components/SetInstanceModal.vue b/front/src/components/SetInstanceModal.vue index b2c278564a8f453cb729f5d65def4ad29d73bd93..07be79f4339f4b8a7d5cb37b97664e173efae516 100644 --- a/front/src/components/SetInstanceModal.vue +++ b/front/src/components/SetInstanceModal.vue @@ -92,7 +92,7 @@ export default { }) }, switchInstance (url) { - // Here we disconnect from the current instance and reconnect to the new one. No check is performed... + // Here we disconnect from the current instance and reconnect to the new one. No check is performed… this.$emit('update:show', false) this.isError = false let msg = this.$pgettext('*/Instance/Message', 'You are now using the Funkwhale instance at %{ url }') @@ -108,7 +108,7 @@ export default { }, checkAndSwitch (url) { // First we have to check if the address is a valid FW server. If yes, we switch: - this.isError = false // Clear error message if any... + this.isError = false // Clear error message if any… this.isLoading = true this.requestDistantNodeInfo(url) }, diff --git a/front/src/components/ShortcutsModal.vue b/front/src/components/ShortcutsModal.vue index 5b1a7349d441a0de9c708f2ab9dbc03f576ab98e..999d24dd389e2765e2b08e7d52617043e6413442 100644 --- a/front/src/components/ShortcutsModal.vue +++ b/front/src/components/ShortcutsModal.vue @@ -4,21 +4,39 @@ <translate translate-context="*/*/*/Noun">Keyboard shortcuts</translate> </header> <section class="scrolling content"> - <table - class="ui compact collapsing basic table" - v-for="section in sections" - :key="section.title"> - <caption>{{ section.title }}</caption> - <tbody> - <tr v-for="shortcut in section.shortcuts" :key="shortcut.summary"> - <td>{{ shortcut.summary }}</td> - <td><span class="ui label">{{ shortcut.key }}</span></td> - </tr> - </tbody> - </table> + <div class="ui stackable two column grid"> + <div class="column"> + <table + class="ui compact basic table" + v-for="section in player" + :key="section.title"> + <caption>{{ section.title }}</caption> + <tbody> + <tr v-for="shortcut in section.shortcuts" :key="shortcut.summary"> + <td>{{ shortcut.summary }}</td> + <td><span class="ui label">{{ shortcut.key }}</span></td> + </tr> + </tbody> + </table> + </div> + <div class="column"> + <table + class="ui compact basic table" + v-for="section in general" + :key="section.title"> + <caption>{{ section.title }}</caption> + <tbody> + <tr v-for="shortcut in section.shortcuts" :key="shortcut.summary"> + <td>{{ shortcut.summary }}</td> + <td><span class="ui label">{{ shortcut.key }}</span></td> + </tr> + </tbody> + </table> + </div> + </div> </section> <footer class="actions"> - <div class="ui cancel button"><translate translate-context="Popup/Keyboard shortcuts/Button.Label/Verb">Close</translate></div> + <div class="ui cancel button"><translate translate-context="*/*/Button.Label/Verb">Close</translate></div> </footer> </modal> </template> @@ -32,7 +50,7 @@ export default { Modal, }, computed: { - sections () { + general () { return [ { title: this.$pgettext('Popup/Keyboard shortcuts/Title', 'General shortcuts'), @@ -40,17 +58,36 @@ export default { { key: 'h', summary: this.$pgettext('Popup/Keyboard shortcuts/Table.Label/Verb', 'Show available keyboard shortcuts') - } + }, + { + key: 'shift + f', + summary: this.$pgettext('Popup/Keyboard shortcuts/Table.Label/Verb', 'Focus searchbar') + }, + { + key: 'esc', + summary: this.$pgettext('Popup/Keyboard shortcuts/Table.Label/Verb', 'Unfocus searchbar') + }, ] }, + ] + }, // space.prevent.exact="togglePlay" - // ctrl.left.prevent.exact="previous" - // ctrl.right.prevent.exact="next" - // ctrl.down.prevent.exact="$store.commit('player/incrementVolume', -0.1)" - // ctrl.up.prevent.exact="$store.commit('player/incrementVolume', 0.1)" + // ctrl.shift.left.prevent.exact="previous" + // ctrl.shift.right.prevent.exact="next" + // shift.down.prevent.exact="$store.commit('player/incrementVolume', -0.1)" + // shift.up.prevent.exact="$store.commit('player/incrementVolume', 0.1)" + // right.prevent.exact="seek (5)" + // left.prevent.exact="seek (-5)" + // shift.right.prevent.exact="seek (30)" + // shift.left.prevent.exact="seek (-30)" + // m.prevent.exact="toggleMute" // l.prevent.exact="$store.commit('player/toggleLooping')" // s.prevent.exact="shuffle" + // f.prevent.exact="$store.dispatch('favorites/toggle', currentTrack.id)" + // q.prevent.exact="clean" + player () { + return [ { title: this.$pgettext('Popup/Keyboard shortcuts/Title', 'Audio player shortcuts'), shortcuts: [ @@ -59,21 +96,41 @@ export default { summary: this.$pgettext('Popup/Keyboard shortcuts/Table.Label/Verb', 'Pause/play the current track') }, { - key: 'ctrl left', + key: 'left', + summary: this.$pgettext('Popup/Keyboard shortcuts/Table.Label/Verb', 'Seek backwards 5s') + }, + { + key: 'right', + summary: this.$pgettext('Popup/Keyboard shortcuts/Table.Label/Verb', 'Seek forwards 5s') + }, + { + key: 'shift + left', + summary: this.$pgettext('Popup/Keyboard shortcuts/Table.Label/Verb', 'Seek backwards 30s') + }, + { + key: 'shift + right', + summary: this.$pgettext('Popup/Keyboard shortcuts/Table.Label/Verb', 'Seek forwards 30s') + }, + { + key: 'ctrl + shift + left', summary: this.$pgettext('Popup/Keyboard shortcuts/Table.Label/Verb', 'Play previous track') }, { - key: 'ctrl right', + key: 'ctrl + shift + right', summary: this.$pgettext('Popup/Keyboard shortcuts/Table.Label/Verb', 'Play next track') }, { - key: 'ctrl up', + key: 'shift + up', summary: this.$pgettext('Popup/Keyboard shortcuts/Table.Label/Verb', 'Increase volume') }, { - key: 'ctrl down', + key: 'shift + down', summary: this.$pgettext('Popup/Keyboard shortcuts/Table.Label/Verb', 'Decrease volume') }, + { + key: 'm', + summary: this.$pgettext('Popup/Keyboard shortcuts/Table.Label/Verb', 'Toggle mute') + }, { key: 'l', summary: this.$pgettext('Popup/Keyboard shortcuts/Table.Label/Verb', 'Toggle queue looping') @@ -82,6 +139,14 @@ export default { key: 's', summary: this.$pgettext('Popup/Keyboard shortcuts/Table.Label/Verb', 'Shuffle queue') }, + { + key: 'q', + summary: this.$pgettext('Popup/Keyboard shortcuts/Table.Label/Verb', 'Clear queue') + }, + { + key: 'f', + summary: this.$pgettext('Popup/Keyboard shortcuts/Table.Label/Verb', 'Toggle favorite') + }, ] } ] diff --git a/front/src/components/Sidebar.vue b/front/src/components/Sidebar.vue index 0f2809064cb1052eedda92d6c262a5f266819d35..ddeba0bb8bd9c742f9dd7a3f205bd4d17097a3b1 100644 --- a/front/src/components/Sidebar.vue +++ b/front/src/components/Sidebar.vue @@ -46,9 +46,9 @@ <i class="feed icon"></i> <translate translate-context="*/Notifications/*">Notifications</translate> <div - v-if="$store.state.ui.notifications.inbox > 0" + v-if="$store.state.ui.notifications.inbox + additionalNotifications > 0" :class="['ui', 'teal', 'label']"> - {{ $store.state.ui.notifications.inbox }}</div> + {{ $store.state.ui.notifications.inbox + additionalNotifications }}</div> </router-link> <router-link class="item" v-if="$store.state.auth.authenticated" :to="{name: 'logout'}"><i class="sign out icon"></i><translate translate-context="Sidebar/Login/List item.Link/Verb">Logout</translate></router-link> <template v-else> @@ -83,7 +83,7 @@ v-if="$store.state.auth.availablePermissions['library']" class="item" :to="{name: 'manage.library.edits', query: {q: 'is_approved:null'}}"> - <i class="book icon"></i><translate translate-context="*/*/*">Library</translate> + <i class="book icon"></i><translate translate-context="*/*/*/Noun">Library</translate> <div v-if="$store.state.ui.notifications.pendingReviewEdits > 0" :title="labels.pendingReviewEdits" @@ -93,8 +93,12 @@ <router-link v-if="$store.state.auth.availablePermissions['moderation']" class="item" - :to="{name: 'manage.moderation.domains.list'}"> + :to="{name: 'manage.moderation.reports.list', query: {q: 'resolved:no'}}"> <i class="shield icon"></i><translate translate-context="*/Moderation/*">Moderation</translate> + <div + v-if="$store.state.ui.notifications.pendingReviewReports > 0" + :title="labels.pendingReviewReports" + :class="['ui', 'teal', 'label']">{{ $store.state.ui.notifications.pendingReviewReports }}</div> </router-link> <router-link v-if="$store.state.auth.availablePermissions['settings']" @@ -134,7 +138,7 @@ </div> <section :class="['ui', 'bottom', 'attached', {active: selectedTab === 'queue'}, 'tab']"> <table class="ui compact inverted very basic fixed single line unstackable table"> - <draggable v-model="tracks" element="tbody" @update="reorder"> + <draggable v-model="tracks" tag="tbody" @update="reorder"> <tr @click="$store.dispatch('queue/currentIndex', index)" v-for="(track, index) in tracks" @@ -182,7 +186,7 @@ </template> <script> -import { mapState, mapActions } from "vuex" +import { mapState, mapActions, mapGetters } from "vuex" import Player from "@/components/audio/Player" import Logo from "@/components/Logo" @@ -215,6 +219,9 @@ export default { } }, computed: { + ...mapGetters({ + additionalNotifications: "ui/additionalNotifications", + }), ...mapState({ queue: state => state.queue, url: state => state.route.path @@ -338,7 +345,7 @@ $sidebar-color: #3d3e3f; display: none !important; } } - @include media("<desktop") { + @include media("<=desktop") { position: static !important; width: 100% !important; &.collapsed { @@ -393,7 +400,7 @@ $sidebar-color: #3d3e3f; flex-direction: column; overflow-y: auto; justify-content: space-between; - @include media("<desktop") { + @include media("<=desktop") { max-height: 500px; } } diff --git a/front/src/components/admin/SettingsGroup.vue b/front/src/components/admin/SettingsGroup.vue index 0c0774bbe1055f9baf771246c2c00a8b56994307..70894c7d6d0a0209a48199b0aa9e185bce6c77c6 100644 --- a/front/src/components/admin/SettingsGroup.vue +++ b/front/src/components/admin/SettingsGroup.vue @@ -3,7 +3,7 @@ <div class="ui divider" /> <h3 class="ui header">{{ group.label }}</h3> <div v-if="errors.length > 0" class="ui negative message"> - <div class="header"><translate translate-context="Content/Settings/Error message.Title">Error while saving settings</translate></div> + <div class="header"><translate translate-context="Content/*/Error message.Title">Error while saving settings</translate></div> <ul class="list"> <li v-for="error in errors">{{ error }}</li> </ul> @@ -61,6 +61,14 @@ class="ui search selection dropdown"> <option v-for="v in setting.additional_data.choices" :value="v[0]">{{ v[1] }}</option> </select> + <div v-else-if="setting.field.widget.class === 'ImageWidget'"> + <input type="file" :ref="setting.identifier"> + <div v-if="values[setting.identifier]"> + <div class="ui hidden divider"></div> + <h3 class="ui header"><translate translate-context="Content/Settings/Title/Noun">Current image</translate></h3> + <img class="ui image" v-if="values[setting.identifier]" :src="$store.getters['instance/absoluteUrl'](values[setting.identifier])" /> + </div> + </div> </div> <button type="submit" @@ -98,8 +106,34 @@ export default { this.isLoading = true self.errors = [] self.result = null - axios.post('instance/admin/settings/bulk/', self.values).then((response) => { + let postData = self.values + let contentType = 'application/json' + let fileSettingsIDs = this.fileSettings.map((s) => {return s.identifier}) + if (fileSettingsIDs.length > 0) { + contentType = 'multipart/form-data' + postData = new FormData() + this.settings.forEach((s) => { + if (fileSettingsIDs.indexOf(s.identifier) > -1) { + let input = self.$refs[s.identifier][0] + let files = input.files + console.log('ref', input, files) + if (files && files.length > 0) { + postData.append(s.identifier, files[0]) + } + } else { + postData.append(s.identifier, self.values[s.identifier]) + } + }) + } + axios.post('instance/admin/settings/bulk/', postData, { + headers: { + 'Content-Type': contentType, + }, + }).then((response) => { self.result = true + response.data.forEach((s) => { + self.values[s.identifier] = s.value + }) self.isLoading = false self.$store.dispatch('instance/fetchSettings') }, error => { @@ -117,6 +151,11 @@ export default { return this.group.settings.map(e => { return byIdentifier[e] }) + }, + fileSettings () { + return this.settings.filter((s) => { + return s.field.widget.class === 'ImageWidget' + }) } } } diff --git a/front/src/components/audio/EmbedWizard.vue b/front/src/components/audio/EmbedWizard.vue index e4412937e54e542a684381656a0810cf4c924b9b..04a6fe62fba2bd285cf169246dea108e344342a1 100644 --- a/front/src/components/audio/EmbedWizard.vue +++ b/front/src/components/audio/EmbedWizard.vue @@ -1,5 +1,15 @@ <template> <div> + <div class="ui warning message" v-if="!anonymousCanListen"> + <p> + <strong> + <translate translate-context="Content/Embed/Message">Sharing will not work because this pod doesn't allow anonymous users to access content.</translate> + </strong> + </p> + <p> + <translate translate-context="Content/Embed/Message">Please contact your admins and ask them to update the corresponding setting.</translate> + </p> + </div> <div class="ui form"> <div class="two fields"> <div class="field"> @@ -41,6 +51,9 @@ <script> +import { mapState } from "vuex" +import _ from '@/lodash' + export default { props: ['type', 'id'], data () { @@ -50,17 +63,33 @@ export default { minHeight: 100, copied: false } - if (this.type === 'album') { + if (this.type === 'album' || this.type === 'artist' || this.type === 'playlist') { d.height = 330 d.minHeight = 250 } return d }, computed: { + ...mapState({ + nodeinfo: state => state.instance.nodeinfo, + }), + anonymousCanListen () { + return _.get(this.nodeinfo, 'metadata.library.anonymousCanListen', false) + }, iframeSrc () { - return this.$store.getters['instance/absoluteUrl']( - `/front/embed.html?&type=${this.type}&id=${this.id}` - ) + let base = process.env.BASE_URL + if (base.startsWith('/')) { + // include hostname/protocol too so that the iframe link is absolute + base = `${window.location.protocol}//${window.location.host}${base}` + } + let instanceUrl = this.$store.state.instance.instanceUrl + let b = '' + if (!window.location.href.startsWith(instanceUrl)) { + // the frontend is running on a separate domain, so we need to provide + // the b= parameter in the iframe + b = `&b=${instanceUrl}` + } + return `${base}embed.html?&type=${this.type}&id=${this.id}${b}` }, frameWidth () { if (this.width) { @@ -89,7 +118,7 @@ export default { <!-- Add "scoped" attribute to limit CSS to this component only --> <style scoped> -.message { +p.message { position: absolute; right: 0; bottom: -2em; diff --git a/front/src/components/audio/PlayButton.vue b/front/src/components/audio/PlayButton.vue index c1eeeedd47b30c308fee7bbba6861e1942d1d00f..96e210e7df5362486b6e49163e6ff5b8392e54bc 100644 --- a/front/src/components/audio/PlayButton.vue +++ b/front/src/components/audio/PlayButton.vue @@ -19,13 +19,25 @@ <i class="step forward icon"></i>{{ labels.playNext }} </button> <button class="item basic" ref="playNow" data-ref="playNow" :disabled="!playable" @click.stop.prevent="addNext(true)" :title="labels.playNow"> - <i class="play icon"></i>{{ labels.playNow }}</button> + <i class="play icon"></i>{{ labels.playNow }} + </button> + <button class="item basic" ref="replacePlay" data-ref="replacePlay" :disabled="!playable" @click.stop.prevent="replacePlay()" :title="labels.replacePlay"> + <i class="list icon"></i>{{ labels.replacePlay }} + </button> <button v-if="track" class="item basic" :disabled="!playable" @click.stop.prevent="$store.dispatch('radios/start', {type: 'similar', objectId: track.id})" :title="labels.startRadio"> <i class="feed icon"></i><translate translate-context="*/Queue/Button.Label/Short, Verb">Start radio</translate> </button> + <div class="divider"></div> <button v-if="filterableArtist" class="item basic" :disabled="!filterableArtist" @click.stop.prevent="filterArtist" :title="labels.hideArtist"> <i class="eye slash outline icon"></i><translate translate-context="*/Queue/Dropdown/Button/Label/Short">Hide content from this artist</translate> </button> + <button + v-for="obj in getReportableObjs({track, album, artist, playlist, account})" + :key="obj.target.type + obj.target.id" + class="item basic" + @click.stop.prevent="$store.dispatch('moderation/report', obj.target)"> + <i class="share icon" /> {{ obj.label }} + </button> </div> </div> </span> @@ -35,11 +47,15 @@ import axios from 'axios' import jQuery from 'jquery' +import ReportMixin from '@/components/mixins/Report' + export default { + mixins: [ReportMixin], props: { // we can either have a single or multiple tracks to play when clicked tracks: {type: Array, required: false}, track: {type: Object, required: false}, + account: {type: Object, required: false}, dropdownIconClasses: {type: Array, required: false, default: () => { return ['dropdown'] }}, playIconClass: {type: String, required: false, default: 'play icon'}, buttonClasses: {type: Array, required: false, default: () => { return ['button'] }}, @@ -74,12 +90,14 @@ export default { playNow: this.$pgettext('*/Queue/Dropdown/Button/Title', 'Play now'), addToQueue: this.$pgettext('*/Queue/Dropdown/Button/Title', 'Add to current queue'), playNext: this.$pgettext('*/Queue/Dropdown/Button/Title', 'Play next'), - startRadio: this.$pgettext('*/Queue/Dropdown/Button/Title', 'Play similar songs') + startRadio: this.$pgettext('*/Queue/Dropdown/Button/Title', 'Play similar songs'), + replacePlay: this.$pgettext('*/Queue/Dropdown/Button/Title', 'Replace current queue'), + report: this.$pgettext('*/Moderation/*/Button/Label,Verb', 'Report…'), } }, title () { if (this.playable) { - return this.$pgettext('*/Queue/Button/Title', 'Play...') + return this.$pgettext('*/*/Button.Label/Noun', 'More…') } else { if (this.track) { return this.$pgettext('*/Queue/Button/Title', 'This track is not available in any library you have access to') @@ -113,7 +131,7 @@ export default { if (this.artist) { return this.artist } - } + }, }, methods: { @@ -201,6 +219,14 @@ export default { }) jQuery(self.$el).find('.ui.dropdown').dropdown('hide') }, + replacePlay () { + let self = this + self.$store.dispatch('queue/clean') + this.getPlayableTracks().then((tracks) => { + self.$store.dispatch('queue/appendMany', {tracks: tracks}).then(() => self.addMessage(tracks)) + }) + jQuery(self.$el).find('.ui.dropdown').dropdown('hide') + }, addNext (next) { let self = this let wasEmpty = this.$store.state.queue.tracks.length === 0 diff --git a/front/src/components/audio/Player.vue b/front/src/components/audio/Player.vue index 0be5182d1e7e510d46e9c677794861dce1252a20..7fda9520f4f63ded54b5bb1b95a3e4990903359b 100644 --- a/front/src/components/audio/Player.vue +++ b/front/src/components/audio/Player.vue @@ -55,7 +55,7 @@ :class="['ui', 'small', 'orange', 'inverted', {'indicating': isLoadingAudio}, 'progress']" @click="touchProgress"> <div class="buffer bar" :data-percent="bufferProgress" :style="{ 'width': bufferProgress + '%' }"></div> - <div class="bar" :data-percent="progress" :style="{ 'width': progress + '%' }"></div> + <div class="position bar" :data-percent="progress" :style="{ 'width': progress + '%' }"></div> </div> </div> <div class="ui small warning message" v-if="currentTrack && errored"> @@ -78,7 +78,7 @@ class="two wide column control" @click.prevent.stop="previous" :disabled="emptyQueue"> - <i :class="['ui', 'backward step', {'disabled': emptyQueue}, 'secondary', 'icon']"></i> + <i :class="['ui', 'backward step', {'disabled': emptyQueue}, 'icon']"></i> </span> <span role="button" @@ -87,7 +87,7 @@ :aria-label="labels.play" @click.prevent.stop="togglePlay" class="two wide column control"> - <i :class="['ui', 'play', {'disabled': !currentTrack}, 'secondary', 'icon']"></i> + <i :class="['ui', 'play', {'disabled': !currentTrack}, 'icon']"></i> </span> <span role="button" @@ -96,7 +96,7 @@ :aria-label="labels.pause" @click.prevent.stop="togglePlay" class="two wide column control"> - <i :class="['ui', 'pause', {'disabled': !currentTrack}, 'secondary', 'icon']"></i> + <i :class="['ui', 'pause', {'disabled': !currentTrack}, 'icon']"></i> </span> <span role="button" @@ -105,7 +105,7 @@ class="two wide column control" @click.prevent.stop="next" :disabled="!hasNext"> - <i :class="['ui', {'disabled': !hasNext}, 'forward step', 'secondary', 'icon']" ></i> + <i :class="['ui', {'disabled': !hasNext}, 'forward step', 'icon']" ></i> </span> <div class="wide column control volume-control" @@ -118,7 +118,7 @@ :title="labels.unmute" :aria-label="labels.unmute" @click.prevent.stop="unmute"> - <i class="volume off secondary icon"></i> + <i class="volume off icon"></i> </span> <span role="button" @@ -126,7 +126,7 @@ :title="labels.mute" :aria-label="labels.mute" @click.prevent.stop="mute"> - <i class="volume down secondary icon"></i> + <i class="volume down icon"></i> </span> <span role="button" @@ -134,7 +134,7 @@ :title="labels.mute" :aria-label="labels.mute" @click.prevent.stop="mute"> - <i class="volume up secondary icon"></i> + <i class="volume up icon"></i> </span> <input type="range" @@ -152,7 +152,7 @@ :aria-label="labels.loopingDisabled" @click.prevent.stop="$store.commit('player/looping', 1)" :disabled="!currentTrack"> - <i :class="['ui', {'disabled': !currentTrack}, 'step', 'repeat', 'secondary', 'icon']"></i> + <i :class="['ui', {'disabled': !currentTrack}, 'step', 'repeat', 'icon']"></i> </span> <span role="button" @@ -162,7 +162,7 @@ v-if="looping === 1" :disabled="!currentTrack"> <i - class="repeat secondary icon"> + class="repeat icon"> <span class="ui circular tiny orange label">1</span> </i> </span> @@ -174,7 +174,7 @@ :disabled="!currentTrack" @click.prevent.stop="$store.commit('player/looping', 0)"> <i - class="repeat orange secondary icon"> + class="repeat orange icon"> </i> </span> </div> @@ -187,7 +187,7 @@ @click.prevent.stop="shuffle()" class="two wide column control"> <div v-if="isShuffling" class="ui inline shuffling inverted tiny active loader"></div> - <i v-else :class="['ui', 'random', 'secondary', {'disabled': queue.tracks.length === 0}, 'icon']" ></i> + <i v-else :class="['ui', 'random', {'disabled': queue.tracks.length === 0}, 'icon']" ></i> </span> <div class="one wide column" v-if="!showVolume"></div> <span @@ -199,19 +199,26 @@ @click.prevent.stop="clean()" class="two wide column control"> <i class="icons"> - <i :class="['ui', 'trash', 'secondary', {'disabled': queue.tracks.length === 0}, 'icon']" ></i> - <i :class="['ui corner large inverted', 'list', {'disabled': queue.tracks.length === 0}, 'icon']" ></i> + <i :class="['ui', 'trash', {'disabled': queue.tracks.length === 0}, 'icon']" ></i> + <i :class="['ui corner inverted', 'list', {'disabled': queue.tracks.length === 0}, 'icon']" ></i> </i> </span> </div> <GlobalEvents @keydown.space.prevent.exact="togglePlay" - @keydown.ctrl.left.prevent.exact="previous" - @keydown.ctrl.right.prevent.exact="next" - @keydown.ctrl.down.prevent.exact="$store.commit('player/incrementVolume', -0.1)" - @keydown.ctrl.up.prevent.exact="$store.commit('player/incrementVolume', 0.1)" + @keydown.ctrl.shift.left.prevent.exact="previous" + @keydown.ctrl.shift.right.prevent.exact="next" + @keydown.shift.down.prevent.exact="$store.commit('player/incrementVolume', -0.1)" + @keydown.shift.up.prevent.exact="$store.commit('player/incrementVolume', 0.1)" + @keydown.right.prevent.exact="seek (5)" + @keydown.left.prevent.exact="seek (-5)" + @keydown.shift.right.prevent.exact="seek (30)" + @keydown.shift.left.prevent.exact="seek (-30)" + @keydown.m.prevent.exact="toggleMute" @keydown.l.prevent.exact="$store.commit('player/toggleLooping')" @keydown.s.prevent.exact="shuffle" + @keydown.f.prevent.exact="$store.dispatch('favorites/toggle', currentTrack.id)" + @keydown.q.prevent.exact="clean" /> </div> </section> @@ -294,6 +301,7 @@ export default { mute: "player/mute", unmute: "player/unmute", clean: "queue/clean", + toggleMute: "player/toggleMute", }), async getTrackData (trackData) { let data = null @@ -493,6 +501,21 @@ export default { } } }, + seek (step) { + if (step > 0) { + // seek right + if (this.currentTime + step < this.duration) { + this.$store.dispatch('player/updateProgress', (this.currentTime + step)) + } else { + this.next() // parenthesis where missing here + } + } + else { + // seek left + let position = Math.max(this.currentTime + step, 0) + this.$store.dispatch('player/updateProgress', position) + } + }, observeProgress: function (enable) { let self = this if (enable) { @@ -797,12 +820,16 @@ export default { vertical-align: middle; } -.secondary.icon { +.control .icon { font-size: 1.5em; } .progress-area .actions { text-align: center; } +.ui.progress:not([data-percent]):not(.indeterminate) + .bar.position:not(.buffer) { + background: #ff851b; +} .volume-control { position: relative; width: 12.5% !important; diff --git a/front/src/components/audio/SearchBar.vue b/front/src/components/audio/SearchBar.vue index 28b11b040d19dec5832cd5eb44971fd0e3a9b764..d73571fcbf53ddbd2cef5f710c125a72cc22b9bc 100644 --- a/front/src/components/audio/SearchBar.vue +++ b/front/src/components/audio/SearchBar.vue @@ -1,19 +1,26 @@ <template> <div class="ui fluid category search"> <slot></slot><div class="ui icon input"> - <input class="prompt" name="search" :placeholder="labels.placeholder" type="text"> + <input class="prompt" ref="search" name="search" :placeholder="labels.placeholder" type="text" @keydown.esc="$event.target.blur()"> <i class="search icon"></i> </div> <div class="results"></div> <slot name="after"></slot> + <GlobalEvents + @keydown.shift.f.prevent.exact="focusSearch" + /> </div> </template> <script> import jQuery from 'jquery' import router from '@/router' +import GlobalEvents from "@/components/utils/global-events" export default { + components: { + GlobalEvents, + }, computed: { labels () { return { @@ -25,7 +32,20 @@ export default { let artistLabel = this.$pgettext('*/*/*/Noun', 'Artist') let albumLabel = this.$pgettext('*/*/*', 'Album') let trackLabel = this.$pgettext('*/*/*/Noun', 'Track') + let tagLabel = this.$pgettext('*/*/*/Noun', 'Tag') let self = this + var searchQuery; + + jQuery(this.$el).keypress(function(e) { + if(e.which == 13) { + // Cancel any API search request to backend… + jQuery(this.$el).search('cancel query'); + // Go direct to the artist page… + router.push("/library/artists?query=" + searchQuery + "&page=1&paginateBy=25&ordering=name"); + } + }); + + jQuery(this.$el).search({ type: 'category', minCharacters: 3, @@ -34,6 +54,7 @@ export default { }, onSearchQuery (query) { self.$emit('search') + searchQuery = query; }, apiSettings: { beforeXHR: function (xhrObject) { @@ -55,6 +76,9 @@ export default { }, getDescription (r) { return '' + }, + getId (t) { + return t.id } }, { @@ -65,7 +89,10 @@ export default { return r.title }, getDescription (r) { - return '' + return r.artist.name + }, + getId (t) { + return t.id } }, { @@ -75,8 +102,25 @@ export default { getTitle (r) { return r.title }, + getDescription (r) { + return `${r.album.artist.name} - ${r.album.title}` + }, + getId (t) { + return t.id + } + }, + { + code: 'tags', + route: 'library.tags.detail', + name: tagLabel, + getTitle (r) { + return `#${r.name}` + }, getDescription (r) { return '' + }, + getId (t) { + return t.name } } ] @@ -86,13 +130,14 @@ export default { results: [] } initialResponse[category.code].forEach(result => { + let id = category.getId(result) results[category.code].results.push({ title: category.getTitle(result), - id: result.id, + id, routerUrl: { name: category.route, params: { - id: result.id + id } }, description: category.getDescription(result) @@ -104,6 +149,11 @@ export default { url: this.$store.getters['instance/absoluteUrl']('api/v1/search?query={query}') } }) + }, + methods: { + focusSearch () { + this.$refs.search.focus() + }, } } </script> diff --git a/front/src/components/audio/album/Card.vue b/front/src/components/audio/album/Card.vue index 1012cc578fefb876caa7cbf9049387f90d32e208..67d1eb706cc68e3145583c26f464f0017bd3a1ec 100644 --- a/front/src/components/audio/album/Card.vue +++ b/front/src/components/audio/album/Card.vue @@ -1,5 +1,5 @@ <template> - <div class="ui card"> + <div :class="['ui', 'card', mode]"> <div class="content"> <div class="right floated tiny ui image"> <img v-if="album.cover.original" v-lazy="$store.getters['instance/absoluteUrl'](album.cover.square_crop)"> @@ -39,7 +39,7 @@ <translate translate-context="Content/Album/Card.Link/Verb" :translate-params="{count: album.tracks.length - initialTracks}" :translate-n="album.tracks.length - initialTracks" translate-plural="Show %{ count } more tracks">Show %{ count } more track</translate> </em> <em v-else @click="showAllTracks = false" class="expand"> - <translate translate-context="Content/*/Card.Link/Verb">Collapse</translate> + <translate translate-context="*/*/Button,Label">Collapse</translate> </em> </div> </div> @@ -138,4 +138,8 @@ tr { .expand { cursor: pointer; } + +.ui .card.rich { + align-self: flex-start; +} </style> diff --git a/front/src/components/audio/album/Widget.vue b/front/src/components/audio/album/Widget.vue index ecc0a280ed04b26779de42fad4537b77b4243426..c9e395f3c7022d9741f4f894ebc18212efcc4382 100644 --- a/front/src/components/audio/album/Widget.vue +++ b/front/src/components/audio/album/Widget.vue @@ -2,10 +2,12 @@ <div class="wrapper"> <h3 class="ui header"> <slot name="title"></slot> + <span v-if="showCount" class="ui tiny circular label">{{ count }}</span> </h3> - <button :disabled="!previousPage" @click="fetchData(previousPage)" :class="['ui', {disabled: !previousPage}, 'circular', 'icon', 'basic', 'button']"><i :class="['ui', 'angle left', 'icon']"></i></button> - <button :disabled="!nextPage" @click="fetchData(nextPage)" :class="['ui', {disabled: !nextPage}, 'circular', 'icon', 'basic', 'button']"><i :class="['ui', 'angle right', 'icon']"></i></button> - <button @click="fetchData('albums/')" :class="['ui', 'circular', 'icon', 'basic', 'button']"><i :class="['ui', 'refresh', 'icon']"></i></button> + <slot></slot> + <button v-if="controls" :disabled="!previousPage" @click="fetchData(previousPage)" :class="['ui', {disabled: !previousPage}, 'circular', 'icon', 'basic', 'button']"><i :class="['ui', 'angle left', 'icon']"></i></button> + <button v-if="controls" :disabled="!nextPage" @click="fetchData(nextPage)" :class="['ui', {disabled: !nextPage}, 'circular', 'icon', 'basic', 'button']"><i :class="['ui', 'angle right', 'icon']"></i></button> + <button v-if="controls" @click="fetchData('albums/')" :class="['ui', 'circular', 'icon', 'basic', 'button']"><i :class="['ui', 'refresh', 'icon']"></i></button> <div class="ui hidden divider"></div> <div class="ui five cards"> <div v-if="isLoading" class="ui inverted active dimmer"> @@ -33,6 +35,7 @@ </div> </div> </div> + <div v-if="!isLoading && albums.length === 0">No results matching your query.</div> </div> </template> @@ -43,7 +46,10 @@ import PlayButton from '@/components/audio/PlayButton' export default { props: { - filters: {type: Object, required: true} + filters: {type: Object, required: true}, + controls: {type: Boolean, default: true}, + showCount: {type: Boolean, default: false}, + limit: {type: Number, default: 12}, }, components: { PlayButton @@ -51,7 +57,7 @@ export default { data () { return { albums: [], - limit: 12, + count: 0, isLoading: false, errors: null, previousPage: null, @@ -76,6 +82,7 @@ export default { self.nextPage = response.data.next self.isLoading = false self.albums = response.data.results + self.count = response.data.count }, error => { self.isLoading = false self.errors = error.backendErrors diff --git a/front/src/components/audio/artist/Card.vue b/front/src/components/audio/artist/Card.vue index b06cdcd75b126c3d5b7f68abce5923caf0c18a2a..6fe70e266717c7e4ef8e1bec82591d27bac2b1f8 100644 --- a/front/src/components/audio/artist/Card.vue +++ b/front/src/components/audio/artist/Card.vue @@ -1,85 +1,95 @@ <template> - <div class="ui card"> - <div class="content"> - <div class="header"> - <router-link class="discrete link" :to="{name: 'library.artists.detail', params: {id: artist.id }}"> - {{ artist.name }} - </router-link> - </div> - <div class="description"> - <table class="ui compact very basic fixed single line unstackable table"> - <tbody> - <tr v-for="album in albums"> - <td> - <img class="ui mini image" v-if="album.cover.original" v-lazy="$store.getters['instance/absoluteUrl'](album.cover.small_square_crop)"> - <img class="ui mini image" v-else src="../../../assets/audio/default-cover.png"> - </td> - <td colspan="4"> - <router-link :title="album.title" class="discrete link" :to="{name: 'library.albums.detail', params: {id: album.id }}"> - <strong>{{ album.title }}</strong> - </router-link><br /> - {{ album.tracks_count }} tracks - </td> - <td> - <play-button class="right floated basic icon" :is-playable="album.is_playable" :discrete="true" :album="album"></play-button> - </td> - </tr> - </tbody> - </table> - <div class="center aligned segment" v-if="artist.albums.length > initialAlbums"> - <em v-if="!showAllAlbums" @click="showAllAlbums = true" class="expand"> - <translate translate-context="Content/Artist/Card.Link" :translate-params="{count: artist.albums.length - initialAlbums}" :translate-n="artist.albums.length - initialAlbums" translate-plural="Show %{ count } more albums">Show 1 more album</translate> - </em> - <em v-else @click="showAllAlbums = false" class="expand"> - <translate translate-context="Content/*/Card.Link/Verb">Collapse</translate> - </em> - </div> - </div> + <div class="flat inline card"> + <div :class="['ui', 'image', 'with-overlay', {'default-cover': !cover.original}]" v-lazy:background-image="imageUrl"> + <play-button class="play-overlay" :icon-only="true" :is-playable="artist.is_playable" :button-classes="['ui', 'circular', 'large', 'orange', 'icon', 'button']" :artist="artist"></play-button> </div> - <div class="extra content"> - <span> - <i class="sound icon"></i> - <translate translate-context="Content/Artist/Card" :translate-params="{count: artist.albums.length}" :translate-n="artist.albums.length" translate-plural="%{ count } albums">1 album</translate> - </span> - <play-button :is-playable="isPlayable" class="mini basic orange right floated" :artist="artist"> - <translate translate-context="Content/Queue/Button.Label/Short, Verb">Play all</translate> - </play-button> + <div class="content"> + <router-link :title="artist.name" :to="{name: 'library.artists.detail', params: {id: artist.id}}"> + {{ artist.name|truncate(30) }} + </router-link> + <div v-if="artist.albums.length > 0"> + <i class="small sound icon"></i> + <translate translate-context="Content/Artist/Card" :translate-params="{count: artist.albums.length}" :translate-n="artist.albums.length" translate-plural="%{ count } albums">1 album</translate> + </div> + <div v-else-if="artist.tracks_count"> + <i class="small sound icon"></i> + <translate translate-context="Content/Artist/Card" :translate-params="{count: artist.tracks_count}" :translate-n="artist.tracks_count" translate-plural="%{ count } tracks">1 track</translate> </div> + <tags-list label-classes="tiny" :truncate-size="20" :limit="2" :show-more="false" :tags="artist.tags"></tags-list> + + <play-button + class="play-button basic icon" + :dropdown-only="true" + :is-playable="artist.is_playable" + :dropdown-icon-classes="['ellipsis', 'vertical', 'large', 'grey']" + :artist="artist"></play-button> </div> + </div> </template> <script> import backend from '@/audio/backend' import PlayButton from '@/components/audio/PlayButton' +import TagsList from "@/components/tags/List" export default { props: ['artist'], components: { - PlayButton + PlayButton, + TagsList }, data () { return { backend: backend, initialAlbums: 30, - showAllAlbums: true + showAllAlbums: true, } }, computed: { - albums () { - if (this.showAllAlbums) { - return this.artist.albums + imageUrl () { + let url = '../../../assets/audio/default-cover.png' + let cover = this.cover + if (cover.original) { + url = this.$store.getters['instance/absoluteUrl'](cover.medium_square_crop) + } else { + return null } - return this.artist.albums.slice(0, this.initialAlbums) + return url + }, + cover () { + return this.artist.albums.map((a) => { + return a.cover + }).filter((c) => { + return !!c + })[0] || {} }, - isPlayable () { - return this.artist.albums.filter((a) => { - return a.is_playable - }).length > 0 - } } } </script> <!-- Add "scoped" attribute to limit CSS to this component only --> <style scoped> +.default-cover { + background-image: url("../../../assets/audio/default-cover.png") !important; +} + +.play-button { + position: absolute; + right: 0; + bottom: 40%; +} + +.with-overlay { + background-size: cover !important; + background-position: center !important; + height: 8em; + width: 8em; + display: flex !important; + justify-content: center !important; + align-items: center !important; +} +.flat.card .with-overlay.image { + border-radius: 50% !important; + margin: 0 auto; +} </style> diff --git a/front/src/components/audio/artist/Widget.vue b/front/src/components/audio/artist/Widget.vue new file mode 100644 index 0000000000000000000000000000000000000000..603b96fbc8dd9f7855bb206760f3f123b9357116 --- /dev/null +++ b/front/src/components/audio/artist/Widget.vue @@ -0,0 +1,111 @@ +<template> + <div class="wrapper"> + <h3 v-if="header" class="ui header"> + <slot name="title"></slot> + <span class="ui tiny circular label">{{ count }}</span> + </h3> + <button v-if="controls" :disabled="!previousPage" @click="fetchData(previousPage)" :class="['ui', {disabled: !previousPage}, 'circular', 'icon', 'basic', 'button']"><i :class="['ui', 'angle left', 'icon']"></i></button> + <button v-if="controls" :disabled="!nextPage" @click="fetchData(nextPage)" :class="['ui', {disabled: !nextPage}, 'circular', 'icon', 'basic', 'button']"><i :class="['ui', 'angle right', 'icon']"></i></button> + <button v-if="controls" @click="fetchData('artists/')" :class="['ui', 'circular', 'icon', 'basic', 'button']"><i :class="['ui', 'refresh', 'icon']"></i></button> + <div class="ui hidden divider"></div> + <div class="ui three cards"> + <div v-if="isLoading" class="ui inverted active dimmer"> + <div class="ui loader"></div> + </div> + <artist-card :artist="artist" v-for="artist in objects" :key="artist.id"></artist-card> + </div> + <div v-if="!isLoading && objects.length === 0">No results matching your query.</div> + </div> +</template> + +<script> +import _ from '@/lodash' +import axios from 'axios' +import ArtistCard from "@/components/audio/artist/Card" + +export default { + props: { + filters: {type: Object, required: true}, + controls: {type: Boolean, default: true}, + header: {type: Boolean, default: true}, + }, + components: { + ArtistCard, + }, + data () { + return { + objects: [], + limit: 12, + count: 0, + isLoading: false, + errors: null, + previousPage: null, + nextPage: null + } + }, + created () { + this.fetchData('artists/') + }, + methods: { + fetchData (url) { + if (!url) { + return + } + this.isLoading = true + let self = this + let params = _.clone(this.filters) + params.page_size = this.limit + params.offset = this.offset + axios.get(url, {params: params}).then((response) => { + self.previousPage = response.data.previous + self.nextPage = response.data.next + self.isLoading = false + self.objects = response.data.results + self.count = response.data.count + }, error => { + self.isLoading = false + self.errors = error.backendErrors + }) + }, + updateOffset (increment) { + if (increment) { + this.offset += this.limit + } else { + this.offset = Math.max(this.offset - this.limit, 0) + } + }, + }, + watch: { + offset () { + this.fetchData() + }, + "$store.state.moderation.lastUpdate": function () { + this.fetchData('objects/') + } + } +} +</script> +<style scoped lang="scss"> +@import "../../../style/vendor/media"; + +.wrapper { + width: 100%; +} +.ui.cards { + justify-content: flex-start; +} + +.ui.three.cards .card { + width: 100%; +} +@include media(">tablet") { + .ui.three.cards .card { + width: 25em; + } +} +</style> +<style> +.ui.cards .ui.button { + margin-right: 0px; +} +</style> diff --git a/front/src/components/audio/track/Row.vue b/front/src/components/audio/track/Row.vue index 624467f211855c73722f12eccf03cc8e4b684492..1f5b23a6c44b5d056dee78b34649a7ca156451c2 100644 --- a/front/src/components/audio/track/Row.vue +++ b/front/src/components/audio/track/Row.vue @@ -42,6 +42,13 @@ </td> <td colspan="2" class="align right"> <track-favorite-icon class="favorite-icon" :track="track"></track-favorite-icon> + <play-button + class="play-button basic icon" + :dropdown-only="true" + :is-playable="track.is_playable" + :dropdown-icon-classes="['ellipsis', 'vertical', 'large', 'grey']" + :track="track" + ></play-button> <track-playlist-icon v-if="$store.state.auth.authenticated" :track="track"></track-playlist-icon> diff --git a/front/src/components/audio/track/Table.vue b/front/src/components/audio/track/Table.vue index 31327ee3a5e3286cec4eded21ccc801d73e0b1eb..b70d84c62f594b49265fb8b6aff116c234bc27eb 100644 --- a/front/src/components/audio/track/Table.vue +++ b/front/src/components/audio/track/Table.vue @@ -5,7 +5,7 @@ <tr> <th></th> <th></th> - <th colspan="6"><translate translate-context="Content/Track/*/Noun">Title</translate></th> + <th colspan="6"><translate translate-context="*/*/*/Noun">Title</translate></th> <th colspan="4"><translate translate-context="*/*/*/Noun">Artist</translate></th> <th colspan="4"><translate translate-context="*/*/*">Album</translate></th> <th colspan="4"><translate translate-context="Content/*/*">Duration</translate></th> @@ -85,4 +85,7 @@ tr:not(:hover) .favorite-icon:not(.favorited) { pre { overflow-x: scroll; } +.table-wrapper { + overflow: visible; +} </style> diff --git a/front/src/components/audio/track/Widget.vue b/front/src/components/audio/track/Widget.vue index b8ad3c639c66eb756ca7f3d50148d08aa5e7c5df..788d279d0f893a236a3d08d336fb27a8e77fceaf 100644 --- a/front/src/components/audio/track/Widget.vue +++ b/front/src/components/audio/track/Widget.vue @@ -2,12 +2,13 @@ <div> <h3 class="ui header"> <slot name="title"></slot> + <span v-if="showCount" class="ui tiny circular label">{{ count }}</span> </h3> <button :disabled="!previousPage" @click="fetchData(previousPage)" :class="['ui', {disabled: !previousPage}, 'circular', 'icon', 'basic', 'button']"><i :class="['ui', 'angle up', 'icon']"></i></button> <button :disabled="!nextPage" @click="fetchData(nextPage)" :class="['ui', {disabled: !nextPage}, 'circular', 'icon', 'basic', 'button']"><i :class="['ui', 'angle down', 'icon']"></i></button> <button @click="fetchData(url)" :class="['ui', 'circular', 'icon', 'basic', 'button']"><i :class="['ui', 'refresh', 'icon']"></i></button> <div class="ui divided unstackable items"> - <div class="item" v-for="object in objects" :key="object.id"> + <div :class="['item', itemClasses]" v-for="object in objects" :key="object.id"> <div class="ui tiny image"> <img v-if="object.track.album.cover.original" v-lazy="$store.getters['instance/absoluteUrl'](object.track.album.cover.medium_square_crop)"> <img v-else src="../../../assets/audio/default-cover.png"> @@ -28,13 +29,20 @@ </router-link> </span> </div> - <div class="extra"> + <tags-list label-classes="tiny" :truncate-size="20" :limit="2" :show-more="false" :tags="object.track.tags"></tags-list> + + <div class="extra" v-if="isActivity"> <span class="left floated">@{{ object.user.username }}</span> <span class="right floated"><human-date :date="object.creation_date" /></span> </div> </div> <div class="one wide stretched column"> - <play-button class="basic icon" :dropdown-only="true" :dropdown-icon-classes="['ellipsis', 'vertical', 'large', 'grey']" :track="object.track"></play-button> + <play-button + class="basic icon" + :account="object.actor" + :dropdown-only="true" + :dropdown-icon-classes="['ellipsis', 'vertical', 'large', 'grey']" + :track="object.track"></play-button> </div> </div> </div> @@ -50,19 +58,25 @@ import _ from '@/lodash' import axios from 'axios' import PlayButton from '@/components/audio/PlayButton' +import TagsList from "@/components/tags/List" export default { props: { filters: {type: Object, required: true}, - url: {type: String, required: true} + url: {type: String, required: true}, + isActivity: {type: Boolean, default: true}, + showCount: {type: Boolean, default: false}, + limit: {type: Number, default: 5}, + itemClasses: {type: String, default: ''}, }, components: { - PlayButton + PlayButton, + TagsList }, data () { return { objects: [], - limit: 5, + count: 0, isLoading: false, errors: null, previousPage: null, @@ -86,7 +100,15 @@ export default { self.previousPage = response.data.previous self.nextPage = response.data.next self.isLoading = false - self.objects = response.data.results + self.count = response.data.count + if (self.isActivity) { + // we have listening/favorites objects, not directly tracks + self.objects = response.data.results + } else { + self.objects = response.data.results.map((r) => { + return {track: r} + }) + } }, error => { self.isLoading = false self.errors = error.backendErrors @@ -129,4 +151,18 @@ export default { .ui.divided.items > .item:last-child { padding-bottom: 1em !important; } + +@include media(">tablet") { + .divided.items > .track-item.inline { + width: 25em; + float: left; + border-top: none; + &, + &:first-child { + margin-top: 0.5em !important; + margin-right: 0.5em !important; + padding: 1em 0 !important; + } + } +} </style> diff --git a/front/src/components/auth/ApplicationForm.vue b/front/src/components/auth/ApplicationForm.vue index c2eefbfdfb705643aad0bf728e7f8764a7d3a6af..b8427357ad464e8ea32cf942ded347009f8847f9 100644 --- a/front/src/components/auth/ApplicationForm.vue +++ b/front/src/components/auth/ApplicationForm.vue @@ -8,7 +8,7 @@ </ul> </div> <div class="ui field"> - <label><translate translate-context="Content/Applications/Input.Label/Noun">Name</translate></label> + <label><translate translate-context="*/*/*/Noun">Name</translate></label> <input name="name" required type="text" v-model="fields.name" /> </div> <div class="ui field"> @@ -21,7 +21,7 @@ </p> </div> <div class="ui field"> - <label><translate translate-context="Content/Applications/Input.Label/Noun">Scopes</translate></label> + <label><translate translate-context="Content/*/*/Noun">Scopes</translate></label> <p> <translate translate-context="Content/Applications/Paragraph/"> Checking the parent "Read" or "Write" scopes implies access to all the corresponding children scopes. diff --git a/front/src/components/auth/ApplicationNew.vue b/front/src/components/auth/ApplicationNew.vue index ba1a575fe79a95ae72d4c6f4611986bbc9efe9cb..4c7bb903bbd9587179e9ba6ab1ff65efbdac068a 100644 --- a/front/src/components/auth/ApplicationNew.vue +++ b/front/src/components/auth/ApplicationNew.vue @@ -6,7 +6,7 @@ <translate translate-context="Content/Applications/Link">Back to settings</translate> </router-link> <h2 class="ui header"> - <translate translate-context="Content/Applications/Title">Create a new application</translate> + <translate translate-context="Content/Settings/Button.Label">Create a new application</translate> </h2> <application-form :defaults="defaults" @@ -38,7 +38,7 @@ export default { computed: { labels() { return { - title: this.$pgettext('Content/Applications/Title', "Create a new application") + title: this.$pgettext('Content/Settings/Button.Label', "Create a new application") } }, } diff --git a/front/src/components/auth/Login.vue b/front/src/components/auth/Login.vue deleted file mode 100644 index 20aff3236bd797e0c03a50ce9ec36b29287e20c9..0000000000000000000000000000000000000000 --- a/front/src/components/auth/Login.vue +++ /dev/null @@ -1,122 +0,0 @@ -<template> - <main class="main pusher" v-title="labels.title"> - <section class="ui vertical stripe segment"> - <div class="ui small text container"> - <h2><translate translate-context="Content/Login/Title/Verb">Log in to your Funkwhale account</translate></h2> - <form class="ui form" @submit.prevent="submit()"> - <div v-if="error" class="ui negative message"> - <div class="header"><translate translate-context="Content/Login/Error message.Title">We cannot log you in</translate></div> - <ul class="list"> - <li v-if="error == 'invalid_credentials'"><translate translate-context="Content/Login/Error message.List item/Call to action">Please double-check your username/password couple is correct</translate></li> - <li v-else><translate translate-context="Content/Login/Error message/List item">An unknown error happend, this can mean the server is down or cannot be reached</translate></li> - </ul> - </div> - <div class="field"> - <label> - <translate translate-context="Content/Login/Input.Label/Noun">Username or email</translate> | - <router-link :to="{path: '/signup'}"> - <translate translate-context="*/Signup/Link/Verb">Create an account</translate> - </router-link> - </label> - <input - ref="username" - tabindex="1" - required - name="username" - type="text" - autofocus - :placeholder="labels.usernamePlaceholder" - v-model="credentials.username" - > - </div> - <div class="field"> - <label> - <translate translate-context="Content/*/Input.Label">Password</translate> | - <router-link :to="{name: 'auth.password-reset', query: {email: credentials.username}}"> - <translate translate-context="*/Login/*/Verb">Reset your password</translate> - </router-link> - </label> - <password-input :index="2" required v-model="credentials.password" /> - - </div> - <button tabindex="3" :class="['ui', {'loading': isLoading}, 'right', 'floated', 'green', 'button']" type="submit"> - <translate translate-context="*/Login/*/Verb">Login</translate> - </button> - </form> - </div> - </section> - </main> -</template> - -<script> -import PasswordInput from "@/components/forms/PasswordInput" - -export default { - props: { - next: { type: String, default: "/library" } - }, - components: { - PasswordInput - }, - data() { - return { - // We need to initialize the component with any - // properties that will be used in it - credentials: { - username: "", - password: "" - }, - error: "", - isLoading: false - } - }, - created () { - if (this.$store.state.auth.authenticated) { - this.$router.push(this.next) - } - }, - mounted() { - this.$refs.username.focus() - }, - computed: { - labels() { - let usernamePlaceholder = this.$pgettext('Content/Login/Input.Placeholder', "Enter your username or email") - let title = this.$pgettext('Head/Login/Title', "Log In") - return { - usernamePlaceholder, - title - } - } - }, - methods: { - submit() { - var self = this - self.isLoading = true - this.error = "" - var credentials = { - username: this.credentials.username, - password: this.credentials.password - } - this.$store - .dispatch("auth/login", { - credentials, - next: this.next, - onError: error => { - if (error.response.status === 400) { - self.error = "invalid_credentials" - } else { - self.error = "unknown_error" - } - } - }) - .then(e => { - self.isLoading = false - }) - } - } -} -</script> - -<!-- Add "scoped" attribute to limit CSS to this component only --> -<style scoped> -</style> diff --git a/front/src/components/auth/LoginForm.vue b/front/src/components/auth/LoginForm.vue new file mode 100644 index 0000000000000000000000000000000000000000..6ba652c3e3c63e6ee411820ef5b34ba3be17c1d6 --- /dev/null +++ b/front/src/components/auth/LoginForm.vue @@ -0,0 +1,118 @@ +<template> + <form class="ui form" @submit.prevent="submit()"> + <div v-if="error" class="ui negative message"> + <div class="header"><translate translate-context="Content/Login/Error message.Title">We cannot log you in</translate></div> + <ul class="list"> + <li v-if="error == 'invalid_credentials'"><translate translate-context="Content/Login/Error message.List item/Call to action">Please double-check your username/password couple is correct</translate></li> + <li v-else>{{ error }}</li> + </ul> + </div> + <div class="field"> + <label> + <translate translate-context="Content/Login/Input.Label/Noun">Username or email</translate> + <template v-if="showSignup"> + | + <router-link :to="{path: '/signup'}"> + <translate translate-context="*/Signup/Link/Verb">Create an account</translate> + </router-link> + </template> + </label> + <input + ref="username" + tabindex="1" + required + name="username" + type="text" + autofocus + :placeholder="labels.usernamePlaceholder" + v-model="credentials.username" + > + </div> + <div class="field"> + <label> + <translate translate-context="*/*/*">Password</translate> | + <router-link :to="{name: 'auth.password-reset', query: {email: credentials.username}}"> + <translate translate-context="*/Login/*/Verb">Reset your password</translate> + </router-link> + </label> + <password-input :index="2" required v-model="credentials.password" /> + + </div> + <button tabindex="3" :class="['ui', {'loading': isLoading}, 'right', 'floated', buttonClasses, 'button']" type="submit"> + <translate translate-context="*/Login/*/Verb">Login</translate> + </button> + </form> +</template> + +<script> +import PasswordInput from "@/components/forms/PasswordInput" + +export default { + props: { + next: { type: String, default: "/library" }, + buttonClasses: { type: String, default: "green" }, + showSignup: { type: Boolean, default: true}, + }, + components: { + PasswordInput + }, + data() { + return { + // We need to initialize the component with any + // properties that will be used in it + credentials: { + username: "", + password: "" + }, + error: "", + isLoading: false + } + }, + created () { + if (this.$store.state.auth.authenticated) { + this.$router.push(this.next) + } + }, + mounted() { + this.$refs.username.focus() + }, + computed: { + labels() { + let usernamePlaceholder = this.$pgettext('Content/Login/Input.Placeholder', "Enter your username or email") + return { + usernamePlaceholder, + } + } + }, + methods: { + submit() { + var self = this + self.isLoading = true + this.error = "" + var credentials = { + username: this.credentials.username, + password: this.credentials.password + } + this.$store + .dispatch("auth/login", { + credentials, + next: this.next, + onError: error => { + if (error.response.status === 400) { + self.error = "invalid_credentials" + } else { + self.error = error.backendErrors[0] + } + } + }) + .then(e => { + self.isLoading = false + }) + } + } +} +</script> + +<!-- Add "scoped" attribute to limit CSS to this component only --> +<style scoped> +</style> diff --git a/front/src/components/auth/Settings.vue b/front/src/components/auth/Settings.vue index 6e2516ed87156da3c31b360d6358d027ef3009cb..795a5c45e92d599d8d83eccd1474dcd86046702b 100644 --- a/front/src/components/auth/Settings.vue +++ b/front/src/components/auth/Settings.vue @@ -12,7 +12,7 @@ </div> </div> <div v-if="settings.errors.length > 0" class="ui negative message"> - <div class="header"><translate translate-context="Content/Settings/Error message.Title">Your settings can't be updateds</translate></div> + <div class="header"><translate translate-context="Content/Settings/Error message.Title">Your settings can't be updated</translate></div> <ul class="list"> <li v-for="error in settings.errors">{{ error }}</li> </ul> @@ -244,7 +244,7 @@ </td> <td> <router-link class="ui basic tiny green button" :to="{name: 'settings.applications.edit', params: {id: app.client_id}}"> - <translate translate-context="Content/Settings/Button.Label">Edit</translate> + <translate translate-context="Content/*/Button.Label/Verb">Edit</translate> </router-link> <dangerous-button class="ui tiny basic button" @@ -267,6 +267,43 @@ </translate> </empty-state> </section> + <section class="ui text container"> + <div class="ui hidden divider"></div> + <h2 class="ui header"> + <i class="trash icon"></i> + <div class="content"> + <translate translate-context="*/*/Button.Label">Delete my account</translate> + </div> + </h2> + <p> + <translate translate-context="Content/Settings/Paragraph'">You can permanently and irreversibly delete your account and all the associated data using the form below. You will be asked for confirmation.</translate> + </p> + <div class="ui warning message"> + <translate translate-context="Content/Settings/Paragraph'">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.</translate> + </div> + <div class="ui form""> + <div v-if="accountDeleteErrors.length > 0" class="ui negative message"> + <div class="header"><translate translate-context="Content/Settings/Error message.Title">We cannot delete your account</translate></div> + <ul class="list"> + <li v-for="error in accountDeleteErrors">{{ error }}</li> + </ul> + </div> + <div class="field"> + <label><translate translate-context="*/*/*">Password</translate></label> + <password-input required v-model="password" /> + </div> + <dangerous-button + :class="['ui', {'loading': isDeletingAccount}, {disabled: !password}, 'button']" + :action="deleteAccount"> + <translate translate-context="*/*/Button.Label">Delete my account…</translate> + <p slot="modal-header"><translate translate-context="Popup/Settings/Title">Do you want to delete your account?</translate></p> + <div slot="modal-content"> + <p><translate translate-context="Popup/Settings/Paragraph">This is irreversible and will permanently remove your data from our servers. You will we immediatly logged out.</translate></p> + </div> + <div slot="modal-confirm"><translate translate-context="*/*/Button.Label">Delete my account</translate></div> + </dangerous-button> + </div> + </section> </div> </main> </template> @@ -293,8 +330,11 @@ export default { new_password: "", currentAvatar: this.$store.state.auth.profile.avatar, passwordError: "", + password: "", isLoading: false, isLoadingAvatar: false, + isDeletingAccount: false, + accountDeleteErrors: [], avatarErrors: [], avatar: null, apps: [], @@ -471,7 +511,32 @@ export default { self.isLoading = false } ) - } + }, + deleteAccount() { + this.isDeletingAccount = true + this.accountDeleteErrors = [] + let self = this + let payload = { + confirm: true, + password: this.password, + } + axios.delete(`users/users/me/`, {data: payload}) + .then( + response => { + self.isDeletingAccount = false + let msg = self.$pgettext('*/Auth/Message', 'Your deletion request was submitted, your account and content will be deleted shortly') + self.$store.commit('ui/addMessage', { + content: msg, + date: new Date() + }) + self.$store.dispatch('auth/logout') + }, + error => { + self.isDeletingAccount = false + self.accountDeleteErrors = error.backendErrors + } + ) + }, }, computed: { labels() { diff --git a/front/src/components/auth/Signup.vue b/front/src/components/auth/Signup.vue deleted file mode 100644 index 974d082bda98153009cc2e9f35cd4c0e67ab16fd..0000000000000000000000000000000000000000 --- a/front/src/components/auth/Signup.vue +++ /dev/null @@ -1,146 +0,0 @@ -<template> - <main class="main pusher" v-title="labels.title"> - <section class="ui vertical stripe segment"> - <div class="ui small text container"> - <h2><translate translate-context="Content/Signup/Title">Create a funkwhale account</translate></h2> - <form - :class="['ui', {'loading': isLoadingInstanceSetting}, 'form']" - @submit.prevent="submit()"> - <p class="ui message" v-if="!$store.state.instance.settings.users.registration_enabled.value"> - <translate translate-context="Content/Signup/Form/Paragraph">Registration are closed on this instance, you will need an invitation code to signup.</translate> - </p> - - <div v-if="errors.length > 0" class="ui negative message"> - <div class="header"><translate translate-context="Content/Signup/Form/Paragraph">Your account cannot be created.</translate></div> - <ul class="list"> - <li v-for="error in errors">{{ error }}</li> - </ul> - </div> - <div class="field"> - <label><translate translate-context="Content/*/*">Username</translate></label> - <input - ref="username" - name="username" - required - type="text" - autofocus - :placeholder="labels.usernamePlaceholder" - v-model="username"> - </div> - <div class="field"> - <label><translate translate-context="Content/*/*/Noun">Email</translate></label> - <input - ref="email" - name="email" - required - type="email" - :placeholder="labels.emailPlaceholder" - v-model="email"> - </div> - <div class="field"> - <label><translate translate-context="Content/*/Input.Label">Password</translate></label> - <password-input v-model="password" /> - </div> - <div class="field" v-if="!$store.state.instance.settings.users.registration_enabled.value"> - <label><translate translate-context="Content/*/Input.Label">Invitation code</translate></label> - <input - required - type="text" - name="invitation" - :placeholder="labels.placeholder" - v-model="invitation"> - </div> - <button :class="['ui', 'green', {'loading': isLoading}, 'button']" type="submit"> - <translate translate-context="Content/Signup/Button.Label">Create my account</translate> - </button> - </form> - </div> - </section> - </main> -</template> - -<script> -import axios from "axios" -import logger from "@/logging" - -import PasswordInput from "@/components/forms/PasswordInput" - -export default { - props: { - defaultInvitation: { type: String, required: false, default: null }, - next: { type: String, default: "/" } - }, - components: { - PasswordInput - }, - data() { - return { - username: "", - email: "", - password: "", - isLoadingInstanceSetting: true, - errors: [], - isLoading: false, - invitation: this.defaultInvitation - } - }, - created() { - let self = this - this.$store.dispatch("instance/fetchSettings", { - callback: function() { - self.isLoadingInstanceSetting = false - } - }) - }, - computed: { - labels() { - let title = this.$pgettext("*/Signup/Title", "Sign Up") - let placeholder = this.$pgettext( - "Content/Signup/Form/Placeholder", - "Enter your invitation code (case insensitive)" - ) - let usernamePlaceholder = this.$pgettext("Content/Signup/Form/Placeholder", "Enter your username") - let emailPlaceholder = this.$pgettext("Content/Signup/Form/Placeholder", "Enter your email") - return { - title, - usernamePlaceholder, - emailPlaceholder, - placeholder - } - } - }, - methods: { - submit() { - var self = this - self.isLoading = true - this.errors = [] - var payload = { - username: this.username, - password1: this.password, - password2: this.password, - email: this.email, - invitation: this.invitation - } - return axios.post("auth/registration/", payload).then( - response => { - logger.default.info("Successfully created account") - self.$router.push({ - name: "profile", - params: { - username: this.username - } - }) - }, - error => { - self.errors = error.backendErrors - self.isLoading = false - } - ) - } - } -} -</script> - -<!-- Add "scoped" attribute to limit CSS to this component only --> -<style scoped> -</style> diff --git a/front/src/components/auth/SignupForm.vue b/front/src/components/auth/SignupForm.vue new file mode 100644 index 0000000000000000000000000000000000000000..6374ef3a7106cde1c442ccc1c5a8ef9b6c6f23d9 --- /dev/null +++ b/front/src/components/auth/SignupForm.vue @@ -0,0 +1,138 @@ +<template> + <form + :class="['ui', {'loading': isLoadingInstanceSetting}, 'form']" + @submit.prevent="submit()"> + <p class="ui message" v-if="!$store.state.instance.settings.users.registration_enabled.value"> + <translate translate-context="Content/Signup/Form/Paragraph">Public registrations are not possible on this instance. You will need an invitation code to sign up.</translate> + </p> + + <div v-if="errors.length > 0" class="ui negative message"> + <div class="header"><translate translate-context="Content/Signup/Form/Paragraph">Your account cannot be created.</translate></div> + <ul class="list"> + <li v-for="error in errors">{{ error }}</li> + </ul> + </div> + <div class="field"> + <label><translate translate-context="Content/*/*">Username</translate></label> + <input + ref="username" + name="username" + required + type="text" + autofocus + :placeholder="labels.usernamePlaceholder" + v-model="username"> + </div> + <div class="field"> + <label><translate translate-context="Content/*/*/Noun">Email</translate></label> + <input + ref="email" + name="email" + required + type="email" + :placeholder="labels.emailPlaceholder" + v-model="email"> + </div> + <div class="field"> + <label><translate translate-context="*/*/*">Password</translate></label> + <password-input v-model="password" /> + </div> + <div class="field" v-if="!$store.state.instance.settings.users.registration_enabled.value"> + <label><translate translate-context="Content/*/Input.Label">Invitation code</translate></label> + <input + required + type="text" + name="invitation" + :placeholder="labels.placeholder" + v-model="invitation"> + </div> + <button :class="['ui', buttonClasses, {'loading': isLoading}, ' right floated button']" type="submit"> + <translate translate-context="Content/Signup/Button.Label">Create my account</translate> + </button> + </form> +</template> + +<script> +import axios from "axios" +import logger from "@/logging" + +import PasswordInput from "@/components/forms/PasswordInput" + +export default { + props: { + defaultInvitation: { type: String, required: false, default: null }, + next: { type: String, default: "/" }, + buttonClasses: { type: String, default: "green" }, + }, + components: { + PasswordInput + }, + data() { + return { + username: "", + email: "", + password: "", + isLoadingInstanceSetting: true, + errors: [], + isLoading: false, + invitation: this.defaultInvitation + } + }, + created() { + let self = this + this.$store.dispatch("instance/fetchSettings", { + callback: function() { + self.isLoadingInstanceSetting = false + } + }) + }, + computed: { + labels() { + let placeholder = this.$pgettext( + "Content/Signup/Form/Placeholder", + "Enter your invitation code (case insensitive)" + ) + let usernamePlaceholder = this.$pgettext("Content/Signup/Form/Placeholder", "Enter your username") + let emailPlaceholder = this.$pgettext("Content/Signup/Form/Placeholder", "Enter your email") + return { + usernamePlaceholder, + emailPlaceholder, + placeholder + } + } + }, + methods: { + submit() { + var self = this + self.isLoading = true + this.errors = [] + var payload = { + username: this.username, + password1: this.password, + password2: this.password, + email: this.email, + invitation: this.invitation + } + return axios.post("auth/registration/", payload).then( + response => { + logger.default.info("Successfully created account") + self.$router.push({ + name: "profile", + params: { + username: this.username + } + }) + }, + error => { + self.errors = error.backendErrors + self.isLoading = false + } + ) + } + } +} +</script> + +<!-- Add "scoped" attribute to limit CSS to this component only --> +<style scoped> +</style> diff --git a/front/src/components/common/ActionFeedback.vue b/front/src/components/common/ActionFeedback.vue new file mode 100644 index 0000000000000000000000000000000000000000..5f53e989dc38889e0e1058a02e51c2e33178762e --- /dev/null +++ b/front/src/components/common/ActionFeedback.vue @@ -0,0 +1,45 @@ +<template> + <span class="feedback" v-if="isLoading || isDone"> + <span v-if="isLoading" :class="['ui', 'active', size, 'inline', 'loader']"></span> + <i v-if="isDone" :class="['green', size, 'check', 'icon']"></i> + </span> +</template> + +<script> +import {hashCode, intToRGB} from '@/utils/color' + +export default { + props: { + isLoading: {type: Boolean, required: true}, + size: {type: String, default: 'small'}, + }, + data () { + return { + timer: null, + isDone: false, + } + }, + destroyed () { + if (this.timer) { + clearTimeout(this.timer) + } + }, + watch: { + isLoading (v) { + let self = this + if (v && this.timer) { + clearTimeout(this.timer) + } + if (v) { + this.isDone = false + } else { + this.isDone = true + this.timer = setTimeout(() => { + self.isDone = false + }, (2000)); + + } + } + } +} +</script> diff --git a/front/src/components/common/ActorLink.vue b/front/src/components/common/ActorLink.vue index 518e67c863d2953fec2dc2a74052d705485ada74..7a3eefd33283e373a9c0695c4f7d8132ac3c0d84 100644 --- a/front/src/components/common/ActorLink.vue +++ b/front/src/components/common/ActorLink.vue @@ -1,5 +1,9 @@ <template> - <span :title="actor.full_username"> + <router-link :to="{name: 'manage.moderation.accounts.detail', params: {id: actor.full_username}}" v-if="admin" :title="actor.full_username"> + <actor-avatar v-if="avatar" :actor="actor" /> + {{ actor.full_username | truncate(30) }} + </router-link> + <span v-else :title="actor.full_username"> <actor-avatar v-if="avatar" :actor="actor" /> {{ actor.full_username | truncate(30) }} </span> @@ -11,7 +15,8 @@ import {hashCode, intToRGB} from '@/utils/color' export default { props: { actor: {type: Object}, - avatar: {type: Boolean, default: true} + avatar: {type: Boolean, default: true}, + admin: {type: Boolean, default: false}, } } </script> diff --git a/front/src/components/common/CollapseLink.vue b/front/src/components/common/CollapseLink.vue new file mode 100644 index 0000000000000000000000000000000000000000..072a3282bad8bac66383f5d465ce4c8c659ca222 --- /dev/null +++ b/front/src/components/common/CollapseLink.vue @@ -0,0 +1,20 @@ +<template> + <a role="button" class="collapse link" @click.prevent="$emit('input', !value)"> + <translate v-if="isCollapsed" key="1" translate-context="*/*/Button,Label">Expand</translate> + <translate v-else key="2" translate-context="*/*/Button,Label">Collapse</translate> + <i :class="[{down: !isCollapsed}, {right: isCollapsed}, 'angle', 'icon']"></i> + </a> +</template> +<script> + +export default { + props: { + value: {type: Boolean, required: true}, + }, + computed: { + isCollapsed () { + return this.value + } + } +} +</script> diff --git a/front/src/components/common/ExpandableDiv.vue b/front/src/components/common/ExpandableDiv.vue new file mode 100644 index 0000000000000000000000000000000000000000..653286ad21019afcb0a17e6264b970ef730b12cb --- /dev/null +++ b/front/src/components/common/ExpandableDiv.vue @@ -0,0 +1,32 @@ +<template> + <div class="expandable-wrapper"> + <div :class="['expandable-content', {expandable: truncated.length < content.length}, {expanded: isExpanded}]"> + <slot>{{ content }}</slot> + </div> + <a v-if="truncated.length < content.length" role="button" @click.prevent="isExpanded = !isExpanded"> + <br> + <translate v-if="isExpanded" key="1" translate-context="*/*/Button,Label">Show less</translate> + <translate v-else key="2" translate-context="*/*/Button,Label">Show more</translate> + </a> + </div> +</template> +<script> +import sanitize from "@/sanitize" + +export default { + props: { + content: {type: String, required: true}, + length: {type: Number, default: 150, required: false}, + }, + data () { + return { + isExpanded: false, + } + }, + computed: { + truncated () { + return this.content.substring(0, this.length) + } + } +} +</script> diff --git a/front/src/components/federation/FetchButton.vue b/front/src/components/federation/FetchButton.vue index 5c7f4b66e2638c7777d4d9783739bd6b11b7504c..065d72f47b3cf7dbd4a0f3c976d1aa85d550bb0c 100644 --- a/front/src/components/federation/FetchButton.vue +++ b/front/src/components/federation/FetchButton.vue @@ -19,7 +19,7 @@ </div> <div v-else-if="fetch.status === 'errored'" class="ui error message"> <div class="header"><translate translate-context="Popup/*/Message.Title">Refresh error</translate></div> - <p><translate translate-context="Popup/*/Message.Content">An error occured while trying to refresh data:</translate></p> + <p><translate translate-context="Popup/*/Message.Content">An error occurred while trying to refresh data:</translate></p> <table class="ui very basic collapsing celled table"> <tbody> <tr> @@ -41,19 +41,19 @@ translate-context="*/*/Error">The remote server answered with HTTP %{ status }</translate> <translate v-else-if="['http', 'request'].indexOf(fetch.detail.error_code) > -1" - translate-context="*/*/Error">An HTTP error occured while contacting the remote server</translate> + translate-context="*/*/Error">An HTTP error occurred while contacting the remote server</translate> <translate v-else-if="fetch.detail.error_code === 'timeout'" - translate-context="*/*/Error">The remote server didn't answered fast enough</translate> + translate-context="*/*/Error">The remote server didn't respond quickly enough</translate> <translate v-else-if="fetch.detail.error_code === 'connection'" translate-context="*/*/Error">Impossible to connect to the remote server</translate> <translate v-else-if="['invalid_json', 'invalid_jsonld', 'missing_jsonld_type'].indexOf(fetch.detail.error_code) > -1" - translate-context="*/*/Error">The return server returned invalid JSON or JSON-LD data</translate> + translate-context="*/*/Error">The remote server returned invalid JSON or JSON-LD data</translate> <translate v-else-if="fetch.detail.error_code === 'validation'" translate-context="*/*/Error">Data returned by the remote server had invalid or missing attributes</translate> - <translate v-else-if="fetch.detail.error_code === 'unhandled'" translate-context="*/*/Error">Unknowkn error</translate> - <translate v-else translate-context="*/*/Error">Unknowkn error</translate> + <translate v-else-if="fetch.detail.error_code === 'unhandled'" translate-context="*/*/Error">Unknown error</translate> + <translate v-else translate-context="*/*/Error">Unknown error</translate> </td> </tr> </tbody> diff --git a/front/src/components/globals.js b/front/src/components/globals.js index 711b227ae956a8943c8085087b0215029a50499d..01e33b00fa76c873da1cd21c7baede59ccd4e275 100644 --- a/front/src/components/globals.js +++ b/front/src/components/globals.js @@ -48,4 +48,16 @@ import EmptyState from '@/components/common/EmptyState' Vue.component('empty-state', EmptyState) +import ExpandableDiv from '@/components/common/ExpandableDiv' + +Vue.component('expandable-div', ExpandableDiv) + +import CollapseLink from '@/components/common/CollapseLink' + +Vue.component('collapse-link', CollapseLink) + +import ActionFeedback from '@/components/common/ActionFeedback' + +Vue.component('action-feedback', ActionFeedback) + export default {} diff --git a/front/src/components/instance/Stats.vue b/front/src/components/instance/Stats.vue deleted file mode 100644 index c245cf9955e5e787a826521e4453f204774f1926..0000000000000000000000000000000000000000 --- a/front/src/components/instance/Stats.vue +++ /dev/null @@ -1,101 +0,0 @@ -<template> - <div> - <div v-if="stats && stats.trackFavorites !== undefined" class="ui stackable two column grid"> - <div class="column"> - <h3 class="ui left aligned header"> - <translate translate-context="Content/About/Title/Noun">User activity</translate> - </h3> - <div v-if="stats" class="ui mini horizontal statistics"> - <div class="statistic"> - <div class="value"> - <i class="green user icon"></i> - {{ stats.users }} - </div> - <div class="label"><translate translate-context="Content/About/Paragraph/Unit">users</translate></div> - </div> - <div class="statistic"> - <div class="value"> - <i class="orange sound icon"></i> {{ stats.listenings }} - </div> - <div class="label"><translate translate-context="Content/About/Paragraph/Unit">tracks listened</translate></div> - </div> - <div class="statistic"> - <div class="value"> - <i class="pink heart icon"></i> {{ stats.trackFavorites }} - </div> - <div class="label"><translate translate-context="Content/About/Paragraph/Unit">Tracks favorited</translate></div> - </div> - </div> - </div> - <div class="column"> - <h3 class="ui left aligned header"><translate translate-context="*/*/*">Library</translate></h3> - <div class="ui mini horizontal statistics"> - <div class="statistic"> - <div class="value"> - {{ parseInt(stats.musicDuration) }} - </div> - <div class="label"><translate translate-context="Content/About/Paragraph/Unit">Hours of music</translate></div> - </div> - <div class="statistic"> - <div class="value"> - {{ stats.artists }} - </div> - <div class="label"><translate translate-context="*/*/*/Noun">Artists</translate></div> - </div> - <div class="statistic"> - <div class="value"> - {{ stats.albums }} - </div> - <div class="label"><translate translate-context="*/*/*">Albums</translate></div> - </div> - <div class="statistic"> - <div class="value"> - {{ stats.tracks }} - </div> - <div class="label"><translate translate-context="*/*/*/Noun">Tracks</translate></div> - </div> - </div> - </div> - </div> - </div> -</template> - -<script> -import _ from '@/lodash' -import axios from 'axios' -import logger from '@/logging' - -export default { - data () { - return { - stats: null - } - }, - created () { - this.fetchData() - }, - methods: { - fetchData () { - var self = this - this.isLoading = true - logger.default.debug('Fetching instance stats...') - axios.get('instance/nodeinfo/2.0/').then((response) => { - let d = response.data - self.stats = {} - self.stats.users = _.get(d, 'usage.users.total') - self.stats.listenings = _.get(d, 'metadata.usage.listenings.total') - self.stats.trackFavorites = _.get(d, 'metadata.usage.favorites.tracks.total') - self.stats.musicDuration = _.get(d, 'metadata.library.music.hours') - self.stats.artists = _.get(d, 'metadata.library.artists.total') - self.stats.albums = _.get(d, 'metadata.library.albums.total') - self.stats.tracks = _.get(d, 'metadata.library.tracks.total') - self.isLoading = false - }) - } - } -} -</script> - -<!-- Add "scoped" attribute to limit CSS to this component only --> -<style scoped> -</style> diff --git a/front/src/components/library/AlbumBase.vue b/front/src/components/library/AlbumBase.vue index 016be2c3779e99ddc14c9dcd1ca585ea8e462a59..e42f3e826be6cec0707577b85203af0d2e6c71c6 100644 --- a/front/src/components/library/AlbumBase.vue +++ b/front/src/components/library/AlbumBase.vue @@ -13,6 +13,7 @@ <div v-html="subtitle"></div> </div> </h2> + <tags-list v-if="object.tags && object.tags.length > 0" :tags="object.tags"></tags-list> <div class="ui hidden divider"></div> <div class="header-buttons"> @@ -73,6 +74,15 @@ <translate translate-context="Content/*/Button.Label/Verb">Edit</translate> </router-link> <div class="divider"></div> + <div + role="button" + class="basic item" + v-for="obj in getReportableObjs({album: object})" + :key="obj.target.type + obj.target.id" + @click.stop.prevent="$store.dispatch('moderation/report', obj.target)"> + <i class="share icon" /> {{ obj.label }} + </div> + <div class="divider"></div> <router-link class="basic item" v-if="$store.state.auth.availablePermissions['library']" :to="{name: 'manage.library.albums.detail', params: {id: object.id}}"> <i class="wrench icon"></i> <translate translate-context="Content/Moderation/Link">Open in moderation interface</translate> @@ -103,6 +113,8 @@ import backend from "@/audio/backend" import PlayButton from "@/components/audio/PlayButton" import EmbedWizard from "@/components/audio/EmbedWizard" import Modal from '@/components/semantic/Modal' +import TagsList from "@/components/tags/List" +import ReportMixin from '@/components/mixins/Report' const FETCH_URL = "albums/" @@ -119,11 +131,13 @@ function groupByDisc(acc, track) { } export default { + mixins: [ReportMixin], props: ["id"], components: { PlayButton, EmbedWizard, - Modal + Modal, + TagsList, }, data() { return { @@ -143,7 +157,7 @@ export default { this.isLoading = true let url = FETCH_URL + this.id + "/" logger.default.debug('Fetching album "' + this.id + '"') - axios.get(url).then(response => { + axios.get(url, {params: {refresh: 'true'}}).then(response => { self.object = backend.Album.clean(response.data) self.discs = self.object.tracks.reduce(groupByDisc, []) self.isLoading = false diff --git a/front/src/components/library/AlbumDetail.vue b/front/src/components/library/AlbumDetail.vue index d695b6e596b3d46de95774d8191f18e7309bb277..a3b924d940ae6eb0b030f5095f107cf62d6a5966 100644 --- a/front/src/components/library/AlbumDetail.vue +++ b/front/src/components/library/AlbumDetail.vue @@ -17,7 +17,7 @@ <template v-else> <section class="ui vertical stripe segment"> <h2> - <translate translate-context="*/*/*/Noun">Tracks</translate> + <translate translate-context="*/*/*">Tracks</translate> </h2> <track-table v-if="object" :artist="object.artist" :display-position="true" :tracks="object.tracks"></track-table> </section> diff --git a/front/src/components/library/Albums.vue b/front/src/components/library/Albums.vue index 9817af830770142065f1e84f4253cbdda23c41e6..7aad836f041db980d96690774ea46a1013ba25a7 100644 --- a/front/src/components/library/Albums.vue +++ b/front/src/components/library/Albums.vue @@ -20,6 +20,10 @@ </option> </select> </div> + <div class="field"> + <label><translate translate-context="*/*/*/Noun">Tags</translate></label> + <tags-selector v-model="tags"></tags-selector> + </div> <div class="field"> <label><translate translate-context="Content/Search/Dropdown.Label/Noun">Ordering direction</translate></label> <select class="ui dropdown" v-model="orderingDirection"> @@ -70,6 +74,7 @@ </template> <script> +import qs from 'qs' import axios from "axios" import _ from "@/lodash" import $ from "jquery" @@ -81,17 +86,20 @@ import PaginationMixin from "@/components/mixins/Pagination" import TranslationsMixin from "@/components/mixins/Translations" import AlbumCard from "@/components/audio/album/Card" import Pagination from "@/components/Pagination" +import TagsSelector from '@/components/library/TagsSelector' const FETCH_URL = "albums/" export default { mixins: [OrderingMixin, PaginationMixin, TranslationsMixin], props: { - defaultQuery: { type: String, required: false, default: "" } + defaultQuery: { type: String, required: false, default: "" }, + defaultTags: { type: Array, required: false, default: () => { return [] } }, }, components: { AlbumCard, - Pagination + Pagination, + TagsSelector, }, data() { let defaultOrdering = this.getOrderingFromString( @@ -102,6 +110,7 @@ export default { result: null, page: parseInt(this.defaultPage), query: this.defaultQuery, + tags: (this.defaultTags || []).filter((t) => { return t.length > 0 }), paginateBy: parseInt(this.defaultPaginateBy || 25), orderingDirection: defaultOrdering.direction || "+", ordering: defaultOrdering.field, @@ -116,7 +125,7 @@ export default { }, computed: { labels() { - let searchPlaceholder = this.$pgettext('Content/Search/Input.Placeholder', "Enter album title...") + let searchPlaceholder = this.$pgettext('Content/Search/Input.Placeholder', "Enter album title…") let title = this.$pgettext('*/*/*', "Albums") return { searchPlaceholder, @@ -126,14 +135,18 @@ export default { }, methods: { updateQueryString: _.debounce(function() { - this.$router.replace({ - query: { + history.pushState( + {}, + null, + this.$route.path + '?' + new URLSearchParams( + { query: this.query, page: this.page, + tag: this.tags, paginateBy: this.paginateBy, ordering: this.getOrderingAsString() - } - }) + }).toString() + ) }, 500), fetchData: _.debounce(function() { var self = this @@ -144,10 +157,19 @@ export default { page_size: this.paginateBy, q: this.query, ordering: this.getOrderingAsString(), - playable: "true" + playable: "true", + tag: this.tags, } logger.default.debug("Fetching albums") - axios.get(url, { params: params }).then(response => { + axios.get( + url, + { + params: params, + paramsSerializer: function(params) { + return qs.stringify(params, { indices: false }) + } + } + ).then(response => { self.result = response.data self.isLoading = false }) @@ -177,6 +199,10 @@ export default { this.updateQueryString() this.fetchData() }, + tags() { + this.updateQueryString() + this.fetchData() + }, "$store.state.moderation.lastUpdate": function () { this.fetchData() } diff --git a/front/src/components/library/ArtistBase.vue b/front/src/components/library/ArtistBase.vue index 3c21f603fe150109ade24448510bb42805ac4663..2c5d5284aac8b1c39016f854830795a9de785e9b 100644 --- a/front/src/components/library/ArtistBase.vue +++ b/front/src/components/library/ArtistBase.vue @@ -21,6 +21,7 @@ </div> </div> </h2> + <tags-list v-if="object.tags && object.tags.length > 0" :tags="object.tags"></tags-list> <div class="ui hidden divider"></div> <div class="header-buttons"> <div class="ui buttons"> @@ -83,6 +84,16 @@ <i class="edit icon"></i> <translate translate-context="Content/*/Button.Label/Verb">Edit</translate> </router-link> + <div class="divider"></div> + <div + role="button" + class="basic item" + v-for="obj in getReportableObjs({artist: object})" + :key="obj.target.type + obj.target.id" + @click.stop.prevent="$store.dispatch('moderation/report', obj.target)"> + <i class="share icon" /> {{ obj.label }} + </div> + <div class="divider"></div> <router-link class="basic item" v-if="$store.state.auth.availablePermissions['library']" :to="{name: 'manage.library.artists.detail', params: {id: object.id}}"> <i class="wrench icon"></i> @@ -123,17 +134,20 @@ import PlayButton from "@/components/audio/PlayButton" import EmbedWizard from "@/components/audio/EmbedWizard" import Modal from '@/components/semantic/Modal' import RadioButton from "@/components/radios/Button" +import TagsList from "@/components/tags/List" +import ReportMixin from '@/components/mixins/Report' const FETCH_URL = "albums/" - export default { + mixins: [ReportMixin], props: ["id"], components: { PlayButton, EmbedWizard, Modal, - RadioButton + RadioButton, + TagsList, }, data() { return { @@ -175,7 +189,7 @@ export default { }) - let artistPromise = axios.get("artists/" + this.id + "/").then(response => { + let artistPromise = axios.get("artists/" + this.id + "/", {params: {refresh: 'true'}}).then(response => { self.object = response.data }) await trackPromise diff --git a/front/src/components/library/Artists.vue b/front/src/components/library/Artists.vue index 5f4102ab1c269cc6610bf8cec3fa95b33b9d5b83..2ac23ac8e7df59906629ccd6aaa5d922639838e7 100644 --- a/front/src/components/library/Artists.vue +++ b/front/src/components/library/Artists.vue @@ -12,6 +12,10 @@ </label> <input type="text" name="search" v-model="query" :placeholder="labels.searchPlaceholder"/> </div> + <div class="field"> + <label><translate translate-context="*/*/*/Noun">Tags</translate></label> + <tags-selector v-model="tags"></tags-selector> + </div> <div class="field"> <label><translate translate-context="Content/Search/Dropdown.Label/Noun">Ordering</translate></label> <select class="ui dropdown" v-model="ordering"> @@ -31,27 +35,18 @@ <label><translate translate-context="Content/Search/Dropdown.Label/Noun">Results per page</translate></label> <select class="ui dropdown" v-model="paginateBy"> <option :value="parseInt(12)">12</option> - <option :value="parseInt(25)">25</option> + <option :value="parseInt(30)">30</option> <option :value="parseInt(50)">50</option> </select> </div> </div> </div> <div class="ui hidden divider"></div> - <div - v-if="result" - v-masonry - transition-duration="0" - item-selector=".card" - percent-position="true" - stagger="0"> - <div v-if="result.results.length > 0" class="ui cards"> - <artist-card - v-masonry-tile - v-for="artist in result.results" - :key="artist.id" - :artist="artist"></artist-card> + <div v-if="result && result.results.length > 0" class="ui three cards"> + <div v-if="isLoading" class="ui inverted active dimmer"> + <div class="ui loader"></div> </div> + <artist-card :artist="artist" v-for="artist in result.results" :key="artist.id"></artist-card> </div> <div class="ui center aligned basic segment"> <pagination @@ -67,6 +62,7 @@ </template> <script> +import qs from 'qs' import axios from "axios" import _ from "@/lodash" import $ from "jquery" @@ -78,17 +74,20 @@ import PaginationMixin from "@/components/mixins/Pagination" import TranslationsMixin from "@/components/mixins/Translations" import ArtistCard from "@/components/audio/artist/Card" import Pagination from "@/components/Pagination" +import TagsSelector from '@/components/library/TagsSelector' const FETCH_URL = "artists/" export default { mixins: [OrderingMixin, PaginationMixin, TranslationsMixin], props: { - defaultQuery: { type: String, required: false, default: "" } + defaultQuery: { type: String, required: false, default: "" }, + defaultTags: { type: Array, required: false, default: () => { return [] } }, }, components: { ArtistCard, - Pagination + Pagination, + TagsSelector, }, data() { let defaultOrdering = this.getOrderingFromString( @@ -99,7 +98,8 @@ export default { result: null, page: parseInt(this.defaultPage), query: this.defaultQuery, - paginateBy: parseInt(this.defaultPaginateBy || 12), + tags: (this.defaultTags || []).filter((t) => { return t.length > 0 }), + paginateBy: parseInt(this.defaultPaginateBy || 30), orderingDirection: defaultOrdering.direction || "+", ordering: defaultOrdering.field, orderingOptions: [["creation_date", "creation_date"], ["name", "name"]] @@ -123,14 +123,18 @@ export default { }, methods: { updateQueryString: _.debounce(function() { - this.$router.replace({ - query: { + history.pushState( + {}, + null, + this.$route.path + '?' + new URLSearchParams( + { query: this.query, page: this.page, + tag: this.tags, paginateBy: this.paginateBy, ordering: this.getOrderingAsString() - } - }) + }).toString() + ) }, 500), fetchData: _.debounce(function() { var self = this @@ -141,10 +145,19 @@ export default { page_size: this.paginateBy, name__icontains: this.query, ordering: this.getOrderingAsString(), - playable: "true" + playable: "true", + tag: this.tags, } logger.default.debug("Fetching artists") - axios.get(url, { params: params }).then(response => { + axios.get( + url, + { + params: params, + paramsSerializer: function(params) { + return qs.stringify(params, { indices: false }) + } + } + ).then(response => { self.result = response.data self.isLoading = false }) @@ -174,6 +187,10 @@ export default { this.updateQueryString() this.fetchData() }, + tags() { + this.updateQueryString() + this.fetchData() + }, "$store.state.moderation.lastUpdate": function () { this.fetchData() } @@ -182,5 +199,22 @@ export default { </script> <!-- Add "scoped" attribute to limit CSS to this component only --> -<style scoped> +<style scoped lang="scss"> +@import "../../style/vendor/media"; + +.wrapper { + width: 100%; +} +.ui.cards { + justify-content: flex-start; +} + +.ui.three.cards .card { + width: 100%; +} +@include media(">tablet") { + .ui.three.cards .card { + width: 25em; + } +} </style> diff --git a/front/src/components/library/EditCard.vue b/front/src/components/library/EditCard.vue index e72823aa74d7aa406e14bb7e87eea1d7ff3c0179..fc5efea55548fb41e3e04c1a0000bb449657e057 100644 --- a/front/src/components/library/EditCard.vue +++ b/front/src/components/library/EditCard.vue @@ -49,7 +49,7 @@ </tr> </thead> <tbody> - <tr v-for="field in getUpdatedFields(obj.payload, previousState)" :key="field.id"> + <tr v-for="field in updatedFields" :key="field.id"> <td>{{ field.id }}</td> <td v-if="field.diff"> @@ -61,12 +61,12 @@ <translate translate-context="*/*/*">N/A</translate> </td> - <td v-if="field.diff"> + <td v-if="field.diff" :title="field.newRepr"> <span v-if="!part.removed" v-for="part in field.diff" :class="['diff', {added: part.added}]"> {{ part.value }} </span> </td> - <td v-else>{{ field.new }}</td> + <td v-else :title="field.newRepr">{{ field.newRepr }}</td> </tr> </tbody> </table> @@ -126,6 +126,7 @@ export default { } }, computed: { + configs: edits.getConfigs, canApprove: edits.getCanApprove, canDelete: edits.getCanDelete, previousState () { @@ -154,6 +155,35 @@ export default { namespace = 'library.artists.edit.detail' } return this.$router.resolve({name: namespace, params: {id, editId: this.obj.uuid}}).href + }, + + updatedFields () { + if (!this.obj.target) { + return [] + } + let payload = this.obj.payload + let previousState = this.previousState + let fields = Object.keys(payload) + let self = this + return fields.map((f) => { + let fieldConfig = edits.getFieldConfig(self.configs, this.obj.target.type, f) + let dummyRepr = (v) => { return v } + let getValueRepr = fieldConfig.getValueRepr || dummyRepr + let d = { + id: f, + } + if (previousState && previousState[f]) { + d.old = previousState[f] + d.oldRepr = castValue(getValueRepr(d.old.value)) + } + d.new = payload[f] + d.newRepr = castValue(getValueRepr(d.new)) + if (d.old) { + // we compute the diffs between the old and new values + d.diff = diffWordsWithSpace(d.oldRepr, d.newRepr) + } + return d + }) } }, methods: { @@ -184,26 +214,6 @@ export default { self.isLoading = false }) }, - getUpdatedFields (payload, previousState) { - let fields = Object.keys(payload) - return fields.map((f) => { - let d = { - id: f, - } - if (previousState && previousState[f]) { - d.old = previousState[f] - } - d.new = payload[f] - if (d.old) { - // we compute the diffs between the old and new values - - let oldValue = castValue(d.old.value) - let newValue = castValue(d.new) - d.diff = diffWordsWithSpace(oldValue, newValue) - } - return d - }) - } } } </script> diff --git a/front/src/components/library/EditForm.vue b/front/src/components/library/EditForm.vue index 617917c6812f03924934c48ec0e7d92079f95a72..ea9fc7696989e3448c18516bdc98426470a40fce 100644 --- a/front/src/components/library/EditForm.vue +++ b/front/src/components/library/EditForm.vue @@ -30,7 +30,7 @@ </translate> <button class="ui tiny basic right floated button" @click.prevent="showPendingReview = true"> <translate translate-context="Content/Library/Button.Label"> - Retrict to unreviewed edits + Restrict to unreviewed edits </translate> </button> </template> @@ -77,10 +77,22 @@ </button> </template> + <template v-else-if="fieldConfig.type === 'tags'"> + <label :for="fieldConfig.id">{{ fieldConfig.label }}</label> + <tags-selector + ref="tags" + v-model="values[fieldConfig.id]" + :id="fieldConfig.id" + required="fieldConfig.required"></tags-selector> + <button class="ui tiny basic left floated button" form="noop" @click.prevent="values[fieldConfig.id] = []"> + <i class="x icon"></i> + <translate translate-context="Content/Library/Button.Label">Clear</translate> + </button> + </template> <div v-if="values[fieldConfig.id] != initialValues[fieldConfig.id]"> <button class="ui tiny basic right floated reset button" form="noop" @click.prevent="values[fieldConfig.id] = initialValues[fieldConfig.id]"> <i class="undo icon"></i> - <translate translate-context="Content/Library/Button.Label" :translate-params="{value: initialValues[fieldConfig.id] || ''}">Reset to initial value: %{ value }</translate> + <translate translate-context="Content/Library/Button.Label">Reset to initial value</translate> </button> </div> </div> @@ -110,13 +122,17 @@ import _ from '@/lodash' import axios from "axios" import EditList from '@/components/library/EditList' import EditCard from '@/components/library/EditCard' +import TagsSelector from '@/components/library/TagsSelector' import edits from '@/edits' +import lodash from '@/lodash' + export default { props: ["objectType", "object", "licenses"], components: { EditList, - EditCard + EditCard, + TagsSelector }, data() { return { @@ -159,7 +175,7 @@ export default { mutationPayload () { let self = this let changedFields = this.config.fields.filter(f => { - return self.values[f.id] != self.initialValues[f.id] + return !lodash.isEqual(self.values[f.id], self.initialValues[f.id]) }) if (changedFields.length === 0) { return null diff --git a/front/src/components/library/FileUpload.vue b/front/src/components/library/FileUpload.vue index a8a5d2f374e0eb4ce0c51f4c134fac28ed78c0b2..d88efd5ab0b92acf3f0ba17fec90d8cbbdc1b605 100644 --- a/front/src/components/library/FileUpload.vue +++ b/front/src/components/library/FileUpload.vue @@ -92,8 +92,8 @@ <thead> <tr> <th><translate translate-context="Content/Library/Table.Label">Filename</translate></th> - <th><translate translate-context="Content/Library/*/in MB">Size</translate></th> - <th><translate translate-context="Content/Library/Table.Label (Value is Uploading/Uploaded/Error)">Status</translate></th> + <th><translate translate-context="Content/*/*/Noun">Size</translate></th> + <th><translate translate-context="*/*/*">Status</translate></th> </tr> </thead> <tbody> @@ -158,7 +158,7 @@ export default { currentTab: "summary", uploadUrl: this.$store.getters['instance/absoluteUrl']("/api/v1/uploads/"), importReference, - supportedExtensions: ["flac", "ogg", "mp3", "opus"], + supportedExtensions: ["flac", "ogg", "mp3", "opus", "aac", "m4a"], isLoadingQuota: false, quotaStatus: null, uploads: { @@ -262,7 +262,7 @@ export default { "Cannot upload this file, ensure it is not too big" ); let network = this.$pgettext('Content/Library/Help text', - "A network error occured while uploading this file" + "A network error occurred while uploading this file" ); let timeout = this.$pgettext('Content/Library/Help text', "Upload timeout, please try again"); let extension = this.$pgettext('Content/Library/Help text', diff --git a/front/src/components/library/ImportStatusModal.vue b/front/src/components/library/ImportStatusModal.vue index 5632e95943cb78571ed55af3a458ab788e7bceca..1750e2213602878a0565162caeeb62f8bc3adc6f 100644 --- a/front/src/components/library/ImportStatusModal.vue +++ b/front/src/components/library/ImportStatusModal.vue @@ -16,7 +16,7 @@ <translate translate-context="Popup/Import/Message">Upload was skipped because a similar one is already available in one of your libraries.</translate> </div> <div class="ui error message" v-if="upload.import_status === 'errored'"> - <translate translate-context="Popup/Import/Message">An error occured during upload processing. You will find more information below.</translate> + <translate translate-context="Popup/Import/Message">An error occurred during upload processing. You will find more information below.</translate> </div> <template v-if="upload.import_status === 'errored'"> <table class="ui very basic collapsing celled table"> @@ -44,7 +44,7 @@ </tr> <tr> <td> - <translate translate-context="Popup/Import/Table.Label/Noun">Getting help</translate> + <translate translate-context="Footer/*/Link">Getting help</translate> </td> <td> <ul> @@ -141,8 +141,8 @@ export default { let detail = payload.detail || {} d.errorRows = getErrors(detail) } else { - d.label = this.$pgettext('Popup/Import/Error.Label', 'Unkwown error') - d.detail = this.$pgettext('Popup/Import/Error.Label', 'An unkwown error occured') + d.label = this.$pgettext('*/*/Error', 'Unknown error') + d.detail = this.$pgettext('Popup/Import/Error.Label', 'An unknown error occurred') } let debugInfo = { source: upload.source, diff --git a/front/src/components/library/Radios.vue b/front/src/components/library/Radios.vue index 9f59db514ccb2bab0b0d9860d1cee72eb6facab5..2d68d9072381cbb375eca65f992e8bb8b2f2f574 100644 --- a/front/src/components/library/Radios.vue +++ b/front/src/components/library/Radios.vue @@ -154,14 +154,17 @@ export default { }, methods: { updateQueryString: _.debounce(function() { - this.$router.replace({ - query: { + history.pushState( + {}, + null, + this.$route.path + '?' + new URLSearchParams( + { query: this.query, page: this.page, paginateBy: this.paginateBy, ordering: this.getOrderingAsString() - } - }) + }).toString() + ) }, 500), fetchData: _.debounce(function() { var self = this diff --git a/front/src/components/library/TagDetail.vue b/front/src/components/library/TagDetail.vue new file mode 100644 index 0000000000000000000000000000000000000000..9a954ccf66ce7013cb48090954b54f5f5af97754 --- /dev/null +++ b/front/src/components/library/TagDetail.vue @@ -0,0 +1,86 @@ +<template> + <main v-title="labels.title"> + <section class="ui vertical stripe segment"> + <h2 class="ui header"> + <span class="ui circular huge hashtag label"> + {{ labels.title }} + </span> + </h2> + <radio-button type="tag" :object-id="id"></radio-button> + <router-link class="ui right floated button" v-if="$store.state.auth.availablePermissions['library']" :to="{name: 'manage.library.tags.detail', params: {id: id}}"> + <i class="wrench icon"></i> + <translate translate-context="Content/Moderation/Link">Open in moderation interface</translate> + </router-link> + + <div class="ui hidden divider"></div> + <div class="ui row"> + <artist-widget :controls="false" :filters="{playable: true, ordering: '-creation_date', tag: id}"> + <template slot="title"> + <router-link :to="{name: 'library.artists.browse', query: {tag: id}}"> + <translate translate-context="*/*/*/Noun">Artists</translate> + </router-link> + </template> + </artist-widget> + <div class="ui hidden divider"></div> + <div class="ui hidden divider"></div> + <album-widget :show-count="true" :controls="false" :filters="{playable: true, ordering: '-creation_date', tag: id}"> + <template slot="title"> + <router-link :to="{name: 'library.albums.browse', query: {tag: id}}"> + <translate translate-context="*/*/*">Albums</translate> + </router-link> + </template> + </album-widget> + <div class="ui hidden divider"></div> + <div class="ui hidden divider"></div> + <track-widget :show-count="true" :limit="12" item-classes="track-item inline" :url="'/tracks/'" :is-activity="false" :filters="{playable: true, ordering: '-creation_date', tag: id}"> + <template slot="title"> + <translate translate-context="*/*/*">Tracks</translate> + </template> + </track-widget> + <div class="ui clearing hidden divider"></div> + </div> + </section> + </main> +</template> + +<script> + +import TrackWidget from "@/components/audio/track/Widget" +import AlbumWidget from "@/components/audio/album/Widget" +import ArtistWidget from "@/components/audio/artist/Widget" +import RadioButton from "@/components/radios/Button" + +export default { + props: { + id: { type: String, required: true } + }, + components: { + ArtistWidget, + AlbumWidget, + TrackWidget, + RadioButton, + }, + computed: { + labels() { + let title = `#${this.id}` + return { + title + } + }, + isAuthenticated () { + return this.$store.state.auth.authenticated + }, + hasFavorites () { + return this.$store.state.favorites.count > 0 + }, + }, +} +</script> + +<!-- Add "scoped" attribute to limit CSS to this component only --> +<style scoped> +.ui.circular.label { + padding-left: 1em !important; + padding-right: 1em !important; +} +</style> diff --git a/front/src/components/library/TagsSelector.vue b/front/src/components/library/TagsSelector.vue new file mode 100644 index 0000000000000000000000000000000000000000..6a1fe06e825c8c2309c0638df7dc6a40878a8c9d --- /dev/null +++ b/front/src/components/library/TagsSelector.vue @@ -0,0 +1,77 @@ +<template> + <div ref="dropdown" class="ui multiple search selection dropdown"> + <input type="hidden"> + <i class="dropdown icon"></i> + <input type="text" class="search"> + <div class="default text"> + <translate translate-context="*/Dropdown/Placeholder/Verb">Search for tags…</translate> + </div> + </div> +</template> +<script> +import $ from 'jquery' + +import lodash from '@/lodash' +export default { + props: ['value'], + mounted () { + this.$nextTick(() => { + this.initDropdown() + + }) + }, + methods: { + initDropdown () { + let self = this + let handleUpdate = () => { + let value = $(self.$refs.dropdown).dropdown('get value').split(',') + self.$emit('input', value) + return value + } + let settings = { + saveRemoteData: false, + filterRemoteData: true, + apiSettings: { + url: this.$store.getters['instance/absoluteUrl']('/api/v1/tags/?name__startswith={query}&ordering=length&page_size=5'), + beforeXHR: function (xhrObject) { + xhrObject.setRequestHeader('Authorization', self.$store.getters['auth/header']) + return xhrObject + }, + }, + fields: { + remoteValues: 'results', + value: 'name' + }, + allowAdditions: true, + minCharacters: 1, + onAdd: handleUpdate, + onRemove: handleUpdate, + onLabelRemove: handleUpdate, + onChange: handleUpdate, + } + $(this.$refs.dropdown).dropdown(settings) + $(this.$refs.dropdown).dropdown('set exactly', this.value) + } + }, + watch: { + value: { + handler (v) { + let current = $(this.$refs.dropdown).dropdown('get value').split(',').sort() + if (!lodash.isEqual([...v].sort(), current)) { + $(this.$refs.dropdown).dropdown('set exactly', v) + } + }, + deep: true + } + } +} +</script> + +<style scoped> + +.ui.form .field > .selection.dropdown { + min-width: 200px; +} + +</style> + diff --git a/front/src/components/library/TrackBase.vue b/front/src/components/library/TrackBase.vue index 2f3cc51a9d74b1b855e2edefa6288704a6bcb0db..82f3aa8a7b4c548b9cc7a38ac43f3f1f0f5684e3 100644 --- a/front/src/components/library/TrackBase.vue +++ b/front/src/components/library/TrackBase.vue @@ -17,6 +17,8 @@ <div class="sub header" v-html="subtitle"></div> </div> </h2> + <tags-list v-if="track.tags && track.tags.length > 0" :tags="track.tags"></tags-list> + <div class="ui hidden divider"></div> <div class="header-buttons"> <div class="ui buttons"> <play-button class="orange" :track="track"> @@ -88,6 +90,15 @@ <translate translate-context="Content/*/Button.Label/Verb">Edit</translate> </router-link> <div class="divider"></div> + <div + role="button" + class="basic item" + v-for="obj in getReportableObjs({track})" + :key="obj.target.type + obj.target.id" + @click.stop.prevent="$store.dispatch('moderation/report', obj.target)"> + <i class="share icon" /> {{ obj.label }} + </div> + <div class="divider"></div> <router-link class="basic item" v-if="$store.state.auth.availablePermissions['library']" :to="{name: 'manage.library.tracks.detail', params: {id: track.id}}"> <i class="wrench icon"></i> <translate translate-context="Content/Moderation/Link">Open in moderation interface</translate> @@ -121,17 +132,21 @@ import TrackFavoriteIcon from "@/components/favorites/TrackFavoriteIcon" import TrackPlaylistIcon from "@/components/playlists/TrackPlaylistIcon" import Modal from '@/components/semantic/Modal' import EmbedWizard from "@/components/audio/EmbedWizard" +import TagsList from "@/components/tags/List" +import ReportMixin from '@/components/mixins/Report' const FETCH_URL = "tracks/" export default { props: ["id"], + mixins: [ReportMixin], components: { PlayButton, TrackPlaylistIcon, TrackFavoriteIcon, Modal, - EmbedWizard + EmbedWizard, + TagsList, }, data() { return { @@ -151,7 +166,7 @@ export default { this.isLoadingTrack = true let url = FETCH_URL + this.id + "/" logger.default.debug('Fetching track "' + this.id + '"') - axios.get(url).then(response => { + axios.get(url, {params: {refresh: 'true'}}).then(response => { self.track = response.data self.isLoadingTrack = false }) diff --git a/front/src/components/library/TrackDetail.vue b/front/src/components/library/TrackDetail.vue index 2eb9a0009b0bbf813b19a1affdcd2d4f129c6a7c..ce443fcd4edf3b51d7deb83c6327407f94303f6b 100644 --- a/front/src/components/library/TrackDetail.vue +++ b/front/src/components/library/TrackDetail.vue @@ -9,7 +9,7 @@ <tbody> <tr> <td> - <translate translate-context="Content/Track/Table.Label/Noun">Copyright</translate> + <translate translate-context="Content/Track/*/Noun">Copyright</translate> </td> <td v-if="track.copyright" :title="track.copyright">{{ track.copyright|truncate(50) }}</td> <td v-else> @@ -38,7 +38,7 @@ </tr> <tr> <td> - <translate translate-context="Content/Library/*/in MB">Size</translate> + <translate translate-context="Content/*/*/Noun">Size</translate> </td> <td v-if="upload && upload.size">{{ upload.size | humanSize }}</td> <td v-else> @@ -116,7 +116,7 @@ export default { methods: { fetchLicenseData(licenseId) { var self = this - let url = `licenses/${licenseId}/` + let url = `licenses/${licenseId}` axios.get(url).then(response => { self.licenseData = response.data }) diff --git a/front/src/components/library/radios/Builder.vue b/front/src/components/library/radios/Builder.vue index c6101a3200b0def3a9b3249dbba6bdbb70e740c1..07c387cbe777bfb613ae7da3a0f210d8af1a0c65 100644 --- a/front/src/components/library/radios/Builder.vue +++ b/front/src/components/library/radios/Builder.vue @@ -23,7 +23,7 @@ <input id="name" name="name" type="text" v-model="radioName" :placeholder="labels.placeholder.name" /> </div> <div class="field"> - <label for="description"><translate translate-context="Content/*/Input.Label/Noun">Description</translate></label> + <label for="description"><translate translate-context="*/*/*/Noun">Description</translate></label> <textarea rows="2" id="description" type="text" v-model="radioDesc" :placeholder="labels.placeholder.description" /> </div> <div class="ui toggle checkbox"> diff --git a/front/src/components/manage/library/AlbumsTable.vue b/front/src/components/manage/library/AlbumsTable.vue index 3af2da4db9bccd1d5d691f2b0ee9152fe9d2b7e1..3c9dd6a90d5b87518ec8a0a2b1184e955f676e79 100644 --- a/front/src/components/manage/library/AlbumsTable.vue +++ b/front/src/components/manage/library/AlbumsTable.vue @@ -37,8 +37,8 @@ action-url="manage/library/albums/action/" :filters="actionFilters"> <template slot="header-cells"> - <th><translate translate-context="*/*/*">Title</translate></th> - <th><translate translate-context="*/*/*">Artist</translate></th> + <th><translate translate-context="*/*/*/Noun">Title</translate></th> + <th><translate translate-context="*/*/*/Noun">Artist</translate></th> <th><translate translate-context="Content/Moderation/*/Noun">Domain</translate></th> <th><translate translate-context="*/*/*">Tracks</translate></th> <th><translate translate-context="Content/*/*/Noun">Release date</translate></th> diff --git a/front/src/components/manage/library/EditsCardList.vue b/front/src/components/manage/library/EditsCardList.vue index 28b07f37480b334e5b563e603977bc2a7d5fa245..abf9985544c939f514b42e18eb80b1ebf6f1e722 100644 --- a/front/src/components/manage/library/EditsCardList.vue +++ b/front/src/components/manage/library/EditsCardList.vue @@ -10,7 +10,7 @@ </form> </div> <div class="field"> - <label><translate translate-context="Content/Search/Dropdown.Label (Value is All/Pending review/Approved/Rejected)">Status</translate></label> + <label><translate translate-context="*/*/*">Status</translate></label> <select class="ui dropdown" @change="addSearchToken('is_approved', $event.target.value)" :value="getTokenValue('is_approved', '')"> <option value=""> <translate translate-context="Content/*/Dropdown">All</translate> diff --git a/front/src/components/manage/library/LibrariesTable.vue b/front/src/components/manage/library/LibrariesTable.vue index 88c58f3110ff068b9905a81d9bd09deffc1e7bda..965ba9f9107fb449721b73f759aecaa25b5c4e55 100644 --- a/front/src/components/manage/library/LibrariesTable.vue +++ b/front/src/components/manage/library/LibrariesTable.vue @@ -46,12 +46,12 @@ action-url="manage/library/libraries/action/" :filters="actionFilters"> <template slot="header-cells"> - <th><translate translate-context="*/*/*">Name</translate></th> - <th><translate translate-context="*/*/*">Account</translate></th> + <th><translate translate-context="*/*/*/Noun">Name</translate></th> + <th><translate translate-context="*/*/*/Noun">Account</translate></th> <th><translate translate-context="Content/Moderation/*/Noun">Domain</translate></th> <th><translate translate-context="*/*/*">Visibility</translate></th> - <th><translate translate-context="Content/*/*/Noun">Uploads</translate></th> - <th><translate translate-context="Content/*/*/Noun">Followers</translate></th> + <th><translate translate-context="*/*/*">Uploads</translate></th> + <th><translate translate-context="Content/Federation/*/Noun">Followers</translate></th> <th><translate translate-context="Content/*/*/Noun">Creation date</translate></th> </template> <template slot="row-cells" slot-scope="scope"> diff --git a/front/src/components/manage/library/TagsTable.vue b/front/src/components/manage/library/TagsTable.vue new file mode 100644 index 0000000000000000000000000000000000000000..9016f5011c249c2f8fd276ab7326013e2ee40c40 --- /dev/null +++ b/front/src/components/manage/library/TagsTable.vue @@ -0,0 +1,209 @@ +<template> + <div> + <div class="ui inline form"> + <div class="fields"> + <div class="ui six wide field"> + <label><translate translate-context="Content/Search/Input.Label/Noun">Search</translate></label> + <form @submit.prevent="search.query = $refs.search.value"> + <input name="search" ref="search" type="text" :value="search.query" :placeholder="labels.searchPlaceholder" /> + </form> + </div> + <div class="field"> + <label><translate translate-context="Content/Search/Dropdown.Label/Noun">Ordering</translate></label> + <select class="ui dropdown" v-model="ordering"> + <option v-for="option in orderingOptions" :value="option[0]"> + {{ sharedLabels.filters[option[1]] }} + </option> + </select> + </div> + <div class="field"> + <label><translate translate-context="Content/Search/Dropdown.Label/Noun">Ordering direction</translate></label> + <select class="ui dropdown" v-model="orderingDirection"> + <option value="+"><translate translate-context="Content/Search/Dropdown">Ascending</translate></option> + <option value="-"><translate translate-context="Content/Search/Dropdown">Descending</translate></option> + </select> + </div> + </div> + </div> + <import-status-modal :upload="detailedUpload" :show.sync="showUploadDetailModal" /> + <div class="dimmable"> + <div v-if="isLoading" class="ui active inverted dimmer"> + <div class="ui loader"></div> + </div> + <action-table + v-if="result" + @action-launched="fetchData" + :objects-data="result" + :actions="actions" + action-url="manage/tags/action/" + idField="name" + :filters="actionFilters"> + <template slot="header-cells"> + <th><translate translate-context="*/*/*/Noun">Name</translate></th> + <th><translate translate-context="*/*/*/Noun">Artists</translate></th> + <th><translate translate-context="*/*/*">Albums</translate></th> + <th><translate translate-context="*/*/*">Tracks</translate></th> + <th><translate translate-context="Content/*/*/Noun">Creation date</translate></th> + </template> + <template slot="row-cells" slot-scope="scope"> + <td> + <router-link :to="{name: 'manage.library.tags.detail', params: {id: scope.obj.name }}" :title="scope.obj.name"> + {{ scope.obj.name|truncate(30, "…", true) }} + </router-link> + </td> + <td> + {{ scope.obj.artists_count }} + </td> + <td> + {{ scope.obj.albums_count }} + </td> + <td> + {{ scope.obj.tracks_count }} + </td> + <td> + <human-date :date="scope.obj.creation_date"></human-date> + </td> + </template> + </action-table> + </div> + <div> + <pagination + v-if="result && result.count > paginateBy" + @page-changed="selectPage" + :compact="true" + :current="page" + :paginate-by="paginateBy" + :total="result.count" + ></pagination> + + <span v-if="result && result.results.length > 0"> + <translate translate-context="Content/*/Paragraph" + :translate-params="{start: ((page-1) * paginateBy) + 1, end: ((page-1) * paginateBy) + result.results.length, total: result.count}"> + Showing results %{ start }-%{ end } on %{ total } + </translate> + </span> + </div> + </div> +</template> + +<script> +import axios from 'axios' +import _ from '@/lodash' +import time from '@/utils/time' +import {normalizeQuery, parseTokens} from '@/search' +import Pagination from '@/components/Pagination' +import ActionTable from '@/components/common/ActionTable' +import OrderingMixin from '@/components/mixins/Ordering' +import TranslationsMixin from '@/components/mixins/Translations' +import SmartSearchMixin from '@/components/mixins/SmartSearch' +import ImportStatusModal from '@/components/library/ImportStatusModal' + + +export default { + mixins: [OrderingMixin, TranslationsMixin, SmartSearchMixin], + props: { + filters: {type: Object, required: false}, + }, + components: { + Pagination, + ActionTable, + ImportStatusModal + }, + data () { + let defaultOrdering = this.getOrderingFromString(this.defaultOrdering || '-creation_date') + return { + detailedUpload: null, + showUploadDetailModal: false, + time, + isLoading: false, + result: null, + page: 1, + paginateBy: 50, + search: { + query: this.defaultQuery, + tokens: parseTokens(normalizeQuery(this.defaultQuery)) + }, + orderingDirection: defaultOrdering.direction || '+', + ordering: defaultOrdering.field, + orderingOptions: [ + ['creation_date', 'creation_date'], + ['name', 'name'], + ['length', 'length'], + ['items_count', 'items_count'], + ] + } + }, + created () { + this.fetchData() + }, + methods: { + fetchData () { + let params = _.merge({ + 'page': this.page, + 'page_size': this.paginateBy, + 'q': this.search.query, + 'ordering': this.getOrderingAsString() + }, this.filters) + let self = this + self.isLoading = true + self.checked = [] + axios.get('/manage/tags/', {params: params}).then((response) => { + self.isLoading = false + self.result = response.data + }, error => { + self.isLoading = false + self.errors = error.backendErrors + }) + }, + selectPage: function (page) { + this.page = page + }, + }, + computed: { + labels () { + return { + searchPlaceholder: this.$pgettext('Content/Search/Input.Placeholder', 'Search by name') + } + }, + actionFilters () { + var currentFilters = { + q: this.search.query + } + if (this.filters) { + return _.merge(currentFilters, this.filters) + } else { + return currentFilters + } + }, + actions () { + let deleteLabel = this.$pgettext('*/*/*/Verb', 'Delete') + let confirmationMessage = this.$pgettext('Popup/*/Paragraph', 'The selected tag will be removed and unlinked with existing content, if any. This action is irreversible.') + return [ + { + name: 'delete', + label: deleteLabel, + confirmationMessage: confirmationMessage, + isDangerous: true, + allowAll: false, + confirmColor: 'red', + }, + ] + } + }, + watch: { + search (newValue) { + this.page = 1 + this.fetchData() + }, + page () { + this.fetchData() + }, + ordering () { + this.fetchData() + }, + orderingDirection () { + this.fetchData() + } + } +} +</script> diff --git a/front/src/components/manage/library/TracksTable.vue b/front/src/components/manage/library/TracksTable.vue index a702d8e25cb180827e1134aad530f99936bd7675..91c07c81b66d22fd892dde3a10e7b2b366a4b3fb 100644 --- a/front/src/components/manage/library/TracksTable.vue +++ b/front/src/components/manage/library/TracksTable.vue @@ -37,9 +37,9 @@ action-url="manage/library/tracks/action/" :filters="actionFilters"> <template slot="header-cells"> - <th><translate translate-context="*/*/*">Title</translate></th> + <th><translate translate-context="*/*/*/Noun">Title</translate></th> <th><translate translate-context="*/*/*">Album</translate></th> - <th><translate translate-context="*/*/*">Artist</translate></th> + <th><translate translate-context="*/*/*/Noun">Artist</translate></th> <th><translate translate-context="Content/Moderation/*/Noun">Domain</translate></th> <th><translate translate-context="Content/*/*/Noun">License</translate></th> <th><translate translate-context="Content/*/*/Noun">Creation date</translate></th> diff --git a/front/src/components/manage/library/UploadsTable.vue b/front/src/components/manage/library/UploadsTable.vue index efc4e23944387bf84ae8330452a561d341e90dfe..5215a538f22f899435750b5159422a3cfbe5b0a7 100644 --- a/front/src/components/manage/library/UploadsTable.vue +++ b/front/src/components/manage/library/UploadsTable.vue @@ -18,7 +18,7 @@ </select> </div> <div class="field"> - <label><translate translate-context="Content/Library/*/Noun">Import status</translate></label> + <label><translate translate-context="Content/*/*/Noun">Import status</translate></label> <select class="ui dropdown" @change="addSearchToken('status', $event.target.value)" :value="getTokenValue('status', '')"> <option value=""><translate translate-context="Content/*/Dropdown">All</translate></option> <option value="pending"><translate translate-context="Content/Library/*/Short">Pending</translate></option> @@ -57,9 +57,9 @@ action-url="manage/library/uploads/action/" :filters="actionFilters"> <template slot="header-cells"> - <th><translate translate-context="*/*/*">Name</translate></th> - <th><translate translate-context="*/*/*">Library</translate></th> - <th><translate translate-context="*/*/*">Account</translate></th> + <th><translate translate-context="*/*/*/Noun">Name</translate></th> + <th><translate translate-context="*/*/*/Noun">Library</translate></th> + <th><translate translate-context="*/*/*/Noun">Account</translate></th> <th><translate translate-context="Content/Moderation/*/Noun">Domain</translate></th> <th><translate translate-context="*/*/*">Visibility</translate></th> <th><translate translate-context="Content/*/*/Noun">Import status</translate></th> diff --git a/front/src/components/manage/moderation/AccountsTable.vue b/front/src/components/manage/moderation/AccountsTable.vue index ce91fe43e32df84913066f594442b8adbfdac07e..c0cb75fcc6b45cf7f516c7dfd4a335f4a37a6248 100644 --- a/front/src/components/manage/moderation/AccountsTable.vue +++ b/front/src/components/manage/moderation/AccountsTable.vue @@ -39,7 +39,7 @@ <template slot="header-cells"> <th><translate translate-context="*/*/*/Noun">Name</translate></th> <th><translate translate-context="Content/Moderation/*/Noun">Domain</translate></th> - <th><translate translate-context="Content/Moderation/Table.Label/Noun">Uploads</translate></th> + <th><translate translate-context="*/*/*">Uploads</translate></th> <th><translate translate-context="Content/Moderation/Table.Label/Short (Value is a date)">First seen</translate></th> <th><translate translate-context="Content/Moderation/Table.Label/Noun">Last seen</translate></th> <th><translate translate-context="Content/Moderation/Table.Label/Short">Under moderation rule</translate></th> diff --git a/front/src/components/manage/moderation/DomainsTable.vue b/front/src/components/manage/moderation/DomainsTable.vue index 544d91156f3101236b8395bec133b9248d2d112a..4b7d20739a43f570be55288b52b029e3f9be5fa6 100644 --- a/front/src/components/manage/moderation/DomainsTable.vue +++ b/front/src/components/manage/moderation/DomainsTable.vue @@ -6,6 +6,14 @@ <label><translate translate-context="Content/Search/Input.Label/Noun">Search</translate></label> <input name="search" type="text" v-model="search" :placeholder="labels.searchPlaceholder" /> </div> + <div class="field" v-if="allowListEnabled"> + <label><translate translate-context="Content/Moderation/*/Adjective">Is present on allow-list</translate></label> + <select class="ui dropdown" v-model="allowed"> + <option :value="null"><translate translate-context="Content/*/Dropdown">All</translate></option> + <option :value="true"><translate translate-context="*/*/*">Yes</translate></option> + <option :value="false"><translate translate-context="*/*/*">No</translate></option> + </select> + </div> <div class="field"> <label><translate translate-context="Content/Search/Dropdown.Label/Noun">Ordering</translate></label> <select class="ui dropdown" v-model="ordering"> @@ -44,7 +52,10 @@ </template> <template slot="row-cells" slot-scope="scope"> <td> - <router-link :to="{name: 'manage.moderation.domains.detail', params: {id: scope.obj.name }}">{{ scope.obj.name }}</router-link> + <router-link :to="{name: 'manage.moderation.domains.detail', params: {id: scope.obj.name }}"> + {{ scope.obj.name }} + <i v-if="allowListEnabled && scope.obj.allowed" class="green check icon" :title="labels.allowListTitle"></i> + </router-link> </td> <td> {{ scope.obj.actors_count }} @@ -93,7 +104,8 @@ import TranslationsMixin from '@/components/mixins/Translations' export default { mixins: [OrderingMixin, TranslationsMixin], props: { - filters: {type: Object, required: false} + filters: {type: Object, required: false}, + allowListEnabled: {type: Boolean, default: false}, }, components: { Pagination, @@ -108,6 +120,7 @@ export default { page: 1, paginateBy: 50, search: '', + allowed: null, orderingDirection: defaultOrdering.direction || '+', ordering: defaultOrdering.field, orderingOptions: [ @@ -124,12 +137,16 @@ export default { }, methods: { fetchData () { - let params = _.merge({ + let baseFilters = { 'page': this.page, 'page_size': this.paginateBy, 'q': this.search, - 'ordering': this.getOrderingAsString() - }, this.filters) + 'ordering': this.getOrderingAsString(), + } + if (this.allowed !== null) { + baseFilters.allowed = this.allowed + } + let params = _.merge(baseFilters, this.filters) let self = this self.isLoading = true self.checked = [] @@ -148,7 +165,8 @@ export default { computed: { labels () { return { - searchPlaceholder: this.$pgettext('Content/Search/Input.Placeholder', 'Search by name…') + searchPlaceholder: this.$pgettext('Content/Search/Input.Placeholder', 'Search by name…'), + allowListTitle: this.$pgettext('Content/Moderation/Popup', 'This domain is present in your allow-list'), } }, actionFilters () { @@ -167,7 +185,21 @@ export default { name: 'purge', label: this.$pgettext('*/*/*/Verb', 'Purge'), isDangerous: true - } + }, + { + name: 'allow_list_add', + label: this.$pgettext('Content/Moderation/Action/Verb', 'Add to allow-list'), + filterCheckable: (obj) => { + return !obj.allowed + } + }, + { + name: 'allow_list_remove', + label: this.$pgettext('Content/Moderation/Action/Verb', 'Remove from allow-list'), + filterCheckable: (obj) => { + return obj.allowed + } + }, ] } }, @@ -179,6 +211,9 @@ export default { page () { this.fetchData() }, + allowed () { + this.fetchData() + }, ordering () { this.fetchData() }, diff --git a/front/src/components/manage/moderation/InstancePolicyCard.vue b/front/src/components/manage/moderation/InstancePolicyCard.vue index 040195d0975f259a4a613d329284d1c95e84e9b4..994003e3a1cbae469b9902116dde43b6425fa4e0 100644 --- a/front/src/components/manage/moderation/InstancePolicyCard.vue +++ b/front/src/components/manage/moderation/InstancePolicyCard.vue @@ -6,7 +6,7 @@ <i class="user icon"></i>{{ object.actor }} <template v-if="object.is_active"> <i class="play icon"></i> - <translate translate-context="*/*/*">Enabled</translate> + <translate translate-context="*/*/*/State of feature">Enabled</translate> </template> <template v-if="!object.is_active"> <i class="pause icon"></i> diff --git a/front/src/components/manage/moderation/InstancePolicyForm.vue b/front/src/components/manage/moderation/InstancePolicyForm.vue index b38a2a9a586f22038ea5de6b42ced404067e1526..ebb946d5a661804a6129b02021622b124e7854be 100644 --- a/front/src/components/manage/moderation/InstancePolicyForm.vue +++ b/front/src/components/manage/moderation/InstancePolicyForm.vue @@ -15,8 +15,8 @@ <div class="ui toggle checkbox"> <input id="policy-is-active" v-model="current.isActive" type="checkbox"> <label for="policy-is-active"> - <translate translate-context="*/*/*" v-if="current.isActive" key="1">Enabled</translate> - <translate translate-context="*/*/*" v-else key="2">Disabled</translate> + <translate translate-context="*/*/*/State of feature" v-if="current.isActive" key="1">Enabled</translate> + <translate translate-context="*/*/*/State of feature" v-else key="2">Disabled</translate> <tooltip :content="labels.isActiveHelp" /> </label> </div> diff --git a/front/src/components/manage/moderation/InstancePolicyModal.vue b/front/src/components/manage/moderation/InstancePolicyModal.vue new file mode 100644 index 0000000000000000000000000000000000000000..d905a1d8c0fa85ea501851156bfc31394173570b --- /dev/null +++ b/front/src/components/manage/moderation/InstancePolicyModal.vue @@ -0,0 +1,99 @@ +<template> + <button class="ui button" @click.prevent="show = !show"> + <i class="shield icon"></i> + <slot> + <translate translate-context="Content/Moderation/Button.Label">Moderation rules…</translate> + </slot> + <modal :show.sync="show" @show="fetchData"> + <div class="header"> + <translate :translate-params="{obj: target}" translate-context="Popup/Moderation/Title/Verb">Manage moderation rules for %{ obj }</translate> + </div> + <div class="content"> + <div class="description"> + <div v-if="isLoading" class="ui active loader"></div> + <instance-policy-card v-else-if="obj && !showForm" :object="obj" @update="showForm = true"> + <header class="ui header"> + <h3> + <translate translate-context="Content/Moderation/Card.Title">This entity is subject to specific moderation rules</translate> + </h3> + </header> + </instance-policy-card> + <instance-policy-form + v-else + @cancel="showForm = false" + @save="showForm = false; result = {count: 1, results: [$event]}" + @delete="result = {count: 0, results: []}; showForm = false" + :object="obj" + :type="type" + :target="target" /> + </div> + <div class="ui hidden divider"></div> + <div class="ui hidden divider"></div> + </div> + <div class="actions"> + <div class="ui deny button"> + <translate translate-context="*/*/Button.Label/Verb">Close</translate> + </div> + </div> + </modal> + + </button> +</template> + +<script> +import axios from 'axios' +import InstancePolicyForm from "@/components/manage/moderation/InstancePolicyForm" +import InstancePolicyCard from "@/components/manage/moderation/InstancePolicyCard" +import Modal from '@/components/semantic/Modal' + +export default { + props: { + target: {required: true}, + type: {required: true}, + }, + components: { + InstancePolicyForm, + InstancePolicyCard, + Modal, + }, + data () { + return { + show: false, + isLoading: false, + errors: [], + showForm: false, + result: null, + } + }, + computed: { + obj () { + if (!this.result) { + return null + } + return this.result.results[0] + } + }, + methods: { + fetchData () { + let params = {} + if (this.type === 'domain') { + params.target_domain = this.target + } + if (this.type === 'actor') { + let parts = this.target.split('@') + params.target_account_username = parts[0] + params.target_account_domain = parts[1] + } + let self = this + self.isLoading = true + axios.get('/manage/moderation/instance-policies/', {params: params}).then((response) => { + self.result = response.data + self.isLoading = false + }, error => { + self.isLoading = false + self.errors = error.backendErrors + }) + } + } +} +</script> diff --git a/front/src/components/manage/moderation/NoteForm.vue b/front/src/components/manage/moderation/NoteForm.vue new file mode 100644 index 0000000000000000000000000000000000000000..bef549771a09767d39e00697f153fd4b1e85633a --- /dev/null +++ b/front/src/components/manage/moderation/NoteForm.vue @@ -0,0 +1,60 @@ +<template> + <form class="ui form" @submit.prevent="submit()"> + <div v-if="errors.length > 0" class="ui negative message"> + <div class="header"><translate translate-context="Content/Moderation/Error message.Title">Error while submitting note</translate></div> + <ul class="list"> + <li v-for="error in errors">{{ error }}</li> + </ul> + </div> + <div class="field"> + <textarea name="change-summary" required v-model="summary" id="change-summary" rows="3" :placeholder="labels.summaryPlaceholder"></textarea> + </div> + <button :class="['ui', {'loading': isLoading}, 'right', 'floated', 'button']" type="submit" :disabled="isLoading"> + <translate translate-context="Content/Moderation/Button.Label/Verb">Add note</translate> + </button> + </form> +</template> + +<script> +import axios from 'axios' +import showdown from 'showdown' + +export default { + props: { + target: {required: true}, + }, + data () { + return { + markdown: new showdown.Converter(), + isLoading: false, + summary: '', + errors: [], + } + }, + computed: { + labels () { + return { + summaryPlaceholder: this.$pgettext('Content/Moderation/Placeholder', 'Describe what actions have been taken, or any other related updates…'), + } + }, + }, + methods: { + submit () { + let self = this + this.isLoading = true + let payload = { + target: this.target, + summary: this.summary + } + axios.post(`manage/moderation/notes/`, payload).then((response) => { + self.$emit('created', response.data) + self.summary = '' + self.isLoading = false + }, error => { + self.errors = error.backendErrors + self.isLoading = false + }) + }, + } +} +</script> diff --git a/front/src/components/manage/moderation/NotesThread.vue b/front/src/components/manage/moderation/NotesThread.vue new file mode 100644 index 0000000000000000000000000000000000000000..705354ec8e7c5f90b8955453f6e80c8f0dbf4395 --- /dev/null +++ b/front/src/components/manage/moderation/NotesThread.vue @@ -0,0 +1,65 @@ +<template> + <div class="ui feed"> + <div class="event" v-for="note in notes" :key="note.uuid"> + <div class="label"> + <i class="comment outline icon"></i> + </div> + <div class="content"> + <div class="summary"> + <actor-link :admin="true" :actor="note.author"></actor-link> + <div class="date"> + <human-date :date="note.creation_date"></human-date> + </div> + </div> + <div class="extra text"> + <expandable-div :content="note.summary"> + <div v-html="markdown.makeHtml(note.summary)"></div> + </expandable-div> + </div> + <div class="meta"> + <dangerous-button + :class="['ui', {loading: isLoading}, 'basic borderless mini button']" + color="grey" + @confirm="remove(note)"> + <i class="trash icon"></i> + <translate translate-context="*/*/*/Verb">Delete</translate> + <p slot="modal-header"><translate translate-context="Popup/Moderation/Title">Delete this note?</translate></p> + <div slot="modal-content"> + <p><translate translate-context="Content/Moderation/Paragraph">The note will be removed. This action is irreversible.</translate></p> + </div> + <p slot="modal-confirm"><translate translate-context="*/*/*/Verb">Delete</translate></p> + </dangerous-button> + </div> + </div> + </div> + </div> +</template> + +<script> +import axios from 'axios' +import showdown from 'showdown' + +export default { + props: { + notes: {required: true}, + }, + data () { + return { + markdown: new showdown.Converter(), + isLoading: false, + } + }, + methods: { + remove (obj) { + let self = this + this.isLoading = true + axios.delete(`manage/moderation/notes/${obj.uuid}/`).then((response) => { + self.$emit('deleted', obj.uuid) + self.isLoading = false + }, error => { + self.isLoading = false + }) + }, + } +} +</script> diff --git a/front/src/components/manage/moderation/ReportCard.vue b/front/src/components/manage/moderation/ReportCard.vue new file mode 100644 index 0000000000000000000000000000000000000000..65fb3773cc4cb665672301d969ed972571943190 --- /dev/null +++ b/front/src/components/manage/moderation/ReportCard.vue @@ -0,0 +1,422 @@ +<template> + <div class="ui fluid report card"> + <div class="content"> + <div class="header"> + <router-link :to="{name: 'manage.moderation.reports.detail', params: {id: obj.uuid}}"> + <translate translate-context="Content/Moderation/Card/Short" :translate-params="{id: obj.uuid.substring(0, 8)}">Report %{ id }</translate> + </router-link> + <collapse-link class="right floated" v-model="isCollapsed"></collapse-link> + </div> + <div class="content"> + <div class="ui hidden divider"></div> + <div class="ui stackable two column grid"> + <div class="column"> + <table class="ui very basic unstackable table"> + <tbody> + <tr> + <td> + <translate translate-context="Content/Moderation/*">Submitted by</translate> + </td> + <td> + <div v-if="obj.submitter"> + <actor-link :admin="true" :actor="obj.submitter" /> + </div> + <div v-else="obj.submitter_email"> + {{ obj.submitter_email }} + </div> + </td> + </tr> + <tr> + <td> + <translate translate-context="*/*/*">Category</translate> + </td> + <td> + <report-category-dropdown + :value="obj.type" + @input="update({type: $event})"> +   + <action-feedback :is-loading="updating.type"></action-feedback> + </report-category-dropdown> + </td> + </tr> + <tr> + <td> + <translate translate-context="Content/*/*/Noun">Creation date</translate> + </td> + <td> + <human-date :date="obj.creation_date" :icon="true"></human-date> + </td> + </tr> + </tbody> + </table> + </div> + <div class="column"> + <table class="ui very basic unstackable table"> + <tbody> + <tr> + <td> + <translate translate-context="*/*/*">Status</translate> + </td> + <td v-if="obj.is_handled"> + <span v-if="obj.is_handled"> + <i class="green check icon"></i> + <translate translate-context="Content/*/*/Short">Resolved</translate> + </span> + </td> + <td v-else> + <i class="red x icon"></i> + <translate translate-context="Content/*/*/Short">Unresolved</translate> + </td> + </tr> + <tr> + <td> + <translate translate-context="Content/Moderation/*">Assigned to</translate> + </td> + <td> + <div v-if="obj.assigned_to"> + <actor-link :admin="true" :actor="obj.assigned_to" /> + </div> + <translate v-else translate-context="*/*/*">N/A</translate> + </td> + </tr> + <tr> + <td> + <translate translate-context="Content/*/*/Noun">Resolution date</translate> + </td> + <td> + <human-date v-if="obj.handled_date" :date="obj.handled_date" :icon="true"></human-date> + <translate v-else translate-context="*/*/*">N/A</translate> + </td> + </tr> + <tr> + <td> + <translate translate-context="Content/*/*/Noun">Internal notes</translate> + </td> + <td> + <i class="comment icon"></i> + {{ obj.notes.length }} + </td> + </tr> + </tbody> + </table> + </div> + </div> + </div> + </div> + <div class="main content" v-if="!isCollapsed"> + <div class="ui stackable two column grid"> + <div class="column"> + <h3> + <translate translate-context="*/*/Field.Label/Noun">Message</translate> + </h3> + <expandable-div v-if="obj.summary" class="summary" :content="obj.summary"> + <div v-html="markdown.makeHtml(obj.summary)"></div> + </expandable-div> + </div> + <aside class="column"> + <h3> + <translate translate-context="Content/*/*/Short">Reported object</translate> + </h3> + <div v-if="!obj.target" class="ui warning message"> + <translate translate-context="Content/Moderation/Message">The object associated with this report was deleted.</translate> + </div> + <router-link class="ui basic button" v-if="target && configs[target.type].urls.getDetail" :to="configs[target.type].urls.getDetail(obj.target_state)"> + <i class="eye icon"></i> + <translate translate-context="Content/Moderation/Link">View public page</translate> + </router-link> + <router-link class="ui basic button" v-if="target && configs[target.type].urls.getAdminDetail" :to="configs[target.type].urls.getAdminDetail(obj.target_state)"> + <i class="wrench icon"></i> + <translate translate-context="Content/Moderation/Link">Open in moderation interface</translate> + </router-link> + <table class="ui very basic unstackable table"> + <tbody> + <tr v-if="target"> + <td> + <translate translate-context="Content/Track/Table.Label/Noun">Type</translate> + </td> + <td colspan="2"> + <i :class="[configs[target.type].icon, 'icon']"></i> + {{ configs[target.type].label }} + </td> + </tr> + <tr v-if="obj.target_owner && (!target || target.type !== 'account')"> + <td> + <translate translate-context="*/*/*">Owner</translate> + </td> + <td> + <actor-link :admin="true" :actor="obj.target_owner"></actor-link> + </td> + <td> + <instance-policy-modal + v-if="!obj.target_owner.is_local" + class="right floated mini basic" type="actor" :target="obj.target_owner.full_username" /> + </td> + </tr> + <tr v-if="target && target.type === 'account'"> + <td> + <translate translate-context="*/*/*/Noun">Account</translate> + </td> + <td> + <actor-link :admin="true" :actor="obj.target_owner"></actor-link> + </td> + <td> + <instance-policy-modal + v-if="!obj.target_owner.is_local" + class="right floated mini basic" type="actor" :target="obj.target_owner.full_username" /> + </td> + </tr> + <tr v-if="obj.target_state.is_local"> + <td> + <translate translate-context="Content/Moderation/*/Noun">Domain</translate> + </td> + <td colspan="2"> + <i class="home icon"></i> + <translate translate-context="Content/Moderation/*/Short, Noun">Local</translate> + </td> + </tr> + <tr v-else-if="obj.target_state.domain"> + <td> + <router-link :to="{name: 'manage.moderation.domains.detail', params: {id: obj.target_state.domain }}"> + <translate translate-context="Content/Moderation/*/Noun">Domain</translate> + </router-link> + </td> + <td> + {{ obj.target_state.domain }} + </td> + <td> + <instance-policy-modal class="right floated mini basic" type="domain" :target="obj.target_state.domain" /> + </td> + </tr> + <tr v-for="field in targetFields" :key="field.id"> + <td>{{ field.label }}</td> + <td colspan="2" v-if="field.repr">{{ field.repr }}</td> + <td colspan="2" v-else> + <translate translate-context="*/*/*">N/A</translate> + </td> + </tr> + </tbody> + </table> + </aside> + </div> + <div class="ui stackable two column grid"> + <div class="column"> + <h3> + <translate translate-context="Content/*/*/Noun">Internal notes</translate> + </h3> + <notes-thread @deleted="handleRemovedNote($event)" :notes="obj.notes" /> + <note-form @created="obj.notes.push($event)" :target="{type: 'report', uuid: obj.uuid}" /> + </div> + <div class="column"> + <h3> + <translate translate-context="Content/*/*/Noun">Actions</translate> + </h3> + <div class="ui labelled icon basic buttons"> + <button + v-if="obj.is_handled === false" + @click="resolve(true)" + :class="['ui', {loading: isLoading}, 'button']"> + <i class="green check icon"></i> + <translate translate-context="Content/*/Button.Label/Verb">Resolve</translate> + </button> + <button + v-if="obj.is_handled === true" + @click="resolve(false)" + :class="['ui', {loading: isLoading}, 'button']"> + <i class="yellow redo icon"></i> + <translate translate-context="Content/*/Button.Label">Unresolve</translate> + </button> + <template v-for="action in actions"> + <dangerous-button + v-if="action.dangerous && action.show(obj)" + :class="['ui', {loading: isLoading}, 'button']" + color="" + :action="action.handler"> + <i :class="[action.iconColor, action.icon, 'icon']"></i> + {{ action.label }} + <p slot="modal-header">{{ action.modalHeader}}</p> + <div slot="modal-content"> + <p>{{ action.modalContent }}</p> + </div> + <p slot="modal-confirm">{{ action.modalConfirmLabel }}</p> + </dangerous-button> + </template> + </div> + </div> + </div> + </div> + </div> + </div> +</template> + +<script> +import axios from 'axios' +import { diffWordsWithSpace } from 'diff' +import NoteForm from '@/components/manage/moderation/NoteForm' +import NotesThread from '@/components/manage/moderation/NotesThread' +import ReportCategoryDropdown from '@/components/moderation/ReportCategoryDropdown' +import InstancePolicyModal from '@/components/manage/moderation/InstancePolicyModal' +import entities from '@/entities' +import {setUpdate} from '@/utils' +import showdown from 'showdown' + + +function castValue (value) { + if (value === null || value === undefined) { + return '' + } + return String(value) +} + +export default { + props: { + obj: {required: true}, + currentState: {required: false} + }, + components: { + NoteForm, + NotesThread, + ReportCategoryDropdown, + InstancePolicyModal, + }, + data () { + return { + markdown: new showdown.Converter(), + isLoading: false, + isCollapsed: false, + updating: { + type: false, + } + } + }, + computed: { + configs: entities.getConfigs, + previousState () { + if (this.obj.is_applied) { + // mutation was applied, we use the previous state that is stored + // on the mutation itself + return this.obj.previous_state + } + // mutation is not applied yet, so we use the current state that was + // passed to the component, if any + return this.currentState + }, + detailUrl () { + if (!this.target) { + return '' + } + let namespace + let id = this.target.id + if (this.target.type === 'track') { + namespace = 'library.tracks.edit.detail' + } + if (this.target.type === 'album') { + namespace = 'library.albums.edit.detail' + } + if (this.target.type === 'artist') { + namespace = 'library.artists.edit.detail' + } + return this.$router.resolve({name: namespace, params: {id, editId: this.obj.uuid}}).href + }, + + targetFields () { + if (!this.target) { + return [] + } + let payload = this.obj.target_state + let fields = this.configs[this.target.type].moderatedFields + let self = this + return fields.map((fieldConfig) => { + let dummyRepr = (v) => { return v } + let getValueRepr = fieldConfig.getValueRepr || dummyRepr + let d = { + id: fieldConfig.id, + label: fieldConfig.label, + value: payload[fieldConfig.id], + repr: castValue(getValueRepr(payload[fieldConfig.id])), + } + return d + }) + }, + target () { + if (this.obj.target) { + return this.obj.target + } else { + return this.obj.target_state._target + } + }, + actions () { + if (!this.target) { + return [] + } + let self = this + let actions = [] + let typeConfig = this.configs[this.target.type] + if (typeConfig.getDeleteUrl) { + let deleteUrl = typeConfig.getDeleteUrl(this.target) + actions.push({ + label: this.$pgettext('Content/Moderation/Button/Verb', 'Delete reported object'), + modalHeader: this.$pgettext('Content/Moderation/Popup/Header', 'Delete reported object?'), + modalContent: this.$pgettext('Content/Moderation/Popup,Paragraph', 'This will delete the object associated with this report and mark the report as resolved. The deletion is irreversible.'), + modalConfirmLabel: this.$pgettext('*/*/*/Verb', 'Delete'), + icon: 'x', + iconColor: 'red', + show: (obj) => { return !!obj.target }, + dangerous: true, + handler: () => { + axios.delete(deleteUrl).then((response) => { + console.log('Target deleted') + self.obj.target = null + self.resolve(true) + }, error => { + console.log('Error while deleting target') + }) + } + }) + } + return actions + } + }, + methods: { + update (payload) { + let url = `manage/moderation/reports/${this.obj.uuid}/` + let self = this + this.isLoading = true + setUpdate(payload, this.updating, true) + axios.patch(url, payload).then((response) => { + self.$emit('updated', payload) + Object.assign(self.obj, payload) + self.isLoading = false + setUpdate(payload, self.updating, false) + }, error => { + self.isLoading = false + setUpdate(payload, self.updating, false) + }) + }, + resolve (v) { + let url = `manage/moderation/reports/${this.obj.uuid}/` + let self = this + this.isLoading = true + axios.patch(url, {is_handled: v}).then((response) => { + self.$emit('handled', v) + self.isLoading = false + self.obj.is_handled = v + let increment + if (v) { + self.isCollapsed = true + increment = -1 + } else { + increment = 1 + } + self.$store.commit('ui/incrementNotifications', {count: increment, type: 'pendingReviewReports'}) + }, error => { + self.isLoading = false + }) + }, + handleRemovedNote (uuid) { + this.obj.notes = this.obj.notes.filter((note) => { + return note.uuid != uuid + }) + }, + } +} +</script> diff --git a/front/src/components/manage/users/InvitationForm.vue b/front/src/components/manage/users/InvitationForm.vue index 950e11e08e72c6f5dedbabd72a071b1cdc8f4b0f..1d7023652d0ecd2155cb90c26a4a6787343641ef 100644 --- a/front/src/components/manage/users/InvitationForm.vue +++ b/front/src/components/manage/users/InvitationForm.vue @@ -35,7 +35,7 @@ </tr> </tbody> </table> - <button class="ui basic button" @click="invitations = []"><translate translate-context="Content/Admin/Button.Label/Verb">Clear</translate></button> + <button class="ui basic button" @click="invitations = []"><translate translate-context="Content/Library/Button.Label">Clear</translate></button> </div> </div> </template> diff --git a/front/src/components/manage/users/InvitationsTable.vue b/front/src/components/manage/users/InvitationsTable.vue index 6f557c8af2c879a64613f5dff68dbd0fbffd5159..feeca041d5d6e9574d27a2ebbf1621f17762f7ed 100644 --- a/front/src/components/manage/users/InvitationsTable.vue +++ b/front/src/components/manage/users/InvitationsTable.vue @@ -15,7 +15,7 @@ </select> </div> <div class="field"> - <label><translate translate-context="Content/Admin/*/Noun (Value is Used/Not used)">Status</translate></label> + <label><translate translate-context="*/*/*">Status</translate></label> <select class="ui dropdown" v-model="isOpen"> <option :value="null"><translate translate-context="Content/*/Dropdown">All</translate></option> <option :value="true"><translate translate-context="Content/Admin/Dropdown/Adjective">Open</translate></option> @@ -36,8 +36,8 @@ :action-url="'manage/users/invitations/action/'" :filters="actionFilters"> <template slot="header-cells"> - <th><translate translate-context="Content/Admin/Table.Label">Owner</translate></th> - <th><translate translate-context="Content/Admin/*/Noun (Value is Used/Not used)">Status</translate></th> + <th><translate translate-context="*/*/*">Owner</translate></th> + <th><translate translate-context="*/*/*">Status</translate></th> <th><translate translate-context="Content/*/*/Noun">Creation date</translate></th> <th><translate translate-context="Content/Admin/Table.Label/Noun">Expiration date</translate></th> <th><translate translate-context="Content/Admin/Table.Label/Noun">Code</translate></th> diff --git a/front/src/components/manage/users/UsersTable.vue b/front/src/components/manage/users/UsersTable.vue index a508f5be9469050d834d5f15a897dabf63b3d6c2..33ceb27269c70967e6a2cab5db3b07220e155c24 100644 --- a/front/src/components/manage/users/UsersTable.vue +++ b/front/src/components/manage/users/UsersTable.vue @@ -40,8 +40,8 @@ <th><translate translate-context="Content/Admin/Table.Label/Short, Noun">Account status</translate></th> <th><translate translate-context="Content/Admin/Table.Label/Short, Noun (Value is a date)">Sign-up</translate></th> <th><translate translate-context="Content/Profile/Table.Label/Short, Noun (Value is a date)">Last activity</translate></th> - <th><translate translate-context="Content/Admin/Table.Label/Noun">Permissions</translate></th> - <th><translate translate-context="Content/Admin/Table.Label/Noun (Value is Regular user/Admin)">Status</translate></th> + <th><translate translate-context="Content/*/*/Noun">Permissions</translate></th> + <th><translate translate-context="*/*/*">Status</translate></th> </template> <template slot="row-cells" slot-scope="scope"> <td> @@ -171,7 +171,7 @@ export default { return [ { 'code': 'library', - 'label': this.$pgettext('*/*/*', 'Library') + 'label': this.$pgettext('*/*/*/Noun', 'Library') }, { 'code': 'moderation', diff --git a/front/src/components/mixins/Report.vue b/front/src/components/mixins/Report.vue new file mode 100644 index 0000000000000000000000000000000000000000..29eabb996160b30918ee3fe46e25418f18628753 --- /dev/null +++ b/front/src/components/mixins/Report.vue @@ -0,0 +1,86 @@ +<script> +export default { + methods: { + getReportableObjs ({track, album, artist, playlist, account, library}) { + let reportableObjs = [] + if (account) { + let accountLabel = this.$pgettext('*/Moderation/*/Verb', "Report @%{ username }…") + reportableObjs.push({ + label: this.$gettextInterpolate(accountLabel, {username: account.preferred_username}), + target: { + type: 'account', + full_username: account.full_username, + label: account.full_username, + typeLabel: this.$pgettext("*/*/*/Noun", 'Account'), + } + }) + if (track) { + album = track.album + artist = track.artist + } + } + if (track) { + reportableObjs.push({ + label: this.$pgettext('*/Moderation/*/Verb', "Report this track…"), + target: { + type: 'track', + id: track.id, + label: track.title, + typeLabel: this.$pgettext("*/*/*/Noun", 'Track'), + } + }) + album = track.album + artist = track.artist + } + if (album) { + reportableObjs.push({ + label: this.$pgettext('*/Moderation/*/Verb', "Report this album…"), + target: { + type: 'album', + id: album.id, + label: album.title, + typeLabel: this.$pgettext("*/*/*", 'Album'), + } + }) + if (!artist) { + artist = album.artist + } + } + if (artist) { + reportableObjs.push({ + label: this.$pgettext('*/Moderation/*/Verb', "Report this artist…"), + target: { + type: 'artist', + id: artist.id, + label: artist.name, + typeLabel: this.$pgettext("*/*/*/Noun", 'Artist'), + } + }) + } + if (playlist) { + reportableObjs.push({ + label: this.$pgettext('*/Moderation/*/Verb', "Report this playlist…"), + target: { + type: 'playlist', + id: playlist.id, + label: playlist.name, + typeLabel: this.$pgettext("*/*/*", 'Playlist'), + } + }) + } + if (library) { + reportableObjs.push({ + label: this.$pgettext('*/Moderation/*/Verb', "Report this library…"), + target: { + type: 'library', + uuid: library.uuid, + label: library.name, + typeLabel: this.$pgettext("*/*/*/Noun", 'Library'), + } + }) + } + return reportableObjs + }, + } +} +</script> diff --git a/front/src/components/mixins/Translations.vue b/front/src/components/mixins/Translations.vue index 56ea3ed152642d6b5fa99e415d42625262571224..c56d6667aa45e4e270fcebc137add133bcfaad93 100644 --- a/front/src/components/mixins/Translations.vue +++ b/front/src/components/mixins/Translations.vue @@ -31,7 +31,7 @@ export default { }, errored: { label: this.$pgettext('Content/Library/Table/Short', 'Errored'), - help: this.$pgettext('Content/Library/Help text', 'This track could not be processed, please it is tagged correctly'), + help: this.$pgettext('Content/Library/Help text', 'This track could not be processed, please make sure it is tagged correctly'), }, finished: { label: this.$pgettext('Content/Library/*', 'Finished'), @@ -39,6 +39,16 @@ export default { }, } }, + report_type: { + label: this.$pgettext('*/*/*', 'Category'), + choices: { + takedown_request: this.$pgettext("Content/Moderation/Dropdown", "Takedown request"), + invalid_metadata: this.$pgettext("Popup/Import/Error.Label", "Invalid metadata"), + illegal_content: this.$pgettext("Content/Moderation/Dropdown", "Illegal content"), + offensive_content: this.$pgettext("Content/Moderation/Dropdown", "Offensive content"), + other: this.$pgettext("Content/Moderation/Dropdown", "Other"), + }, + }, }, filters: { creation_date: this.$pgettext('Content/*/*/Noun', 'Creation date'), @@ -52,7 +62,9 @@ export default { album_title: this.$pgettext('Content/*/Dropdown/Noun', 'Album name'), artist_name: this.$pgettext('Content/*/Dropdown/Noun', 'Artist name'), name: this.$pgettext('*/*/*/Noun', 'Name'), - size: this.$pgettext('Content/Library/*/in MB', 'Size'), + length: this.$pgettext('*/*/*/Noun', 'Length'), + items_count: this.$pgettext('*/*/*/Noun', 'Items'), + size: this.$pgettext('Content/*/*/Noun', 'Size'), bitrate: this.$pgettext('Content/Track/*/Noun', 'Bitrate'), duration: this.$pgettext('Content/*/*', 'Duration'), date_joined: this.$pgettext('Content/Admin/Table.Label/Noun', 'Sign-up date'), @@ -61,7 +73,7 @@ export default { domain: this.$pgettext('Content/Moderation/*/Noun', 'Domain'), users: this.$pgettext('*/*/*/Noun', 'Users'), received_messages: this.$pgettext('Content/Moderation/*/Noun', 'Received messages'), - uploads: this.$pgettext('Content/Moderation/Table.Label/Noun', 'Uploads'), + uploads: this.$pgettext('*/*/*', 'Uploads'), followers: this.$pgettext('Content/Federation/*/Noun', 'Followers'), }, scopes: { @@ -74,11 +86,11 @@ export default { description: this.$pgettext('Content/OAuth Scopes/Paragraph', 'Access to audio files, libraries, artists, albums and tracks'), }, favorites: { - label: this.$pgettext('Content/OAuth Scopes/Label', 'Favorites'), + label: this.$pgettext('Sidebar/Favorites/List item.Link/Noun', 'Favorites'), description: this.$pgettext('Content/OAuth Scopes/Paragraph', 'Access to favorites'), }, listenings: { - label: this.$pgettext('Content/OAuth Scopes/Label', 'Listenings'), + label: this.$pgettext('*/*/*/Noun', 'Listenings'), description: this.$pgettext('Content/OAuth Scopes/Paragraph', 'Access to listening history'), }, follows: { @@ -86,23 +98,23 @@ export default { description: this.$pgettext('Content/OAuth Scopes/Paragraph', 'Access to follows'), }, playlists: { - label: this.$pgettext('Content/OAuth Scopes/Label', 'Playlists'), + label: this.$pgettext('*/*/*', 'Playlists'), description: this.$pgettext('Content/OAuth Scopes/Paragraph', 'Access to playlists'), }, radios: { - label: this.$pgettext('Content/OAuth Scopes/Label', 'Radios'), + label: this.$pgettext('*/*/*', 'Radios'), description: this.$pgettext('Content/OAuth Scopes/Paragraph', 'Access to radios'), }, filters: { - label: this.$pgettext('Content/OAuth Scopes/Label', 'Content filters'), + label: this.$pgettext('Content/Settings/Title/Noun', 'Content filters'), description: this.$pgettext('Content/OAuth Scopes/Paragraph', 'Access to content filters'), }, notifications: { - label: this.$pgettext('Content/OAuth Scopes/Label', 'Notifications'), + label: this.$pgettext('*/Notifications/*', 'Notifications'), description: this.$pgettext('Content/OAuth Scopes/Paragraph', 'Access to notifications'), }, edits: { - label: this.$pgettext('Content/OAuth Scopes/Label', 'Edits'), + label: this.$pgettext('*/Admin/*/Noun', 'Edits'), description: this.$pgettext('Content/OAuth Scopes/Paragraph', 'Access to edits'), } } diff --git a/front/src/components/moderation/FilterModal.vue b/front/src/components/moderation/FilterModal.vue index 8885e61fc08f6f9a5dde2787c1ec77ad56afa2fe..51e9eb70e9bfb2ea5948967f95f2a03429ba5c8c 100644 --- a/front/src/components/moderation/FilterModal.vue +++ b/front/src/components/moderation/FilterModal.vue @@ -19,7 +19,7 @@ <template v-if="type === 'artist'"> <p> <translate translate-context="Popup/Moderation/Paragraph"> - You will not see tracks, albums and user activity linked to this artist anymore: + You will not see tracks, albums and user activity linked to this artist any more: </translate> </p> <ul> @@ -30,7 +30,7 @@ </ul> <p> <translate translate-context="Popup/Moderation/Paragraph"> - You can manage and update your filters anytime from your account settings. + You can manage and update your filters any time from your account settings. </translate> </p> </template> diff --git a/front/src/components/moderation/ReportCategoryDropdown.vue b/front/src/components/moderation/ReportCategoryDropdown.vue new file mode 100644 index 0000000000000000000000000000000000000000..617f89b182a293aca78e96a270b0bbd0032530e1 --- /dev/null +++ b/front/src/components/moderation/ReportCategoryDropdown.vue @@ -0,0 +1,53 @@ +<template> + <div> + <label v-if="label"><translate translate-context="*/*/*">Category</translate></label> + <select class="ui dropdown" :value="value" @change="$emit('input', $event.target.value)" :required="required"> + <option v-if="empty" disabled value=''></option> + <option :value="option.value" v-for="option in allCategories">{{ option.label }}</option> + </select> + <slot></slot> + </div> +</template> + +<script> +import TranslationsMixin from '@/components/mixins/Translations' +import lodash from '@/lodash' +export default { + mixins: [TranslationsMixin], + props: { + value: {}, + all: {}, + label: {}, + empty: {}, + required: {}, + restrictTo: {default: () => { return [] }} + }, + computed: { + allCategories () { + let c = [] + if (this.all) { + c.push( + { + value: '', + label: this.$pgettext('Content/*/Dropdown', 'All') + }, + ) + } + let choices + if (this.restrictTo.length > 0) { + choices = this.restrictTo + } else { + choices = lodash.keys(this.sharedLabels.fields.report_type.choices) + } + return c.concat( + choices.sort().map((v) => { + return { + value: v, + label: this.sharedLabels.fields.report_type.choices[v] || v + } + }) + ) + } + } +} +</script> diff --git a/front/src/components/moderation/ReportModal.vue b/front/src/components/moderation/ReportModal.vue new file mode 100644 index 0000000000000000000000000000000000000000..da2c1bfcb57c283272bd3726074b87dd3a91b7ca --- /dev/null +++ b/front/src/components/moderation/ReportModal.vue @@ -0,0 +1,174 @@ +<template> + <modal @update:show="update" :show="$store.state.moderation.showReportModal"> + <h2 class="ui header" v-if="target"> + <translate translate-context="Popup/Moderation/Title/Verb">Do you want to report this object?</translate> + <div class="ui sub header"> + {{ target.typeLabel }} - {{ target.label }} + </div> + </h2> + <div class="scrolling content"> + <div class="description"> + <div v-if="errors.length > 0" class="ui negative message"> + <div class="header"><translate translate-context="Popup/Moderation/Error message">Error while submitting report</translate></div> + <ul class="list"> + <li v-for="error in errors">{{ error }}</li> + </ul> + </div> + </div> + <p> + <translate translate-context="*/Moderation/Popup,Paragraph">Use this form to submit a report to our moderation team.</translate> + </p> + <form v-if="canSubmit" id="report-form" class="ui form" @submit.prevent="submit"> + <div class="fields"> + <report-category-dropdown + class="ui required eight wide field" + v-model="category" + :required="true" + :empty="true" + :restrict-to="allowedCategories" + :label="true"></report-category-dropdown> + <div v-if="!$store.state.auth.authenticated" class="ui eight wide required field"> + <label for="report-submitter-email"> + <translate translate-context="Content/*/*/Noun">Email</translate> + </label> + <input type="email" v-model="submitterEmail" name="report-submitter-email" id="report-submitter-email" required> + <p> + <translate translate-context="*/*/Field,Help">We'll use this email if we need to contact you regarding this report.</translate> + </p> + </div> + </div> + <div class="ui field"> + <label for="report-summary"> + <translate translate-context="*/*/Field.Label/Noun">Message</translate> + </label> + <p> + <translate translate-context="*/*/Field,Help">Use this field to provide additional context to the moderator that will handle your report.</translate> + </p> + <textarea name="report-summary" id="report-summary" rows="8" v-model="summary"></textarea> + </div> + </form> + <div v-else-if="isLoadingReportTypes" class="ui inline active loader"> + + </div> + <div v-else class="ui warning message"> + <div class="header"> + <translate translate-context="Popup/Moderation/Error message">Anonymous reports are disabled, please sign-in to submit a report.</translate> + </div> + </div> + </div> + <div class="actions"> + <div class="ui cancel button"><translate translate-context="*/*/Button.Label/Verb">Cancel</translate></div> + <button + v-if="canSubmit" + :class="['ui', 'green', {loading: isLoading}, 'button']" + type="submit" form="report-form"> + <translate translate-context="Popup/*/Button.Label">Submit report</translate> + </button> + </div> + </modal> +</template> + +<script> +import _ from '@/lodash' +import axios from 'axios' +import {mapState} from 'vuex' + +import logger from '@/logging' +import Modal from '@/components/semantic/Modal' +import ReportCategoryDropdown from '@/components/moderation/ReportCategoryDropdown' + +export default { + components: { + Modal, + ReportCategoryDropdown, + }, + data () { + return { + formKey: String(new Date()), + errors: [], + isLoading: false, + isLoadingReportTypes: false, + summary: '', + submitterEmail: '', + category: null, + reportTypes: [], + } + }, + computed: { + ...mapState({ + target: state => state.moderation.reportModalTarget, + }), + allowedCategories () { + if (this.$store.state.auth.authenticated) { + return [] + } + return this.reportTypes.filter((t) => { + return t.anonymous === true + }).map((c) => { + return c.type + }) + + }, + canSubmit () { + if (this.$store.state.auth.authenticated) { + return true + } + + return this.allowedCategories.length > 0 + } + }, + methods: { + update (v) { + this.$store.commit('moderation/showReportModal', v) + this.errors = [] + }, + submit () { + let self = this + self.isLoading = true + let payload = { + target: this.target, + summary: this.summary, + type: this.category, + } + if (!this.$store.state.auth.authenticated) { + payload.submitter_email = this.submitterEmail + } + return axios.post('moderation/reports/', payload).then(response => { + self.update(false) + self.isLoading = false + let msg = this.$pgettext('*/Moderation/Message', 'Report successfully submitted, thank you') + self.$store.commit('moderation/contentFilter', response.data) + self.$store.commit('ui/addMessage', { + content: msg, + date: new Date() + }) + self.summary = '' + self.category = '' + }, error => { + self.errors = error.backendErrors + self.isLoading = false + }) + } + }, + watch: { + '$store.state.moderation.showReportModal': function (v) { + if (!v || this.$store.state.auth.authenticated) { + return + } + + let self = this + self.isLoadingReportTypes = true + axios.get('instance/nodeinfo/2.0/').then(response => { + self.isLoadingReportTypes = false + self.reportTypes = response.data.metadata.reportTypes || [] + }, error => { + self.isLoadingReportTypes = false + }) + } + } +} +</script> + +<!-- Add "scoped" attribute to limit CSS to this component only --> +<style scoped> +</style> diff --git a/front/src/components/notifications/NotificationRow.vue b/front/src/components/notifications/NotificationRow.vue index b8e145647d03340fb62b8edc981f25179f341a9a..95f8e36440f486d1e7916b813a2301639e3efbd8 100644 --- a/front/src/components/notifications/NotificationRow.vue +++ b/front/src/components/notifications/NotificationRow.vue @@ -126,7 +126,4 @@ export default { .read > span { cursor: pointer; } -.disabled-row { - color: rgba(40, 40, 40, 0.3); -} </style> diff --git a/front/src/components/playlists/Card.vue b/front/src/components/playlists/Card.vue index 60a322ab4c86486842d79f176b6b536b6714041e..a8e5c149a5efb37aa8ba5c2ba76279ce444ad512 100644 --- a/front/src/components/playlists/Card.vue +++ b/front/src/components/playlists/Card.vue @@ -5,8 +5,18 @@ <div class="content"> <div class="header"> <div class="right floated"> - <play-button :is-playable="playlist.is_playable" :icon-only="true" class="ui inline" :button-classes="['ui', 'circular', 'large', {orange: playlist.tracks_count > 0}, 'icon', 'button', {disabled: playlist.tracks_count === 0}]" :playlist="playlist"></play-button> - <play-button :is-playable="playlist.is_playable" class="basic inline icon" :dropdown-only="true" :dropdown-icon-classes="['ellipsis', 'vertical', 'large', {disabled: playlist.tracks_count === 0}, 'grey']" :playlist="playlist"></play-button> + <play-button + :is-playable="playlist.is_playable" + :icon-only="true" class="ui inline" + :button-classes="['ui', 'circular', 'large', {orange: playlist.tracks_count > 0}, 'icon', 'button', {disabled: playlist.tracks_count === 0}]" + :playlist="playlist"></play-button> + <play-button + :is-playable="playlist.is_playable" + class="basic inline icon" + :dropdown-only="true" + :dropdown-icon-classes="['ellipsis', 'vertical', 'large', {disabled: playlist.tracks_count === 0}, 'grey']" + :account="playlist.actor" + :playlist="playlist"></play-button> </div> <router-link :title="playlist.name" class="discrete link" :to="{name: 'library.playlists.detail', params: {id: playlist.id }}"> {{ playlist.name | truncate(30) }} @@ -59,12 +69,10 @@ export default { <!-- Add "scoped" attribute to limit CSS to this component only --> <style> - .playlist.card .header .ellipsis.vertical.large.grey { font-size: 1.2em; margin-right: 0; } - </style> <style scoped> .card .header { @@ -72,8 +80,7 @@ export default { } .attached.button { - background-color: rgb(243, 244, 245); - background-size: 25% ; + background-size: 25%; background-repeat: no-repeat; background-origin: border-box; background-position: 0 0, 33.33% 0, 66.67% 0, 100% 0; @@ -82,5 +89,4 @@ export default { font-size: 4em; box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.15) inset !important; } - </style> diff --git a/front/src/components/playlists/Editor.vue b/front/src/components/playlists/Editor.vue index 3ce554301901df62fb142b348edb51ea2d17e0f5..2ebd9614babde74840fc2b49e9594941de424a79 100644 --- a/front/src/components/playlists/Editor.vue +++ b/front/src/components/playlists/Editor.vue @@ -11,7 +11,7 @@ </template> <template v-else-if="status === 'errored'"> <i class="red close icon"></i> - <translate translate-context="Content/Playlist/Error message.Title">An error occured while saving your changes</translate> + <translate translate-context="Content/Playlist/Error message.Title">An error occurred while saving your changes</translate> <div v-if="errors.length > 0" class="ui negative message"> <ul class="list"> <li v-for="error in errors">{{ error }}</li> @@ -60,7 +60,7 @@ <p><translate translate-context="Content/Playlist/Paragraph/Call to action">Drag and drop rows to reorder tracks in the playlist</translate></p> <div class="table-wrapper"> <table class="ui compact very basic unstackable table"> - <draggable v-model="plts" element="tbody" @update="reorder"> + <draggable v-model="plts" tag="tbody" @update="reorder"> <tr v-for="(plt, index) in plts" :key="plt.id"> <td class="left aligned">{{ plt.index + 1}}</td> <td class="center aligned"> diff --git a/front/src/components/playlists/PlaceholderWidget.vue b/front/src/components/playlists/PlaceholderWidget.vue new file mode 100644 index 0000000000000000000000000000000000000000..d72ab95fbc5922b42790f96d0bed7f5b7a073648 --- /dev/null +++ b/front/src/components/playlists/PlaceholderWidget.vue @@ -0,0 +1,18 @@ +<template> + <div class="ui placeholder segment"> + <div class="ui icon header"> + <i class="pdf file outline icon"></i> + <translate translate-context="Content/Home/Placeholder"> + No playlists have been created yet + </translate> + </div> + <button + @click="$store.commit('playlists/chooseTrack', null)" + class="ui primary button" + > + <translate translate-context="Content/Home/CreatePlaylist"> + Create Playlist + </translate> + </button> + </div> +</template> diff --git a/front/src/components/playlists/PlaylistModal.vue b/front/src/components/playlists/PlaylistModal.vue index 97c5f0a1eb80c7a913db32f175597549cbc7e464..9fb77d8757cadf73b011f0b7e62a8576a9ee6cef 100644 --- a/front/src/components/playlists/PlaylistModal.vue +++ b/front/src/components/playlists/PlaylistModal.vue @@ -45,7 +45,7 @@ <th></th> <th><translate translate-context="*/*/*/Noun">Name</translate></th> <th class="sorted descending"><translate translate-context="Popup/Playlist/Table.Label/Short">Last modification</translate></th> - <th><translate translate-context="*/*/*/Noun">Tracks</translate></th> + <th><translate translate-context="*/*/*">Tracks</translate></th> <th></th> </tr> </thead> diff --git a/front/src/components/playlists/Widget.vue b/front/src/components/playlists/Widget.vue index b018f9731e97b307df3ded23a5d1660c6eba9ea9..9cd1c1d16ad7a859e8c8018def7e590f495499f3 100644 --- a/front/src/components/playlists/Widget.vue +++ b/front/src/components/playlists/Widget.vue @@ -9,7 +9,12 @@ <div v-if="isLoading" class="ui inverted active dimmer"> <div class="ui loader"></div> </div> - <playlist-card v-for="playlist in objects" :key="playlist.id" :playlist="playlist"></playlist-card> + <template v-if="playlistsExist"> + <playlist-card v-for="playlist in objects" :key="playlist.id" :playlist="playlist"></playlist-card> + </template> + <template v-else> + <placeholder-widget></placeholder-widget> + </template> </div> </template> @@ -17,6 +22,7 @@ import _ from '@/lodash' import axios from 'axios' import PlaylistCard from '@/components/playlists/Card' +import PlaceholderWidget from '@/components/playlists/PlaceholderWidget' export default { props: { @@ -24,7 +30,8 @@ export default { url: {type: String, required: true} }, components: { - PlaylistCard + PlaylistCard, + PlaceholderWidget }, data () { return { @@ -39,6 +46,11 @@ export default { created () { this.fetchData(this.url) }, + computed: { + playlistsExist: function () { + return this.objects.length > 0 + } + }, methods: { fetchData (url) { if (!url) { diff --git a/front/src/components/radios/Button.vue b/front/src/components/radios/Button.vue index e66f97ad5fafe1622e6a586c8e2d88155e87a766..f335a6596273838e844f1357f7c9c5503ace7ff7 100644 --- a/front/src/components/radios/Button.vue +++ b/front/src/components/radios/Button.vue @@ -12,7 +12,7 @@ export default { props: { customRadioId: {required: false}, type: {type: String, required: false}, - objectId: {type: Number, default: null} + objectId: {default: null} }, methods: { toggleRadio () { diff --git a/front/src/components/semantic/Modal.vue b/front/src/components/semantic/Modal.vue index 076b3e466dac8b487924d06f0ae24d4d04a0b854..c3af1524b050c06253c9c1e763a65ad4df16d9c6 100644 --- a/front/src/components/semantic/Modal.vue +++ b/front/src/components/semantic/Modal.vue @@ -46,9 +46,11 @@ export default { handler (newValue) { if (newValue) { this.initModal() + this.$emit('show') this.control.modal('show') } else { if (this.control) { + this.$emit('hide') this.control.modal('hide') this.control.remove() } diff --git a/front/src/components/tags/List.vue b/front/src/components/tags/List.vue new file mode 100644 index 0000000000000000000000000000000000000000..e5bba5b5816ce96e6e66cc0ae226d0fcd5450dac --- /dev/null +++ b/front/src/components/tags/List.vue @@ -0,0 +1,49 @@ +<template> + <div class="tag-list"> + <router-link + :to="{name: detailRoute, params: {id: tag}}" + :class="['ui', 'circular', 'hashtag', 'label', labelClasses]" + v-for="tag in toDisplay" + :title="tag" + :key="tag"> + #{{ tag|truncate(truncateSize) }} + </router-link> + <div role="button" @click.prevent="honorLimit = false" class="ui circular inverted teal label" v-if="showMore && toDisplay.length < tags.length"> + <translate translate-context="Content/*/Button/Label/Verb" :translate-params="{count: tags.length - toDisplay.length}" :translate-n="tags.length - toDisplay.length" translate-plural="Show %{ count } more tags">Show 1 more tag</translate> + </div> + </div> +</template> +<script> +export default { + props: { + tags: {type: Array, required: true}, + showMore: {type: Boolean, default: true}, + truncateSize: {type: Number, default: 25}, + limit: {type: Number, default: 5}, + labelClasses: {type: String, default: ''}, + detailRoute: {type: String, default: 'library.tags.detail'}, + }, + data () { + return { + honorLimit: true, + } + }, + computed: { + toDisplay () { + if (!this.honorLimit) { + return this.tags + } + return (this.tags || []).slice(0, this.limit) + } + } +} +</script> +<style lang="scss" scoped> +.ui.circular.label { + padding-left: 1em !important; + padding-right: 1em !important; +} +.hashtag { + margin: 0.25em; +} +</style> diff --git a/front/src/edits.js b/front/src/edits.js index a53ab2fcc286d31815b81b99cb4a161a53416c4a..5c9e9be880e90cdae1041e7ef96f1c1d3bca5324 100644 --- a/front/src/edits.js +++ b/front/src/edits.js @@ -1,3 +1,10 @@ +function getTagsValueRepr (val) { + if (!val) { + return '' + } + return val.slice().sort().join('\n') +} + export default { getConfigs () { return { @@ -10,6 +17,14 @@ export default { label: this.$pgettext('*/*/*/Noun', 'Name'), getValue: (obj) => { return obj.name } }, + { + id: 'tags', + type: 'tags', + required: true, + label: this.$pgettext('*/*/*/Noun', 'Tags'), + getValue: (obj) => { return obj.tags }, + getValueRepr: getTagsValueRepr + } ] }, album: { @@ -28,6 +43,14 @@ export default { label: this.$pgettext('Content/*/*/Noun', 'Release date'), getValue: (obj) => { return obj.release_date } }, + { + id: 'tags', + type: 'tags', + required: true, + label: this.$pgettext('*/*/*/Noun', 'Tags'), + getValue: (obj) => { return obj.tags }, + getValueRepr: getTagsValueRepr + } ] }, track: { @@ -61,6 +84,14 @@ export default { label: this.$pgettext('Content/*/*/Noun', 'License'), getValue: (obj) => { return obj.license }, }, + { + id: 'tags', + type: 'tags', + required: true, + label: this.$pgettext('*/*/*/Noun', 'Tags'), + getValue: (obj) => { return obj.tags }, + getValueRepr: getTagsValueRepr + } ] } } @@ -69,7 +100,12 @@ export default { getConfig () { return this.configs[this.objectType] }, - + getFieldConfig (configs, type, fieldId) { + let c = configs[type] + return c.fields.filter((f) => { + return f.id == fieldId + })[0] + }, getCurrentState () { let self = this let s = {} @@ -111,7 +147,14 @@ export default { if (!this.$store.state.auth.authenticated) { return false } - return this.$store.state.auth.availablePermissions['library'] + + let libraryPermission = this.$store.state.auth.availablePermissions['library'] + let objData = this.object || {} + let isOwner = false + if (objData.attributed_to) { + isOwner = this.$store.state.auth.fullUsername === objData.attributed_to.full_username + } + return libraryPermission || isOwner }, } diff --git a/front/src/embed.js b/front/src/embed.js index 5a924a9b11322fbca820d97a8288ceb5710c9594..a079ee08507fd0db148a2221b704000a6f08abb6 100644 --- a/front/src/embed.js +++ b/front/src/embed.js @@ -10,6 +10,8 @@ Vue.config.productionTip = false /* eslint-disable no-new */ new Vue({ el: '#app', - template: '<EmbedFrame/>', + render (h) { + return h('EmbedFrame') + }, components: { EmbedFrame } }) diff --git a/front/src/entities.js b/front/src/entities.js new file mode 100644 index 0000000000000000000000000000000000000000..83ed3dba2082e3aed998f20008323c55897a4512 --- /dev/null +++ b/front/src/entities.js @@ -0,0 +1,217 @@ +function getTagsValueRepr (val) { + if (!val) { + return '' + } + return val.slice().sort().join('\n') +} + +export default { + getConfigs () { + return { + artist: { + label: this.$pgettext('*/*/*/Noun', 'Artist'), + icon: 'users', + getDeleteUrl: (obj) => { + return `manage/library/artists/${obj.id}/` + }, + urls: { + getDetail: (obj) => { return {name: 'library.artists.detail', params: {id: obj.id}}}, + getAdminDetail: (obj) => { return {name: 'manage.library.artists.detail', params: {id: obj.id}}}, + }, + moderatedFields: [ + { + id: 'name', + label: this.$pgettext('*/*/*/Noun', 'Name'), + getValue: (obj) => { return obj.name } + }, + { + id: 'creation_date', + label: this.$pgettext('Content/*/*/Noun', 'Creation date'), + getValue: (obj) => { return obj.creation_date } + }, + { + id: 'tags', + type: 'tags', + label: this.$pgettext('*/*/*/Noun', 'Tags'), + getValue: (obj) => { return obj.tags }, + getValueRepr: getTagsValueRepr + }, + { + id: 'mbid', + label: this.$pgettext('*/*/*/Noun', 'MusicBrainz ID'), + getValue: (obj) => { return obj.mbid } + }, + ] + }, + album: { + label: this.$pgettext('*/*/*', 'Album'), + icon: 'play', + getDeleteUrl: (obj) => { + return `manage/library/albums/${obj.id}/` + }, + urls: { + getDetail: (obj) => { return {name: 'library.albums.detail', params: {id: obj.id}}}, + getAdminDetail: (obj) => { return {name: 'manage.library.albums.detail', params: {id: obj.id}}} + }, + moderatedFields: [ + { + id: 'title', + label: this.$pgettext('*/*/*/Noun', 'Title'), + getValue: (obj) => { return obj.title } + }, + { + id: 'creation_date', + label: this.$pgettext('Content/*/*/Noun', 'Creation date'), + getValue: (obj) => { return obj.creation_date } + }, + { + id: 'release_date', + label: this.$pgettext('Content/*/*/Noun', 'Release date'), + getValue: (obj) => { return obj.release_date } + }, + { + id: 'tags', + type: 'tags', + required: true, + label: this.$pgettext('*/*/*/Noun', 'Tags'), + getValue: (obj) => { return obj.tags }, + getValueRepr: getTagsValueRepr + }, + { + id: 'mbid', + label: this.$pgettext('*/*/*/Noun', 'MusicBrainz ID'), + getValue: (obj) => { return obj.mbid } + }, + ] + }, + track: { + label: this.$pgettext('*/*/*/Noun', 'Track'), + icon: 'music', + getDeleteUrl: (obj) => { + return `manage/library/tracks/${obj.id}/` + }, + urls: { + getDetail: (obj) => { return {name: 'library.tracks.detail', params: {id: obj.id}}}, + getAdminDetail: (obj) => { return {name: 'manage.library.tracks.detail', params: {id: obj.id}}} + }, + moderatedFields: [ + { + id: 'title', + label: this.$pgettext('*/*/*/Noun', 'Title'), + getValue: (obj) => { return obj.title } + }, + { + id: 'position', + label: this.$pgettext('*/*/*/Short, Noun', 'Position'), + getValue: (obj) => { return obj.position } + }, + { + id: 'copyright', + label: this.$pgettext('Content/Track/*/Noun', 'Copyright'), + getValue: (obj) => { return obj.copyright } + }, + { + id: 'license', + label: this.$pgettext('Content/*/*/Noun', 'License'), + getValue: (obj) => { return obj.license }, + }, + { + id: 'tags', + label: this.$pgettext('*/*/*/Noun', 'Tags'), + getValue: (obj) => { return obj.tags }, + getValueRepr: getTagsValueRepr + }, + { + id: 'mbid', + label: this.$pgettext('*/*/*/Noun', 'MusicBrainz ID'), + getValue: (obj) => { return obj.mbid } + }, + ] + }, + library: { + label: this.$pgettext('*/*/*/Noun', 'Library'), + icon: 'book', + getDeleteUrl: (obj) => { + return `manage/library/libraries/${obj.uuid}/` + }, + urls: { + getAdminDetail: (obj) => { return {name: 'manage.library.libraries.detail', params: {id: obj.uuid}}} + }, + moderatedFields: [ + { + id: 'name', + label: this.$pgettext('*/*/*/Noun', 'Name'), + getValue: (obj) => { return obj.name } + }, + { + id: 'description', + label: this.$pgettext('*/*/*/Noun', 'Description'), + getValue: (obj) => { return obj.position } + }, + { + id: 'privacy_level', + label: this.$pgettext('*/*/*', 'Visibility'), + getValue: (obj) => { return obj.privacy_level } + }, + ] + }, + playlist: { + label: this.$pgettext('*/*/*', 'Playlist'), + icon: 'list', + urls: { + getDetail: (obj) => { return {name: 'library.playlists.detail', params: {id: obj.id}}}, + // getAdminDetail: (obj) => { return {name: 'manage.playlists.detail', params: {id: obj.id}}} + }, + moderatedFields: [ + { + id: 'name', + label: this.$pgettext('*/*/*/Noun', 'Name'), + getValue: (obj) => { return obj.name } + }, + { + id: 'privacy_level', + label: this.$pgettext('*/*/*', 'Visibility'), + getValue: (obj) => { return obj.privacy_level } + }, + ] + }, + account: { + label: this.$pgettext('*/*/*/Noun', 'Account'), + icon: 'user', + urls: { + getAdminDetail: (obj) => { return {name: 'manage.moderation.accounts.detail', params: {id: `${obj.preferred_username}@${obj.domain}`}}} + }, + moderatedFields: [ + { + id: 'name', + label: this.$pgettext('*/*/*/Noun', 'Name'), + getValue: (obj) => { return obj.name } + }, + { + id: 'summary', + label: this.$pgettext('*/*/*/Noun', 'Bio'), + getValue: (obj) => { return obj.summary } + }, + ] + }, + } + }, + + getConfig () { + return this.configs[this.objectType] + }, + getFieldConfig (configs, type, fieldId) { + let c = configs[type] + return c.fields.filter((f) => { + return f.id == fieldId + })[0] + }, + getCurrentStateForObj (obj, config) { + let s = {} + config.fields.forEach(f => { + s[f.id] = {value: f.getValue(obj)} + }) + return s + }, + +} diff --git a/front/src/locales.js b/front/src/locales.js index 287581217a9614883cc26c1f17710f62538b04e8..f0bcd704be2c2a89b28c3c095d3bf0483e621a2f 100644 --- a/front/src/locales.js +++ b/front/src/locales.js @@ -5,12 +5,25 @@ export default { "code": "ar", "label": "العربية" }, + { + "code": "zh_Hant", + "label": "漢語" + }, { "code": "en_US", "label": "English (United-States)" - },{ - "code": "eo", - "label": "Esperanto" + }, + { + "code": "en_GB", + "label": "English (UK)" + }, + { + "code": "ca", + "label": "Català " + }, + { + "code": "cs", + "label": "Čeština" }, { "code": "de", diff --git a/front/src/lodash.js b/front/src/lodash.js index 8cd3ed92f41e86b0eff9b88bd5af923742b1864e..213711bd345db246051081b57bb9125ba2269ed7 100644 --- a/front/src/lodash.js +++ b/front/src/lodash.js @@ -2,6 +2,7 @@ export default { clone: require('lodash/clone'), + keys: require('lodash/keys'), debounce: require('lodash/debounce'), get: require('lodash/get'), merge: require('lodash/merge'), @@ -12,4 +13,5 @@ export default { uniq: require('lodash/uniq'), remove: require('lodash/remove'), reverse: require('lodash/reverse'), + isEqual: require('lodash/isEqual'), } diff --git a/front/src/main.js b/front/src/main.js index dd755dee356f427a58d3ceb89b6e0c5e5419d35f..f58cdbdbc14c1553e45c59a9342bbec9623ac426 100644 --- a/front/src/main.js +++ b/front/src/main.js @@ -7,6 +7,7 @@ logger.default.debug('Environment variables:', process.env) import jQuery from "jquery" import Vue from 'vue' +import moment from 'moment' import App from './App' import router from './router' import axios from 'axios' @@ -25,6 +26,7 @@ sync(store, router) window.$ = window.jQuery = require('jquery') require('./semantic.js') require('masonry-layout') +let APP = null let availableLanguages = (function () { let l = {} @@ -91,6 +93,32 @@ axios.interceptors.response.use(function (response) { error.backendErrors.push('Resource not found') } else if (error.response.status === 403) { error.backendErrors.push('Permission denied') + } else if (error.response.status === 429) { + let message + let rateLimitStatus = { + limit: error.response.headers['x-ratelimit-limit'], + scope: error.response.headers['x-ratelimit-scope'], + remaining: error.response.headers['x-ratelimit-remaining'], + duration: error.response.headers['x-ratelimit-duration'], + availableSeconds: error.response.headers['retry-after'], + reset: error.response.headers['x-ratelimit-reset'], + resetSeconds: error.response.headers['x-ratelimit-resetseconds'], + } + if (rateLimitStatus.availableSeconds) { + rateLimitStatus.availableSeconds = parseInt(rateLimitStatus.availableSeconds) + let tryAgain = moment().add(rateLimitStatus.availableSeconds, 's').toNow(true) + message = APP.$pgettext('*/Error/Paragraph', 'You sent too many requests and have been rate limited, please try again in %{ delay }') + message = APP.$gettextInterpolate(message, {delay: tryAgain}) + } else { + message = APP.$pgettext('*/Error/Paragraph', 'You sent too many requests and have been rate limited, please try again later') + } + error.backendErrors.push(message) + store.commit("ui/addMessage", { + content: message, + date: new Date(), + level: 'error', + }) + logger.default.error('This client is rate-limited!', rateLimitStatus) } else if (error.response.status === 500) { error.backendErrors.push('A server error occured') } else if (error.response.data) { @@ -122,8 +150,13 @@ store.dispatch('instance/fetchFrontSettings').finally(() => { el: '#app', router, store, - template: '<App/>', - components: { App } + render (h) { + return h('App') + }, + components: { App }, + created () { + APP = this + }, }) logger.default.info('Everything loaded!') diff --git a/front/src/router/index.js b/front/src/router/index.js index 6a9ba6112f7680766b22945bfd41097db3f143aa..1a99b6072019383ef2107fd096213b12e95d5826 100644 --- a/front/src/router/index.js +++ b/front/src/router/index.js @@ -1,428 +1,545 @@ -import Vue from 'vue' -import Router from 'vue-router' +import Vue from "vue" +import Router from "vue-router" Vue.use(Router) console.log('PROCESS', process.env) export default new Router({ - mode: 'history', - linkActiveClass: 'active', - base: process.env.VUE_APP_ROUTER_BASE_URL || '/', + mode: "history", + linkActiveClass: "active", + base: process.env.VUE_APP_ROUTER_BASE_URL || "/", + scrollBehavior(to, from, savedPosition) { + return new Promise(resolve => { + setTimeout(() => { + if (to.hash) { + resolve({ selector: to.hash }); + } + let pos = savedPosition || { x: 0, y: 0 }; + resolve(pos); + }, 100); + }); + }, routes: [ { - path: '/', - name: 'index', + path: "/", + name: "index", component: () => - import(/* webpackChunkName: "core" */ "@/components/Home"), + import(/* webpackChunkName: "core" */ "@/components/Home") }, { - path: '/front', - name: 'front', - redirect: '/' + path: "/front", + name: "front", + redirect: to => { + const { hash, params, query } = to + return { name: 'index', hash, query } + } }, { - path: '/about', - name: 'about', + path: "/about", + name: "about", component: () => - import(/* webpackChunkName: "core" */ "@/components/About"), + import(/* webpackChunkName: "core" */ "@/components/About") }, { - path: '/login', - name: 'login', + path: "/login", + name: "login", component: () => - import(/* webpackChunkName: "core" */ "@/components/auth/Login"), - props: (route) => ({ next: route.query.next || '/library' }) + import(/* webpackChunkName: "core" */ "@/views/auth/Login"), + props: route => ({ next: route.query.next || "/library" }) }, { - path: '/notifications', - name: 'notifications', + path: "/notifications", + name: "notifications", component: () => - import(/* webpackChunkName: "core" */ "@/views/Notifications"), + import(/* webpackChunkName: "core" */ "@/views/Notifications") }, { - path: '/auth/password/reset', - name: 'auth.password-reset', + path: "/auth/password/reset", + name: "auth.password-reset", component: () => import(/* webpackChunkName: "core" */ "@/views/auth/PasswordReset"), - props: (route) => ({ + props: route => ({ defaultEmail: route.query.email }) }, { - path: '/auth/email/confirm', - name: 'auth.email-confirm', + path: "/auth/email/confirm", + name: "auth.email-confirm", component: () => import(/* webpackChunkName: "core" */ "@/views/auth/EmailConfirm"), - props: (route) => ({ + props: route => ({ defaultKey: route.query.key }) }, { - path: '/auth/password/reset/confirm', - name: 'auth.password-reset-confirm', + path: "/auth/password/reset/confirm", + name: "auth.password-reset-confirm", component: () => - import(/* webpackChunkName: "core" */ "@/views/auth/PasswordResetConfirm"), - props: (route) => ({ + import( + /* webpackChunkName: "core" */ "@/views/auth/PasswordResetConfirm" + ), + props: route => ({ defaultUid: route.query.uid, defaultToken: route.query.token }) }, { - path: '/authorize', - name: 'authorize', + path: "/authorize", + name: "authorize", component: () => import(/* webpackChunkName: "core" */ "@/components/auth/Authorize"), - props: (route) => ({ + props: route => ({ clientId: route.query.client_id, redirectUri: route.query.redirect_uri, scope: route.query.scope, responseType: route.query.response_type, nonce: route.query.nonce, - state: route.query.state, + state: route.query.state }) }, { - path: '/signup', - name: 'signup', + path: "/signup", + name: "signup", component: () => - import(/* webpackChunkName: "core" */ "@/components/auth/Signup"), - props: (route) => ({ + import(/* webpackChunkName: "core" */ "@/views/auth/Signup"), + props: route => ({ defaultInvitation: route.query.invitation }) }, { - path: '/logout', - name: 'logout', + path: "/logout", + name: "logout", component: () => - import(/* webpackChunkName: "core" */ "@/components/auth/Logout"), - + import(/* webpackChunkName: "core" */ "@/components/auth/Logout") }, { - path: '/settings', - name: 'settings', + path: "/settings", + name: "settings", component: () => - import(/* webpackChunkName: "core" */ "@/components/auth/Settings"), + import(/* webpackChunkName: "core" */ "@/components/auth/Settings") }, { - path: '/settings/applications/new', - name: 'settings.applications.new', - props: (route) => ({ + path: "/settings/applications/new", + name: "settings.applications.new", + props: route => ({ scopes: route.query.scopes, name: route.query.name, - redirect_uris: route.query.redirect_uris, + redirect_uris: route.query.redirect_uris }), component: () => - import(/* webpackChunkName: "core" */ "@/components/auth/ApplicationNew"), + import( + /* webpackChunkName: "core" */ "@/components/auth/ApplicationNew" + ) }, { - path: '/settings/applications/:id/edit', - name: 'settings.applications.edit', + path: "/settings/applications/:id/edit", + name: "settings.applications.edit", component: () => - import(/* webpackChunkName: "core" */ "@/components/auth/ApplicationEdit"), + import( + /* webpackChunkName: "core" */ "@/components/auth/ApplicationEdit" + ), props: true }, { - path: '/@:username', - name: 'profile', + path: "/@:username", + name: "profile", component: () => import(/* webpackChunkName: "core" */ "@/components/auth/Profile"), props: true }, { - path: '/favorites', + path: "/favorites", component: () => import(/* webpackChunkName: "core" */ "@/components/favorites/List"), - props: (route) => ({ + props: route => ({ defaultOrdering: route.query.ordering, defaultPage: route.query.page, defaultPaginateBy: route.query.paginateBy }) }, { - path: '/content', + path: "/content", component: () => import(/* webpackChunkName: "core" */ "@/views/content/Base"), children: [ { - path: '', - name: 'content.index', + path: "", + name: "content.index", component: () => - import(/* webpackChunkName: "core" */ "@/views/content/Home"), + import(/* webpackChunkName: "core" */ "@/views/content/Home") } ] }, { - path: '/content/libraries/tracks', + path: "/content/libraries/tracks", component: () => import(/* webpackChunkName: "core" */ "@/views/content/Base"), children: [ { - path: '', - name: 'content.libraries.files', + path: "", + name: "content.libraries.files", component: () => - import(/* webpackChunkName: "core" */ "@/views/content/libraries/Files"), - props: (route) => ({ + import( + /* webpackChunkName: "core" */ "@/views/content/libraries/Files" + ), + props: route => ({ query: route.query.q }) } ] }, { - path: '/content/libraries', + path: "/content/libraries", component: () => import(/* webpackChunkName: "core" */ "@/views/content/Base"), children: [ { - path: '', - name: 'content.libraries.index', + path: "", + name: "content.libraries.index", component: () => - import(/* webpackChunkName: "core" */ "@/views/content/libraries/Home"), + import( + /* webpackChunkName: "core" */ "@/views/content/libraries/Home" + ) }, { - path: ':id/upload', - name: 'content.libraries.detail.upload', + path: ":id/upload", + name: "content.libraries.detail.upload", component: () => - import(/* webpackChunkName: "core" */ "@/views/content/libraries/Upload"), - props: (route) => ({ + import( + /* webpackChunkName: "core" */ "@/views/content/libraries/Upload" + ), + props: route => ({ id: route.params.id, defaultImportReference: route.query.import }) }, { - path: ':id', - name: 'content.libraries.detail', + path: ":id", + name: "content.libraries.detail", component: () => - import(/* webpackChunkName: "core" */ "@/views/content/libraries/Detail"), + import( + /* webpackChunkName: "core" */ "@/views/content/libraries/Detail" + ), props: true } ] }, { - path: '/content/remote', + path: "/content/remote", component: () => import(/* webpackChunkName: "core" */ "@/views/content/Base"), children: [ { - path: '', - name: 'content.remote.index', + path: "", + name: "content.remote.index", component: () => - import(/* webpackChunkName: "core" */ "@/views/content/remote/Home"), + import(/* webpackChunkName: "core" */ "@/views/content/remote/Home") } ] }, { - path: '/manage/settings', - name: 'manage.settings', + path: "/manage/settings", + name: "manage.settings", component: () => - import(/* webpackChunkName: "admin" */ "@/views/admin/Settings"), + import(/* webpackChunkName: "admin" */ "@/views/admin/Settings") }, { - path: '/manage/library', + path: "/manage/library", component: () => import(/* webpackChunkName: "admin" */ "@/views/admin/library/Base"), children: [ { - path: 'edits', - name: 'manage.library.edits', + path: "edits", + name: "manage.library.edits", component: () => - import(/* webpackChunkName: "admin" */ "@/views/admin/library/EditsList"), - props: (route) => { + import( + /* webpackChunkName: "admin" */ "@/views/admin/library/EditsList" + ), + props: route => { return { - defaultQuery: route.query.q, + defaultQuery: route.query.q } } }, { - path: 'artists', - name: 'manage.library.artists', + path: "artists", + name: "manage.library.artists", component: () => - import(/* webpackChunkName: "admin" */ "@/views/admin/library/ArtistsList"), - props: (route) => { + import( + /* webpackChunkName: "admin" */ "@/views/admin/library/ArtistsList" + ), + props: route => { return { - defaultQuery: route.query.q, + defaultQuery: route.query.q } } }, { - path: 'artists/:id', - name: 'manage.library.artists.detail', + path: "artists/:id", + name: "manage.library.artists.detail", component: () => - import(/* webpackChunkName: "admin" */ "@/views/admin/library/ArtistDetail"), + import( + /* webpackChunkName: "admin" */ "@/views/admin/library/ArtistDetail" + ), props: true }, { - path: 'albums', - name: 'manage.library.albums', + path: "albums", + name: "manage.library.albums", component: () => - import(/* webpackChunkName: "admin" */ "@/views/admin/library/AlbumsList"), - props: (route) => { + import( + /* webpackChunkName: "admin" */ "@/views/admin/library/AlbumsList" + ), + props: route => { return { - defaultQuery: route.query.q, + defaultQuery: route.query.q } } }, { - path: 'albums/:id', - name: 'manage.library.albums.detail', + path: "albums/:id", + name: "manage.library.albums.detail", component: () => - import(/* webpackChunkName: "admin" */ "@/views/admin/library/AlbumDetail"), + import( + /* webpackChunkName: "admin" */ "@/views/admin/library/AlbumDetail" + ), props: true }, { - path: 'tracks', - name: 'manage.library.tracks', + path: "tracks", + name: "manage.library.tracks", component: () => - import(/* webpackChunkName: "admin" */ "@/views/admin/library/TracksList"), - props: (route) => { + import( + /* webpackChunkName: "admin" */ "@/views/admin/library/TracksList" + ), + props: route => { return { - defaultQuery: route.query.q, + defaultQuery: route.query.q } } }, { - path: 'tracks/:id', - name: 'manage.library.tracks.detail', + path: "tracks/:id", + name: "manage.library.tracks.detail", component: () => - import(/* webpackChunkName: "admin" */ "@/views/admin/library/TrackDetail"), + import( + /* webpackChunkName: "admin" */ "@/views/admin/library/TrackDetail" + ), props: true }, { - path: 'libraries', - name: 'manage.library.libraries', + path: "libraries", + name: "manage.library.libraries", component: () => - import(/* webpackChunkName: "admin" */ "@/views/admin/library/LibrariesList"), - props: (route) => { + import( + /* webpackChunkName: "admin" */ "@/views/admin/library/LibrariesList" + ), + props: route => { return { - defaultQuery: route.query.q, + defaultQuery: route.query.q } } }, { - path: 'libraries/:id', - name: 'manage.library.libraries.detail', + path: "libraries/:id", + name: "manage.library.libraries.detail", component: () => - import(/* webpackChunkName: "admin" */ "@/views/admin/library/LibraryDetail"), + import( + /* webpackChunkName: "admin" */ "@/views/admin/library/LibraryDetail" + ), props: true }, { - path: 'uploads', - name: 'manage.library.uploads', + path: "uploads", + name: "manage.library.uploads", component: () => - import(/* webpackChunkName: "admin" */ "@/views/admin/library/UploadsList"), - props: (route) => { + import( + /* webpackChunkName: "admin" */ "@/views/admin/library/UploadsList" + ), + props: route => { return { - defaultQuery: route.query.q, + defaultQuery: route.query.q } } }, { - path: 'uploads/:id', - name: 'manage.library.uploads.detail', + path: "uploads/:id", + name: "manage.library.uploads.detail", component: () => - import(/* webpackChunkName: "admin" */ "@/views/admin/library/UploadDetail"), + import( + /* webpackChunkName: "admin" */ "@/views/admin/library/UploadDetail" + ), props: true }, + { + path: "tags", + name: "manage.library.tags", + component: () => + import( + /* webpackChunkName: "admin" */ "@/views/admin/library/TagsList" + ), + props: route => { + return { + defaultQuery: route.query.q + } + } + }, + { + path: "tags/:id", + name: "manage.library.tags.detail", + component: () => + import( + /* webpackChunkName: "admin" */ "@/views/admin/library/TagDetail" + ), + props: true + } ] }, { - path: '/manage/users', + path: "/manage/users", component: () => import(/* webpackChunkName: "admin" */ "@/views/admin/users/Base"), children: [ { - path: 'users', - name: 'manage.users.users.list', + path: "users", + name: "manage.users.users.list", component: () => - import(/* webpackChunkName: "admin" */ "@/views/admin/users/UsersList"), + import( + /* webpackChunkName: "admin" */ "@/views/admin/users/UsersList" + ) }, { - path: 'invitations', - name: 'manage.users.invitations.list', + path: "invitations", + name: "manage.users.invitations.list", component: () => - import(/* webpackChunkName: "admin" */ "@/views/admin/users/InvitationsList"), + import( + /* webpackChunkName: "admin" */ "@/views/admin/users/InvitationsList" + ) } ] }, { - path: '/manage/moderation', + path: "/manage/moderation", component: () => import(/* webpackChunkName: "admin" */ "@/views/admin/moderation/Base"), children: [ { - path: 'domains', - name: 'manage.moderation.domains.list', + path: "domains", + name: "manage.moderation.domains.list", + component: () => + import( + /* webpackChunkName: "admin" */ "@/views/admin/moderation/DomainsList" + ) + }, + { + path: "domains/:id", + name: "manage.moderation.domains.detail", + component: () => + import( + /* webpackChunkName: "admin" */ "@/views/admin/moderation/DomainsDetail" + ), + props: true + }, + { + path: "accounts", + name: "manage.moderation.accounts.list", component: () => - import(/* webpackChunkName: "admin" */ "@/views/admin/moderation/DomainsList"), + import( + /* webpackChunkName: "admin" */ "@/views/admin/moderation/AccountsList" + ), + props: route => { + return { + defaultQuery: route.query.q + } + } }, { - path: 'domains/:id', - name: 'manage.moderation.domains.detail', + path: "accounts/:id", + name: "manage.moderation.accounts.detail", component: () => - import(/* webpackChunkName: "admin" */ "@/views/admin/moderation/DomainsDetail"), + import( + /* webpackChunkName: "admin" */ "@/views/admin/moderation/AccountsDetail" + ), props: true }, { - path: 'accounts', - name: 'manage.moderation.accounts.list', + path: "reports", + name: "manage.moderation.reports.list", component: () => - import(/* webpackChunkName: "admin" */ "@/views/admin/moderation/AccountsList"), - props: (route) => { + import( + /* webpackChunkName: "admin" */ "@/views/admin/moderation/ReportsList" + ), + props: route => { return { defaultQuery: route.query.q, - + updateUrl: true } } }, { - path: 'accounts/:id', - name: 'manage.moderation.accounts.detail', + path: "reports/:id", + name: "manage.moderation.reports.detail", component: () => - import(/* webpackChunkName: "admin" */ "@/views/admin/moderation/AccountsDetail"), + import( + /* webpackChunkName: "admin" */ "@/views/admin/moderation/ReportDetail" + ), props: true - } + }, ] }, { - path: '/library', + path: "/library", component: () => import(/* webpackChunkName: "core" */ "@/components/library/Library"), children: [ { - path: '', + path: "", component: () => import(/* webpackChunkName: "core" */ "@/components/library/Home"), - name: 'library.index' + name: "library.index" }, { - path: 'artists/', - name: 'library.artists.browse', + path: "artists/", + name: "library.artists.browse", component: () => - import(/* webpackChunkName: "core" */ "@/components/library/Artists"), - props: (route) => ({ + import( + /* webpackChunkName: "core" */ "@/components/library/Artists" + ), + props: route => ({ defaultOrdering: route.query.ordering, defaultQuery: route.query.query, + defaultTags: Array.isArray(route.query.tag || []) + ? route.query.tag + : [route.query.tag], defaultPaginateBy: route.query.paginateBy, defaultPage: route.query.page }) }, { - path: 'albums/', - name: 'library.albums.browse', + path: "albums/", + name: "library.albums.browse", component: () => - import(/* webpackChunkName: "core" */ "@/components/library/Albums"), - props: (route) => ({ + import( + /* webpackChunkName: "core" */ "@/components/library/Albums" + ), + props: route => ({ defaultOrdering: route.query.ordering, defaultQuery: route.query.query, + defaultTags: Array.isArray(route.query.tag || []) + ? route.query.tag + : [route.query.tag], defaultPaginateBy: route.query.paginateBy, defaultPage: route.query.page }) }, { - path: 'radios/', - name: 'library.radios.browse', + path: "radios/", + name: "library.radios.browse", component: () => - import(/* webpackChunkName: "core" */ "@/components/library/Radios"), - props: (route) => ({ + import( + /* webpackChunkName: "core" */ "@/components/library/Radios" + ), + props: route => ({ defaultOrdering: route.query.ordering, defaultQuery: route.query.query, defaultPaginateBy: route.query.paginateBy, @@ -430,32 +547,36 @@ export default new Router({ }) }, { - path: 'radios/build', - name: 'library.radios.build', + path: "radios/build", + name: "library.radios.build", component: () => - import(/* webpackChunkName: "core" */ "@/components/library/radios/Builder"), + import( + /* webpackChunkName: "core" */ "@/components/library/radios/Builder" + ), props: true }, { - path: 'radios/build/:id', - name: 'library.radios.edit', + path: "radios/build/:id", + name: "library.radios.edit", component: () => - import(/* webpackChunkName: "core" */ "@/components/library/radios/Builder"), + import( + /* webpackChunkName: "core" */ "@/components/library/radios/Builder" + ), props: true }, { - path: 'radios/:id', - name: 'library.radios.detail', + path: "radios/:id", + name: "library.radios.detail", component: () => import(/* webpackChunkName: "core" */ "@/views/radios/Detail"), props: true }, { - path: 'playlists/', - name: 'library.playlists.browse', + path: "playlists/", + name: "library.playlists.browse", component: () => import(/* webpackChunkName: "core" */ "@/views/playlists/List"), - props: (route) => ({ + props: route => ({ defaultOrdering: route.query.ordering, defaultQuery: route.query.query, defaultPaginateBy: route.query.paginateBy, @@ -463,105 +584,139 @@ export default new Router({ }) }, { - path: 'playlists/:id', - name: 'library.playlists.detail', + path: "playlists/:id", + name: "library.playlists.detail", component: () => import(/* webpackChunkName: "core" */ "@/views/playlists/Detail"), - props: (route) => ({ + props: route => ({ id: route.params.id, - defaultEdit: route.query.mode === 'edit' }) + defaultEdit: route.query.mode === "edit" + }) }, { - path: 'artists/:id', + path: "tags/:id", + name: "library.tags.detail", component: () => - import(/* webpackChunkName: "core" */ "@/components/library/ArtistBase"), + import( + /* webpackChunkName: "core" */ "@/components/library/TagDetail" + ), + props: true + }, + { + path: "artists/:id", + component: () => + import( + /* webpackChunkName: "core" */ "@/components/library/ArtistBase" + ), props: true, children: [ { - path: '', - name: 'library.artists.detail', + path: "", + name: "library.artists.detail", component: () => - import(/* webpackChunkName: "core" */ "@/components/library/ArtistDetail"), + import( + /* webpackChunkName: "core" */ "@/components/library/ArtistDetail" + ) }, { - path: 'edit', - name: 'library.artists.edit', + path: "edit", + name: "library.artists.edit", component: () => - import(/* webpackChunkName: "core" */ "@/components/library/ArtistEdit"), + import( + /* webpackChunkName: "core" */ "@/components/library/ArtistEdit" + ) }, { - path: 'edit/:editId', - name: 'library.artists.edit.detail', + path: "edit/:editId", + name: "library.artists.edit.detail", component: () => - import(/* webpackChunkName: "core" */ "@/components/library/EditDetail"), - props: true, + import( + /* webpackChunkName: "core" */ "@/components/library/EditDetail" + ), + props: true } ] }, { - path: 'albums/:id', + path: "albums/:id", component: () => - import(/* webpackChunkName: "core" */ "@/components/library/AlbumBase"), + import( + /* webpackChunkName: "core" */ "@/components/library/AlbumBase" + ), props: true, children: [ { - path: '', - name: 'library.albums.detail', + path: "", + name: "library.albums.detail", component: () => - import(/* webpackChunkName: "core" */ "@/components/library/AlbumDetail"), + import( + /* webpackChunkName: "core" */ "@/components/library/AlbumDetail" + ) }, { - path: 'edit', - name: 'library.albums.edit', + path: "edit", + name: "library.albums.edit", component: () => - import(/* webpackChunkName: "core" */ "@/components/library/AlbumEdit"), + import( + /* webpackChunkName: "core" */ "@/components/library/AlbumEdit" + ) }, { - path: 'edit/:editId', - name: 'library.albums.edit.detail', + path: "edit/:editId", + name: "library.albums.edit.detail", component: () => - import(/* webpackChunkName: "core" */ "@/components/library/EditDetail"), - props: true, + import( + /* webpackChunkName: "core" */ "@/components/library/EditDetail" + ), + props: true } ] }, { - path: 'tracks/:id', + path: "tracks/:id", component: () => - import(/* webpackChunkName: "core" */ "@/components/library/TrackBase"), + import( + /* webpackChunkName: "core" */ "@/components/library/TrackBase" + ), props: true, children: [ { - path: '', - name: 'library.tracks.detail', + path: "", + name: "library.tracks.detail", component: () => - import(/* webpackChunkName: "core" */ "@/components/library/TrackDetail"), + import( + /* webpackChunkName: "core" */ "@/components/library/TrackDetail" + ) }, { - path: 'edit', - name: 'library.tracks.edit', + path: "edit", + name: "library.tracks.edit", component: () => - import(/* webpackChunkName: "core" */ "@/components/library/TrackEdit"), + import( + /* webpackChunkName: "core" */ "@/components/library/TrackEdit" + ) }, { - path: 'edit/:editId', - name: 'library.tracks.edit.detail', + path: "edit/:editId", + name: "library.tracks.edit.detail", component: () => - import(/* webpackChunkName: "core" */ "@/components/library/EditDetail"), - props: true, + import( + /* webpackChunkName: "core" */ "@/components/library/EditDetail" + ), + props: true } ] - }, + } ] }, { - path: '*/index.html', - redirect: '/' + path: "*/index.html", + redirect: "/" }, { - path: '*', + path: "*", component: () => - import(/* webpackChunkName: "core" */ "@/components/PageNotFound"), + import(/* webpackChunkName: "core" */ "@/components/PageNotFound") } ] }) diff --git a/front/src/sanitize.js b/front/src/sanitize.js new file mode 100644 index 0000000000000000000000000000000000000000..4e42d5a4b440b1f751bfe55b1c26b7ad9d6d525b --- /dev/null +++ b/front/src/sanitize.js @@ -0,0 +1,43 @@ +import sanitizeHtml from "sanitize-html" + +const allowedTags = [ + "h3", + "h4", + "h5", + "h6", + "blockquote", + "p", + "a", + "ul", + "ol", + "nl", + "li", + "b", + "i", + "strong", + "em", + "strike", + "code", + "hr", + "br", + "div", + "table", + "thead", + "caption", + "tbody", + "tr", + "th", + "td", + "pre", +] +const allowedAttributes = { + a: ["href", "name", "target"], + // We don't currently allow img itself by default, but this + // would make sense if we did. You could add srcset here, + // and if you do the URL is checked for safety + img: ["src"] +} + +export default function sanitize(input) { + return sanitizeHtml(input, {allowedAttributes, allowedAttributes}) +} diff --git a/front/src/semantic.js b/front/src/semantic.js index f5dad819256c1d08940c9dd304b4a1888ae1e6c0..206b59149fcc099e3c2f012b14149fe06f5ece00 100644 --- a/front/src/semantic.js +++ b/front/src/semantic.js @@ -1,24 +1,24 @@ -// require('semantic-ui-css/components/accordion.min.js') -require('semantic-ui-css/components/api.min.js') -require('semantic-ui-css/components/checkbox.min.js') -// require('semantic-ui-css/components/colorize.min.js') -require('semantic-ui-css/components/dimmer.min.js') -require('semantic-ui-css/components/dropdown.min.js') -// require('semantic-ui-css/components/embed.min.js') -// require('semantic-ui-css/components/form.min.js') -require('semantic-ui-css/components/modal.min.js') -// require('semantic-ui-css/components/nag.min.js') -// require('semantic-ui-css/components/popup.min.js') -require('semantic-ui-css/components/progress.min.js') -// require('semantic-ui-css/components/rating.min.js') -require('semantic-ui-css/components/search.min.js') -// require('semantic-ui-css/components/shape.min.js') -// require('semantic-ui-css/components/sidebar.min.js') -require('semantic-ui-css/components/site.min.js') -require('semantic-ui-css/components/state.min.js') -require('semantic-ui-css/components/sticky.min.js') -// require('semantic-ui-css/components/tab.min.js') -require('semantic-ui-css/components/transition.min.js') -// require('semantic-ui-css/components/video.min.js') -require('semantic-ui-css/components/visibility.min.js') -// require('semantic-ui-css/components/visit.min.js') +// require('fomantic-ui-css/components/accordion.min.js') +require('fomantic-ui-css/components/api.min.js') +require('fomantic-ui-css/components/checkbox.min.js') +// require('fomantic-ui-css/components/colorize.min.js') +require('fomantic-ui-css/components/dimmer.min.js') +require('fomantic-ui-css/components/dropdown.min.js') +// require('fomantic-ui-css/components/embed.min.js') +// require('fomantic-ui-css/components/form.min.js') +require('fomantic-ui-css/components/modal.min.js') +// require('fomantic-ui-css/components/nag.min.js') +// require('fomantic-ui-css/components/popup.min.js') +require('fomantic-ui-css/components/progress.min.js') +// require('fomantic-ui-css/components/rating.min.js') +require('fomantic-ui-css/components/search.min.js') +// require('fomantic-ui-css/components/shape.min.js') +// require('fomantic-ui-css/components/sidebar.min.js') +require('fomantic-ui-css/components/site.min.js') +require('fomantic-ui-css/components/state.min.js') +require('fomantic-ui-css/components/sticky.min.js') +// require('fomantic-ui-css/components/tab.min.js') +require('fomantic-ui-css/components/transition.min.js') +// require('fomantic-ui-css/components/video.min.js') +require('fomantic-ui-css/components/visibility.min.js') +// require('fomantic-ui-css/components/visit.min.js') diff --git a/front/src/store/auth.js b/front/src/store/auth.js index 52cc98a6de7abde1ebfb1c03bd5ea434e1fa2af8..93ba3b4318d2d708d8560bc9a1a3edd9701232db 100644 --- a/front/src/store/auth.js +++ b/front/src/store/auth.js @@ -1,7 +1,9 @@ +import Vue from 'vue' import axios from 'axios' import jwtDecode from 'jwt-decode' import logger from '@/logging' import router from '@/router' +import lodash from '@/lodash' export default { namespaced: true, @@ -73,6 +75,11 @@ export default { }, permission: (state, {key, status}) => { state.availablePermissions[key] = status + }, + profilePartialUpdate: (state, payload) => { + lodash.keys(payload).forEach((k) => { + Vue.set(state.profile, k, payload[k]) + }) } }, actions: { @@ -106,7 +113,7 @@ export default { router.push({name: 'index'}) }, check ({commit, dispatch, state}) { - logger.default.info('Checking authentication...') + logger.default.info('Checking authentication…') var jwt = state.token if (jwt) { commit('token', jwt) @@ -126,7 +133,12 @@ export default { resolve(response.data) }) dispatch('ui/fetchUnreadNotifications', null, { root: true }) - dispatch('ui/fetchPendingReviewEdits', null, { root: true }) + if (response.data.permissions.library) { + dispatch('ui/fetchPendingReviewEdits', null, { root: true }) + } + if (response.data.permissions.moderation) { + dispatch('ui/fetchPendingReviewReports', null, { root: true }) + } dispatch('favorites/fetch', null, { root: true }) dispatch('moderation/fetchContentFilters', null, { root: true }) dispatch('playlists/fetchOwn', null, { root: true }) diff --git a/front/src/store/index.js b/front/src/store/index.js index 791dbb1e92fd1d3add3509ea67575dc734c64dd8..d94a0bcc77b61fd09ad8e47f35c40c39ffcd1360 100644 --- a/front/src/store/index.js +++ b/front/src/store/index.js @@ -40,7 +40,7 @@ export default new Vuex.Store({ }), createPersistedState({ key: 'ui', - paths: ['ui.currentLanguage', 'ui.momentLocale'] + paths: ['ui.currentLanguage', 'ui.selectedLanguage', 'ui.momentLocale', 'ui.theme'] }), createPersistedState({ key: 'radios', diff --git a/front/src/store/instance.js b/front/src/store/instance.js index 6af36e8090e3ba276c7fabaf870ebd251f086a15..ec4e47b43d16cc29d5c1bd98e2a1fdde88282078 100644 --- a/front/src/store/instance.js +++ b/front/src/store/instance.js @@ -17,6 +17,7 @@ export default { instanceUrl: process.env.VUE_APP_INSTANCE_URL, events: [], knownInstances: [], + nodeinfo: null, settings: { instance: { name: { @@ -27,6 +28,12 @@ export default { }, long_description: { value: '' + }, + funkwhale_support_message_enabled: { + value: true + }, + support_message: { + value: '' } }, users: { @@ -41,7 +48,7 @@ export default { enabled: { value: true } - } + }, } }, mutations: { @@ -57,6 +64,9 @@ export default { events: (state, value) => { state.events = value }, + nodeinfo: (state, value) => { + state.nodeinfo = value + }, frontSettings: (state, value) => { state.frontSettings = value }, diff --git a/front/src/store/moderation.js b/front/src/store/moderation.js index 153f3cd5959d307d0edbf7760a4ff34d6a8eced3..16caf60aa4a5abca53b6fd06f4f4e7ff61f37c36 100644 --- a/front/src/store/moderation.js +++ b/front/src/store/moderation.js @@ -7,16 +7,24 @@ export default { state: { filters: [], showFilterModal: false, + showReportModal: false, lastUpdate: new Date(), filterModalTarget: { type: null, target: null, + }, + reportModalTarget: { + type: null, + target: null, } }, mutations: { filterModalTarget (state, value) { state.filterModalTarget = value }, + reportModalTarget (state, value) { + state.reportModalTarget = value + }, empty (state) { state.filters = [] }, @@ -35,10 +43,21 @@ export default { } } }, + showReportModal (state, value) { + state.showReportModal = value + if (!value) { + state.reportModalTarget = { + type: null, + target: null, + } + } + }, reset (state) { state.filters = [] state.filterModalTarget = null state.showFilterModal = false + state.showReportModal = false + state.reportModalTarget = {} }, deleteContentFilter (state, uuid) { state.filters = state.filters.filter((e) => { @@ -61,6 +80,10 @@ export default { commit('filterModalTarget', payload) commit('showFilterModal', true) }, + report ({commit}, payload) { + commit('reportModalTarget', payload) + commit('showReportModal', true) + }, fetchContentFilters ({dispatch, state, commit, rootState}, url) { let params = {} let promise diff --git a/front/src/store/player.js b/front/src/store/player.js index fac17368d10377b959fb98520f242eb2f77f4aa2..6757f0beef1e04655c60a366a844d3f10d179638 100644 --- a/front/src/store/player.js +++ b/front/src/store/player.js @@ -109,6 +109,15 @@ export default { }, 3000) } }, + toggleMute({commit, state}) { + if (state.volume > 0) { + commit('tempVolume', state.volume) + commit('volume', 0) + } + else { + commit('volume', state.tempVolume) + } + }, trackListened ({commit, rootState}, track) { if (!rootState.auth.authenticated) { return diff --git a/front/src/store/ui.js b/front/src/store/ui.js index 8a8bc1da01854a6b630c5a3877bca91217feb524..48795116f98ed1081424845228b1d1ede6b8dc3a 100644 --- a/front/src/store/ui.js +++ b/front/src/store/ui.js @@ -5,23 +5,65 @@ export default { namespaced: true, state: { currentLanguage: 'en_US', + selectedLanguage: false, momentLocale: 'en', lastDate: new Date(), maxMessages: 100, messageDisplayDuration: 10000, messages: [], + theme: 'light', notifications: { inbox: 0, pendingReviewEdits: 0, + pendingReviewReports: 0, }, websocketEventsHandlers: { 'inbox.item_added': {}, 'import.status_updated': {}, 'mutation.created': {}, 'mutation.updated': {}, + 'report.created': {}, }, pageTitle: null }, + getters: { + showInstanceSupportMessage: (state, getters, rootState) => { + if (!rootState.auth.profile) { + return false + } + if (!rootState.instance.settings.instance.support_message.value) { + return false + } + let displayDate = rootState.auth.profile.instance_support_message_display_date + if (!displayDate) { + return false + } + return moment(displayDate) < moment(state.lastDate) + }, + showFunkwhaleSupportMessage: (state, getters, rootState) => { + if (!rootState.auth.profile) { + return false + } + if (!rootState.instance.settings.instance.funkwhale_support_message_enabled.value) { + return false + } + let displayDate = rootState.auth.profile.funkwhale_support_message_display_date + if (!displayDate) { + return false + } + return moment(displayDate) < moment(state.lastDate) + }, + additionalNotifications: (state, getters) => { + let count = 0 + if (getters.showInstanceSupportMessage) { + count += 1 + } + if (getters.showFunkwhaleSupportMessage) { + count += 1 + } + return count + } + }, mutations: { addWebsocketEventHandler: (state, {eventName, id, handler}) => { state.websocketEventsHandlers[eventName][id] = handler @@ -31,6 +73,7 @@ export default { }, currentLanguage: (state, value) => { state.currentLanguage = value + state.selectedLanguage = true }, momentLocale: (state, value) => { state.momentLocale = value @@ -39,6 +82,9 @@ export default { computeLastDate: (state) => { state.lastDate = new Date() }, + theme: (state, value) => { + state.theme = value + }, addMessage (state, message) { state.messages.push(message) if (state.messages.length > state.maxMessages) { @@ -70,6 +116,11 @@ export default { commit('notifications', {type: 'pendingReviewEdits', count: response.data.count}) }) }, + fetchPendingReviewReports ({commit, rootState}, payload) { + axios.get('manage/moderation/reports/', {params: {is_handled: 'false', page_size: 1}}).then((response) => { + commit('notifications', {type: 'pendingReviewReports', count: response.data.count}) + }) + }, websocketEvent ({state}, event) { let handlers = state.websocketEventsHandlers[event.type] console.log('Dispatching websocket event', event, handlers) diff --git a/front/src/style/_main.scss b/front/src/style/_main.scss index d1eb1e3fbbf164d5c8dbcf07f3572f0293b017a3..b98584f7d21e510a8ec9476fc1d25facbef2ab26 100644 --- a/front/src/style/_main.scss +++ b/front/src/style/_main.scss @@ -10,62 +10,66 @@ Import this file into your LESS project to use Semantic UI without build tools */ +// Those fomantic-ui-css/*.scss don't exist in the package, but we create them +// via scripts/link-scss-files.sh on postinstall, so we can include theme +// under a class namespace + /* Global */ -@import "~semantic-ui-css/components/reset.css"; +@import "~fomantic-ui-css/components/reset.css"; // we use our custom site css here to avoid loading google font @import "./site"; /* Elements */ -@import "~semantic-ui-css/components/button.css"; -@import "~semantic-ui-css/components/container.css"; -@import "~semantic-ui-css/components/divider.css"; -// @import "~semantic-ui-css/components/flag.css"; -@import "~semantic-ui-css/components/header.css"; -@import "~semantic-ui-css/components/icon.css"; -@import "~semantic-ui-css/components/image.css"; -@import "~semantic-ui-css/components/input.css"; -@import "~semantic-ui-css/components/label.css"; -@import "~semantic-ui-css/components/list.css"; -@import "~semantic-ui-css/components/loader.css"; -@import "~semantic-ui-css/components/placeholder.css"; -// @import "~semantic-ui-css/components/rail.css"; -// @import "~semantic-ui-css/components/reveal.css"; -@import "~semantic-ui-css/components/segment.css"; -@import "~semantic-ui-css/components/step.css"; +@import "~fomantic-ui-css/components/button.css"; +@import "~fomantic-ui-css/components/container.css"; +@import "~fomantic-ui-css/components/divider.css"; +// @import "~fomantic-ui-css/components/flag.css"; +@import "~fomantic-ui-css/components/header.css"; +@import "~fomantic-ui-css/components/icon.css"; +@import "~fomantic-ui-css/components/image.css"; +@import "~fomantic-ui-css/components/input.css"; +@import "~fomantic-ui-css/components/label.css"; +@import "~fomantic-ui-css/components/list.css"; +@import "~fomantic-ui-css/components/loader.css"; +@import "~fomantic-ui-css/components/placeholder.css"; +// @import "~fomantic-ui-css/components/rail.css"; +// @import "~fomantic-ui-css/components/reveal.css"; +@import "~fomantic-ui-css/components/segment.css"; +@import "~fomantic-ui-css/components/step.css"; /* Collections */ -// @import "~semantic-ui-css/components/breadcrumb.css"; -@import "~semantic-ui-css/components/form.css"; -@import "~semantic-ui-css/components/grid.css"; -@import "~semantic-ui-css/components/menu.css"; -@import "~semantic-ui-css/components/message.css"; -@import "~semantic-ui-css/components/table.css"; +// @import "~fomantic-ui-css/components/breadcrumb.css"; +@import "~fomantic-ui-css/components/form.css"; +@import "~fomantic-ui-css/components/grid.css"; +@import "~fomantic-ui-css/components/menu.css"; +@import "~fomantic-ui-css/components/message.css"; +@import "~fomantic-ui-css/components/table.css"; /* Views */ -// @import "~semantic-ui-css/components/ad.css"; -@import "~semantic-ui-css/components/card.css"; -// @import "~semantic-ui-css/components/comment.css"; -// @import "~semantic-ui-css/components/feed.css"; -@import "~semantic-ui-css/components/item.css"; -@import "~semantic-ui-css/components/statistic.css"; +// @import "~fomantic-ui-css/components/ad.css"; +@import "~fomantic-ui-css/components/card.css"; +// @import "~fomantic-ui-css/components/comment.css"; +@import "~fomantic-ui-css/components/feed.css"; +@import "~fomantic-ui-css/components/item.css"; +@import "~fomantic-ui-css/components/statistic.css"; /* Modules */ -// @import "~semantic-ui-css/components/accordion.css"; -@import "~semantic-ui-css/components/checkbox.css"; -@import "~semantic-ui-css/components/dimmer.css"; -@import "~semantic-ui-css/components/dropdown.css"; -// @import "~semantic-ui-css/components/embed.css"; -@import "~semantic-ui-css/components/modal.css"; -// @import "~semantic-ui-css/components/nag.css"; -@import "~semantic-ui-css/components/popup.css"; -@import "~semantic-ui-css/components/progress.css"; -// @import "~semantic-ui-css/components/rating.css"; -@import "~semantic-ui-css/components/search.css"; -// @import "~semantic-ui-css/components/shape.css"; -@import "~semantic-ui-css/components/sidebar.css"; -@import "~semantic-ui-css/components/sticky.css"; -@import "~semantic-ui-css/components/tab.css"; -@import "~semantic-ui-css/components/transition.css"; +// @import "~fomantic-ui-css/components/accordion.css"; +@import "~fomantic-ui-css/components/checkbox.css"; +@import "~fomantic-ui-css/components/dimmer.css"; +@import "~fomantic-ui-css/components/dropdown.css"; +// @import "~fomantic-ui-css/components/embed.css"; +@import "~fomantic-ui-css/components/modal.css"; +// @import "~fomantic-ui-css/components/nag.css"; +@import "~fomantic-ui-css/components/popup.css"; +@import "~fomantic-ui-css/components/progress.css"; +// @import "~fomantic-ui-css/components/rating.css"; +@import "~fomantic-ui-css/components/search.css"; +// @import "~fomantic-ui-css/components/shape.css"; +@import "~fomantic-ui-css/components/sidebar.css"; +@import "~fomantic-ui-css/components/sticky.css"; +@import "~fomantic-ui-css/components/tab.css"; +@import "~fomantic-ui-css/components/transition.css"; @@ -80,7 +84,7 @@ $widedesktop-sidebar-width: 350px; html, body { - @include media("<desktop") { + @include media("<=desktop") { font-size: 90%; } } @@ -96,6 +100,7 @@ body { #app > main, #app > .main { flex: 1; } + .instance-chooser { margin-top: 2em; } @@ -127,14 +132,10 @@ body { margin-right: 0; border: none; overflow-y: auto; - box-shadow: inset 0px -2px 0px 0px rgba(34, 36, 38, 0.15); .ui.item { border: none; border-bottom-style: none; margin-bottom: 0px; - &.active { - box-shadow: inset 0px -2px 0px 0px #000; - } } @include media(">tablet") { padding: 0 2.5rem; @@ -149,7 +150,6 @@ body { @include media(">widedesktop") { left: $widedesktop-sidebar-width; } - background-color: white; .item { padding-top: 1.5em; padding-bottom: 1.5em; @@ -166,6 +166,9 @@ body { @include media(">widedesktop") { left: $widedesktop-sidebar-width; } + > .ui.message { + box-shadow: 0px 0px 7px rgba(0, 0, 0, 0.7); + } } .main-pusher { padding: 1.5rem 0; @@ -181,7 +184,7 @@ body { } } -.ellipsis { +.ellipsis:not(.icon) { text-overflow: ellipsis; white-space: nowrap; overflow: hidden; @@ -209,9 +212,6 @@ body { } } -.discrete { - color: rgba(0, 0, 0, 0.87); -} .link { cursor: pointer; } @@ -250,6 +250,9 @@ a { display: none; } +.nomargin { + margin: 0 !important; +} button.reset { border: none; margin: 0; @@ -345,6 +348,20 @@ td.align.right { word-wrap: break-word; } +.ui.cards > .flat.card, .flat.card { + box-shadow: none; + .content { + border: none; + } +} + +.ui.cards > .inline.card { + flex-direction: row; + .content { + padding: 0.5em 0.75em; + } +} + .ui.checkbox label { cursor: pointer; } @@ -353,6 +370,27 @@ input + .help { margin-top: 0.5em; } -.table td .ui.dropdown { - min-width: 150px; +.tag-list { + margin-top: 0.5em; +} + +.expandable { + &:not(.expanded) { + overflow: hidden; + max-height: 15vh; + background: linear-gradient(top, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 90%, rgba(0, 0, 0, 0.3) 100%); + } } + +.ui.borderless.button { + border: none !important; + box-shadow: none !important; + padding-left: 0; + padding-right: 0; +} +.column .ui.text.container { + max-width: 100% !important; +} + +@import "./themes/_light.scss"; +@import "./themes/_dark.scss"; diff --git a/front/src/style/themes/_dark.scss b/front/src/style/themes/_dark.scss new file mode 100644 index 0000000000000000000000000000000000000000..a34b60cb5399b72ef5e55518d92609ef2b23f13f --- /dev/null +++ b/front/src/style/themes/_dark.scss @@ -0,0 +1,286 @@ +/* purgecss start ignore */ + +$background-color: rgb(43, 58, 66); +$button-hover-color: rgb(33, 48, 56); +$light-background-color: rgb(51, 71, 82); +$input-background-color: rgb(189, 211, 222); +$loading-background-color: rgba(43, 58, 66, 0.9); +$text-color: rgb(223, 235, 240); +$discrete-text-color: rgba(223, 235, 240, 0.904); +$border-color: rgb(63, 88, 102); +$light-shadow-color: rgba(223, 235, 240, 0.15); +$shadow-color: rgba(63, 102, 97, 0.95); +$box-shadow: 0px 1px 3px 0px rgba(63, 88, 102, 0.95), + 0px 0px 0px 1px rgba(63, 88, 102, 0.98); +$link-color: rgb(255, 144, 0); + +.theme-dark { + background-color: $background-color; + .ui.labeled.input { + input, + .label { + background-color: $input-background-color; + &::placeholder { + color: $light-background-color; + } + } + } + .ui.statistics .statistic { + > .label, + > .value { + color: $text-color; + } + } + .ui.link.list.list .active.item, + .ui.link.list.list .active.item a:not(.ui) { + color: inherit; + } + .ui.form textarea, + .ui.form select, + .ui.selection.dropdown, + .ui.dropdown.selected, + .ui.dropdown .menu .selected.item, + .ui.form input:not([type]), + .ui.form input[type="date"], + .ui.form input[type="datetime-local"], + .ui.form input[type="email"], + .ui.form input[type="number"], + .ui.form input[type="password"], + .ui.form input[type="search"], + .ui.form input[type="tel"], + .ui.form input[type="time"], + .ui.form input[type="text"], + .ui.form input[type="file"], + .ui.form input[type="url"] { + background-color: $input-background-color; + &::placeholder { + color: $light-background-color; + } + } + .ui.dropdown .menu .item:hover { + background-color: $light-background-color; + color: $text-color; + } + .main.pusher > .ui.secondary.menu { + background-color: $background-color; + box-shadow: inset 0px -2px 0px 0px $light-background-color; + .ui.item { + color: $text-color; + &.active { + box-shadow: inset 0px -2px 0px 0px $shadow-color; + } + } + } + .ui.modal { + > .header, + > .content, + > .actions { + background-color: $background-color; + } + > .header { + border-bottom: 1px solid $border-color; + } + + > .actions { + border-top: 1px solid $border-color; + } + } + main, + .main, + footer, + .modal { + .ui.menu { + background-color: $light-background-color; + .item { + color: $text-color; + } + } + .ui.secondary.menu .dropdown.item:hover, + .ui.secondary.menu .link.item:hover, + .ui.secondary.menu a.item:hover { + background: $background-color; + color: $text-color; + } + .header, + .ui.form .field > label, + .sub.header { + color: $text-color; + } + .ui.attached.header { + background-color: transparent; + } + .ui.toggle.checkbox input:checked ~ .box, + .ui.toggle.checkbox input:checked ~ label { + color: $text-color !important; + } + .ui.toggle.checkbox .box::before, + .ui.toggle.checkbox label::before { + background-color: $light-background-color; + } + a:not(.ui):not(.discrete) { + color: $link-color; + } + .ui.segment:not(.basic) { + background-color: $light-background-color; + } + .link { + color: $link-color; + } + .ui.list, + .ui.dropdown { + .item, + div.item, + a.item, + .button.item { + background-color: $background-color; + color: $discrete-text-color; + } + .selected.item:not(:hover) { + color: $background-color; + } + } + .segment .ui.list .item { + background-color: transparent; + } + .ui.divided.items > .item:not(:first-child) { + border-top: 1px solid $border-color; + } + .ui.items { + .extra { + color: $discrete-text-color; + } + } + label, + .toggle label { + color: $text-color !important; + } + &, + .main.pusher, + .ui.vertical.segment { + color: $text-color; + background-color: $background-color; + } + + .discrete { + color: $discrete-text-color; + } + + .ui.table thead th, + .ui.table { + color: $text-color; + } + .ui.divider:not(.vertical):not(.horizontal) { + border-top: 1px solid $border-color; + border-bottom: 1px solid $border-color; + } + .ui.cards > .card, + .ui.card { + color: $text-color; + background-color: $background-color; + &:not(.flat) { + box-shadow: $box-shadow; + } + .content, + .header, + .description { + color: $text-color; + } + .extra, + .meta { + color: $discrete-text-color; + } + } + .playlist.card { + .attached.button { + background-color: $light-background-color; + } + } + + // buttons + [class="ui button ui button"], + [class="ui button"], + [class="ui icon button"], + [class="ui fluid button"], + [class="ui cancel button"] { + background-color: $light-background-color; + color: $text-color; + &:hover { + background-color: $button-hover-color; + } + } + .ui.buttons > .ui.button:not(.basic):not(.inverted), + .ui.buttons:not(.basic):not(.inverted) > .button { + box-shadow: 0px 0px 0px 1px $light-shadow-color inset; + } + .ui.basic.buttons:not(:hover):not(.green):not(.orange):not(.yellow):not(.red) + .button, + .ui.basic.button { + box-shadow: 0px 0px 0px 1px $text-color inset; + &:not(:hover):not(.green):not(.orange):not(.yellow):not(.red) { + color: $text-color !important; + } + } + .ui.basic.buttons .button, + .ui.basic.button { + &:hover { + color: $text-color !important; + } + } + .ui.basic.buttons:not(.green):not(.orange):not(.yellow):not(.red) + .button:hover, + .ui.basic.button:not(.green):not(.orange):not(.yellow):not(.red):hover, + .ui.basic.button:not(.green):not(.orange):not(.yellow):not(.red):active, + .ui.basic.button:not(.green):not(.orange):not(.yellow):not(.red):focus { + color: $background-color !important; + } + // loading /dimmers + .ui.loading.form::before { + background-color: $loading-background-color; + } + .ui.inverted.dimmer { + background-color: $loading-background-color; + } + // table + .ui.basic.table tbody tr, + .ui.table tr td { + border-bottom: 1px solid $border-color; + } + .ui.table thead th { + border-bottom: 1px solid $border-color; + } + .ui.table { + &:not(.basic) { + &, + thead th { + background-color: $light-background-color; + } + } + } + } + .ui.list > .item .description { + color: $text-color; + } + .ui.link.list.list a.item:hover, + .ui.link.list.list .item a:not(.ui):not(.button):hover, .ui.list > .item a.header { + color: $link-color !important; + } + [data-tooltip]::after { + background-color: $light-background-color; + color: $text-color; + } + .ui.progress > .label { + color: $text-color; + } + i.grey.icon { + color: $text-color !important; + } + input { + &::selection, + &::-moz-selection { + background: $background-color; + color: $text-color; + } + } +} + +/* purgecss end ignore */ diff --git a/front/src/style/themes/_light.scss b/front/src/style/themes/_light.scss new file mode 100644 index 0000000000000000000000000000000000000000..a6e1a0cdf621edaf3b7ed5dd57d0a6e8c4727b02 --- /dev/null +++ b/front/src/style/themes/_light.scss @@ -0,0 +1,35 @@ + + +.theme-light { + + .main.pusher > .ui.secondary.menu { + box-shadow: inset 0px -2px 0px 0px rgba(34, 36, 38, 0.15); + background-color: white; + .ui.item { + &.active { + box-shadow: inset 0px -2px 0px 0px #000; + } + } + } + + .discrete { + color: rgba(0, 0, 0, 0.87); + } + .playlist.card { + .attached.button { + background-color: rgb(243, 244, 245); + } + } + + .disabled-row { + color: rgba(40, 40, 40, 0.3); + } + footer p { + color: grey; + } + + footer#footer div.item:hover { + color: rgba(0, 0, 0, 0.87); + } + +} diff --git a/front/src/utils.js b/front/src/utils.js new file mode 100644 index 0000000000000000000000000000000000000000..eee36f8e68df0aea62b13e2d0e598dfe1c911b3f --- /dev/null +++ b/front/src/utils.js @@ -0,0 +1,8 @@ +import lodash from '@/lodash' + +export function setUpdate(obj, statuses, value) { + let updatedKeys = lodash.keys(obj) + updatedKeys.forEach((k) => { + statuses[k] = value + }) +} diff --git a/front/src/views/Notifications.vue b/front/src/views/Notifications.vue index 648654c8fc1c02ede3fc86a94263bacb528f902e..3a10d399d3d24f9ca1e577cda4cc07b6f0a3cc0a 100644 --- a/front/src/views/Notifications.vue +++ b/front/src/views/Notifications.vue @@ -2,6 +2,71 @@ <main class="main pusher" v-title="labels.title"> <section class="ui vertical aligned stripe segment"> <div class="ui container"> + <div class="ui container" v-if="additionalNotifications"> + <h1 class="ui header"><translate translate-context="Content/Notifications/Title">Your messages</translate></h1> + <div class="ui two column stackable grid"> + <div class="column" v-if="showInstanceSupportMessage"> + <div class="ui attached info message"> + <div class="header"> + <translate translate-context="Content/Notifications/Header">Support this Funkwhale pod</translate> + </div> + <div v-html="markdown.makeHtml($store.state.instance.settings.instance.support_message.value)"></div> + </div> + <div class="ui bottom attached segment"> + <form @submit.prevent="setDisplayDate('instance_support_message_display_date', instanceSupportMessageDelay)" class="ui inline form"> + <div class="inline field"> + <label> + <translate translate-context="Content/Notifications/Label">Remind me in:</translate> + </label> + <select v-model="instanceSupportMessageDelay"> + <option :value="30"><translate translate-context="*/*/*">30 days</translate></option> + <option :value="60"><translate translate-context="*/*/*">60 days</translate></option> + <option :value="90"><translate translate-context="*/*/*">90 days</translate></option> + <option :value="null"><translate translate-context="*/*/*">Never</translate></option> + </select> + <button type="submit" class="ui right floated basic button"> + <translate translate-context="Content/Notifications/Button.Label">Got it!</translate> + </button> + </div> + </form> + </div> + </div> + <div class="column" v-if="showFunkwhaleSupportMessage"> + <div class="ui info attached message"> + <div class="header"> + <translate translate-context="Content/Notifications/Header">Do you like Funkwhale?</translate> + </div> + <p> + <translate translate-context="Content/Notifications/Paragraph">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!</translate> + </p> + <a href="https://funkwhale.audio/support-us" _target="blank" rel="noopener" class="ui primary inverted button"> + <translate translate-context="Content/Notifications/Button.Label/Verb">Donate</translate> + </a> + <a href="https://contribute.funkwhale.audio" _target="blank" rel="noopener" class="ui secondary inverted button"> + <translate translate-context="Content/Notifications/Button.Label/Verb">Discover other ways to help</translate> + </a> + </div> + <div class="ui bottom attached segment"> + <form @submit.prevent="setDisplayDate('funkwhale_support_message_display_date', funkwhaleSupportMessageDelay)" class="ui inline form"> + <div class="inline field"> + <label> + <translate translate-context="Content/Notifications/Label">Remind me in:</translate> + </label> + <select v-model="funkwhaleSupportMessageDelay"> + <option :value="30"><translate translate-context="*/*/*">30 days</translate></option> + <option :value="60"><translate translate-context="*/*/*">60 days</translate></option> + <option :value="90"><translate translate-context="*/*/*">90 days</translate></option> + <option :value="null"><translate translate-context="*/*/*">Never</translate></option> + </select> + <button type="submit" class="ui right floated basic button"> + <translate translate-context="Content/Notifications/Button.Label">Got it!</translate> + </button> + </div> + </form> + </div> + </div> + </div> + </div> <h1 class="ui header"><translate translate-context="Content/Notifications/Title">Your notifications</translate></h1> <div class="ui toggle checkbox"> <input v-model="filters.is_read" type="checkbox"> @@ -25,7 +90,7 @@ <notification-row :item="item" v-for="item in notifications.results" :key="item.id" /> </tbody> </table> - <p v-else> + <p v-else-if="additionalNotifications === 0"> <translate translate-context="Content/Notifications/Paragraph">No notification to show.</translate> </p> </div> @@ -34,9 +99,11 @@ </template> <script> -import { mapState } from "vuex" +import { mapState, mapGetters } from "vuex" import axios from "axios" import logger from "@/logging" +import showdown from 'showdown' +import moment from 'moment' import NotificationRow from "@/components/notifications/NotificationRow" @@ -44,7 +111,10 @@ export default { data() { return { isLoading: false, + markdown: new showdown.Converter(), notifications: {count: 0, results: []}, + instanceSupportMessageDelay: 60, + funkwhaleSupportMessageDelay: 60, filters: { is_read: false } @@ -71,6 +141,11 @@ export default { ...mapState({ events: state => state.instance.events }), + ...mapGetters({ + additionalNotifications: 'ui/additionalNotifications', + showInstanceSupportMessage: 'ui/showInstanceSupportMessage', + showFunkwhaleSupportMessage: 'ui/showFunkwhaleSupportMessage', + }), labels() { return { title: this.$pgettext('*/Notifications/*', "Notifications") @@ -82,6 +157,20 @@ export default { this.notifications.count += 1 this.notifications.results.unshift(event.item) }, + setDisplayDate (field, days) { + let payload = {} + let newDisplayDate + if (days) { + newDisplayDate = moment().add({days}) + } else { + newDisplayDate = null + } + payload[field] = newDisplayDate + let self = this + axios.patch(`users/users/${this.$store.state.auth.username}/`, payload).then((response) => { + self.$store.commit('auth/profilePartialUpdate', response.data) + }) + }, fetch(params) { this.isLoading = true let self = this diff --git a/front/src/views/admin/Settings.vue b/front/src/views/admin/Settings.vue index e7075bcc231f9c7cb411a568eab0ea460ef6a3aa..eeba965ad724a86b13cb352e2062c1bd1d4af007 100644 --- a/front/src/views/admin/Settings.vue +++ b/front/src/views/admin/Settings.vue @@ -81,9 +81,10 @@ export default { let usersLabel = this.$pgettext('*/*/*/Noun', 'Users') let musicLabel = this.$pgettext('*/*/*/Noun', 'Music') let playlistsLabel = this.$pgettext('*/*/*', 'Playlists') - let federationLabel = this.$pgettext('Content/Admin/Menu', 'Federation') + let federationLabel = this.$pgettext('*/*/*', 'Federation') + let moderationLabel = this.$pgettext('*/Moderation/*', 'Moderation') let subsonicLabel = this.$pgettext('Content/Admin/Menu', 'Subsonic') - let statisticsLabel = this.$pgettext('Content/Admin/Menu', 'Statistics') + let statisticsLabel = this.$pgettext('Content/Home/Header', 'Statistics') let uiLabel = this.$pgettext('Content/Admin/Menu', 'User Interface') let errorLabel = this.$pgettext('Content/Admin/Menu', 'Error reporting') return [ @@ -93,7 +94,12 @@ export default { settings: [ "instance__name", "instance__short_description", - "instance__long_description" + "instance__long_description", + "instance__contact_email", + "instance__rules", + "instance__terms", + "instance__banner", + "instance__support_message" ] }, { @@ -119,6 +125,15 @@ export default { id: "playlists", settings: ["playlists__max_tracks"] }, + { + label: moderationLabel, + id: "moderation", + settings: [ + "moderation__allow_list_enabled", + "moderation__allow_list_public", + "moderation__unauthenticated_report_types", + ] + }, { label: federationLabel, id: "federation", @@ -138,7 +153,7 @@ export default { { label: uiLabel, id: "ui", - settings: ["ui__custom_css"] + settings: ["ui__custom_css", "instance__funkwhale_support_message_enabled"] }, { label: statisticsLabel, diff --git a/front/src/views/admin/library/AlbumDetail.vue b/front/src/views/admin/library/AlbumDetail.vue index b89afb945d7003cef05c7a92a68c8404b4e2e1c0..fdfc4c7faab2aa11efe793534368e9c99a1b1a99 100644 --- a/front/src/views/admin/library/AlbumDetail.vue +++ b/front/src/views/admin/library/AlbumDetail.vue @@ -24,6 +24,12 @@ </div> </div> </h2> + + <template v-if="object.tags && object.tags.length > 0"> + <tags-list :limit="5" detail-route="manage.library.tags.detail" :tags="object.tags"></tags-list> + <div class="ui hidden divider"></div> + </template> + <div class="header-buttons"> <div class="ui icon buttons"> @@ -177,6 +183,16 @@ {{ stats.playlists }} </td> </tr> + <tr> + <td> + <router-link :to="{name: 'manage.moderation.reports.list', query: {q: getQuery('target', `album:${object.id}`) }}"> + <translate translate-context="Content/Moderation/Table.Label/Noun">Linked reports</translate> + </router-link> + </td> + <td> + {{ stats.reports }} + </td> + </tr> <tr> <td> <router-link :to="{name: 'manage.library.edits', query: {q: getQuery('target', 'album ' + object.id)}}"> @@ -240,7 +256,7 @@ <tr> <td> <router-link :to="{name: 'manage.library.uploads', query: {q: getQuery('album_id', object.id) }}"> - <translate translate-context="Content/Moderation/Table.Label/Noun">Uploads</translate> + <translate translate-context="*/*/*">Uploads</translate> </router-link> </td> <td> @@ -273,12 +289,13 @@ import axios from "axios" import logger from "@/logging" import FetchButton from "@/components/federation/FetchButton" - +import TagsList from "@/components/tags/List" export default { props: ["id"], components: { - FetchButton + FetchButton, + TagsList }, data() { return { diff --git a/front/src/views/admin/library/ArtistDetail.vue b/front/src/views/admin/library/ArtistDetail.vue index 0c4175bae4a84a68bb1f526deafd1af2fce42cea..e6b4a127b34a5175ebff959f659a52e099609d9e 100644 --- a/front/src/views/admin/library/ArtistDetail.vue +++ b/front/src/views/admin/library/ArtistDetail.vue @@ -23,6 +23,11 @@ </div> </div> </h2> + <template v-if="object.tags && object.tags.length > 0"> + <tags-list :limit="5" detail-route="manage.library.tags.detail" :tags="object.tags"></tags-list> + <div class="ui hidden divider"></div> + </template> + <div class="header-buttons"> <div class="ui icon buttons"> @@ -166,6 +171,16 @@ {{ stats.playlists }} </td> </tr> + <tr> + <td> + <router-link :to="{name: 'manage.moderation.reports.list', query: {q: getQuery('target', `artist:${object.id}`) }}"> + <translate translate-context="Content/Moderation/Table.Label/Noun">Linked reports</translate> + </router-link> + </td> + <td> + {{ stats.reports }} + </td> + </tr> <tr> <td> <router-link :to="{name: 'manage.library.edits', query: {q: getQuery('target', 'artist ' + object.id)}}"> @@ -229,7 +244,7 @@ <tr> <td> <router-link :to="{name: 'manage.library.uploads', query: {q: getQuery('artist_id', object.id) }}"> - <translate translate-context="Content/Moderation/Table.Label/Noun">Uploads</translate> + <translate translate-context="*/*/*">Uploads</translate> </router-link> </td> <td> @@ -272,12 +287,14 @@ import axios from "axios" import logger from "@/logging" +import TagsList from "@/components/tags/List" import FetchButton from "@/components/federation/FetchButton" export default { props: ["id"], components: { - FetchButton + FetchButton, + TagsList }, data() { return { diff --git a/front/src/views/admin/library/ArtistsList.vue b/front/src/views/admin/library/ArtistsList.vue index 2a5932796ec6003703942ee1fe6e7e31f4d532c9..dae856be445f84b938e40c1a972e2fcb59f13852 100644 --- a/front/src/views/admin/library/ArtistsList.vue +++ b/front/src/views/admin/library/ArtistsList.vue @@ -21,7 +21,7 @@ export default { computed: { labels() { return { - title: this.$pgettext('*/*/*', 'Artists') + title: this.$pgettext('*/*/*/Noun', 'Artists') } } } diff --git a/front/src/views/admin/library/Base.vue b/front/src/views/admin/library/Base.vue index 009e1ca95c9f8bc615c73c37f808887b14949711..8b99b273b371ad27c187a171ee100f37174f9270 100644 --- a/front/src/views/admin/library/Base.vue +++ b/front/src/views/admin/library/Base.vue @@ -6,7 +6,7 @@ :to="{name: 'manage.library.edits'}"><translate translate-context="*/Admin/*/Noun">Edits</translate></router-link> <router-link class="ui item" - :to="{name: 'manage.library.artists'}"><translate translate-context="*/*/*">Artists</translate></router-link> + :to="{name: 'manage.library.artists'}"><translate translate-context="*/*/*/Noun">Artists</translate></router-link> <router-link class="ui item" :to="{name: 'manage.library.albums'}"><translate translate-context="*/*/*">Albums</translate></router-link> @@ -15,10 +15,13 @@ :to="{name: 'manage.library.tracks'}"><translate translate-context="*/*/*">Tracks</translate></router-link> <router-link class="ui item" - :to="{name: 'manage.library.libraries'}"><translate translate-context="*/*/*">Libraries</translate></router-link> + :to="{name: 'manage.library.libraries'}"><translate translate-context="*/*/*/Noun">Libraries</translate></router-link> <router-link class="ui item" :to="{name: 'manage.library.uploads'}"><translate translate-context="*/*/*">Uploads</translate></router-link> + <router-link + class="ui item" + :to="{name: 'manage.library.tags'}"><translate translate-context="*/*/*/Noun">Tags</translate></router-link> </nav> <router-view :key="$route.fullPath"></router-view> </div> diff --git a/front/src/views/admin/library/LibrariesList.vue b/front/src/views/admin/library/LibrariesList.vue index 495a660c19609fde101fff87b2774f6ca7890c3c..479008bdb1f88939fe13daeae071244d6cc7aa89 100644 --- a/front/src/views/admin/library/LibrariesList.vue +++ b/front/src/views/admin/library/LibrariesList.vue @@ -21,7 +21,7 @@ export default { computed: { labels() { return { - title: this.$pgettext('*/*/*', 'Libraries') + title: this.$pgettext('*/*/*/Noun', 'Libraries') } } } diff --git a/front/src/views/admin/library/LibraryDetail.vue b/front/src/views/admin/library/LibraryDetail.vue index beec7e2b408cf6b032c5f0114c979d77f958a64c..2a7b74767029294c8578c3c9276323ce462e6f90 100644 --- a/front/src/views/admin/library/LibraryDetail.vue +++ b/front/src/views/admin/library/LibraryDetail.vue @@ -96,7 +96,16 @@ </router-link> </td> <td> - {{ sharedLabels.fields.privacy_level.shortChoices[object.privacy_level] }} + <select + v-dropdown + v-if="object.is_local" + @change="updateObj('privacy_level')" + v-model="object.privacy_level" + + class="ui search selection dropdown"> + <option v-for="p in ['me', 'instance', 'everyone']" :value="p">{{ sharedLabels.fields.privacy_level.shortChoices[p] }}</option> + </select> + <template v-else>{{ sharedLabels.fields.privacy_level.shortChoices[object.privacy_level] }}</template> </td> </tr> <tr> @@ -165,6 +174,16 @@ {{ stats.followers }} </td> </tr> + <tr> + <td> + <router-link :to="{name: 'manage.moderation.reports.list', query: {q: getQuery('target', `library:${object.uuid}`) }}"> + <translate translate-context="Content/Moderation/Table.Label/Noun">Linked reports</translate> + </router-link> + </td> + <td> + {{ stats.reports }} + </td> + </tr> </tbody> </table> </section> @@ -207,7 +226,7 @@ <tr> <td> <router-link :to="{name: 'manage.library.artists', query: {q: getQuery('library_id', object.id) }}"> - <translate translate-context="*/*/*">Artists</translate> + <translate translate-context="*/*/*/Noun">Artists</translate> </router-link> </td> <td> @@ -237,7 +256,7 @@ <tr> <td> <router-link :to="{name: 'manage.library.uploads', query: {q: getQuery('library_id', object.id) }}"> - <translate translate-context="Content/Moderation/Table.Label/Noun">Uploads</translate> + <translate translate-context="*/*/*">Uploads</translate> </router-link> </td> <td> @@ -308,7 +327,28 @@ export default { }, getQuery (field, value) { return `${field}:"${value}"` - } + }, + updateObj(attr, toNull) { + let newValue = this.object[attr] + if (toNull && !newValue) { + newValue = null + } + let params = {} + params[attr] = newValue + axios.patch(`manage/library/libraries/${this.id}/`, params).then( + response => { + logger.default.info( + `${attr} was updated succcessfully to ${newValue}` + ) + }, + error => { + logger.default.error( + `Error while setting ${attr} to ${newValue}`, + error + ) + } + ) + }, }, computed: { labels() { diff --git a/front/src/views/admin/library/TagDetail.vue b/front/src/views/admin/library/TagDetail.vue new file mode 100644 index 0000000000000000000000000000000000000000..c434f2805f45f278a5e0be8ec5aa9eb74ff4416c --- /dev/null +++ b/front/src/views/admin/library/TagDetail.vue @@ -0,0 +1,215 @@ +<template> + <main> + <div v-if="isLoading" class="ui vertical segment"> + <div :class="['ui', 'centered', 'active', 'inline', 'loader']"></div> + </div> + <template v-if="object"> + <section :class="['ui', 'head', 'vertical', 'stripe', 'segment']" v-title="object.name"> + <div class="ui stackable one column grid"> + <div class="ui column"> + <div class="segment-content"> + <h2 class="ui header"> + <i class="circular inverted hashtag icon"></i> + <div class="content"> + {{ object.name | truncate(100) }} + </div> + </h2> + <div class="header-buttons"> + + <div class="ui icon buttons"> + <router-link class="ui labeled icon button" :to="{name: 'library.tags.detail', params: {id: object.name }}"> + <i class="info icon"></i> + <translate translate-context="Content/Moderation/Link/Verb">Open local profile</translate> + </router-link> + <div class="ui floating dropdown icon button" v-dropdown> + <i class="dropdown icon"></i> + <div class="menu"> + <a + v-if="$store.state.auth.profile && $store.state.auth.profile.is_superuser" + class="basic item" + :href="$store.getters['instance/absoluteUrl'](`/api/admin/tags/tag/${object.id}`)" + target="_blank" rel="noopener noreferrer"> + <i class="wrench icon"></i> + <translate translate-context="Content/Moderation/Link/Verb">View in Django's admin</translate> + </a> + </div> + </div> + </div> + <div class="ui buttons"> + <dangerous-button + :class="['ui', {loading: isLoading}, 'basic button']" + :action="remove"> + <translate translate-context="*/*/*/Verb">Delete</translate> + <p slot="modal-header"><translate translate-context="Popup/Library/Title">Delete this tag?</translate></p> + <div slot="modal-content"> + <p><translate translate-context="Content/Moderation/Paragraph">The tag will be removed and unlinked from any existing entity. This action is irreversible.</translate></p> + </div> + <p slot="modal-confirm"><translate translate-context="*/*/*/Verb">Delete</translate></p> + </dangerous-button> + </div> + </div> + </div> + </div> + </div> + </section> + <div class="ui vertical stripe segment"> + <div class="ui stackable three column grid"> + <div class="column"> + <section> + <h3 class="ui header"> + <i class="info icon"></i> + <div class="content"> + <translate translate-context="Content/Moderation/Title">Tag data</translate> + </div> + </h3> + <table class="ui very basic table"> + <tbody> + <tr> + <td> + <translate translate-context="*/*/*/Noun">Name</translate> + </td> + <td> + {{ object.name }} + </td> + </tr> + </tbody> + </table> + </section> + </div> + <div class="column"> + <section> + <h3 class="ui header"> + <i class="feed icon"></i> + <div class="content"> + <translate translate-context="Content/Moderation/Title">Activity</translate> + <span :data-tooltip="labels.statsWarning"><i class="question circle icon"></i></span> + + </div> + </h3> + <div v-if="isLoadingStats" class="ui placeholder"> + <div class="full line"></div> + <div class="short line"></div> + <div class="medium line"></div> + <div class="long line"></div> + </div> + <table v-else class="ui very basic table"> + <tbody> + <tr> + <td> + <translate translate-context="Content/Moderation/Table.Label/Short (Value is a date)">First seen</translate> + </td> + <td> + <human-date :date="object.creation_date"></human-date> + </td> + </tr> + </tbody> + </table> + </section> + </div> + <div class="column"> + <section> + <h3 class="ui header"> + <i class="music icon"></i> + <div class="content"> + <translate translate-context="Content/Moderation/Title">Audio content</translate> + <span :data-tooltip="labels.statsWarning"><i class="question circle icon"></i></span> + + </div> + </h3> + <table class="ui very basic table"> + <tbody> + <tr> + <td> + <router-link :to="{name: 'manage.library.artists', query: {q: getQuery('tag', object.name) }}"> + <translate translate-context="*/*/*/Noun">Artists</translate> + </router-link> + </td> + <td> + {{ object.artists_count }} + </td> + </tr> + <tr> + <td> + <router-link :to="{name: 'manage.library.albums', query: {q: getQuery('tag', object.name) }}"> + <translate translate-context="*/*/*">Albums</translate> + </router-link> + </td> + <td> + {{ object.albums_count }} + </td> + </tr> + <tr> + <td> + <router-link :to="{name: 'manage.library.tracks', query: {q: getQuery('tag', object.name) }}"> + <translate translate-context="*/*/*">Tracks</translate> + </router-link> + </td> + <td> + {{ object.tracks_count }} + </td> + </tr> + </tbody> + </table> + + </section> + </div> + </div> + </div> + + </template> + </main> +</template> + +<script> +import axios from "axios" +import logger from "@/logging" + +import FetchButton from "@/components/federation/FetchButton" + +export default { + props: ["id"], + components: { + FetchButton + }, + data() { + return { + isLoading: true, + isLoadingStats: false, + object: null, + stats: null, + } + }, + created() { + this.fetchData() + }, + methods: { + fetchData() { + var self = this + this.isLoading = true + let url = `manage/tags/${this.id}/` + axios.get(url).then(response => { + self.object = response.data + self.isLoading = false + }) + }, + remove () { + var self = this + this.isLoading = true + let url = `manage/tags/${this.id}/` + axios.delete(url).then(response => { + self.$router.push({name: 'manage.library.tags'}) + }) + }, + getQuery (field, value) { + return `${field}:"${value}"` + } + }, + computed: { + labels() { + return { + statsWarning: this.$pgettext('Content/Moderation/Help text', 'Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object'), + } + }, + } +} +</script> diff --git a/front/src/views/admin/library/TagsList.vue b/front/src/views/admin/library/TagsList.vue new file mode 100644 index 0000000000000000000000000000000000000000..81e892a401bb03d8d8c78f49303a5fa56c958395 --- /dev/null +++ b/front/src/views/admin/library/TagsList.vue @@ -0,0 +1,29 @@ +<template> + <main v-title="labels.title"> + <section class="ui vertical stripe segment"> + <h2 class="ui header">{{ labels.title }}</h2> + <div class="ui hidden divider"></div> + <tags-table :update-url="true" :default-query="defaultQuery"></tags-table> + </section> + </main> +</template> + +<script> +import TagsTable from "@/components/manage/library/TagsTable" + +export default { + components: { + TagsTable + }, + props: { + defaultQuery: {type: String, required: false}, + }, + computed: { + labels() { + return { + title: this.$pgettext('*/*/*/Noun', 'Tags') + } + } + } +} +</script> diff --git a/front/src/views/admin/library/TrackDetail.vue b/front/src/views/admin/library/TrackDetail.vue index 29cd29810ee619bf96be7ac499b6a5f6d3d5cbcb..152d3390bf76034319f3ff2802c1a4c8fd30b6a8 100644 --- a/front/src/views/admin/library/TrackDetail.vue +++ b/front/src/views/admin/library/TrackDetail.vue @@ -23,6 +23,12 @@ </div> </div> </h2> + + <template v-if="object.tags && object.tags.length > 0"> + <tags-list :limit="5" detail-route="manage.library.tags.detail" :tags="object.tags"></tags-list> + <div class="ui hidden divider"></div> + </template> + <div class="header-buttons"> <div class="ui icon buttons"> @@ -105,7 +111,7 @@ <tr> <td> <router-link :to="{name: 'manage.library.albums.detail', params: {id: object.album.id }}"> - <translate translate-context="*/*/*/Noun">Album</translate> + <translate translate-context="*/*/*">Album</translate> </router-link> </td> <td> @@ -135,7 +141,7 @@ </tr> <tr> <td> - <translate translate-context="*/*/*/Noun">Position</translate> + <translate translate-context="*/*/*/Short, Noun">Position</translate> </td> <td> {{ object.position }} @@ -151,7 +157,7 @@ </tr> <tr v-if="object.copyright"> <td> - <translate translate-context="Content/Track/Table.Label/Noun">Copyright</translate> + <translate translate-context="Content/Track/*/Noun">Copyright</translate> </td> <td>{{ object.copyright }}</td> </tr> @@ -229,6 +235,16 @@ {{ stats.playlists }} </td> </tr> + <tr> + <td> + <router-link :to="{name: 'manage.moderation.reports.list', query: {q: getQuery('target', `track:${object.id}`) }}"> + <translate translate-context="Content/Moderation/Table.Label/Noun">Linked reports</translate> + </router-link> + </td> + <td> + {{ stats.reports }} + </td> + </tr> <tr> <td> <router-link :to="{name: 'manage.library.edits', query: {q: getQuery('target', 'track ' + object.id)}}"> @@ -292,7 +308,7 @@ <tr> <td> <router-link :to="{name: 'manage.library.uploads', query: {q: getQuery('track_id', object.id) }}"> - <translate translate-context="Content/Moderation/Table.Label/Noun">Uploads</translate> + <translate translate-context="*/*/*">Uploads</translate> </router-link> </td> <td> @@ -315,12 +331,14 @@ import axios from "axios" import logger from "@/logging" import FetchButton from "@/components/federation/FetchButton" +import TagsList from "@/components/tags/List" export default { props: ["id"], components: { - FetchButton + FetchButton, + TagsList }, data() { return { diff --git a/front/src/views/admin/library/UploadDetail.vue b/front/src/views/admin/library/UploadDetail.vue index 4dbd83793c5b52374d174417265eae7b5cabcf4b..cf2ddc0a98670ff69afa89cd895222b7d2514a1b 100644 --- a/front/src/views/admin/library/UploadDetail.vue +++ b/front/src/views/admin/library/UploadDetail.vue @@ -142,7 +142,7 @@ <tr> <td> <router-link :to="{name: 'manage.library.libraries.detail', params: {id: object.library.uuid }}"> - <translate translate-context="*/*/*">Library</translate> + <translate translate-context="*/*/*/Noun">Library</translate> </router-link> </td> <td> @@ -197,7 +197,7 @@ <tr v-if="object.track"> <td> <router-link :to="{name: 'manage.library.tracks.detail', params: {id: object.track.id }}"> - <translate translate-context="*/*/*">Track</translate> + <translate translate-context="*/*/*/Noun">Track</translate> </router-link> </td> <td> diff --git a/front/src/views/admin/moderation/AccountsDetail.vue b/front/src/views/admin/moderation/AccountsDetail.vue index 09b5bb8244faf339fd08a20e31068bf7e4a8cdb7..e9fd06bea997af10f48bfe27e55be0813dd53fcf 100644 --- a/front/src/views/admin/moderation/AccountsDetail.vue +++ b/front/src/views/admin/moderation/AccountsDetail.vue @@ -154,17 +154,17 @@ @change="updateUser('is_active')" v-model="object.user.is_active" type="checkbox"> <label> - <translate v-if="object.user.is_active" key="1" translate-context="*/*/*">Enabled</translate> - <translate v-else key="2" translate-context="*/*/*">Disabled</translate> + <translate v-if="object.user.is_active" key="1" translate-context="*/*/*/State of feature">Enabled</translate> + <translate v-else key="2" translate-context="*/*/*/State of feature">Disabled</translate> </label> </div> - <translate v-else-if="object.user.is_active" key="1" translate-context="*/*/*">Enabled</translate> - <translate v-else key="2" translate-context="*/*/*">Disabled</translate> + <translate v-else-if="object.user.is_active" key="1" translate-context="*/*/*/State of feature">Enabled</translate> + <translate v-else key="2" translate-context="*/*/*/State of feature">Disabled</translate> </td> </tr> <tr v-if="object.user"> <td> - <translate translate-context="Content/Admin/Table.Label/Noun">Permissions</translate> + <translate translate-context="Content/*/*/Noun">Permissions</translate> </td> <td> <select @@ -174,11 +174,12 @@ class="ui search selection dropdown"> <option v-for="p in allPermissions" :value="p.code">{{ p.label }}</option> </select> + <action-feedback :is-loading="updating.permissions"></action-feedback> </td> </tr> <tr> <td> - <translate translate-context="Content/Moderation/Table.Label/Noun">Type</translate> + <translate translate-context="Content/Track/Table.Label/Noun">Type</translate> </td> <td> {{ object.type }} @@ -263,6 +264,16 @@ {{ stats.emitted_library_follows}} </td> </tr> + <tr> + <td> + <router-link :to="{name: 'manage.moderation.reports.list', query: {q: getQuery('target', `account:${object.full_username}`) }}"> + <translate translate-context="Content/Moderation/Table.Label/Noun">Linked reports</translate> + </router-link> + </td> + <td> + {{ stats.reports }} + </td> + </tr> </tbody> </table> </section> @@ -296,7 +307,7 @@ </tr> <tr v-if="object.user"> <td> - <translate translate-context="Content/Moderation/Table.Label/Noun" >Upload quota</translate> + <translate translate-context="*/*/*" >Upload quota</translate> <span :data-tooltip="labels.uploadQuota"><i class="question circle icon"></i></span> </td> <td> @@ -308,8 +319,9 @@ name="quota" type="number" /> <div class="ui basic label"> - <translate translate-context="Content/*/*/Unit">MB</translate> + <translate translate-context="Content/*/*/Unit">MB</translate>  </div> + <action-feedback class="ui basic label" size="tiny" :is-loading="updating.upload_quota"></action-feedback> </div> </td> </tr> @@ -335,7 +347,7 @@ <tr> <td> <router-link :to="{name: 'manage.library.uploads', query: {q: getQuery('account', object.full_username) }}"> - <translate translate-context="Content/Moderation/Table.Label/Noun">Uploads</translate> + <translate translate-context="*/*/*">Uploads</translate> </router-link> </td> <td> @@ -360,7 +372,7 @@ </tr> <tr> <td> - <translate translate-context="*/*/*/Noun">Tracks</translate> + <translate translate-context="*/*/*">Tracks</translate> </td> <td> {{ stats.tracks }} @@ -403,6 +415,10 @@ export default { stats: null, showPolicyForm: false, permissions: [], + updating: { + permissions: false, + upload_quota: false, + } } }, created() { @@ -457,6 +473,8 @@ export default { if (toNull && !newValue) { newValue = null } + let self = this + this.updating[attr] = true let params = {} if (attr === "permissions") { params["permissions"] = {} @@ -471,12 +489,14 @@ export default { logger.default.info( `${attr} was updated succcessfully to ${newValue}` ) + self.updating[attr] = false }, error => { logger.default.error( `Error while setting ${attr} to ${newValue}`, error ) + self.updating[attr] = false } ) }, @@ -495,7 +515,7 @@ export default { return [ { code: "library", - label: this.$pgettext('*/*/*', "Library") + label: this.$pgettext('*/*/*/Noun', "Library") }, { code: "moderation", diff --git a/front/src/views/admin/moderation/Base.vue b/front/src/views/admin/moderation/Base.vue index 564debf79ae8f7dcc42abe94e073511de237f1ac..04753cd364ffb9b14e68c93c8a72f6e8deecacc8 100644 --- a/front/src/views/admin/moderation/Base.vue +++ b/front/src/views/admin/moderation/Base.vue @@ -1,6 +1,9 @@ <template> <div class="main pusher" v-title="labels.moderation"> <nav class="ui secondary pointing menu" role="navigation" :aria-label="labels.secondaryMenu"> + <router-link + class="ui item" + :to="{name: 'manage.moderation.reports.list'}"><translate translate-context="*/Moderation/*/Noun">Reports</translate></router-link> <router-link class="ui item" :to="{name: 'manage.moderation.domains.list'}"><translate translate-context="*/Moderation/*/Noun">Domains</translate></router-link> @@ -9,12 +12,31 @@ :to="{name: 'manage.moderation.accounts.list'}"><translate translate-context="*/Moderation/Title">Accounts</translate></router-link> </nav> - <router-view :key="$route.fullPath"></router-view> + <router-view :allow-list-enabled="allowListEnabled" :key="$route.fullPath"></router-view> </div> </template> <script> +import _ from '@/lodash' +import axios from 'axios' + export default { + data () { + return { + allowListEnabled: false + } + }, + created () { + this.fetchNodeInfo() + }, + methods: { + fetchNodeInfo () { + let self = this + axios.get('instance/nodeinfo/2.0/').then(response => { + self.allowListEnabled = _.get(response.data, 'metadata.allowList.enabled', false) + }) + }, + }, computed: { labels() { return { @@ -22,6 +44,6 @@ export default { secondaryMenu: this.$pgettext('Menu/*/Hidden text', "Secondary menu") } } - } + }, } </script> diff --git a/front/src/views/admin/moderation/DomainsDetail.vue b/front/src/views/admin/moderation/DomainsDetail.vue index 575b15f93ca2bbf696b9672cbb38e7535c8b09ab..65434f2eca1eaa81b35fa78f590f5845cd639fc7 100644 --- a/front/src/views/admin/moderation/DomainsDetail.vue +++ b/front/src/views/admin/moderation/DomainsDetail.vue @@ -20,6 +20,34 @@ </div> </div> </h2> + <div class="header-buttons"> + <div class="ui icon buttons"> + <a + v-if="$store.state.auth.profile.is_superuser" + class="ui labeled icon button" + :href="$store.getters['instance/absoluteUrl'](`/api/admin/federation/domain/${object.name}`)" + target="_blank" rel="noopener noreferrer"> + <i class="wrench icon"></i> + <translate translate-context="Content/Moderation/Link/Verb">View in Django's admin</translate> + </a> + </div> + <div v-if="allowListEnabled" class="ui icon buttons"> + <button + v-if="object.allowed" + @click.prevent="setAllowList(false)" + :class="['ui', 'labeled', {loading: isLoadingAllowList}, 'icon', 'button']"> + <i class="x icon"></i> + <translate translate-context="Content/Moderation/Action/Verb">Remove from allow-list</translate> + </button> + <button + v-else + @click.prevent="setAllowList(true)" + :class="['ui', 'labeled', {loading: isLoadingAllowList}, 'icon', 'button']"> + <i class="check icon"></i> + <translate translate-context="Content/Moderation/Action/Verb">Add to allow-list</translate> + </button> + </div> + </div> </div> </div> <div class="ui column"> @@ -74,6 +102,15 @@ </h3> <table class="ui very basic table"> <tbody> + <tr v-if="allowListEnabled"> + <td> + <translate translate-context="Content/Moderation/*/Adjective">Is present on allow-list</translate> + </td> + <td> + <translate v-if="object.allowed" translate-context="*/*/*">Yes</translate> + <translate v-else translate-context="*/*/*">No</translate> + </td> + </tr> <tr> <td> <translate translate-context="Content/*/Table.Label">Last checked</translate> @@ -113,7 +150,7 @@ <template v-if="object.nodeinfo && object.nodeinfo.status === 'error'"> <tr> <td> - <translate translate-context="Content/Moderation/Table.Label (Value is Error message)">Status</translate> + <translate translate-context="*/*/*">Status</translate> </td> <td> <translate translate-context="Content/Moderation/Table">Error while fetching node info</translate> @@ -242,7 +279,7 @@ <tr> <td> <router-link :to="{name: 'manage.library.uploads', query: {q: getQuery('domain', object.name) }}"> - <translate translate-context="Content/Moderation/Table.Label/Noun">Uploads</translate> + <translate translate-context="*/*/*">Uploads</translate> </router-link> </td> <td> @@ -272,7 +309,7 @@ <tr> <td> <router-link :to="{name: 'manage.library.tracks', query: {q: getQuery('domain', object.name) }}"> - <translate translate-context="*/*/*/Noun">Tracks</translate> + <translate translate-context="*/*/*">Tracks</translate> </router-link> </td> <td> @@ -300,7 +337,7 @@ import InstancePolicyForm from "@/components/manage/moderation/InstancePolicyFor import InstancePolicyCard from "@/components/manage/moderation/InstancePolicyCard" export default { - props: ["id"], + props: ["id", "allowListEnabled"], components: { InstancePolicyForm, InstancePolicyCard, @@ -311,6 +348,7 @@ export default { isLoading: true, isLoadingStats: false, isLoadingPolicy: false, + isLoadingAllowList: false, policy: null, object: null, stats: null, @@ -353,6 +391,15 @@ export default { self.isLoadingPolicy = false }) }, + setAllowList(value) { + var self = this + this.isLoadingAllowList = true + let url = `manage/federation/domains/${this.id}/` + axios.patch(url, {allowed: value}).then(response => { + self.object = response.data + self.isLoadingAllowList = false + }) + }, refreshNodeInfo (data) { this.object.nodeinfo = data this.object.nodeinfo_fetch_date = new Date() diff --git a/front/src/views/admin/moderation/DomainsList.vue b/front/src/views/admin/moderation/DomainsList.vue index 3ce8e6afc44a2e653bc5ecb88a6837c3d80181d9..b42d4b228640898c8c138b8088bce6f56995f9ea 100644 --- a/front/src/views/admin/moderation/DomainsList.vue +++ b/front/src/views/admin/moderation/DomainsList.vue @@ -14,6 +14,10 @@ <label for="domain"><translate translate-context="Content/Moderation/Form.Label/Verb">Add a domain</translate></label> <input type="text" name="domain" id="domain" v-model="domainName"> </div> + <div class="field" v-if="allowListEnabled"> + <input type="checkbox" name="allowed" id="allowed" v-model="domainAllowed"> + <label for="allowed"><translate translate-context="Content/Moderation/Action/Verb">Add to allow-list</translate></label> + </div> <div class="field"> <button :class="['ui', {'loading': isCreating}, 'green', 'button']" type="submit" :disabled="isCreating"> <label for="domain"><translate translate-context="Content/Moderation/Button/Verb">Add</translate></label> @@ -22,7 +26,7 @@ </div> </form> <div class="ui clearing hidden divider"></div> - <domains-table></domains-table> + <domains-table :allow-list-enabled="allowListEnabled"></domains-table> </section> </main> </template> @@ -32,12 +36,14 @@ import axios from 'axios' import DomainsTable from "@/components/manage/moderation/DomainsTable" export default { + props: ['allowListEnabled'], components: { DomainsTable }, data () { return { domainName: '', + domainAllowed: this.allowListEnabled ? true : null, isCreating: false, errors: [] } @@ -54,7 +60,7 @@ export default { let self = this this.isCreating = true this.errors = [] - axios.post('manage/federation/domains/', {name: this.domainName}).then((response) => { + axios.post('manage/federation/domains/', {name: this.domainName, allowed: this.domainAllowed}).then((response) => { this.isCreating = false this.$router.push({ name: "manage.moderation.domains.detail", diff --git a/front/src/views/admin/moderation/ReportDetail.vue b/front/src/views/admin/moderation/ReportDetail.vue new file mode 100644 index 0000000000000000000000000000000000000000..ab2bd3e42440f313146c7d303b521a42aea71866 --- /dev/null +++ b/front/src/views/admin/moderation/ReportDetail.vue @@ -0,0 +1,46 @@ +<template> + <main> + <div v-if="isLoading" class="ui vertical segment"> + <div :class="['ui', 'centered', 'active', 'inline', 'loader']"></div> + </div> + <template v-if="object"> + + <div class="ui vertical stripe segment"> + <report-card :obj="object"></report-card> + </div> + </template> + </main> +</template> + +<script> +import axios from "axios" + +import ReportCard from "@/components/manage/moderation/ReportCard" + +export default { + props: ["id"], + components: { + ReportCard, + }, + data() { + return { + isLoading: true, + object: null, + } + }, + created() { + this.fetchData() + }, + methods: { + fetchData() { + var self = this + this.isLoading = true + let url = `manage/moderation/reports/${this.id}/` + axios.get(url).then(response => { + self.object = response.data + self.isLoading = false + }) + }, + }, +} +</script> diff --git a/front/src/views/admin/moderation/ReportsList.vue b/front/src/views/admin/moderation/ReportsList.vue new file mode 100644 index 0000000000000000000000000000000000000000..dc6c17f614b6675458d5dc2cf9ba9d916ef3f8ac --- /dev/null +++ b/front/src/views/admin/moderation/ReportsList.vue @@ -0,0 +1,233 @@ +<template> + <main v-title="labels.accounts"> + <section class="ui vertical stripe segment"> + <h2 class="ui header"><translate translate-context="*/Moderation/*/Noun">Reports</translate></h2> + <div class="ui hidden divider"></div> + <div class="ui inline form"> + <div class="fields"> + <div class="ui field"> + <label><translate translate-context="Content/Search/Input.Label/Noun">Search</translate></label> + <form @submit.prevent="search.query = $refs.search.value"> + <input name="search" ref="search" type="text" :value="search.query" :placeholder="labels.searchPlaceholder" /> + </form> + </div> + <div class="field"> + <label><translate translate-context="*/*/*">Status</translate></label> + <select class="ui dropdown" @change="addSearchToken('resolved', $event.target.value)" :value="getTokenValue('resolved', '')"> + <option value=""> + <translate translate-context="Content/*/Dropdown">All</translate> + </option> + <option value="yes"> + <translate translate-context="Content/*/*/Short">Resolved</translate> + </option> + <option value="no"> + <translate translate-context="Content/*/*/Short">Unresolved</translate> + </option> + </select> + </div> + <report-category-dropdown + class="field" + @input="addSearchToken('category', $event)" + :all="true" + :label="true" + :value="getTokenValue('category', '')"></report-category-dropdown> + <div class="field"> + <label><translate translate-context="Content/Search/Dropdown.Label/Noun">Ordering</translate></label> + <select class="ui dropdown" v-model="ordering"> + <option v-for="option in orderingOptions" :value="option[0]"> + {{ sharedLabels.filters[option[1]] }} + </option> + </select> + </div> + <div class="field"> + <label><translate translate-context="Content/Search/Dropdown.Label/Noun">Order</translate></label> + <select class="ui dropdown" v-model="orderingDirection"> + <option value="+"><translate translate-context="Content/Search/Dropdown">Ascending</translate></option> + <option value="-"><translate translate-context="Content/Search/Dropdown">Descending</translate></option> + </select> + </div> + </div> + </div> + <div v-if="isLoading" class="ui active inverted dimmer"> + <div class="ui loader"></div> + </div> + <div v-else-if="!result || result.count === 0"> + <empty-state @refresh="fetchData()" :refresh="true"></empty-state> + </div> + <div v-else-if="mode === 'card'"> + <report-card @handled="fetchData" :obj="obj" v-for="obj in result.results" :key="obj.uuid" /> + </div> + <div class="ui center aligned basic segment"> + <pagination + v-if="result && result.count > paginateBy" + @page-changed="selectPage" + :current="page" + :paginate-by="paginateBy" + :total="result.count" + ></pagination> + </div> + </section> + </main> +</template> + +<script> + + +import axios from 'axios' +import _ from '@/lodash' +import time from '@/utils/time' +import Pagination from '@/components/Pagination' +import OrderingMixin from '@/components/mixins/Ordering' +import TranslationsMixin from '@/components/mixins/Translations' +import ReportCard from '@/components/manage/moderation/ReportCard' +import ReportCategoryDropdown from '@/components/moderation/ReportCategoryDropdown' +import {normalizeQuery, parseTokens} from '@/search' +import SmartSearchMixin from '@/components/mixins/SmartSearch' + + +export default { + mixins: [OrderingMixin, TranslationsMixin, SmartSearchMixin], + components: { + Pagination, + ReportCard, + ReportCategoryDropdown, + }, + props: { + mode: {default: 'card'}, + }, + data () { + let defaultOrdering = this.getOrderingFromString(this.defaultOrdering || '-creation_date') + return { + time, + isLoading: false, + result: null, + page: 1, + paginateBy: 25, + search: { + query: this.defaultQuery, + tokens: parseTokens(normalizeQuery(this.defaultQuery)) + }, + orderingDirection: defaultOrdering.direction || '+', + ordering: defaultOrdering.field, + orderingOptions: [ + ['creation_date', 'creation_date'], + ['applied_date', 'applied_date'], + ], + targets: { + track: {} + } + } + }, + created () { + this.fetchData() + }, + methods: { + fetchData () { + let params = _.merge({ + 'page': this.page, + 'page_size': this.paginateBy, + 'q': this.search.query, + 'ordering': this.getOrderingAsString() + }, this.filters) + let self = this + self.isLoading = true + this.result = null + axios.get('manage/moderation/reports/', {params: params}).then((response) => { + self.result = response.data + self.isLoading = false + if (self.search.query === 'resolved:no') { + console.log('Refreshing sidebar notifications') + self.$store.commit('ui/incrementNotifications', {type: 'pendingReviewReports', value: response.data.count}) + } + }, error => { + self.isLoading = false + self.errors = error.backendErrors + }) + }, + fetchTargets () { + // we request target data via the API so we can display previous state + // additionnal data next to the edit card + let self = this + let typesAndIds = { + track: { + url: 'tracks/', + ids: [], + } + } + this.result.results.forEach((m) => { + if (!m.target || !typesAndIds[m.target.type]) { + return + } + typesAndIds[m.target.type]['ids'].push(m.target.id) + }) + Object.keys(typesAndIds).forEach((k) => { + let config = typesAndIds[k] + if (config.ids.length === 0) { + return + } + axios.get(config.url, {params: {id: _.uniq(config.ids), hidden: 'null'}}).then((response) => { + response.data.results.forEach((e) => { + self.$set(self.targets[k], e.id, { + payload: e, + currentState: edits.getCurrentStateForObj(e, edits.getConfigs.bind(self)()[k]) + }) + }) + }, error => { + self.errors = error.backendErrors + }) + }) + }, + selectPage: function (page) { + this.page = page + }, + handle (type, id, value) { + if (type === 'delete') { + this.exclude.push(id) + } + + this.result.results.forEach((e) => { + if (e.uuid === id) { + e.is_approved = value + } + }) + }, + getCurrentState (target) { + if (!target) { + return {} + } + if (this.targets[target.type] && this.targets[target.type][String(target.id)]) { + return this.targets[target.type][String(target.id)].currentState + } + return {} + } + }, + computed: { + labels () { + return { + searchPlaceholder: this.$pgettext('Content/Search/Input.Placeholder', 'Search by account, summary, domain…'), + reports: this.$pgettext('*/Moderation/*/Noun', "Reports"), + } + }, + }, + watch: { + search (newValue) { + this.page = 1 + this.fetchData() + }, + page () { + this.fetchData() + }, + ordering () { + this.fetchData() + }, + orderingDirection () { + this.fetchData() + } + } +} + +</script> + +<!-- Add "scoped" attribute to limit CSS to this component only --> +<style scoped> +</style> diff --git a/front/src/views/auth/Login.vue b/front/src/views/auth/Login.vue new file mode 100644 index 0000000000000000000000000000000000000000..22285bc9cc7952428e6b5d3354d7da766e8f4212 --- /dev/null +++ b/front/src/views/auth/Login.vue @@ -0,0 +1,40 @@ +<template> + <main class="main pusher" v-title="labels.title"> + <section class="ui vertical stripe segment"> + <div class="ui small text container"> + <h2><translate translate-context="Content/Login/Title/Verb">Log in to your Funkwhale account</translate></h2> + <login-form :next="next"></login-form> + </div> + </section> + </main> +</template> + +<script> +import LoginForm from "@/components/auth/LoginForm" + +export default { + props: { + next: { type: String, default: "/library" } + }, + components: { + LoginForm + }, + created () { + if (this.$store.state.auth.authenticated) { + this.$router.push(this.next) + } + }, + computed: { + labels() { + let title = this.$pgettext('Head/Login/Title', "Log In") + return { + title + } + } + } +} +</script> + +<!-- Add "scoped" attribute to limit CSS to this component only --> +<style scoped> +</style> diff --git a/front/src/views/auth/PasswordReset.vue b/front/src/views/auth/PasswordReset.vue index b1aab6f855699955419f0cd29df95fb6d18fbce9..b60a411463f9f0aad72af77ece8760f6eb3b7c8b 100644 --- a/front/src/views/auth/PasswordReset.vue +++ b/front/src/views/auth/PasswordReset.vue @@ -51,7 +51,7 @@ export default { computed: { labels() { let reset = this.$pgettext('*/Login/*/Verb', "Reset your password") - let placeholder = this.$pgettext('Content/Signup/Input.Placeholder', "Enter the email address binded to your account" + let placeholder = this.$pgettext('Content/Signup/Input.Placeholder', "Enter the email address linked to your account" ) return { reset, diff --git a/front/src/views/auth/PasswordResetConfirm.vue b/front/src/views/auth/PasswordResetConfirm.vue index c2a7c677818059cccd84cc2986fdb732a18cdea3..025458ba1f8e51021d24ff46f8baacee1e8433ac 100644 --- a/front/src/views/auth/PasswordResetConfirm.vue +++ b/front/src/views/auth/PasswordResetConfirm.vue @@ -22,7 +22,7 @@ <translate translate-context="Content/Signup/Button.Label">Update your password</translate></button> </template> <template v-else> - <p><translate translate-context="Content/Signup/Paragraph">If the email address provided in the previous step is valid and binded to a user account, you should receive an email with reset instructions in the next couple of minutes.</translate></p> + <p><translate translate-context="Content/Signup/Paragraph">If the email address provided in the previous step is valid and linked to a user account, you should receive an email with reset instructions in the next couple of minutes.</translate></p> </template> </form> <div v-else class="ui positive message"> diff --git a/front/src/views/auth/Signup.vue b/front/src/views/auth/Signup.vue new file mode 100644 index 0000000000000000000000000000000000000000..37b918c72bd4c08b3949c3698f74055211152008 --- /dev/null +++ b/front/src/views/auth/Signup.vue @@ -0,0 +1,48 @@ +<template> + <main class="main pusher" v-title="labels.title"> + <section class="ui vertical stripe segment"> + <div class="ui small text container"> + <h2><translate translate-context="Content/Signup/Title">Create a funkwhale account</translate></h2> + <signup-form :default-invitation="defaultInvitation" :next="next"></signup-form> + </div> + </section> + </main> +</template> + +<script> + +import SignupForm from "@/components/auth/SignupForm" + +export default { + props: { + defaultInvitation: { type: String, required: false, default: null }, + next: { type: String, default: "/" } + }, + components: { + SignupForm + }, + data() { + return { + username: "", + email: "", + password: "", + isLoadingInstanceSetting: true, + errors: [], + isLoading: false, + invitation: this.defaultInvitation + } + }, + computed: { + labels() { + let title = this.$pgettext("*/Signup/Title", "Sign Up") + return { + title + } + } + }, +} +</script> + +<!-- Add "scoped" attribute to limit CSS to this component only --> +<style scoped> +</style> diff --git a/front/src/views/content/Base.vue b/front/src/views/content/Base.vue index 4e755ee1a8790c1311d7c0a542f44582758f56e2..bd593be55ec186570cb648b9d40725767b1b7070 100644 --- a/front/src/views/content/Base.vue +++ b/front/src/views/content/Base.vue @@ -6,7 +6,7 @@ :to="{name: 'content.libraries.index'}"><translate translate-context="*/*/*/Noun">Libraries</translate></router-link> <router-link class="ui item" - :to="{name: 'content.libraries.files'}"><translate translate-context="*/*/*/Noun">Tracks</translate></router-link> + :to="{name: 'content.libraries.files'}"><translate translate-context="*/*/*">Tracks</translate></router-link> </nav> <router-view :key="$route.fullPath"></router-view> </main> diff --git a/front/src/views/content/Home.vue b/front/src/views/content/Home.vue index de8a86e256e8b3d9d4bd092c58abb9afc6131895..fb8128b9f29af3c111e99df3493065e1844888d5 100644 --- a/front/src/views/content/Home.vue +++ b/front/src/views/content/Home.vue @@ -15,7 +15,7 @@ </div> <div class="ui segment"> <h2><translate translate-context="Content/Library/Title/Verb">Follow remote libraries</translate></h2> - <p><translate translate-context="Content/Library/Paragraph">You can follow libraries from other users to get access to new music. Public libraries can be followed immediatly, while following a private library requires approval from its owner.</translate></p> + <p><translate translate-context="Content/Library/Paragraph">You can 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.</translate></p> <router-link :to="{name: 'content.remote.index'}" class="ui green button"> <translate translate-context="Content/Library/Button.Label/Verb">Get started</translate> </router-link> diff --git a/front/src/views/content/libraries/Detail.vue b/front/src/views/content/libraries/Detail.vue index d879ab71c7731ae9e1aae82f0f3fc2197675267c..c936baa8256ba2deb248465e324dfafd6bbec2aa 100644 --- a/front/src/views/content/libraries/Detail.vue +++ b/front/src/views/content/libraries/Detail.vue @@ -6,7 +6,7 @@ <detail-area v-else :library="library"> <div class="ui top attached tabular menu"> <a :class="['item', {active: currentTab === 'follows'}]" @click="currentTab = 'follows'"><translate translate-context="Content/Federation/*/Noun">Followers</translate></a> - <a :class="['item', {active: currentTab === 'tracks'}]" @click="currentTab = 'tracks'"><translate translate-context="*/*/*/Noun">Tracks</translate></a> + <a :class="['item', {active: currentTab === 'tracks'}]" @click="currentTab = 'tracks'"><translate translate-context="*/*/*">Tracks</translate></a> <a :class="['item', {active: currentTab === 'edit'}]" @click="currentTab = 'edit'"><translate translate-context="Content/*/Button.Label/Verb">Edit</translate></a> </div> <div :class="['ui', 'bottom', 'attached', 'segment', {hidden: currentTab != 'follows'}]"> @@ -26,7 +26,7 @@ <tr> <th><translate translate-context="Content/Library/Table.Label">User</translate></th> <th><translate translate-context="Content/Library/Table.Label">Date</translate></th> - <th><translate translate-context="Content/Library.Federation/Table.Label (Value is Approved/Rejected)">Status</translate></th> + <th><translate translate-context="*/*/*">Status</translate></th> <th><translate translate-context="Content/Library/Table.Label">Action</translate></th> </tr> </thead> diff --git a/front/src/views/content/libraries/FilesTable.vue b/front/src/views/content/libraries/FilesTable.vue index 9ea4634adcb6360dbc5e8c454405b6deeac11527..4e67eb180a286ce913d8a92495baa873778c8a21 100644 --- a/front/src/views/content/libraries/FilesTable.vue +++ b/front/src/views/content/libraries/FilesTable.vue @@ -9,7 +9,7 @@ </form> </div> <div class="field"> - <label><translate translate-context="Content/Library/*/Noun">Import status</translate></label> + <label><translate translate-context="Content/*/*/Noun">Import status</translate></label> <select class="ui dropdown" @change="addSearchToken('status', $event.target.value)" :value="getTokenValue('status', '')"> <option value=""><translate translate-context="Content/*/Dropdown">All</translate></option> <option value="pending"><translate translate-context="Content/Library/*/Short">Pending</translate></option> @@ -53,13 +53,13 @@ @refresh="fetchData" :filters="actionFilters"> <template slot="header-cells"> - <th><translate translate-context="Content/Track/*/Noun">Title</translate></th> + <th><translate translate-context="*/*/*/Noun">Title</translate></th> <th><translate translate-context="*/*/*/Noun">Artist</translate></th> <th><translate translate-context="*/*/*">Album</translate></th> <th><translate translate-context="*/*/*/Noun">Upload date</translate></th> - <th><translate translate-context="Content/Library/*/Noun">Import status</translate></th> + <th><translate translate-context="Content/*/*/Noun">Import status</translate></th> <th><translate translate-context="Content/*/*">Duration</translate></th> - <th><translate translate-context="Content/Library/*/in MB">Size</translate></th> + <th><translate translate-context="Content/*/*/Noun">Size</translate></th> </template> <template slot="row-cells" slot-scope="scope"> <template v-if="scope.obj.track"> diff --git a/front/src/views/content/libraries/Form.vue b/front/src/views/content/libraries/Form.vue index 93530df41b875cf80c61883eaad6389b92dbc8c0..48c4f8bc37c7e04710250577db50864c54939634 100644 --- a/front/src/views/content/libraries/Form.vue +++ b/front/src/views/content/libraries/Form.vue @@ -12,11 +12,11 @@ <input name="name" v-model="currentName" :placeholder="labels.namePlaceholder" required maxlength="100"> </div> <div class="field"> - <label><translate translate-context="Content/*/Input.Label/Noun">Description</translate></label> + <label><translate translate-context="*/*/*/Noun">Description</translate></label> <textarea v-model="currentDescription" :placeholder="labels.descriptionPlaceholder" maxlength="2000"></textarea> </div> <div class="field"> - <label><translate translate-context="Content/Library/Dropdown.Label">Visibility</translate></label> + <label><translate translate-context="*/*/*">Visibility</translate></label> <p><translate translate-context="Content/Library/Paragraph">You are able to share your library with other people, regardless of its visibility.</translate></p> <select class="ui dropdown" v-model="currentVisibilityLevel"> <option :value="c" v-for="c in ['me', 'instance', 'everyone']">{{ sharedLabels.fields.privacy_level.choices[c] }}</option> diff --git a/front/src/views/content/libraries/Quota.vue b/front/src/views/content/libraries/Quota.vue index 687a825cf78e1d89b5770c98a7cfced695cead7e..f043b54b67d187abb629593666f99ddd9199cbe5 100644 --- a/front/src/views/content/libraries/Quota.vue +++ b/front/src/views/content/libraries/Quota.vue @@ -4,7 +4,7 @@ <div v-if="isLoading" :class="['ui', {'active': isLoading}, 'inverted', 'dimmer']"> <div class="ui text loader"><translate translate-context="Content/Library/Paragraph">Loading usage data…</translate></div> </div> - <div :class="['ui', {'success': progress < 60}, {'yellow': progress >= 60 && progress < 96}, {'error': progress >= 95}, 'progress']"> + <div :class="['ui', {'success': progress < 60}, {'yellow': progress >= 60 && progress < 96}, {'error': progress >= 95}, 'progress']" data-percent=progress> <div class="bar" :style="{width: `${progress}%`}"> <div class="progress">{{ progress }}%</div> </div> @@ -154,4 +154,4 @@ export default { } } } -</script> +</script> \ No newline at end of file diff --git a/front/src/views/content/remote/Card.vue b/front/src/views/content/remote/Card.vue index b78f7f220af0b02438d87740e3ab3c1d2d7981be..0fbb94c0cc76d7d6f10e5221ea6e4aa29797e3a6 100644 --- a/front/src/views/content/remote/Card.vue +++ b/front/src/views/content/remote/Card.vue @@ -3,17 +3,30 @@ <div class="content"> <div class="header"> {{ library.name }} + <div class="ui right floated dropdown"> + <i class="ellipsis vertical grey large icon nomargin"></i> + <div class="menu"> + <div + role="button" + v-for="obj in getReportableObjs({library, account: library.actor})" + :key="obj.target.type + obj.target.id" + class="item basic" + @click.stop.prevent="$store.dispatch('moderation/report', obj.target)"> + <i class="share icon" /> {{ obj.label }} + </div> + </div> + </div> <span v-if="library.privacy_level === 'me'" class="right floated" :data-tooltip="labels.tooltips.me"> - <i class="small lock icon"></i> + <i class="small lock grey icon"></i> </span> <span v-else-if="library.privacy_level === 'everyone'" class="right floated" :data-tooltip="labels.tooltips.everyone"> - <i class="small globe icon"></i> + <i class="small globe grey icon"></i> </span> </div> <div class="meta"> @@ -120,8 +133,11 @@ </template> <script> import axios from 'axios' +import ReportMixin from '@/components/mixins/Report' +import jQuery from 'jquery' export default { + mixins: [ReportMixin], props: { library: {type: Object, required: true}, displayFollow: {type: Boolean, default: true}, @@ -136,6 +152,18 @@ export default { latestScan: this.library.latest_scan, } }, + mounted () { + let self = this + jQuery(this.$el).find('.ui.dropdown').dropdown({ + selectOnKeydown: false, + action: function (text, value, $el) { + // used ton ensure focusing the dropdown and clicking via keyboard + // works as expected + self.$refs[$el.data('ref')].click() + jQuery(self.$el).find('.ui.dropdown').dropdown('hide') + } + }) + }, computed: { labels () { let me = this.$pgettext('Content/Library/Card.Help text', 'This library is private and your approval from its owner is needed to access its content') diff --git a/front/src/views/playlists/Detail.vue b/front/src/views/playlists/Detail.vue index 6fe7a4c8a1874d588b30363209aaf62ed4fdfcb0..3b6b9000bdd5295d5e7a5f548c537074c627ea96 100644 --- a/front/src/views/playlists/Detail.vue +++ b/front/src/views/playlists/Detail.vue @@ -31,6 +31,14 @@ <template v-if="edit"><translate translate-context="Content/Playlist/Button.Label/Verb">End edition</translate></template> <template v-else><translate translate-context="Content/*/Button.Label/Verb">Edit</translate></template> </button> + <button + class="ui icon labeled button" + v-if="playlist.privacy_level === 'everyone' && playlist.is_playable" + @click="showEmbedModal = !showEmbedModal"> + <i class="code icon"></i> + <translate translate-context="Content/*/Button.Label/Verb">Embed</translate> + </button> + <dangerous-button v-if="$store.state.auth.profile && playlist.user.id === $store.state.auth.profile.id" class="labeled icon" :action="deletePlaylist"> <i class="trash icon"></i> <translate translate-context="*/*/*/Verb">Delete</translate> <p slot="modal-header" v-translate="{playlist: playlist.name}" translate-context="Popup/Playlist/Title/Call to action" :translate-params="{playlist: playlist.name}"> @@ -40,6 +48,23 @@ <div slot="modal-confirm"><translate translate-context="Popup/Playlist/Button.Label/Verb">Delete playlist</translate></div> </dangerous-button> </div> + <modal v-if="playlist.privacy_level === 'everyone' && playlist.is_playable" :show.sync="showEmbedModal"> + <div class="header"> + <translate translate-context="Popup/Album/Title/Verb">Embed this playlist on your website</translate> + </div> + <div class="content"> + <div class="description"> + <embed-wizard type="playlist" :id="playlist.id" /> + + </div> + </div> + <div class="actions"> + <div class="ui deny button"> + <translate translate-context="*/*/Button.Label/Verb">Cancel</translate> + </div> + </div> + </modal> + </section> <section class="ui vertical stripe segment"> <template v-if="edit"> @@ -49,7 +74,7 @@ :playlist="playlist" :playlist-tracks="playlistTracks"></playlist-editor> </template> <template v-else> - <h2><translate translate-context="*/*/*/Noun">Tracks</translate></h2> + <h2><translate translate-context="*/*/*">Tracks</translate></h2> <track-table :display-position="true" :tracks="tracks"></track-table> </template> </section> @@ -61,6 +86,8 @@ import TrackTable from "@/components/audio/track/Table" import RadioButton from "@/components/radios/Button" import PlayButton from "@/components/audio/PlayButton" import PlaylistEditor from "@/components/playlists/Editor" +import EmbedWizard from "@/components/audio/EmbedWizard" +import Modal from '@/components/semantic/Modal' export default { props: { @@ -71,7 +98,9 @@ export default { PlaylistEditor, TrackTable, PlayButton, - RadioButton + RadioButton, + Modal, + EmbedWizard, }, data: function() { return { @@ -79,7 +108,8 @@ export default { isLoading: false, playlist: null, tracks: [], - playlistTracks: [] + playlistTracks: [], + showEmbedModal: false, } }, created: function() { @@ -88,7 +118,7 @@ export default { computed: { labels() { return { - playlist: this.$pgettext('Head/Playlist/Title', 'Playlist') + playlist: this.$pgettext('*/*/*', 'Playlist') } } }, diff --git a/front/src/views/playlists/List.vue b/front/src/views/playlists/List.vue index 160b7b83c3785ee44bb3b449c97ef99bc54a756b..1ff56b5d5492b8692d5ce63be73447fb1312a148 100644 --- a/front/src/views/playlists/List.vue +++ b/front/src/views/playlists/List.vue @@ -113,14 +113,17 @@ export default { }, methods: { updateQueryString: _.debounce(function() { - this.$router.replace({ - query: { + history.pushState( + {}, + null, + this.$route.path + '?' + new URLSearchParams( + { query: this.query, page: this.page, paginateBy: this.paginateBy, ordering: this.getOrderingAsString() - } - }) + }).toString() + ) }, 250), fetchData: _.debounce(function() { var self = this diff --git a/front/src/views/radios/Detail.vue b/front/src/views/radios/Detail.vue index d15aaf366a73477d445212ef2210c5d6d4f94a3f..355ed8e84a2333649405363b6fbf311128147554 100644 --- a/front/src/views/radios/Detail.vue +++ b/front/src/views/radios/Detail.vue @@ -32,7 +32,7 @@ </div> </section> <section class="ui vertical stripe segment"> - <h2><translate translate-context="*/*/*/Noun">Tracks</translate></h2> + <h2><translate translate-context="*/*/*">Tracks</translate></h2> <track-table :tracks="tracks"></track-table> <div class="ui center aligned basic segment"> <pagination diff --git a/front/vue.config.js b/front/vue.config.js index 4b1d9f5d400f87cb11c67dca41bfe6685244eb1c..ffaf1cede62e5d616899ef1cac6eef791f6f908b 100644 --- a/front/vue.config.js +++ b/front/vue.config.js @@ -1,7 +1,9 @@ const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin; const webpack = require('webpack'); - +const PurgecssPlugin = require('purgecss-webpack-plugin') +const glob = require('glob-all') +const path = require('path') let plugins = [ // do not include moment.js locales since it's quite heavy new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/), @@ -9,8 +11,20 @@ let plugins = [ if (process.env.BUNDLE_ANALYZE === '1') { plugins.push(new BundleAnalyzerPlugin()) } +plugins.push( + new PurgecssPlugin({ + paths: glob.sync([ + path.join(__dirname, './public/index.html'), + path.join(__dirname, './public/embed.html'), + path.join(__dirname, './**/*.vue'), + path.join(__dirname, './src/**/*.js') + ]), + whitelist: ['scale'] + }), +) module.exports = { baseUrl: process.env.BASE_URL || '/front/', + productionSourceMap: false, pages: { embed: { entry: 'src/embed.js', @@ -30,11 +44,7 @@ module.exports = { }, configureWebpack: { plugins: plugins, - resolve: { - alias: { - 'vue$': 'vue/dist/vue.esm.js' - } - } + devtool: false }, devServer: { disableHostCheck: true, diff --git a/front/yarn.lock b/front/yarn.lock index 5d20f4ac1bea08bd5ab6eb8cbd1fe27de24d78b4..1bca8dd16527c6c7611daa617b8fbf8de73a4873 100644 --- a/front/yarn.lock +++ b/front/yarn.lock @@ -10,33 +10,33 @@ "@babel/highlight" "^7.0.0" "@babel/core@^7.0.0": - version "7.2.2" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.2.2.tgz#07adba6dde27bb5ad8d8672f15fde3e08184a687" - integrity sha512-59vB0RWt09cAct5EIe58+NzGP4TFSD3Bz//2/ELy3ZeTeKF6VTD1AXlH8BGGbCX0PuobZBsIzO7IAI9PH67eKw== + version "7.4.5" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.4.5.tgz#081f97e8ffca65a9b4b0fdc7e274e703f000c06a" + integrity sha512-OvjIh6aqXtlsA8ujtGKfC7LYWksYSX8yQcM8Ay3LuvVeQ63lcOKgoZWVqcpFwkd29aYU9rVx7jxhfhiEDV9MZA== dependencies: "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.2.2" - "@babel/helpers" "^7.2.0" - "@babel/parser" "^7.2.2" - "@babel/template" "^7.2.2" - "@babel/traverse" "^7.2.2" - "@babel/types" "^7.2.2" + "@babel/generator" "^7.4.4" + "@babel/helpers" "^7.4.4" + "@babel/parser" "^7.4.5" + "@babel/template" "^7.4.4" + "@babel/traverse" "^7.4.5" + "@babel/types" "^7.4.4" convert-source-map "^1.1.0" debug "^4.1.0" json5 "^2.1.0" - lodash "^4.17.10" + lodash "^4.17.11" resolve "^1.3.2" semver "^5.4.1" source-map "^0.5.0" -"@babel/generator@^7.2.2": - version "7.2.2" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.2.2.tgz#18c816c70962640eab42fe8cae5f3947a5c65ccc" - integrity sha512-I4o675J/iS8k+P38dvJ3IBGqObLXyQLTxtrR4u9cSUJOURvafeEWb/pFMOTwtNrmq73mJzyF6ueTbO1BtN0Zeg== +"@babel/generator@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.4.4.tgz#174a215eb843fc392c7edcaabeaa873de6e8f041" + integrity sha512-53UOLK6TVNqKxf7RUh8NE851EHRxOOeVXKbK2bivdb+iziMyk03Sr4eaE9OELCbyZAAafAKPDwF2TPUES5QbxQ== dependencies: - "@babel/types" "^7.2.2" + "@babel/types" "^7.4.4" jsesc "^2.5.1" - lodash "^4.17.10" + lodash "^4.17.11" source-map "^0.5.0" trim-right "^1.0.1" @@ -55,34 +55,35 @@ "@babel/helper-explode-assignable-expression" "^7.1.0" "@babel/types" "^7.0.0" -"@babel/helper-call-delegate@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.1.0.tgz#6a957f105f37755e8645343d3038a22e1449cc4a" - integrity sha512-YEtYZrw3GUK6emQHKthltKNZwszBcHK58Ygcis+gVUrF4/FmTVr5CCqQNSfmvg2y+YDEANyYoaLz/SHsnusCwQ== +"@babel/helper-call-delegate@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.4.4.tgz#87c1f8ca19ad552a736a7a27b1c1fcf8b1ff1f43" + integrity sha512-l79boDFJ8S1c5hvQvG+rc+wHw6IuH7YldmRKsYtpbawsxURu/paVy57FZMomGK22/JckepaikOkY0MoAmdyOlQ== dependencies: - "@babel/helper-hoist-variables" "^7.0.0" - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.0.0" + "@babel/helper-hoist-variables" "^7.4.4" + "@babel/traverse" "^7.4.4" + "@babel/types" "^7.4.4" -"@babel/helper-create-class-features-plugin@^7.2.1", "@babel/helper-create-class-features-plugin@^7.2.2": - version "7.2.2" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.2.2.tgz#aac79552e41c94716a804d371e943f20171df0c5" - integrity sha512-Q4qZE5wS3NWpOS6UV9yhIS/NmSyf2keF0E0IwDvx8WxTheVopVIY6BSQ/0vz72OTTruz0cOA2yIUh6Kdg3qprA== +"@babel/helper-create-class-features-plugin@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.4.4.tgz#fc3d690af6554cc9efc607364a82d48f58736dba" + integrity sha512-UbBHIa2qeAGgyiNR9RszVF7bUHEdgS4JAUNT8SiqrAN6YJVxlOxeLr5pBzb5kan302dejJ9nla4RyKcR1XT6XA== dependencies: "@babel/helper-function-name" "^7.1.0" "@babel/helper-member-expression-to-functions" "^7.0.0" "@babel/helper-optimise-call-expression" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.1.0" + "@babel/helper-replace-supers" "^7.4.4" + "@babel/helper-split-export-declaration" "^7.4.4" -"@babel/helper-define-map@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.1.0.tgz#3b74caec329b3c80c116290887c0dd9ae468c20c" - integrity sha512-yPPcW8dc3gZLN+U1mhYV91QU3n5uTbx7DUdf8NnPbjS0RMwBuHi9Xt2MUgppmNz7CJxTBWsGczTiEp1CSOTPRg== +"@babel/helper-define-map@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.4.4.tgz#6969d1f570b46bdc900d1eba8e5d59c48ba2c12a" + integrity sha512-IX3Ln8gLhZpSuqHJSnTNBWGDE9kdkTEWl21A/K7PQ00tseBwbqCHTvNLHSBd9M0R5rER4h5Rsvj9vw0R5SieBg== dependencies: "@babel/helper-function-name" "^7.1.0" - "@babel/types" "^7.0.0" - lodash "^4.17.10" + "@babel/types" "^7.4.4" + lodash "^4.17.11" "@babel/helper-explode-assignable-expression@^7.1.0": version "7.1.0" @@ -108,12 +109,12 @@ dependencies: "@babel/types" "^7.0.0" -"@babel/helper-hoist-variables@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.0.0.tgz#46adc4c5e758645ae7a45deb92bab0918c23bb88" - integrity sha512-Ggv5sldXUeSKsuzLkddtyhyHe2YantsxWKNi7A+7LeD12ExRDWTRk29JCXpaHPAbMaIPZSil7n+lq78WY2VY7w== +"@babel/helper-hoist-variables@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz#0298b5f25c8c09c53102d52ac4a98f773eb2850a" + integrity sha512-VYk2/H/BnYbZDDg39hr3t2kKyifAm1W6zHRfhx8jGjIHpQEBv9dry7oQ2f3+J703TLu69nYdxsovl0XYfcnK4w== dependencies: - "@babel/types" "^7.0.0" + "@babel/types" "^7.4.4" "@babel/helper-member-expression-to-functions@^7.0.0": version "7.0.0" @@ -129,17 +130,17 @@ dependencies: "@babel/types" "^7.0.0" -"@babel/helper-module-transforms@^7.1.0": - version "7.2.2" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.2.2.tgz#ab2f8e8d231409f8370c883d20c335190284b963" - integrity sha512-YRD7I6Wsv+IHuTPkAmAS4HhY0dkPobgLftHp0cRGZSdrRvmZY8rFvae/GVu3bD00qscuvK3WPHB3YdNpBXUqrA== +"@babel/helper-module-transforms@^7.1.0", "@babel/helper-module-transforms@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.4.4.tgz#96115ea42a2f139e619e98ed46df6019b94414b8" + integrity sha512-3Z1yp8TVQf+B4ynN7WoHPKS8EkdTbgAEy0nU0rs/1Kw4pDgmvYH3rz3aI11KgxKCba2cn7N+tqzV1mY2HMN96w== dependencies: "@babel/helper-module-imports" "^7.0.0" "@babel/helper-simple-access" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.0.0" - "@babel/template" "^7.2.2" - "@babel/types" "^7.2.2" - lodash "^4.17.10" + "@babel/helper-split-export-declaration" "^7.4.4" + "@babel/template" "^7.4.4" + "@babel/types" "^7.4.4" + lodash "^4.17.11" "@babel/helper-optimise-call-expression@^7.0.0": version "7.0.0" @@ -153,12 +154,12 @@ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250" integrity sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA== -"@babel/helper-regex@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.0.0.tgz#2c1718923b57f9bbe64705ffe5640ac64d9bdb27" - integrity sha512-TR0/N0NDCcUIUEbqV6dCO+LptmmSQFQ7q70lfcEB4URsjD0E1HzicrwUH+ap6BAQ2jhCX9Q4UqZy4wilujWlkg== +"@babel/helper-regex@^7.0.0", "@babel/helper-regex@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.4.4.tgz#a47e02bc91fb259d2e6727c2a30013e3ac13c4a2" + integrity sha512-Y5nuB/kESmR3tKjU8Nkn1wMGEx1tjJX076HBMeL3XLQCu6vA/YRzuTW0bbb+qRnXvQGn+d6Rx953yffl8vEy7Q== dependencies: - lodash "^4.17.10" + lodash "^4.17.11" "@babel/helper-remap-async-to-generator@^7.1.0": version "7.1.0" @@ -171,15 +172,15 @@ "@babel/traverse" "^7.1.0" "@babel/types" "^7.0.0" -"@babel/helper-replace-supers@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.1.0.tgz#5fc31de522ec0ef0899dc9b3e7cf6a5dd655f362" - integrity sha512-BvcDWYZRWVuDeXTYZWxekQNO5D4kO55aArwZOTFXw6rlLQA8ZaDicJR1sO47h+HrnCiDFiww0fSPV0d713KBGQ== +"@babel/helper-replace-supers@^7.1.0", "@babel/helper-replace-supers@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.4.4.tgz#aee41783ebe4f2d3ab3ae775e1cc6f1a90cefa27" + integrity sha512-04xGEnd+s01nY1l15EuMS1rfKktNF+1CkKmHoErDppjAAZL+IUBZpzT748x262HF7fibaQPhbvWUl5HeSt1EXg== dependencies: "@babel/helper-member-expression-to-functions" "^7.0.0" "@babel/helper-optimise-call-expression" "^7.0.0" - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.0.0" + "@babel/traverse" "^7.4.4" + "@babel/types" "^7.4.4" "@babel/helper-simple-access@^7.1.0": version "7.1.0" @@ -189,12 +190,12 @@ "@babel/template" "^7.1.0" "@babel/types" "^7.0.0" -"@babel/helper-split-export-declaration@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz#3aae285c0311c2ab095d997b8c9a94cad547d813" - integrity sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag== +"@babel/helper-split-export-declaration@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz#ff94894a340be78f53f06af038b205c49d993677" + integrity sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q== dependencies: - "@babel/types" "^7.0.0" + "@babel/types" "^7.4.4" "@babel/helper-wrap-function@^7.1.0": version "7.2.0" @@ -206,14 +207,14 @@ "@babel/traverse" "^7.1.0" "@babel/types" "^7.2.0" -"@babel/helpers@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.2.0.tgz#8335f3140f3144270dc63c4732a4f8b0a50b7a21" - integrity sha512-Fr07N+ea0dMcMN8nFpuK6dUIT7/ivt9yKQdEEnjVS83tG2pHwPi03gYmk/tyuwONnZ+sY+GFFPlWGgCtW1hF9A== +"@babel/helpers@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.4.4.tgz#868b0ef59c1dd4e78744562d5ce1b59c89f2f2a5" + integrity sha512-igczbR/0SeuPR8RFfC7tGrbdTbFL3QTvH6D+Z6zNxnTe//GyqmtHmDkzrqDmyZ3eSwPqB/LhyKoU5DXsp+Vp2A== dependencies: - "@babel/template" "^7.1.2" - "@babel/traverse" "^7.1.5" - "@babel/types" "^7.2.0" + "@babel/template" "^7.4.4" + "@babel/traverse" "^7.4.4" + "@babel/types" "^7.4.4" "@babel/highlight@^7.0.0": version "7.0.0" @@ -224,10 +225,10 @@ esutils "^2.0.2" js-tokens "^4.0.0" -"@babel/parser@^7.0.0", "@babel/parser@^7.2.2": - version "7.2.2" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.2.2.tgz#37ebdbc88a2e1ebc6c8dd3d35ea9436e3e39e477" - integrity sha512-UNTmQ5cSLDeBGBl+s7JeowkqIHgmFAGBnLDdIzFmUNSuS5JF0XBcN59jsh/vJO/YjfsBqMxhMjoFGmNExmf0FA== +"@babel/parser@^7.0.0", "@babel/parser@^7.4.4", "@babel/parser@^7.4.5": + version "7.4.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.4.5.tgz#04af8d5d5a2b044a2a1bffacc1e5e6673544e872" + integrity sha512-9mUqkL1FF5T7f0WDFfAoDdiMVPWsdD1gZYzSnaXsxUCUqzuch/8of9G3VUSNiZmMBoRxT3neyVsqeiL/ZPcjew== "@babel/plugin-proposal-async-generator-functions@^7.2.0": version "7.2.0" @@ -239,19 +240,19 @@ "@babel/plugin-syntax-async-generators" "^7.2.0" "@babel/plugin-proposal-class-properties@^7.0.0": - version "7.2.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.2.1.tgz#c734a53e0a1ec40fe5c22ee5069d26da3b187d05" - integrity sha512-/4FKFChkQ2Jgb8lBDsvFX496YTi7UWTetVgS8oJUpX1e/DlaoeEK57At27ug8Hu2zI2g8bzkJ+8k9qrHZRPGPA== + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.4.4.tgz#93a6486eed86d53452ab9bab35e368e9461198ce" + integrity sha512-WjKTI8g8d5w1Bc9zgwSz2nfrsNQsXcCf9J9cdCvrJV6RF56yztwm4TmJC0MgJ9tvwO9gUA/mcYe89bLdGfiXFg== dependencies: - "@babel/helper-create-class-features-plugin" "^7.2.1" + "@babel/helper-create-class-features-plugin" "^7.4.4" "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-proposal-decorators@^7.1.0": - version "7.2.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.2.2.tgz#e7ce762732760542a5268a49bd19251f06dccd08" - integrity sha512-ylkKcbbS5IUocCti0gk762LMiMODWmlwRzyj1OCbPa83vSBlTKLmeBo9KMhoNpydibPcVwrP5rYJd0cKTVu7hw== + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.4.4.tgz#de9b2a1a8ab0196f378e2a82f10b6e2a36f21cc0" + integrity sha512-z7MpQz3XC/iQJWXH9y+MaWcLPNSMY9RQSthrLzak8R8hCj0fuyNk+Dzi9kfNe/JxxlWQ2g7wkABbgWjW36MTcw== dependencies: - "@babel/helper-create-class-features-plugin" "^7.2.2" + "@babel/helper-create-class-features-plugin" "^7.4.4" "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-decorators" "^7.2.0" @@ -263,10 +264,10 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-json-strings" "^7.2.0" -"@babel/plugin-proposal-object-rest-spread@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.2.0.tgz#88f5fec3e7ad019014c97f7ee3c992f0adbf7fb8" - integrity sha512-1L5mWLSvR76XYUQJXkd/EEQgjq8HHRP6lQuZTTg0VA4tTGPpGemmCdAfQIz1rzEuWAm+ecP8PyyEm30jC1eQCg== +"@babel/plugin-proposal-object-rest-spread@^7.3.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.4.4.tgz#1ef173fcf24b3e2df92a678f027673b55e7e3005" + integrity sha512-dMBG6cSPBbHeEBdFXeQ2QLc5gUpg4Vkaz8octD4aoW/ISO+jBOcsuxYL7bsb5WSu8RLP6boxrBIALEHgoHtO9g== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-object-rest-spread" "^7.2.0" @@ -280,13 +281,13 @@ "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" "@babel/plugin-proposal-unicode-property-regex@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.2.0.tgz#abe7281fe46c95ddc143a65e5358647792039520" - integrity sha512-LvRVYb7kikuOtIoUeWTkOxQEV1kYvL5B6U3iWEGCzPNRus1MzJweFqORTj+0jkxozkTSYNJozPOddxmqdqsRpw== + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.4.tgz#501ffd9826c0b91da22690720722ac7cb1ca9c78" + integrity sha512-j1NwnOqMG9mFUOH58JTFsA/+ZYzQLUZ/drqWUqxCYLGeu2JFZL8YrNC9hBxKmWtAuOCHPcRpgv7fhap09Fb4kA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.0.0" - regexpu-core "^4.2.0" + "@babel/helper-regex" "^7.4.4" + regexpu-core "^4.5.4" "@babel/plugin-syntax-async-generators@^7.2.0": version "7.2.0" @@ -316,7 +317,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-syntax-jsx@^7.0.0": +"@babel/plugin-syntax-jsx@^7.0.0", "@babel/plugin-syntax-jsx@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.2.0.tgz#0b85a3b4bc7cdf4cc4b8bf236335b907ca22e7c7" integrity sha512-VyN4QANJkRW6lDBmENzRszvZf3/4AXaj9YR7GwrWeeN9tEBPuXbmDYVU9bYBN0D70zCWVwUy0HWq2553VCb6Hw== @@ -344,10 +345,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-async-to-generator@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.2.0.tgz#68b8a438663e88519e65b776f8938f3445b1a2ff" - integrity sha512-CEHzg4g5UraReozI9D4fblBYABs7IM6UerAVG7EJVrTLC5keh00aEuLUT+O40+mJCEzaXkYfTCUKIyeDfMOFFQ== +"@babel/plugin-transform-async-to-generator@^7.3.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.4.4.tgz#a3f1d01f2f21cadab20b33a82133116f14fb5894" + integrity sha512-YiqW2Li8TXmzgbXw+STsSqPBPFnGviiaSp6CYOq55X8GQ2SGVLrXB6pNid8HkqkZAzOH6knbai3snhP7v0fNwA== dependencies: "@babel/helper-module-imports" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" @@ -360,26 +361,26 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-block-scoping@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.2.0.tgz#f17c49d91eedbcdf5dd50597d16f5f2f770132d4" - integrity sha512-vDTgf19ZEV6mx35yiPJe4fS02mPQUUcBNwWQSZFXSzTSbsJFQvHt7DqyS3LK8oOWALFOsJ+8bbqBgkirZteD5Q== +"@babel/plugin-transform-block-scoping@^7.3.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.4.4.tgz#c13279fabf6b916661531841a23c4b7dae29646d" + integrity sha512-jkTUyWZcTrwxu5DD4rWz6rDB5Cjdmgz6z7M7RLXOJyCUkFBawssDGcGh8M/0FTSB87avyJI1HsTwUXp9nKA1PA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" - lodash "^4.17.10" + lodash "^4.17.11" -"@babel/plugin-transform-classes@^7.2.0": - version "7.2.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.2.2.tgz#6c90542f210ee975aa2aa8c8b5af7fa73a126953" - integrity sha512-gEZvgTy1VtcDOaQty1l10T3jQmJKlNVxLDCs+3rCVPr6nMkODLELxViq5X9l+rfxbie3XrfrMCYYY6eX3aOcOQ== +"@babel/plugin-transform-classes@^7.3.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.4.4.tgz#0ce4094cdafd709721076d3b9c38ad31ca715eb6" + integrity sha512-/e44eFLImEGIpL9qPxSRat13I5QNRgBLu2hOQJCF7VLy/otSM/sypV1+XaIw5+502RX/+6YaSAPmldk+nhHDPw== dependencies: "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-define-map" "^7.1.0" + "@babel/helper-define-map" "^7.4.4" "@babel/helper-function-name" "^7.1.0" "@babel/helper-optimise-call-expression" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.0.0" + "@babel/helper-replace-supers" "^7.4.4" + "@babel/helper-split-export-declaration" "^7.4.4" globals "^11.1.0" "@babel/plugin-transform-computed-properties@^7.2.0": @@ -390,20 +391,20 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-destructuring@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.2.0.tgz#e75269b4b7889ec3a332cd0d0c8cff8fed0dc6f3" - integrity sha512-coVO2Ayv7g0qdDbrNiadE4bU7lvCd9H539m2gMknyVjjMdwF/iCOM7R+E8PkntoqLkltO0rk+3axhpp/0v68VQ== + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.4.4.tgz#9d964717829cc9e4b601fc82a26a71a4d8faf20f" + integrity sha512-/aOx+nW0w8eHiEHm+BTERB2oJn5D127iye/SUQl7NjHy0lf+j7h4MKMMSOwdazGq9OxgiNADncE+SRJkCxjZpQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-dotall-regex@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.2.0.tgz#f0aabb93d120a8ac61e925ea0ba440812dbe0e49" - integrity sha512-sKxnyHfizweTgKZf7XsXu/CNupKhzijptfTM+bozonIuyVrLWVUvYjE2bhuSBML8VQeMxq4Mm63Q9qvcvUcciQ== + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.4.4.tgz#361a148bc951444312c69446d76ed1ea8e4450c3" + integrity sha512-P05YEhRc2h53lZDjRPk/OektxCVevFzZs2Gfjd545Wde3k+yFDbXORgl2e0xpbq8mLcKJ7Idss4fAg0zORN/zg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.0.0" - regexpu-core "^4.1.3" + "@babel/helper-regex" "^7.4.4" + regexpu-core "^4.5.4" "@babel/plugin-transform-duplicate-keys@^7.2.0": version "7.2.0" @@ -421,16 +422,16 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-for-of@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.2.0.tgz#ab7468befa80f764bb03d3cb5eef8cc998e1cad9" - integrity sha512-Kz7Mt0SsV2tQk6jG5bBv5phVbkd0gd27SgYD4hH1aLMJRchM0dzHaXvrWhVZ+WxAlDoAKZ7Uy3jVTW2mKXQ1WQ== + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz#0267fc735e24c808ba173866c6c4d1440fc3c556" + integrity sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-function-name@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.2.0.tgz#f7930362829ff99a3174c39f0afcc024ef59731a" - integrity sha512-kWgksow9lHdvBC2Z4mxTsvc7YdY7w/V6B2vy9cTIPtLEE9NhwoWivaxdNM/S37elu5bqlLP/qOY906LukO9lkQ== + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.4.tgz#e1436116abb0610c2259094848754ac5230922ad" + integrity sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA== dependencies: "@babel/helper-function-name" "^7.1.0" "@babel/helper-plugin-utils" "^7.0.0" @@ -451,20 +452,20 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-modules-commonjs@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.2.0.tgz#c4f1933f5991d5145e9cfad1dfd848ea1727f404" - integrity sha512-V6y0uaUQrQPXUrmj+hgnks8va2L0zcZymeU7TtWEgdRLNkceafKXEduv7QzgQAE4lT+suwooG9dC7LFhdRAbVQ== + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.4.4.tgz#0bef4713d30f1d78c2e59b3d6db40e60192cac1e" + integrity sha512-4sfBOJt58sEo9a2BQXnZq+Q3ZTSAUXyK3E30o36BOGnJ+tvJ6YSxF0PG6kERvbeISgProodWuI9UVG3/FMY6iw== dependencies: - "@babel/helper-module-transforms" "^7.1.0" + "@babel/helper-module-transforms" "^7.4.4" "@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-simple-access" "^7.1.0" -"@babel/plugin-transform-modules-systemjs@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.2.0.tgz#912bfe9e5ff982924c81d0937c92d24994bb9068" - integrity sha512-aYJwpAhoK9a+1+O625WIjvMY11wkB/ok0WClVwmeo3mCjcNRjt+/8gHWrB5i+00mUju0gWsBkQnPpdvQ7PImmQ== +"@babel/plugin-transform-modules-systemjs@^7.3.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.4.4.tgz#dc83c5665b07d6c2a7b224c00ac63659ea36a405" + integrity sha512-MSiModfILQc3/oqnG7NrP1jHaSPryO6tA2kOMmAQApz5dayPxWiHqmq4sWH2xF5LcQK56LlbKByCd8Aah/OIkQ== dependencies: - "@babel/helper-hoist-variables" "^7.0.0" + "@babel/helper-hoist-variables" "^7.4.4" "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-modules-umd@^7.2.0": @@ -475,10 +476,17 @@ "@babel/helper-module-transforms" "^7.1.0" "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-transform-named-capturing-groups-regex@^7.3.0": + version "7.4.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.5.tgz#9d269fd28a370258199b4294736813a60bbdd106" + integrity sha512-z7+2IsWafTBbjNsOxU/Iv5CvTJlr5w4+HGu1HovKYTtgJ362f7kBcQglkfmlspKKZ3bgrbSGvLfNx++ZJgCWsg== + dependencies: + regexp-tree "^0.1.6" + "@babel/plugin-transform-new-target@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.0.0.tgz#ae8fbd89517fa7892d20e6564e641e8770c3aa4a" - integrity sha512-yin069FYjah+LbqfGeTfzIBODex/e++Yfa0rH0fpfam9uTbuEeEOx5GLGr210ggOV77mVRNoeqSYqeuaqSzVSw== + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz#18d120438b0cc9ee95a47f2c72bc9768fbed60a5" + integrity sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" @@ -491,25 +499,25 @@ "@babel/helper-replace-supers" "^7.1.0" "@babel/plugin-transform-parameters@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.2.0.tgz#0d5ad15dc805e2ea866df4dd6682bfe76d1408c2" - integrity sha512-kB9+hhUidIgUoBQ0MsxMewhzr8i60nMa2KgeJKQWYrqQpqcBYtnpR+JgkadZVZoaEZ/eKu9mclFaVwhRpLNSzA== + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz#7556cf03f318bd2719fe4c922d2d808be5571e16" + integrity sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw== dependencies: - "@babel/helper-call-delegate" "^7.1.0" + "@babel/helper-call-delegate" "^7.4.4" "@babel/helper-get-function-arity" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-regenerator@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.0.0.tgz#5b41686b4ed40bef874d7ed6a84bdd849c13e0c1" - integrity sha512-sj2qzsEx8KDVv1QuJc/dEfilkg3RRPvPYx/VnKLtItVQRWt1Wqf5eVCOLZm29CiGFfYYsA3VPjfizTCV0S0Dlw== +"@babel/plugin-transform-regenerator@^7.3.4": + version "7.4.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.5.tgz#629dc82512c55cee01341fb27bdfcb210354680f" + integrity sha512-gBKRh5qAaCWntnd09S8QC7r3auLCqq5DI6O0DlfoyDjslSBVqBibrMdsqO+Uhmx3+BlOmE/Kw1HFxmGbv0N9dA== dependencies: - regenerator-transform "^0.13.3" + regenerator-transform "^0.14.0" -"@babel/plugin-transform-runtime@^7.0.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.2.0.tgz#566bc43f7d0aedc880eaddbd29168d0f248966ea" - integrity sha512-jIgkljDdq4RYDnJyQsiWbdvGeei/0MOTtSHKO/rfbd/mXBxNpdlulMx49L0HQ4pug1fXannxoqCI+fYSle9eSw== +"@babel/plugin-transform-runtime@^7.4.0": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.4.4.tgz#a50f5d16e9c3a4ac18a1a9f9803c107c380bce08" + integrity sha512-aMVojEjPszvau3NRg+TIH14ynZLvPewH4xhlCW1w6A3rkxTS1m4uwzRclYR9oS+rl/dr+kT+pzbfHuAWP/lc7Q== dependencies: "@babel/helper-module-imports" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" @@ -539,9 +547,9 @@ "@babel/helper-regex" "^7.0.0" "@babel/plugin-transform-template-literals@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.2.0.tgz#d87ed01b8eaac7a92473f608c97c089de2ba1e5b" - integrity sha512-FkPix00J9A/XWXv4VoKJBMeSkyY9x/TqIh76wzcdfl57RJJcf8CehQ08uwfhCDNtRQYtHQKBTwKZDEyjE13Lwg== + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz#9d28fea7bbce637fb7612a0750989d8321d4bcb0" + integrity sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g== dependencies: "@babel/helper-annotate-as-pure" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" @@ -554,34 +562,35 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-unicode-regex@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.2.0.tgz#4eb8db16f972f8abb5062c161b8b115546ade08b" - integrity sha512-m48Y0lMhrbXEJnVUaYly29jRXbQ3ksxPrS1Tg8t+MHqzXhtBYAvI51euOBaoAlZLPHsieY9XPVMf80a5x0cPcA== + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.4.4.tgz#ab4634bb4f14d36728bf5978322b35587787970f" + integrity sha512-il+/XdNw01i93+M9J9u4T7/e/Ue/vWfNZE4IRUQjplu2Mqb/AFTDimkw2tdEdSH50wuQXZAbXSql0UphQke+vA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.0.0" - regexpu-core "^4.1.3" + "@babel/helper-regex" "^7.4.4" + regexpu-core "^4.5.4" -"@babel/preset-env@^7.0.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.2.0.tgz#a5030e7e4306af5a295dd5d7c78dc5464af3fee2" - integrity sha512-haGR38j5vOGVeBatrQPr3l0xHbs14505DcM57cbJy48kgMFvvHHoYEhHuRV+7vi559yyAUAVbTWzbK/B/pzJng== +"@babel/preset-env@^7.0.0 < 7.4.0": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.3.4.tgz#887cf38b6d23c82f19b5135298bdb160062e33e1" + integrity sha512-2mwqfYMK8weA0g0uBKOt4FE3iEodiHy9/CW0b+nWXcbL+pGzLx8ESYc+j9IIxr6LTDHWKgPm71i9smo02bw+gA== dependencies: "@babel/helper-module-imports" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-proposal-async-generator-functions" "^7.2.0" "@babel/plugin-proposal-json-strings" "^7.2.0" - "@babel/plugin-proposal-object-rest-spread" "^7.2.0" + "@babel/plugin-proposal-object-rest-spread" "^7.3.4" "@babel/plugin-proposal-optional-catch-binding" "^7.2.0" "@babel/plugin-proposal-unicode-property-regex" "^7.2.0" "@babel/plugin-syntax-async-generators" "^7.2.0" + "@babel/plugin-syntax-json-strings" "^7.2.0" "@babel/plugin-syntax-object-rest-spread" "^7.2.0" "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" "@babel/plugin-transform-arrow-functions" "^7.2.0" - "@babel/plugin-transform-async-to-generator" "^7.2.0" + "@babel/plugin-transform-async-to-generator" "^7.3.4" "@babel/plugin-transform-block-scoped-functions" "^7.2.0" - "@babel/plugin-transform-block-scoping" "^7.2.0" - "@babel/plugin-transform-classes" "^7.2.0" + "@babel/plugin-transform-block-scoping" "^7.3.4" + "@babel/plugin-transform-classes" "^7.3.4" "@babel/plugin-transform-computed-properties" "^7.2.0" "@babel/plugin-transform-destructuring" "^7.2.0" "@babel/plugin-transform-dotall-regex" "^7.2.0" @@ -592,12 +601,13 @@ "@babel/plugin-transform-literals" "^7.2.0" "@babel/plugin-transform-modules-amd" "^7.2.0" "@babel/plugin-transform-modules-commonjs" "^7.2.0" - "@babel/plugin-transform-modules-systemjs" "^7.2.0" + "@babel/plugin-transform-modules-systemjs" "^7.3.4" "@babel/plugin-transform-modules-umd" "^7.2.0" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.3.0" "@babel/plugin-transform-new-target" "^7.0.0" "@babel/plugin-transform-object-super" "^7.2.0" "@babel/plugin-transform-parameters" "^7.2.0" - "@babel/plugin-transform-regenerator" "^7.0.0" + "@babel/plugin-transform-regenerator" "^7.3.4" "@babel/plugin-transform-shorthand-properties" "^7.2.0" "@babel/plugin-transform-spread" "^7.2.0" "@babel/plugin-transform-sticky-regex" "^7.2.0" @@ -609,46 +619,80 @@ js-levenshtein "^1.1.3" semver "^5.3.0" +"@babel/runtime-corejs2@^7.2.0": + version "7.4.5" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs2/-/runtime-corejs2-7.4.5.tgz#3d892f0560df21bafb384dd7727e33853e95d3c9" + integrity sha512-5yLuwzvIDecKwYMzJtiarky4Fb5643H3Ao5jwX0HrMR5oM5mn2iHH9wSZonxwNK0oAjAFUQAiOd4jT7/9Y2jMQ== + dependencies: + core-js "^2.6.5" + regenerator-runtime "^0.13.2" + "@babel/runtime@^7.0.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.2.0.tgz#b03e42eeddf5898e00646e4c840fa07ba8dcad7f" - integrity sha512-oouEibCbHMVdZSDlJBO6bZmID/zA/G/Qx3H1d3rSNPTD+L8UNKvCat7aKWSJ74zYbm5zWGh0GQN0hKj8zYFTCg== + version "7.4.5" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.4.5.tgz#582bb531f5f9dc67d2fcb682979894f75e253f12" + integrity sha512-TuI4qpWZP6lGOGIuGWtp9sPluqYICmbk8T/1vpSysqJxRPkudh/ofFWyqdcMsDf2s7KvDL4/YHgKyvcS3g9CJQ== dependencies: - regenerator-runtime "^0.12.0" + regenerator-runtime "^0.13.2" -"@babel/template@^7.1.0", "@babel/template@^7.1.2", "@babel/template@^7.2.2": - version "7.2.2" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.2.2.tgz#005b3fdf0ed96e88041330379e0da9a708eb2907" - integrity sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g== +"@babel/template@^7.1.0", "@babel/template@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.4.4.tgz#f4b88d1225689a08f5bc3a17483545be9e4ed237" + integrity sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw== dependencies: "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.2.2" - "@babel/types" "^7.2.2" + "@babel/parser" "^7.4.4" + "@babel/types" "^7.4.4" -"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.1.5", "@babel/traverse@^7.2.2": - version "7.2.2" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.2.2.tgz#961039de1f9bcb946d807efe2dba9c92e859d188" - integrity sha512-E5Bn9FSwHpSkUhthw/XEuvFZxIgrqb9M8cX8j5EUQtrUG5DQUy6bFyl7G7iQ1D1Czudor+xkmp81JbLVVM0Sjg== +"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.4.4", "@babel/traverse@^7.4.5": + version "7.4.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.4.5.tgz#4e92d1728fd2f1897dafdd321efbff92156c3216" + integrity sha512-Vc+qjynwkjRmIFGxy0KYoPj4FdVDxLej89kMHFsWScq999uX+pwcX4v9mWRjW0KcAYTPAuVQl2LKP1wEVLsp+A== dependencies: "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.2.2" + "@babel/generator" "^7.4.4" "@babel/helper-function-name" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.0.0" - "@babel/parser" "^7.2.2" - "@babel/types" "^7.2.2" + "@babel/helper-split-export-declaration" "^7.4.4" + "@babel/parser" "^7.4.5" + "@babel/types" "^7.4.4" debug "^4.1.0" globals "^11.1.0" - lodash "^4.17.10" + lodash "^4.17.11" -"@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.2.2": - version "7.2.2" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.2.2.tgz#44e10fc24e33af524488b716cdaee5360ea8ed1e" - integrity sha512-fKCuD6UFUMkR541eDWL+2ih/xFZBXPOg/7EQFeTluMDebfqR4jrpaCjLhkWlQS4hT6nRa2PMEgXKbRB5/H2fpg== +"@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.4.4.tgz#8db9e9a629bb7c29370009b4b779ed93fe57d5f0" + integrity sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ== dependencies: esutils "^2.0.2" - lodash "^4.17.10" + lodash "^4.17.11" to-fast-properties "^2.0.0" +"@hapi/address@2.x.x": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@hapi/address/-/address-2.0.0.tgz#9f05469c88cb2fd3dcd624776b54ee95c312126a" + integrity sha512-mV6T0IYqb0xL1UALPFplXYQmR0twnXG0M6jUswpquqT2sD12BOiCiLy3EvMp/Fy7s3DZElC4/aPjEjo2jeZpvw== + +"@hapi/hoek@6.x.x": + version "6.2.4" + resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-6.2.4.tgz#4b95fbaccbfba90185690890bdf1a2fbbda10595" + integrity sha512-HOJ20Kc93DkDVvjwHyHawPwPkX44sIrbXazAUDiUXaY2R9JwQGo2PhFfnQtdrsIe4igjG2fPgMra7NYw7qhy0A== + +"@hapi/joi@^15.0.1": + version "15.0.3" + resolved "https://registry.yarnpkg.com/@hapi/joi/-/joi-15.0.3.tgz#e94568fd859e5e945126d5675e7dd218484638a7" + integrity sha512-z6CesJ2YBwgVCi+ci8SI8zixoj8bGFn/vZb9MBPbSyoxsS2PnWYjHcyTM17VLK6tx64YVK38SDIh10hJypB+ig== + dependencies: + "@hapi/address" "2.x.x" + "@hapi/hoek" "6.x.x" + "@hapi/topo" "3.x.x" + +"@hapi/topo@3.x.x": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-3.1.0.tgz#5c47cd9637c2953db185aa957a27bcb2a8b7a6f8" + integrity sha512-gZDI/eXOIk8kP2PkUKjWu9RW8GGVd2Hkgjxyr/S7Z+JF+0mr7bAlbw+DkTRxnD580o8Kqxlnba9wvqp5aOHBww== + dependencies: + "@hapi/hoek" "6.x.x" + "@intervolga/optimize-cssnano-plugin@^1.0.5": version "1.0.6" resolved "https://registry.yarnpkg.com/@intervolga/optimize-cssnano-plugin/-/optimize-cssnano-plugin-1.0.6.tgz#be7c7846128b88f6a9b1d1261a0ad06eb5c0fdf8" @@ -671,182 +715,298 @@ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== -"@sinonjs/commons@^1.0.2": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.3.0.tgz#50a2754016b6f30a994ceda6d9a0a8c36adda849" - integrity sha512-j4ZwhaHmwsCb4DlDOIWnI5YyKDNMoNThsmwEpfHx6a1EpsGZ9qYLxP++LMlmBRjtGptGHFsGItJ768snllFWpA== +"@sinonjs/commons@^1", "@sinonjs/commons@^1.0.2": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.4.0.tgz#7b3ec2d96af481d7a0321252e7b1c94724ec5a78" + integrity sha512-9jHK3YF/8HtJ9wCAbG+j8cD0i0+ATS9A7gXFqS36TblLPNy6rEEc+SB0imo91eCboGaBYGV/MT1/br/J+EE7Tw== dependencies: type-detect "4.0.8" "@sinonjs/formatio@^3.0.0", "@sinonjs/formatio@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@sinonjs/formatio/-/formatio-3.1.0.tgz#6ac9d1eb1821984d84c4996726e45d1646d8cce5" - integrity sha512-ZAR2bPHOl4Xg6eklUGpsdiIJ4+J1SNag1DHHrG/73Uz/nVwXqjgUtRPLoS+aVyieN9cSbc0E4LsU984tWcDyNg== - dependencies: - "@sinonjs/samsam" "^2 || ^3" - -"@sinonjs/samsam@^2 || ^3": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-3.0.2.tgz#304fb33bd5585a0b2df8a4c801fcb47fa84d8e43" - integrity sha512-m08g4CS3J6lwRQk1pj1EO+KEVWbrbXsmi9Pw0ySmrIbcVxVaedoFgLvFsV8wHLwh01EpROVz3KvVcD1Jmks9FQ== + version "3.2.1" + resolved "https://registry.yarnpkg.com/@sinonjs/formatio/-/formatio-3.2.1.tgz#52310f2f9bcbc67bdac18c94ad4901b95fde267e" + integrity sha512-tsHvOB24rvyvV2+zKMmPkZ7dXX6LSLKZ7aOtXY6Edklp0uRcgGpOsQTTGTcWViFyx4uhWc6GV8QdnALbIbIdeQ== dependencies: - "@sinonjs/commons" "^1.0.2" - array-from "^2.1.1" - lodash.get "^4.4.2" + "@sinonjs/commons" "^1" + "@sinonjs/samsam" "^3.1.0" "@sinonjs/samsam@^2.1.2": version "2.1.3" resolved "https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-2.1.3.tgz#62cf2a9b624edc795134135fe37fc2ae8ea36be3" integrity sha512-8zNeBkSKhU9a5cRNbpCKau2WWPfan+Q2zDlcXvXyhn9EsMqgYs4qzo0XHNVlXC6ABQL8fT6nV+zzo5RTHJzyXw== +"@sinonjs/samsam@^3.1.0": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-3.3.1.tgz#e88c53fbd9d91ad9f0f2b0140c16c7c107fe0d07" + integrity sha512-wRSfmyd81swH0hA1bxJZJ57xr22kC07a1N4zuIL47yTS04bDk6AoCkczcqHEjcRPmJ+FruGJ9WBQiJwMtIElFw== + dependencies: + "@sinonjs/commons" "^1.0.2" + array-from "^2.1.1" + lodash "^4.17.11" + +"@sinonjs/text-encoding@^0.7.1": + version "0.7.1" + resolved "https://registry.yarnpkg.com/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz#8da5c6530915653f3a1f38fd5f101d8c3f8079c5" + integrity sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ== + +"@soda/friendly-errors-webpack-plugin@^1.7.1": + version "1.7.1" + resolved "https://registry.yarnpkg.com/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.7.1.tgz#706f64bcb4a8b9642b48ae3ace444c70334d615d" + integrity sha512-cWKrGaFX+rfbMrAxVv56DzhPNqOJPZuNIS2HGMELtgGzb+vsMzyig9mml5gZ/hr2BGtSLV+dP2LUEuAL8aG2mQ== + dependencies: + chalk "^1.1.3" + error-stack-parser "^2.0.0" + string-width "^2.0.0" + "@types/babel-types@*", "@types/babel-types@^7.0.0": - version "7.0.4" - resolved "https://registry.yarnpkg.com/@types/babel-types/-/babel-types-7.0.4.tgz#bfd5b0d0d1ba13e351dff65b6e52783b816826c8" - integrity sha512-WiZhq3SVJHFRgRYLXvpf65XnV6ipVHhnNaNvE8yCimejrGglkg38kEj0JcizqwSHxmPSjcTlig/6JouxLGEhGw== + version "7.0.7" + resolved "https://registry.yarnpkg.com/@types/babel-types/-/babel-types-7.0.7.tgz#667eb1640e8039436028055737d2b9986ee336e3" + integrity sha512-dBtBbrc+qTHy1WdfHYjBwRln4+LWqASWakLHsWHR2NWHIFkv4W3O070IGoGLEBrJBvct3r0L1BUPuvURi7kYUQ== "@types/babylon@^6.16.2": - version "6.16.4" - resolved "https://registry.yarnpkg.com/@types/babylon/-/babylon-6.16.4.tgz#d3df72518b34a6a015d0dc58745cd238b5bb8ad2" - integrity sha512-8dZMcGPno3g7pJ/d0AyJERo+lXh9i1JhDuCUs+4lNIN9eUe5Yh6UCLrpgSEi05Ve2JMLauL2aozdvKwNL0px1Q== + version "6.16.5" + resolved "https://registry.yarnpkg.com/@types/babylon/-/babylon-6.16.5.tgz#1c5641db69eb8cdf378edd25b4be7754beeb48b4" + integrity sha512-xH2e58elpj1X4ynnKp9qSnWlsRTIs6n3tgLGNfwAGHwePw0mulHQllV34n0T25uYSu1k0hRKkWXF890B1yS47w== dependencies: "@types/babel-types" "*" +"@types/events@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" + integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== + +"@types/glob@^7.1.1": + version "7.1.1" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575" + integrity sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w== + dependencies: + "@types/events" "*" + "@types/minimatch" "*" + "@types/node" "*" + +"@types/minimatch@*": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" + integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== + "@types/node@*": - version "10.12.18" - resolved "https://registry.yarnpkg.com/@types/node/-/node-10.12.18.tgz#1d3ca764718915584fcd9f6344621b7672665c67" - integrity sha512-fh+pAqt4xRzPfqA6eh3Z2y6fyZavRIumvjhaCL753+TVkGKGhpPeyrJG2JftD0T9q4GF00KjefsQ+PQNDdWQaQ== + version "12.0.8" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.0.8.tgz#551466be11b2adc3f3d47156758f610bd9f6b1d8" + integrity sha512-b8bbUOTwzIY3V5vDTY1fIJ+ePKDUBqt2hC2woVGotdQQhG/2Sh62HOKHrT7ab+VerXAcPyAiTEipPu/FsreUtg== + +"@types/normalize-package-data@^2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" + integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== "@types/q@^1.5.1": - version "1.5.1" - resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.1.tgz#48fd98c1561fe718b61733daed46ff115b496e18" - integrity sha512-eqz8c/0kwNi/OEHQfvIuJVLTst3in0e7uTKeuY+WL/zfKn0xVujOTp42bS/vUUokhK5P2BppLd9JXMOMHcgbjA== + version "1.5.2" + resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.2.tgz#690a1475b84f2a884fd07cd797c00f5f31356ea8" + integrity sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw== -"@vue/babel-preset-app@^3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@vue/babel-preset-app/-/babel-preset-app-3.2.0.tgz#a443acdbd34f66d7645db271d9ac58fbe4fe870d" - integrity sha512-yDPMhdeOnQ49EOsOnHXJZQ4aR+g+TZVkImUjRBN90MKv9V1C9HXxhU73Je6pWUQaJ0yugMr5jl058ns6Mx6mNA== +"@vue/babel-helper-vue-jsx-merge-props@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.0.0.tgz#048fe579958da408fb7a8b2a3ec050b50a661040" + integrity sha512-6tyf5Cqm4m6v7buITuwS+jHzPlIPxbFzEhXR5JGZpbrvOcp1hiQKckd305/3C7C36wFekNTQSxAtgeM0j0yoUw== + +"@vue/babel-plugin-transform-vue-jsx@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.0.0.tgz#ebcbf39c312c94114c8c4f407ee4f6c97aa45432" + integrity sha512-U+JNwVQSmaLKjO3lzCUC3cNXxprgezV1N+jOdqbP4xWNaqtWUCJnkjTVcgECM18A/AinDKPcUUeoyhU7yxUxXQ== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/plugin-syntax-jsx" "^7.2.0" + "@vue/babel-helper-vue-jsx-merge-props" "^1.0.0" + html-tags "^2.0.0" + lodash.kebabcase "^4.1.1" + svg-tags "^1.0.0" + +"@vue/babel-preset-app@^3.8.0": + version "3.8.0" + resolved "https://registry.yarnpkg.com/@vue/babel-preset-app/-/babel-preset-app-3.8.0.tgz#c889627c6a30418b2fb89caccd9065c4acae0829" + integrity sha512-A2NBzIVdtNq52foc+P+yQ/7rSm2q2oPpn2FJVW4hFgaWVOL+HaOLCjWDEQyEeMbRZvyOVHMuom097u3p2H2Rfw== dependencies: + "@babel/helper-module-imports" "^7.0.0" "@babel/plugin-proposal-class-properties" "^7.0.0" "@babel/plugin-proposal-decorators" "^7.1.0" "@babel/plugin-syntax-dynamic-import" "^7.0.0" "@babel/plugin-syntax-jsx" "^7.0.0" - "@babel/plugin-transform-runtime" "^7.0.0" - "@babel/preset-env" "^7.0.0" + "@babel/plugin-transform-runtime" "^7.4.0" + "@babel/preset-env" "^7.0.0 < 7.4.0" "@babel/runtime" "^7.0.0" - babel-helper-vue-jsx-merge-props "^2.0.3" + "@babel/runtime-corejs2" "^7.2.0" + "@vue/babel-preset-jsx" "^1.0.0" babel-plugin-dynamic-import-node "^2.2.0" - babel-plugin-transform-vue-jsx "^4.0.1" - core-js "^2.5.7" + babel-plugin-module-resolver "3.2.0" + core-js "^2.6.5" -"@vue/cli-overlay@^3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@vue/cli-overlay/-/cli-overlay-3.2.0.tgz#bb5d781914bb5af97d92410babbaa3720707b728" - integrity sha512-RKMSfgTtRs4VOXQhmbrNZJaCCheshebji9NcPNGyXzukCMBtoAbu3cG9HxizCSUA//oFFAdPP5BGeHvv0cpu/A== +"@vue/babel-preset-jsx@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@vue/babel-preset-jsx/-/babel-preset-jsx-1.0.0.tgz#e515cd453a5a8ea6b0f30b2bb92f266d8ab4e9f5" + integrity sha512-5CbDu/QHS+TtQNw5aYAffiMxBBB2Eo9+RJpS8X+6FJbdG5Rvc4TVipEqkrg0pJviWadNg7TEy0Uz4o7VNXeIZw== + dependencies: + "@vue/babel-helper-vue-jsx-merge-props" "^1.0.0" + "@vue/babel-plugin-transform-vue-jsx" "^1.0.0" + "@vue/babel-sugar-functional-vue" "^1.0.0" + "@vue/babel-sugar-inject-h" "^1.0.0" + "@vue/babel-sugar-v-model" "^1.0.0" + "@vue/babel-sugar-v-on" "^1.0.0" + +"@vue/babel-sugar-functional-vue@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.0.0.tgz#17e2c4ca27b74b244da3b923240ec91d10048cb3" + integrity sha512-XE/jNaaorTuhWayCz+QClk5AB9OV5HzrwbzEC6sIUY0J60A28ONQKeTwxfidW42egOkqNH/UU6eE3KLfmiDj0Q== + dependencies: + "@babel/plugin-syntax-jsx" "^7.2.0" + +"@vue/babel-sugar-inject-h@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.0.0.tgz#e5efb6c5b5b7988dc03831af6d133bf7bcde6347" + integrity sha512-NxWU+DqtbZgfGvd25GPoFMj+rvyQ8ZA1pHj8vIeqRij+vx3sXoKkObjA9ulZunvWw5F6uG9xYy4ytpxab/X+Hg== + dependencies: + "@babel/plugin-syntax-jsx" "^7.2.0" + +"@vue/babel-sugar-v-model@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.0.0.tgz#f4da56aa67f65a349bd2c269a95e72e601af4613" + integrity sha512-Pfg2Al0io66P1eO6zUbRIgpyKCU2qTnumiE0lao/wA/uNdb7Dx5Tfd1W6tO5SsByETPnEs8i8+gawRIXX40rFw== + dependencies: + "@babel/plugin-syntax-jsx" "^7.2.0" + "@vue/babel-helper-vue-jsx-merge-props" "^1.0.0" + "@vue/babel-plugin-transform-vue-jsx" "^1.0.0" + camelcase "^5.0.0" + html-tags "^2.0.0" + svg-tags "^1.0.0" + +"@vue/babel-sugar-v-on@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.0.0.tgz#a633ee8fe205763e865b011246981b7f89668033" + integrity sha512-2aqJaDLKdSSGlxZU+GjFERaSNUaa6DQreV+V/K4W/6Lxj8520/r1lChWEa/zuAoPD2Vhy0D2QrqqO+I0D6CkKw== + dependencies: + "@babel/plugin-syntax-jsx" "^7.2.0" + "@vue/babel-plugin-transform-vue-jsx" "^1.0.0" + camelcase "^5.0.0" + +"@vue/cli-overlay@^3.8.0": + version "3.8.0" + resolved "https://registry.yarnpkg.com/@vue/cli-overlay/-/cli-overlay-3.8.0.tgz#e4e8e2fa92b06fc282916df9c924f1dba50eeabb" + integrity sha512-4hY/+r9OwpMb7BPFnQGKftMC8CrfbV00REEFOij52+L4swQw+m879+5zX3Z0xHfPftw6JyaqJB0rmQ0ILI6Ovw== "@vue/cli-plugin-babel@^3.0.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@vue/cli-plugin-babel/-/cli-plugin-babel-3.2.0.tgz#5548e052f07512156942f50dcf18948ad29be7ec" - integrity sha512-HRhwsUIZ9DZYH+cVS8O0Qfk2W43vKpl5/JcvCS8YWWmRjwZjjHtRDifnfQuLC3Q0cUMTcv4bv8vnPMtkAbvXKg== + version "3.8.0" + resolved "https://registry.yarnpkg.com/@vue/cli-plugin-babel/-/cli-plugin-babel-3.8.0.tgz#a7ce6ef9c6680e7953c609d859451dd937c7284e" + integrity sha512-VLWvpgDM+HN2FZu1x+r9pisombDTK1k+RPNPeslnwjGjrUXmKNAamXL1ZIsPwsj6k6PpWPN4jetBIMqcBzBu6Q== dependencies: "@babel/core" "^7.0.0" - "@vue/babel-preset-app" "^3.2.0" - babel-loader "^8.0.4" + "@vue/babel-preset-app" "^3.8.0" + "@vue/cli-shared-utils" "^3.8.0" + babel-loader "^8.0.5" + webpack ">=4 < 4.29" "@vue/cli-plugin-eslint@^3.0.0": - version "3.2.1" - resolved "https://registry.yarnpkg.com/@vue/cli-plugin-eslint/-/cli-plugin-eslint-3.2.1.tgz#4dc353add93023363bf4c6b347e64472d1f2f432" - integrity sha512-Z/eQw18FjTypMMryNg8WCYJxEBmSAtnzukRWWNFwqNnh2zM/2J6yR4dYhsyjNtMEMUOnQsAsJnqgw45rLu8sJg== + version "3.8.0" + resolved "https://registry.yarnpkg.com/@vue/cli-plugin-eslint/-/cli-plugin-eslint-3.8.0.tgz#0402dfd3864b0224bceb264df89a4209000bb98c" + integrity sha512-18LDJmjH0DDw9T4+RbrSVk4xkF8t8RDRsEPJLPurno1YVJodIkQ6lqVu82faVgtvPyCoqiaicoTq/iwi1avoLQ== dependencies: - "@vue/cli-shared-utils" "^3.2.0" + "@vue/cli-shared-utils" "^3.8.0" babel-eslint "^10.0.1" + eslint-loader "^2.1.2" + globby "^9.2.0" + webpack ">=4 < 4.29" + optionalDependencies: eslint "^4.19.1" - eslint-loader "^2.1.1" eslint-plugin-vue "^4.7.1" - globby "^8.0.1" "@vue/cli-plugin-unit-mocha@^3.0.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@vue/cli-plugin-unit-mocha/-/cli-plugin-unit-mocha-3.2.0.tgz#76828eae415ffe949c7fbfcad8e3b7d6a2e991c6" - integrity sha512-lT7arkoJFiTBJMIqt5IKFDY0VAoVOf7ZksAlp4WeD3Rwimh/q4tp9yMeNW4x92oxulbQFszkbtoTs5+ARzbN5w== + version "3.8.0" + resolved "https://registry.yarnpkg.com/@vue/cli-plugin-unit-mocha/-/cli-plugin-unit-mocha-3.8.0.tgz#c3fdfd16ca756ee6335970e3dd669b42dad6ecbb" + integrity sha512-J+uPJUNsLVOR/mPtqXiQSQf/dgSU7oOyJSgFXB5vX2WOE3V736DHgWB7iR7qG9eCUV0fqcuz/q896VfszfsY0Q== dependencies: - "@vue/cli-shared-utils" "^3.2.0" - jsdom "^13.0.0" + "@vue/cli-shared-utils" "^3.8.0" + jsdom "^13.2.0" jsdom-global "^3.0.2" mocha "^5.2.0" mocha-webpack "^2.0.0-beta.0" "@vue/cli-service@^3.0.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@vue/cli-service/-/cli-service-3.2.0.tgz#96e8ee7b33a911ab71710c126ab55cd64c2a4c51" - integrity sha512-HTiaz1IBXV/JCfrmyhHJvDOYpPTBK0uQAekSVRTt5AddCeOV68ktdUqHbDe3VPDfrWFA5x3d3kIHlJd6WK31mA== + version "3.8.4" + resolved "https://registry.yarnpkg.com/@vue/cli-service/-/cli-service-3.8.4.tgz#fecf63c8e0a838e2468d2a79059e39f2cbb1fdc5" + integrity sha512-OWKTPZN+Wk3gpd8ar6DsQWlpIFPCIULZuVsHarJXjlXpIx3FOleXzaT2QiDB+tprbTRZMfsMMZMt5b0nvacY9Q== dependencies: "@intervolga/optimize-cssnano-plugin" "^1.0.5" - "@vue/cli-overlay" "^3.2.0" - "@vue/cli-shared-utils" "^3.2.0" + "@soda/friendly-errors-webpack-plugin" "^1.7.1" + "@vue/cli-overlay" "^3.8.0" + "@vue/cli-shared-utils" "^3.8.0" + "@vue/component-compiler-utils" "^2.6.0" "@vue/preload-webpack-plugin" "^1.1.0" "@vue/web-component-wrapper" "^1.2.0" - acorn "^6.0.4" + acorn "^6.1.1" acorn-walk "^6.1.1" address "^1.0.3" - autoprefixer "^8.6.5" - cache-loader "^1.2.5" - case-sensitive-paths-webpack-plugin "^2.1.2" - chalk "^2.4.1" - clipboardy "^1.2.3" - cliui "^4.1.0" + autoprefixer "^9.5.1" + browserslist "^4.5.4" + cache-loader "^2.0.1" + case-sensitive-paths-webpack-plugin "^2.2.0" + chalk "^2.4.2" + cli-highlight "^2.1.0" + clipboardy "^2.0.0" + cliui "^5.0.0" copy-webpack-plugin "^4.6.0" css-loader "^1.0.1" - cssnano "^4.1.7" - debug "^4.1.0" + cssnano "^4.1.10" + current-script-polyfill "^1.0.0" + debug "^4.1.1" + default-gateway "^5.0.2" + dotenv "^7.0.0" + dotenv-expand "^5.1.0" escape-string-regexp "^1.0.5" - file-loader "^2.0.0" - friendly-errors-webpack-plugin "^1.7.0" + file-loader "^3.0.1" fs-extra "^7.0.1" - globby "^8.0.1" + globby "^9.2.0" hash-sum "^1.0.2" html-webpack-plugin "^3.2.0" launch-editor-middleware "^2.2.1" lodash.defaultsdeep "^4.6.0" lodash.mapvalues "^4.6.0" lodash.transform "^4.6.0" - mini-css-extract-plugin "^0.4.5" + mini-css-extract-plugin "^0.6.0" minimist "^1.2.0" - ora "^3.0.0" - portfinder "^1.0.19" + ora "^3.4.0" + portfinder "^1.0.20" postcss-loader "^3.0.0" - read-pkg "^4.0.1" - semver "^5.6.0" + read-pkg "^5.0.0" + semver "^6.0.0" slash "^2.0.0" source-map-url "^0.4.0" ssri "^6.0.1" string.prototype.padend "^3.0.0" - terser-webpack-plugin "^1.1.0" - thread-loader "^1.2.0" + terser-webpack-plugin "^1.2.3" + thread-loader "^2.1.2" url-loader "^1.1.2" - vue-loader "^15.4.2" - webpack "^4.26.1" - webpack-bundle-analyzer "^3.0.3" + vue-loader "^15.7.0" + webpack ">=4 < 4.29" + webpack-bundle-analyzer "^3.3.0" webpack-chain "^4.11.0" - webpack-dev-server "^3.1.10" - webpack-merge "^4.1.4" + webpack-dev-server "^3.4.1" + webpack-merge "^4.2.1" yorkie "^2.0.0" -"@vue/cli-shared-utils@^3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@vue/cli-shared-utils/-/cli-shared-utils-3.2.0.tgz#504037063c2a4a346dc35c9652bd3863da4816e7" - integrity sha512-FCX5ABFg5pWhomyXLpCaogJktMvjsS5d4Mn5BfvqcJxCvzOX6ze8ihFK3u//XMeM78dOFpHSjxnRSvHtkEwgsg== +"@vue/cli-shared-utils@^3.8.0": + version "3.8.0" + resolved "https://registry.yarnpkg.com/@vue/cli-shared-utils/-/cli-shared-utils-3.8.0.tgz#e7e728164eb92bd9e205fcd08dae896ee79cba5a" + integrity sha512-wn1L8pmQnotfftHOYm0VeXs2+cQTySd73uhWXwyO6pT0ehjqlY5c2RTipClmFF3Q+YCYjwlNpsV650F3l1tV8w== dependencies: + "@hapi/joi" "^15.0.1" chalk "^2.4.1" execa "^1.0.0" - joi "^13.0.0" launch-editor "^2.2.1" - lru-cache "^4.1.3" + lru-cache "^5.1.1" node-ipc "^9.1.1" - opn "^5.3.0" - ora "^2.1.0" + open "^6.3.0" + ora "^3.4.0" request "^2.87.0" - request-promise-native "^1.0.5" - semver "^5.5.0" + request-promise-native "^1.0.7" + semver "^6.0.0" string.prototype.padstart "^3.0.0" "@vue/component-compiler-utils@^1.2.1": @@ -864,20 +1024,20 @@ source-map "^0.5.6" vue-template-es2015-compiler "^1.6.0" -"@vue/component-compiler-utils@^2.0.0": - version "2.3.1" - resolved "https://registry.yarnpkg.com/@vue/component-compiler-utils/-/component-compiler-utils-2.3.1.tgz#d1c2623f02ad3fe6b6fc9c3762be55c9c61e3977" - integrity sha512-8VuzMhHTf5UU7+HvBeEbBmYiNLvRxIXtDpvxUl5x26WBPgKmQuuJVFY3dN3GFgnWK9Rveh/u/8NF4quhdUUQ1Q== +"@vue/component-compiler-utils@^2.5.1", "@vue/component-compiler-utils@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@vue/component-compiler-utils/-/component-compiler-utils-2.6.0.tgz#aa46d2a6f7647440b0b8932434d22f12371e543b" + integrity sha512-IHjxt7LsOFYc0DkTncB7OXJL7UzwOLPPQCfEUNyxL2qt+tF12THV+EO33O1G2Uk4feMSWua3iD39Itszx0f0bw== dependencies: consolidate "^0.15.1" hash-sum "^1.0.2" lru-cache "^4.1.2" merge-source-map "^1.1.0" - postcss "^6.0.20" - postcss-selector-parser "^3.1.1" - prettier "1.13.7" - source-map "^0.5.6" - vue-template-es2015-compiler "^1.6.0" + postcss "^7.0.14" + postcss-selector-parser "^5.0.0" + prettier "1.16.3" + source-map "~0.6.1" + vue-template-es2015-compiler "^1.9.0" "@vue/preload-webpack-plugin@^1.1.0": version "1.1.0" @@ -885,9 +1045,9 @@ integrity sha512-rcn2KhSHESBFMPj5vc5X2pI9bcBNQQixvJXhD5gZ4rN2iym/uH2qfDSQfUS5+qwiz0a85TCkeUs6w6jxFDudbw== "@vue/test-utils@^1.0.0-beta.20": - version "1.0.0-beta.27" - resolved "https://registry.yarnpkg.com/@vue/test-utils/-/test-utils-1.0.0-beta.27.tgz#7e5f7b7180c00e28a4ca55c0ff0a7e754377fdb2" - integrity sha512-Lzrd4ZBkS70Tl8JbXbDrN/NcSaH9aZT6+7emU3QhTJ+CrorJpyFDA1dkvSIhH+rDTs8sHFbGeXjXV/qorXxtRw== + version "1.0.0-beta.29" + resolved "https://registry.yarnpkg.com/@vue/test-utils/-/test-utils-1.0.0-beta.29.tgz#c942cf25e891cf081b6a03332b4ae1ef430726f0" + integrity sha512-yX4sxEIHh4M9yAbLA/ikpEnGKMNBCnoX98xE1RwxfhQVcn0MaXNSj1Qmac+ZydTj6VBSEVukchBogXBTwc+9iA== dependencies: dom-event-types "^1.0.0" lodash "^4.17.4" @@ -1060,13 +1220,13 @@ abbrev@1: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== -accepts@~1.3.4, accepts@~1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2" - integrity sha1-63d99gEXI6OxTopywIBcjoZ0a9I= +accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" + integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== dependencies: - mime-types "~2.1.18" - negotiator "0.6.1" + mime-types "~2.1.24" + negotiator "0.6.2" acorn-bigint@^0.2.0: version "0.2.0" @@ -1097,9 +1257,9 @@ acorn-globals@^3.0.0: acorn "^4.0.4" acorn-globals@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.0.tgz#e3b6f8da3c1552a95ae627571f7dd6923bb54103" - integrity sha512-hMtHj3s5RnuhvHPowpBYvJVj3rAar82JiDQHvGs1zO0l10ocX/xEdBShNHTJaboucJUsScghp74pH3s7EnHHQw== + version "4.3.2" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.2.tgz#4e2c2313a597fd589720395f6354b41cd5ec8006" + integrity sha512-BbzvZhVtZP+Bs1J1HcwrQe8ycfO0wStkSGxuul3He3GkHOIZ6eTqOkPuw9IP1X3+IkOo4wiJmwkobzXYz4wewQ== dependencies: acorn "^6.0.1" acorn-walk "^6.0.1" @@ -1176,20 +1336,20 @@ acorn@^4.0.4, acorn@~4.0.2: resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" integrity sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c= -acorn@^5.0.0, acorn@^5.2.1, acorn@^5.3.0, acorn@^5.4.0, acorn@^5.4.1, acorn@^5.5.0, acorn@^5.5.3, acorn@^5.6.2, acorn@^5.7.3: +acorn@^5.0.0, acorn@^5.2.1, acorn@^5.3.0, acorn@^5.4.0, acorn@^5.4.1, acorn@^5.5.0, acorn@^5.5.3, acorn@^5.6.2: version "5.7.3" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== -acorn@^6.0.1, acorn@^6.0.4: - version "6.0.4" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.0.4.tgz#77377e7353b72ec5104550aa2d2097a2fd40b754" - integrity sha512-VY4i5EKSKkofY2I+6QLTbTTN/UvEQPCo6eiwzzSaSWfpaDhOmStMCMod6wmuPciNq+XS0faCglFu2lHZpdHUtg== +acorn@^6.0.1, acorn@^6.0.4, acorn@^6.0.7, acorn@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.1.1.tgz#7d25ae05bb8ad1f9b699108e1094ecd7884adc1f" + integrity sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA== address@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/address/-/address-1.0.3.tgz#b5f50631f8d6cec8bd20c963963afb55e06cbce9" - integrity sha512-z55ocwKBRLryBs394Sm3ushTtBeg6VAeuku7utSoSnsJKvKcnXFIyC6vh27n3rXyxSgkJBBCAvyOn7gSUcTYjg== + version "1.1.0" + resolved "https://registry.yarnpkg.com/address/-/address-1.1.0.tgz#ef8e047847fcd2c5b6f50c16965f924fd99fe709" + integrity sha512-4diPfzWbLEIElVG4AnqP+00SULlPzNuyJFNnmMrLgyaxG6tZXJ1sn7mjBu4fHrJE+Yp/jgylOweJn2xsLMFggQ== ajv-errors@^1.0.0: version "1.0.1" @@ -1202,9 +1362,9 @@ ajv-keywords@^2.1.0: integrity sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I= ajv-keywords@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.2.0.tgz#e86b819c602cf8821ad637413698f1dec021847a" - integrity sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo= + version "3.4.0" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.0.tgz#4b831e7b531415a7cc518cd404e73f6193c6349d" + integrity sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw== ajv@^5.2.3, ajv@^5.3.0: version "5.5.2" @@ -1217,9 +1377,9 @@ ajv@^5.2.3, ajv@^5.3.0: json-schema-traverse "^0.3.0" ajv@^6.1.0, ajv@^6.5.5: - version "6.6.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.6.2.tgz#caceccf474bf3fc3ce3b147443711a24063cc30d" - integrity sha512-FBHEW6Jf5TB9MGBgUUA9XHkTbjXYfAUjY43ACMfmdMRHniyoMHjHjzD50OK8LGDWQwp4rWEsIq5kEqq7rvIM1g== + version "6.10.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.0.tgz#90d0d54439da587cd7e843bfb7045f50bd22bdf1" + integrity sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg== dependencies: fast-deep-equal "^2.0.1" fast-json-stable-stringify "^2.0.0" @@ -1246,14 +1406,14 @@ amdefine@>=0.0.4: integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= ansi-colors@^3.0.0: - version "3.2.3" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813" - integrity sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw== + version "3.2.4" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" + integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== ansi-escapes@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.1.0.tgz#f73207bb81207d75fd6c83f125af26eea378ca30" - integrity sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw== + version "3.2.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" + integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== ansi-html@0.0.7: version "0.0.7" @@ -1270,18 +1430,28 @@ ansi-regex@^3.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= -ansi-styles@^3.2.1: +ansi-styles@^3.2.0, ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: color-convert "^1.9.0" +any-promise@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= + anymatch@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" @@ -1295,7 +1465,7 @@ aproba@^1.0.3, aproba@^1.1.1: resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== -arch@^2.1.0: +arch@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/arch/-/arch-2.1.1.tgz#8f5c2731aa35a30929221bb0640eed65175ec84e" integrity sha512-BLM56aPo9vLLFVa8+/+pJLnrZ7QGGTVHWsCwieAWT9o9K8UeGaQbzZbGoabWLOo2ksBCztoXdqBZBplqLDDCSg== @@ -1370,14 +1540,14 @@ array-reduce@~0.0.0: resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b" integrity sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys= -array-union@^1.0.1: +array-union@^1.0.1, array-union@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= dependencies: array-uniq "^1.0.1" -array-uniq@^1.0.1: +array-uniq@^1.0.1, array-uniq@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= @@ -1387,11 +1557,6 @@ array-unique@^0.3.2: resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= -arrify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= - asap@~2.0.3: version "2.0.6" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" @@ -1419,10 +1584,11 @@ assert-plus@1.0.0, assert-plus@^1.0.0: integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= assert@^1.1.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" - integrity sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE= + version "1.5.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" + integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== dependencies: + object-assign "^4.1.1" util "0.10.3" assertion-error@^1.1.0: @@ -1435,10 +1601,10 @@ assign-symbols@^1.0.0: resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= -async-each@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" - integrity sha1-GdOGodntxufByF04iu28xW0zYC0= +async-each@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" + integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== async-foreach@^0.1.3: version "0.1.3" @@ -1455,13 +1621,6 @@ async@^1.5.2: resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= -async@^2.3.0: - version "2.6.1" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610" - integrity sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ== - dependencies: - lodash "^4.17.10" - asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -1472,17 +1631,18 @@ atob@^2.1.1: resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== -autoprefixer@^8.6.5: - version "8.6.5" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-8.6.5.tgz#343f3d193ed568b3208e00117a1b96eb691d4ee9" - integrity sha512-PLWJN3Xo/rycNkx+mp8iBDMTm3FeWe4VmYaZDSqL5QQB9sLsQkG5k8n+LNDFnhh9kdq2K+egL/icpctOmDHwig== +autoprefixer@^9.5.1: + version "9.6.0" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.6.0.tgz#0111c6bde2ad20c6f17995a33fad7cf6854b4c87" + integrity sha512-kuip9YilBqhirhHEGHaBTZKXL//xxGnzvsD0FtBQa6z+A69qZD6s/BAX9VzDF1i9VKDquTJDQaPLSEhOnL6FvQ== dependencies: - browserslist "^3.2.8" - caniuse-lite "^1.0.30000864" + browserslist "^4.6.1" + caniuse-lite "^1.0.30000971" + chalk "^2.4.2" normalize-range "^0.1.2" num2fraction "^1.2.2" - postcss "^6.0.23" - postcss-value-parser "^3.2.3" + postcss "^7.0.16" + postcss-value-parser "^3.3.1" aws-sign2@~0.7.0: version "0.7.0" @@ -1495,12 +1655,12 @@ aws4@^1.8.0: integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== axios@^0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.18.0.tgz#32d53e4851efdc0a11993b6cd000789d70c05102" - integrity sha1-MtU+SFHv3AoRmTts0AB4nXDAUQI= + version "0.18.1" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.18.1.tgz#ff3f0de2e7b5d180e757ad98000f1081b87bcea3" + integrity sha512-0BfJq4NSfQXd+SkFdrvFbG7addhYSBA2mQwISr46pD6E5iqkWg02RAs8vyTT/j0RTnoYmeXauBuSv1qKwR179g== dependencies: - follow-redirects "^1.3.0" - is-buffer "^1.1.5" + follow-redirects "1.5.10" + is-buffer "^2.0.2" babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: version "6.26.0" @@ -1523,20 +1683,15 @@ babel-eslint@^10.0.1: eslint-scope "3.7.1" eslint-visitor-keys "^1.0.0" -babel-helper-vue-jsx-merge-props@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-2.0.3.tgz#22aebd3b33902328e513293a8e4992b384f9f1b6" - integrity sha512-gsLiKK7Qrb7zYJNgiXKpXblxbV5ffSwR0f5whkPAaBAR4fhi6bwRZxX9wBlIc5M/v8CCkXUbXZL4N/nSE97cqg== - -babel-loader@^8.0.4: - version "8.0.4" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.0.4.tgz#7bbf20cbe4560629e2e41534147692d3fecbdce6" - integrity sha512-fhBhNkUToJcW9nV46v8w87AJOwAJDz84c1CL57n3Stj73FANM/b9TbCUK4YhdOwEyZ+OxhYpdeZDNzSI29Firw== +babel-loader@^8.0.5: + version "8.0.6" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.0.6.tgz#e33bdb6f362b03f4bb141a0c21ab87c501b70dfb" + integrity sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw== dependencies: - find-cache-dir "^1.0.0" + find-cache-dir "^2.0.0" loader-utils "^1.0.2" mkdirp "^0.5.1" - util.promisify "^1.0.0" + pify "^4.0.1" babel-plugin-dynamic-import-node@^2.2.0: version "2.2.0" @@ -1545,12 +1700,16 @@ babel-plugin-dynamic-import-node@^2.2.0: dependencies: object.assign "^4.1.0" -babel-plugin-transform-vue-jsx@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-4.0.1.tgz#2c8bddce87a6ef09eaa59869ff1bfbeeafc5f88d" - integrity sha512-wbOz7ITB5cloLSjKUU1hWn8zhR+Dwah/RZiTiJY/CQliCwhowmzu6m7NEF+y5EJX/blDzGjRtZvC10Vdb3Q7vw== +babel-plugin-module-resolver@3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-module-resolver/-/babel-plugin-module-resolver-3.2.0.tgz#ddfa5e301e3b9aa12d852a9979f18b37881ff5a7" + integrity sha512-tjR0GvSndzPew/Iayf4uICWZqjBwnlMWjSx6brryfQ81F9rxBVqwDJtFCV8oOs0+vJeefK9TmdZtkIFdFe1UnA== dependencies: - esutils "^2.0.2" + find-babel-config "^1.1.0" + glob "^7.1.2" + pkg-up "^2.0.0" + reselect "^3.0.1" + resolve "^1.4.0" babel-runtime@^6.18.0, babel-runtime@^6.26.0: version "6.26.0" @@ -1625,10 +1784,15 @@ big.js@^3.1.3: resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" integrity sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q== +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + binary-extensions@^1.0.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.12.0.tgz#c2d780f53d45bba8317a8902d4ceeaf3a6385b14" - integrity sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg== + version "1.13.1" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" + integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== block-stream@*: version "0.0.9" @@ -1637,31 +1801,31 @@ block-stream@*: dependencies: inherits "~2.0.0" -bluebird@^3.1.1, bluebird@^3.5.1: - version "3.5.3" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.3.tgz#7d01c6f9616c9a51ab0f8c549a79dfe6ec33efa7" - integrity sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw== +bluebird@^3.1.1, bluebird@^3.5.1, bluebird@^3.5.3: + version "3.5.5" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.5.tgz#a8d0afd73251effbbd5fe384a77d73003c17a71f" + integrity sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w== bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: version "4.11.8" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== -body-parser@1.18.3: - version "1.18.3" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.3.tgz#5b292198ffdd553b3a0f20ded0592b956955c8b4" - integrity sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ= +body-parser@1.19.0: + version "1.19.0" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" + integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== dependencies: - bytes "3.0.0" + bytes "3.1.0" content-type "~1.0.4" debug "2.6.9" depd "~1.1.2" - http-errors "~1.6.3" - iconv-lite "0.4.23" + http-errors "1.7.2" + iconv-lite "0.4.24" on-finished "~2.3.0" - qs "6.5.2" - raw-body "2.3.3" - type-is "~1.6.16" + qs "6.7.0" + raw-body "2.4.0" + type-is "~1.6.17" bonjour@^3.5.0: version "3.5.0" @@ -1688,7 +1852,7 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -braces@^2.3.0, braces@^2.3.1: +braces@^2.3.1, braces@^2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== @@ -1778,22 +1942,14 @@ browserify-zlib@^0.2.0: dependencies: pako "~1.0.5" -browserslist@^3.2.8: - version "3.2.8" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-3.2.8.tgz#b0005361d6471f0f5952797a76fc985f1f978fc6" - integrity sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ== - dependencies: - caniuse-lite "^1.0.30000844" - electron-to-chromium "^1.3.47" - -browserslist@^4.0.0, browserslist@^4.3.4: - version "4.3.6" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.3.6.tgz#0f9d9081afc66b36f477c6bdf3813f784f42396a" - integrity sha512-kMGKs4BTzRWviZ8yru18xBpx+CyHG9eqgRbj9XbE3IMgtczf4aiA0Y1YCpVdvUieKGZ03kolSPXqTcscBCb9qw== +browserslist@^4.0.0, browserslist@^4.3.4, browserslist@^4.5.4, browserslist@^4.6.1: + version "4.6.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.6.2.tgz#574c665950915c2ac73a4594b8537a9eba26203f" + integrity sha512-2neU/V0giQy9h3XMPwLhEY3+Ao0uHSwHvU8Q1Ea6AgLVL1sXbX3dzPrJ8NWe5Hi4PoTkCYXOtVR9rfRLI0J/8Q== dependencies: - caniuse-lite "^1.0.30000921" - electron-to-chromium "^1.3.92" - node-releases "^1.1.1" + caniuse-lite "^1.0.30000974" + electron-to-chromium "^1.3.150" + node-releases "^1.1.23" buffer-from@^1.0.0: version "1.1.1" @@ -1819,11 +1975,6 @@ buffer@^4.3.0: ieee754 "^1.1.4" isarray "^1.0.0" -builtin-modules@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" - integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= - builtin-status-codes@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" @@ -1834,6 +1985,11 @@ bytes@3.0.0: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= +bytes@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" + integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== + cacache@^10.0.4: version "10.0.4" resolved "https://registry.yarnpkg.com/cacache/-/cacache-10.0.4.tgz#6452367999eff9d4188aefd9a14e9d7c6a263460" @@ -1853,24 +2009,24 @@ cacache@^10.0.4: unique-filename "^1.1.0" y18n "^4.0.0" -cacache@^11.0.2: - version "11.3.1" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-11.3.1.tgz#d09d25f6c4aca7a6d305d141ae332613aa1d515f" - integrity sha512-2PEw4cRRDu+iQvBTTuttQifacYjLPhET+SYO/gEFMy8uhi+jlJREDAjSF5FWSdV/Aw5h18caHA7vMTw2c+wDzA== +cacache@^11.3.2: + version "11.3.2" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-11.3.2.tgz#2d81e308e3d258ca38125b676b98b2ac9ce69bfa" + integrity sha512-E0zP4EPGDOaT2chM08Als91eYnf8Z+eH1awwwVsngUmgppfM5jjJ8l3z5vO5p5w/I3LsiXawb1sW0VY65pQABg== dependencies: - bluebird "^3.5.1" - chownr "^1.0.1" - figgy-pudding "^3.1.0" - glob "^7.1.2" - graceful-fs "^4.1.11" - lru-cache "^4.1.3" + bluebird "^3.5.3" + chownr "^1.1.1" + figgy-pudding "^3.5.1" + glob "^7.1.3" + graceful-fs "^4.1.15" + lru-cache "^5.1.1" mississippi "^3.0.0" mkdirp "^0.5.1" move-concurrently "^1.0.1" promise-inflight "^1.0.1" rimraf "^2.6.2" - ssri "^6.0.0" - unique-filename "^1.1.0" + ssri "^6.0.1" + unique-filename "^1.1.1" y18n "^4.0.0" cache-base@^1.0.1: @@ -1888,15 +2044,16 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" -cache-loader@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/cache-loader/-/cache-loader-1.2.5.tgz#9ab15b0ae5f546f376083a695fc1a75f546cb266" - integrity sha512-enWKEQ4kO3YreDFd7AtVRjtJBmNiqh/X9hVDReu0C4qm8gsGmySkwuWtdc+N5O+vq5FzxL1mIZc30NyXCB7o/Q== +cache-loader@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/cache-loader/-/cache-loader-2.0.1.tgz#5758f41a62d7c23941e3c3c7016e6faeb03acb07" + integrity sha512-V99T3FOynmGx26Zom+JrVBytLBsmUCzVG2/4NnUKgvXN4bEV42R1ERl1IyiH/cvFIDA1Ytq2lPZ9tXDSahcQpQ== dependencies: loader-utils "^1.1.0" mkdirp "^0.5.1" - neo-async "^2.5.0" - schema-utils "^0.4.2" + neo-async "^2.6.0" + normalize-path "^3.0.0" + schema-utils "^1.0.0" call-me-maybe@^1.0.1: version "1.0.1" @@ -1970,6 +2127,11 @@ camelcase@^4.1.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= +camelcase@^5.0.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + caniuse-api@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" @@ -1980,15 +2142,15 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.30000864, caniuse-lite@^1.0.30000921: - version "1.0.30000923" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000923.tgz#148f9bda508024b5ce957b463ae2e8302b451bb2" - integrity sha512-j5ur7eeluOFjjPUkydtXP4KFAsmH3XaQNch5tvWSO+dLHYt5PE+VgJZLWtbVOodfWij6m6zas28T4gB/cLYq1w== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000971, caniuse-lite@^1.0.30000974: + version "1.0.30000974" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000974.tgz#b7afe14ee004e97ce6dc73e3f878290a12928ad8" + integrity sha512-xc3rkNS/Zc3CmpMKuczWEdY2sZgx09BkAxfvkxlAEBTqcMHeL8QnPqhKse+5sRTi3nrw2pJwToD2WvKn1Uhvww== -case-sensitive-paths-webpack-plugin@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.1.2.tgz#c899b52175763689224571dad778742e133f0192" - integrity sha512-oEZgAFfEvKtjSRCu6VgYkuGxwrWXMnQzyBmlLPP7r6PWQVtHxP5Z5N6XsuJvtoVax78am/r7lr46bwo3IVEBOg== +case-sensitive-paths-webpack-plugin@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.2.0.tgz#3371ef6365ef9c25fa4b81c16ace0e9c7dc58c3e" + integrity sha512-u5ElzokS8A1pm9vM3/iDgTcI3xqHxuCao94Oz8etI3cf0Tio0p8izkDYbTIn09uP3yUUr6+veaE6IkjnTYS46g== caseless@~0.12.0: version "0.12.0" @@ -2026,10 +2188,10 @@ chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3.1, chalk@^2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" - integrity sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ== +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== dependencies: ansi-styles "^3.2.1" escape-string-regexp "^1.0.5" @@ -2058,36 +2220,35 @@ check-types@^7.3.0: integrity sha512-YbulWHdfP99UfZ73NcUDlNJhEIDgm9Doq9GhpyXbF+7Aegi3CVV7qqMCKTTqJxlvEvnQBp9IA+dxsGN6xK/nSg== cheerio@^1.0.0-rc.2: - version "1.0.0-rc.2" - resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.2.tgz#4b9f53a81b27e4d5dac31c0ffd0cfa03cc6830db" - integrity sha1-S59TqBsn5NXawxwP/Qz6A8xoMNs= + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.3.tgz#094636d425b2e9c0f4eb91a46c05630c9a1a8bf6" + integrity sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA== dependencies: css-select "~1.2.0" - dom-serializer "~0.1.0" + dom-serializer "~0.1.1" entities "~1.1.1" htmlparser2 "^3.9.1" lodash "^4.15.0" parse5 "^3.0.1" -chokidar@^2.0.0, chokidar@^2.0.2: - version "2.0.4" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.4.tgz#356ff4e2b0e8e43e322d18a372460bbcf3accd26" - integrity sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ== +chokidar@^2.0.2, chokidar@^2.1.6: + version "2.1.6" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.6.tgz#b6cad653a929e244ce8a834244164d241fa954c5" + integrity sha512-V2jUo67OKkc6ySiRpJrjlpJKl9kDuG+Xb8VgsGzb+aEouhgS1D0weyPU4lEzdAcsCAvrih2J2BqyXqHWvVLw5g== dependencies: anymatch "^2.0.0" - async-each "^1.0.0" - braces "^2.3.0" + async-each "^1.0.1" + braces "^2.3.2" glob-parent "^3.1.0" - inherits "^2.0.1" + inherits "^2.0.3" is-binary-path "^1.0.0" is-glob "^4.0.0" - lodash.debounce "^4.0.8" - normalize-path "^2.1.1" + normalize-path "^3.0.0" path-is-absolute "^1.0.0" - readdirp "^2.0.0" - upath "^1.0.5" + readdirp "^2.2.1" + upath "^1.1.1" optionalDependencies: - fsevents "^1.2.2" + fsevents "^1.2.7" chownr@^1.0.1, chownr@^1.1.1: version "1.1.1" @@ -2095,9 +2256,9 @@ chownr@^1.0.1, chownr@^1.1.1: integrity sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g== chrome-trace-event@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz#45a91bd2c20c9411f0963b5aaeb9a1b95e09cc48" - integrity sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A== + version "1.0.2" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" + integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ== dependencies: tslib "^1.9.0" @@ -2143,23 +2304,34 @@ cli-cursor@^2.1.0: dependencies: restore-cursor "^2.0.0" -cli-spinners@^1.1.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-1.3.1.tgz#002c1990912d0d59580c93bd36c056de99e4259a" - integrity sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg== +cli-highlight@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/cli-highlight/-/cli-highlight-2.1.1.tgz#2180223d51618b112f4509cf96e4a6c750b07e97" + integrity sha512-0y0VlNmdD99GXZHYnvrQcmHxP8Bi6T00qucGgBgGv4kJ0RyDthNnnFPupHV7PYv/OXSVk+azFbOeaW6+vGmx9A== + dependencies: + chalk "^2.3.0" + highlight.js "^9.6.0" + mz "^2.4.0" + parse5 "^4.0.0" + yargs "^13.0.0" + +cli-spinners@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.1.0.tgz#22c34b4d51f573240885b201efda4e4ec9fff3c7" + integrity sha512-8B00fJOEh1HPrx4fo5eW16XmE1PcL1tGpGrxy63CXGP9nHdPBN63X75hA1zhvQuhVztJWLqV58Roj2qlNM7cAA== cli-width@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= -clipboardy@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/clipboardy/-/clipboardy-1.2.3.tgz#0526361bf78724c1f20be248d428e365433c07ef" - integrity sha512-2WNImOvCRe6r63Gk9pShfkwXsVtKCroMAevIbiae021mS850UkWPbevxsBz3tnvjZIEGvlwaqCPsw+4ulzNgJA== +clipboardy@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/clipboardy/-/clipboardy-2.1.0.tgz#0123a0c8fac92f256dc56335e0bb8be97a4909a5" + integrity sha512-2pzOUxWcLlXWtn+Jd6js3o12TysNOOVes/aQfg+MT/35vrxWzedHlLwyoJpXjsFKWm95BTNEcMGD9+a7mKzZkQ== dependencies: - arch "^2.1.0" - execa "^0.8.0" + arch "^2.1.1" + execa "^1.0.0" cliui@^2.1.0: version "2.1.0" @@ -2179,7 +2351,7 @@ cliui@^3.2.0: strip-ansi "^3.0.1" wrap-ansi "^2.0.0" -cliui@^4.0.0, cliui@^4.1.0: +cliui@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ== @@ -2188,6 +2360,15 @@ cliui@^4.0.0, cliui@^4.1.0: strip-ansi "^4.0.0" wrap-ansi "^2.0.0" +cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" + integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== + dependencies: + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" + clone-deep@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-2.0.2.tgz#00db3a1e173656730d1188c3d6aced6d7ea97713" @@ -2208,7 +2389,7 @@ co@^4.6.0: resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= -coa@~2.0.1: +coa@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA== @@ -2256,22 +2437,17 @@ color-string@^1.5.2: simple-swizzle "^0.2.2" color@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/color/-/color-3.1.0.tgz#d8e9fb096732875774c84bf922815df0308d0ffc" - integrity sha512-CwyopLkuRYO5ei2EpzpIh6LqJMt6Mt+jZhO5VI5f/wJLZriXQE32/SSqzmrh+QB+AZT81Cj8yv+7zwToW8ahZg== + version "3.1.2" + resolved "https://registry.yarnpkg.com/color/-/color-3.1.2.tgz#68148e7f85d41ad7649c5fa8c8106f098d229e10" + integrity sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg== dependencies: color-convert "^1.9.1" color-string "^1.5.2" -colors@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" - integrity sha1-FopHAXVran9RoSzgyXv6KMCE7WM= - combined-stream@^1.0.6, combined-stream@~1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.7.tgz#2d1d24317afb8abe95d6d2c0b07b57813539d828" - integrity sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w== + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== dependencies: delayed-stream "~1.0.0" @@ -2280,12 +2456,17 @@ commander@2.15.1: resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" integrity sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag== -commander@2.17.x, commander@~2.17.1: +commander@2.17.x: version "2.17.1" resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg== commander@^2.18.0, commander@^2.19.0: + version "2.20.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" + integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== + +commander@~2.19.0: version "2.19.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== @@ -2296,27 +2477,27 @@ commondir@^1.0.1: integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= component-emitter@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" - integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY= + version "1.3.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== -compressible@~2.0.14: - version "2.0.15" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.15.tgz#857a9ab0a7e5a07d8d837ed43fe2defff64fe212" - integrity sha512-4aE67DL33dSW9gw4CI2H/yTxqHLNcxp0yS6jB+4h+wr3e43+1z7vm0HU9qXOH8j+qjKuL8+UtkOxYQSMq60Ylw== +compressible@~2.0.16: + version "2.0.17" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.17.tgz#6e8c108a16ad58384a977f3a482ca20bff2f38c1" + integrity sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw== dependencies: - mime-db ">= 1.36.0 < 2" + mime-db ">= 1.40.0 < 2" -compression@^1.5.2: - version "1.7.3" - resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.3.tgz#27e0e176aaf260f7f2c2813c3e440adb9f1993db" - integrity sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg== +compression@^1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" + integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== dependencies: accepts "~1.3.5" bytes "3.0.0" - compressible "~2.0.14" + compressible "~2.0.16" debug "2.6.9" - on-headers "~1.0.1" + on-headers "~1.0.2" safe-buffer "5.1.2" vary "~1.1.2" @@ -2335,10 +2516,10 @@ concat-stream@^1.5.0, concat-stream@^1.6.0: readable-stream "^2.2.2" typedarray "^0.0.6" -connect-history-api-fallback@^1.3.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz#b06873934bc5e344fef611a196a6faae0aee015a" - integrity sha1-sGhzk0vF40T+9hGhlqb6rgruAVo= +connect-history-api-fallback@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" + integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== console-browserify@^1.1.0: version "1.1.0" @@ -2374,10 +2555,12 @@ constants-browserify@^1.0.0: resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= -content-disposition@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" - integrity sha1-DPaLud318r55YcOoUXjLhdunjLQ= +content-disposition@0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" + integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== + dependencies: + safe-buffer "5.1.2" content-type@~1.0.4: version "1.0.4" @@ -2396,10 +2579,10 @@ cookie-signature@1.0.6: resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= -cookie@0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" - integrity sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s= +cookie@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" + integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== copy-concurrently@^1.0.0: version "1.0.5" @@ -2432,34 +2615,29 @@ copy-webpack-plugin@^4.6.0: p-limit "^1.0.0" serialize-javascript "^1.4.0" -core-js@^2.4.0, core-js@^2.5.7: - version "2.6.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.1.tgz#87416ae817de957a3f249b3b5ca475d4aaed6042" - integrity sha512-L72mmmEayPJBejKIWe2pYtGis5r0tQ5NaJekdhyXgeMQTpJoBsH0NL4ElY2LfSoV15xeQWKQ+XTTOZdyero5Xg== +core-js@^2.4.0, core-js@^2.6.5: + version "2.6.9" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.9.tgz#6b4b214620c834152e179323727fc19741b084f2" + integrity sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A== + +core-js@^3.0.1: + version "3.1.4" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.1.4.tgz#3a2837fc48e582e1ae25907afcd6cf03b0cc7a07" + integrity sha512-YNZN8lt82XIMLnLirj9MhKDFZHalwzzrL9YLt6eb0T5D0EDl4IQ90IGkua8mHbnxNrkj1d8hbdizMc0Qmg1WnQ== core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= -cosmiconfig@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-4.0.0.tgz#760391549580bbd2df1e562bc177b13c290972dc" - integrity sha512-6e5vDdrXZD+t5v0L8CrurPeybg4Fmf+FCSYxXKYVAqLUtyCSbuyqE059d0kDthTNRzKVjL7QMgNpEUlsoYH3iQ== - dependencies: - is-directory "^0.3.1" - js-yaml "^3.9.0" - parse-json "^4.0.0" - require-from-string "^2.0.1" - cosmiconfig@^5.0.0: - version "5.0.7" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.0.7.tgz#39826b292ee0d78eda137dfa3173bd1c21a43b04" - integrity sha512-PcLqxTKiDmNT6pSpy4N6KtuPwb53W+2tzNvwOZw0WH9N6O0vLIBq0x8aj8Oj75ere4YcGi48bDFCL+3fRJdlNA== + version "5.2.1" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" + integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== dependencies: import-fresh "^2.0.0" is-directory "^0.3.1" - js-yaml "^3.9.0" + js-yaml "^3.13.1" parse-json "^4.0.0" create-ecdh@^4.0.0: @@ -2569,7 +2747,7 @@ css-loader@^1.0.1: postcss-value-parser "^3.3.0" source-list-map "^2.0.0" -css-select-base-adapter@~0.1.0: +css-select-base-adapter@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w== @@ -2630,9 +2808,9 @@ css-url-regex@^1.1.0: integrity sha1-g4NCMMyfdMRX3lnuvRVD/uuDt+w= css-what@2.1, css-what@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.2.tgz#c0876d9d0480927d7d4920dcd72af3595649554d" - integrity sha512-wan8dMWQ0GUeF7DGEPVjhHemVW/vy6xUYmFzRY8RYqgA0JtXC9rJmbScBjqSu6dg9q0lwPQy6ZAmJVr3PPTvqQ== + version "2.1.3" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2" + integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg== cssesc@^0.1.0: version "0.1.0" @@ -2644,40 +2822,45 @@ cssesc@^2.0.0: resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-2.0.0.tgz#3b13bd1bb1cb36e1bcb5a4dcd27f54c5dcb35703" integrity sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg== -cssnano-preset-default@^4.0.0, cssnano-preset-default@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.5.tgz#d1756c0259d98ad311e601ba76e95c60f6771ac1" - integrity sha512-f1uhya0ZAjPYtDD58QkBB0R+uYdzHPei7cDxJyQQIHt5acdhyGXaSXl2nDLzWHLwGFbZcHxQtkJS8mmNwnxTvw== +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +cssnano-preset-default@^4.0.0, cssnano-preset-default@^4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz#51ec662ccfca0f88b396dcd9679cdb931be17f76" + integrity sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA== dependencies: css-declaration-sorter "^4.0.1" cssnano-util-raw-cache "^4.0.1" postcss "^7.0.0" - postcss-calc "^7.0.0" - postcss-colormin "^4.0.2" + postcss-calc "^7.0.1" + postcss-colormin "^4.0.3" postcss-convert-values "^4.0.1" - postcss-discard-comments "^4.0.1" + postcss-discard-comments "^4.0.2" postcss-discard-duplicates "^4.0.2" postcss-discard-empty "^4.0.1" postcss-discard-overridden "^4.0.1" - postcss-merge-longhand "^4.0.9" - postcss-merge-rules "^4.0.2" + postcss-merge-longhand "^4.0.11" + postcss-merge-rules "^4.0.3" postcss-minify-font-values "^4.0.2" - postcss-minify-gradients "^4.0.1" - postcss-minify-params "^4.0.1" - postcss-minify-selectors "^4.0.1" + postcss-minify-gradients "^4.0.2" + postcss-minify-params "^4.0.2" + postcss-minify-selectors "^4.0.2" postcss-normalize-charset "^4.0.1" - postcss-normalize-display-values "^4.0.1" - postcss-normalize-positions "^4.0.1" - postcss-normalize-repeat-style "^4.0.1" - postcss-normalize-string "^4.0.1" - postcss-normalize-timing-functions "^4.0.1" + postcss-normalize-display-values "^4.0.2" + postcss-normalize-positions "^4.0.2" + postcss-normalize-repeat-style "^4.0.2" + postcss-normalize-string "^4.0.2" + postcss-normalize-timing-functions "^4.0.2" postcss-normalize-unicode "^4.0.1" postcss-normalize-url "^4.0.1" - postcss-normalize-whitespace "^4.0.1" - postcss-ordered-values "^4.1.1" - postcss-reduce-initial "^4.0.2" - postcss-reduce-transforms "^4.0.1" - postcss-svgo "^4.0.1" + postcss-normalize-whitespace "^4.0.2" + postcss-ordered-values "^4.1.2" + postcss-reduce-initial "^4.0.3" + postcss-reduce-transforms "^4.0.2" + postcss-svgo "^4.0.2" postcss-unique-selectors "^4.0.1" cssnano-util-get-arguments@^4.0.0: @@ -2702,17 +2885,17 @@ cssnano-util-same-parent@^4.0.0: resolved "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz#574082fb2859d2db433855835d9a8456ea18bbf3" integrity sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q== -cssnano@^4.0.0, cssnano@^4.1.7: - version "4.1.7" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.7.tgz#0bf112294bec103ab5f68d3f805732c8325a0b1b" - integrity sha512-AiXL90l+MDuQmRNyypG2P7ux7K4XklxYzNNUd5HXZCNcH8/N9bHPcpN97v8tXgRVeFL/Ed8iP8mVmAAu0ZpT7A== +cssnano@^4.0.0, cssnano@^4.1.10: + version "4.1.10" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.10.tgz#0ac41f0b13d13d465487e111b778d42da631b8b2" + integrity sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ== dependencies: cosmiconfig "^5.0.0" - cssnano-preset-default "^4.0.5" + cssnano-preset-default "^4.0.7" is-resolvable "^1.0.0" postcss "^7.0.0" -csso@^3.5.0: +csso@^3.5.1: version "3.5.1" resolved "https://registry.yarnpkg.com/csso/-/csso-3.5.1.tgz#7b9eb8be61628973c1b261e169d2f024008e758b" integrity sha512-vrqULLffYU1Q2tLdJvaCYbONStnfkfimRxXNaGjxMldI0C7JPBC4rB1RyjhfdZ4m1frm8pM9uRPKH3d2knZ8gg== @@ -2720,17 +2903,22 @@ csso@^3.5.0: css-tree "1.0.0-alpha.29" cssom@0.3.x, cssom@^0.3.4: - version "0.3.4" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.4.tgz#8cd52e8a3acfd68d3aed38ee0a640177d2f9d797" - integrity sha512-+7prCSORpXNeR4/fUP3rL+TzqtiFfhMvTd7uEqMdgPvLPt4+uzFUeufx5RHjGTACCargg/DiEt/moMQmvnfkog== + version "0.3.6" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.6.tgz#f85206cee04efa841f3c5982a74ba96ab20d65ad" + integrity sha512-DtUeseGk9/GBW0hl0vVPpU22iHL6YB5BUX7ml1hB+GMpo0NX5G4voX3kdWiMSEguFtcW3Vh3djqNF4aIe6ne0A== cssstyle@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-1.1.1.tgz#18b038a9c44d65f7a8e428a653b9f6fe42faf5fb" - integrity sha512-364AI1l/M5TYcFH83JnOH/pSqgaNnKmYgKrm0didZMGKWjQB60dymwWy1rKUgL3J1ffdq9xVi2yGLHdSjjSNog== + version "1.2.2" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-1.2.2.tgz#427ea4d585b18624f6fdbf9de7a2a1a3ba713077" + integrity sha512-43wY3kl1CVQSvL7wUY1qXkxVGkStjpkDmVjiIKX8R97uhajy8Bybay78uOtqvh7Q5GK75dNPfW0geWjE6qQQow== dependencies: cssom "0.3.x" +current-script-polyfill@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/current-script-polyfill/-/current-script-polyfill-1.0.0.tgz#f31cf7e4f3e218b0726e738ca92a02d3488ef615" + integrity sha1-8xz35PPiGLBybnOMqSoC00iO9hU= + currently-unhandled@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" @@ -2738,10 +2926,10 @@ currently-unhandled@^0.4.1: dependencies: array-find-index "^1.0.1" -custom-event-polyfill@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/custom-event-polyfill/-/custom-event-polyfill-1.0.6.tgz#6b026e81cd9f7bc896bd6b016a427407bb068db1" - integrity sha512-3FxpFlzGcHrDykwWu+xWVXZ8PfykM/9/bI3zXb953sh+AjInZWcQmrnmvPoZgiqNjmbtTm10PWvYqvRW527x6g== +custom-event-polyfill@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/custom-event-polyfill/-/custom-event-polyfill-1.0.7.tgz#9bc993ddda937c1a30ccd335614c6c58c4f87aee" + integrity sha512-TDDkd5DkaZxZFM8p+1I3yAlvM3rSr1wbrOliG4yJiwinMZN8z/iGL7BTlDkrJcYTmgUSb4ywVCc3ZaUtOtC76w== cyclist@~0.2.2: version "0.2.2" @@ -2779,7 +2967,7 @@ de-indent@^1.0.2: resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" integrity sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0= -debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8: +debug@2.6.9, debug@^2.2.0, debug@^2.3.3: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== @@ -2793,32 +2981,25 @@ debug@3.1.0, debug@=3.1.0: dependencies: ms "2.0.0" -debug@^3.1.0, debug@^3.2.5: +debug@^3.1.0, debug@^3.2.5, debug@^3.2.6: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== dependencies: ms "^2.1.1" -debug@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.0.tgz#373687bffa678b38b1cd91f861b63850035ddc87" - integrity sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg== +debug@^4.1.0, debug@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== dependencies: ms "^2.1.1" -decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2: +decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= -decamelize@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-2.0.0.tgz#656d7bbc8094c4c788ea53c5840908c9c7d063c7" - integrity sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg== - dependencies: - xregexp "4.0.0" - decode-uri-component@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" @@ -2856,12 +3037,20 @@ deepmerge@^2.1.0: resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-2.2.1.tgz#5d3ff22a01c00f645405a2fbc17d0778a1801170" integrity sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA== -default-gateway@^2.6.0: - version "2.7.2" - resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-2.7.2.tgz#b7ef339e5e024b045467af403d50348db4642d0f" - integrity sha512-lAc4i9QJR0YHSDFdzeBQKfZ1SRDG3hsJNEkrpcZa8QhBfidLAilT60BDEIVUUGqosFp425KOgB3uYqcnQrWafQ== +default-gateway@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b" + integrity sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA== + dependencies: + execa "^1.0.0" + ip-regex "^2.1.0" + +default-gateway@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-5.0.2.tgz#d2d8a13d6fee406d9365d19ec9adccb8a60b82b3" + integrity sha512-wXuT0q8T5vxQNecrTgz/KbU2lPUMRc98I9Y5dnH3yhFB3BGYqtADK4lhivLlG0OfjhmfKx1PGILG2jR4zjI+WA== dependencies: - execa "^0.10.0" + execa "^1.0.0" ip-regex "^2.1.0" defaults@^1.0.3: @@ -2871,7 +3060,7 @@ defaults@^1.0.3: dependencies: clone "^1.0.2" -define-properties@^1.1.2: +define-properties@^1.1.2, define-properties@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== @@ -2900,17 +3089,18 @@ define-property@^2.0.2: is-descriptor "^1.0.2" isobject "^3.0.1" -del@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5" - integrity sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU= +del@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" + integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ== dependencies: + "@types/glob" "^7.1.1" globby "^6.1.0" - is-path-cwd "^1.0.0" - is-path-in-cwd "^1.0.0" - p-map "^1.1.1" - pify "^3.0.0" - rimraf "^2.2.8" + is-path-cwd "^2.0.0" + is-path-in-cwd "^2.0.0" + p-map "^2.0.0" + pify "^4.0.1" + rimraf "^2.6.3" delayed-stream@~1.0.0: version "1.0.0" @@ -2950,7 +3140,7 @@ detect-libc@^1.0.2: resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= -detect-node@^2.0.3: +detect-node@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c" integrity sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw== @@ -2974,12 +3164,11 @@ diffie-hellman@^5.0.0: miller-rabin "^4.0.0" randombytes "^2.0.0" -dir-glob@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.0.0.tgz#0b205d2b6aef98238ca286598a8204d29d0a0034" - integrity sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag== +dir-glob@^2.0.0, dir-glob@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.2.2.tgz#fa09f0694153c8918b18ba0deafae94769fc50c4" + integrity sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw== dependencies: - arrify "^1.0.1" path-type "^3.0.0" django-channels@^1.1.6: @@ -3021,7 +3210,7 @@ doctypes@^1.1.0: resolved "https://registry.yarnpkg.com/doctypes/-/doctypes-1.1.0.tgz#ea80b106a87538774e8a3a4a5afe293de489e0a9" integrity sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk= -dom-converter@~0.2: +dom-converter@^0.2: version "0.2.0" resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== @@ -3033,29 +3222,24 @@ dom-event-types@^1.0.0: resolved "https://registry.yarnpkg.com/dom-event-types/-/dom-event-types-1.0.0.tgz#5830a0a29e1bf837fe50a70cd80a597232813cae" integrity sha512-2G2Vwi2zXTHBGqXHsJ4+ak/iP0N8Ar+G8a7LiD2oup5o4sQWytwqqrZu/O6hIMV0KMID2PL69OhpshLO0n7UJQ== -dom-serializer@0, dom-serializer@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" - integrity sha1-BzxpdUbOB4DOI75KKOKT5AvDDII= +dom-serializer@0, dom-serializer@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0" + integrity sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA== dependencies: - domelementtype "~1.1.1" - entities "~1.1.1" + domelementtype "^1.3.0" + entities "^1.1.1" domain-browser@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== -domelementtype@1, domelementtype@^1.3.0: +domelementtype@1, domelementtype@^1.3.0, domelementtype@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== -domelementtype@~1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" - integrity sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs= - domexception@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" @@ -3063,13 +3247,6 @@ domexception@^1.0.1: dependencies: webidl-conversions "^4.0.2" -domhandler@2.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.1.0.tgz#d2646f5e57f6c3bab11cf6cb05d3c0acf7412594" - integrity sha1-0mRvXlf2w7qxHPbLBdPArPdBJZQ= - dependencies: - domelementtype "1" - domhandler@^2.3.0: version "2.4.2" resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" @@ -3077,13 +3254,6 @@ domhandler@^2.3.0: dependencies: domelementtype "1" -domutils@1.1: - version "1.1.6" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.1.6.tgz#bddc3de099b9a2efacc51c623f28f416ecc57485" - integrity sha1-vdw94Jm5ou+sxRxiPyj0FuzFdIU= - dependencies: - domelementtype "1" - domutils@1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" @@ -3107,15 +3277,25 @@ dot-prop@^4.1.1: dependencies: is-obj "^1.0.0" +dotenv-expand@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0" + integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA== + +dotenv@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-7.0.0.tgz#a2be3cd52736673206e8a85fb5210eea29628e7c" + integrity sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g== + duplexer@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E= duplexify@^3.4.2, duplexify@^3.6.0: - version "3.6.1" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.6.1.tgz#b1a7a29c4abfd639585efaecce80d666b1e34125" - integrity sha512-vM58DwdnKmty+FSPzT14K9JXb90H+j5emaR4KYbr2KTIz00WHGbWOe5ghQTx233ZCLZtrGDALzKwcjEtSt35mA== + version "3.7.1" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" + integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== dependencies: end-of-stream "^1.0.0" inherits "^2.0.1" @@ -3155,14 +3335,14 @@ ee-first@1.1.1: integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= ejs@^2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.6.1.tgz#498ec0d495655abc6f23cd61868d926464071aa0" - integrity sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ== + version "2.6.2" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.6.2.tgz#3a32c63d1cd16d11266cd4703b14fec4e74ab4f6" + integrity sha512-PcW2a0tyTuPHz3tWyYqtK6r1fZ3gp+3Sop8Ph+ZYN81Ob5rwmbHEzaqs10N3BEsaGTkh/ooniXK+WwszGlc2+Q== -electron-to-chromium@^1.3.47, electron-to-chromium@^1.3.92: - version "1.3.95" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.95.tgz#79fac438813ca7f3db182a525c2ab432934f6484" - integrity sha512-0JZEDKOQAE05EO/4rk3vLAE+PYFI9OLCVLAS4QAq1y+Bb2y1N6MyQJz62ynzHN/y0Ka/nO5jVJcahbCEdfiXLQ== +electron-to-chromium@^1.3.150: + version "1.3.163" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.163.tgz#7fc3d637f5d8fa4ca4a052cad0de7675bd98b911" + integrity sha512-uCEoqQeKrjlhUSUudY0XvyNVDhWR5XmnCIV0WXr2Qo9PVzEVXI75LHGtzwro9Qh8NNetRjSitrm8AfQvPGaSqA== elliptic@^6.0.0: version "6.4.1" @@ -3177,6 +3357,11 @@ elliptic@^6.0.0: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.0" +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + emojis-list@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" @@ -3229,18 +3414,19 @@ error-stack-parser@^2.0.0: dependencies: stackframe "^1.0.4" -es-abstract@^1.4.3, es-abstract@^1.5.1, es-abstract@^1.6.1: - version "1.12.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.12.0.tgz#9dbbdd27c6856f0001421ca18782d786bf8a6165" - integrity sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA== +es-abstract@^1.12.0, es-abstract@^1.4.3, es-abstract@^1.5.1: + version "1.13.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9" + integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg== dependencies: - es-to-primitive "^1.1.1" + es-to-primitive "^1.2.0" function-bind "^1.1.1" - has "^1.0.1" - is-callable "^1.1.3" + has "^1.0.3" + is-callable "^1.1.4" is-regex "^1.0.4" + object-keys "^1.0.12" -es-to-primitive@^1.1.1: +es-to-primitive@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg== @@ -3260,9 +3446,9 @@ escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1 integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= escodegen@^1.11.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.11.0.tgz#b27a9389481d5bfd5bec76f7bb1eb3f8f4556589" - integrity sha512-IeMV45ReixHS53K/OmfKAIztN/igDHzTJUhZM3k1jMhIZWjk45SMwAtBsEXiJp3vSPmTcu6CXn7mDvFHRN66fw== + version "1.11.1" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.11.1.tgz#c485ff8d6b4cdb89e27f4a856e91f118401ca510" + integrity sha512-JwiqFD9KdGVVpeuRa68yU3zZnBEOcPs0nKW7wZzXky8Z7tffdYUHbe11bPCV5jYlK6DVdKLWLm0f5I/QlL0Kmw== dependencies: esprima "^3.1.3" estraverse "^4.2.0" @@ -3271,10 +3457,10 @@ escodegen@^1.11.0: optionalDependencies: source-map "~0.6.1" -eslint-loader@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/eslint-loader/-/eslint-loader-2.1.1.tgz#2a9251523652430bfdd643efdb0afc1a2a89546a" - integrity sha512-1GrJFfSevQdYpoDzx8mEE2TDWsb/zmFuY09l6hURg1AeFIKQOvZ+vH0UPjzmd1CZIbfTV5HUkMeBmFiDBkgIsQ== +eslint-loader@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/eslint-loader/-/eslint-loader-2.1.2.tgz#453542a1230d6ffac90e4e7cb9cadba9d851be68" + integrity sha512-rA9XiXEOilLYPOIInvVH5S/hYfyTPyxag6DZhoQOduM+3TkghAEQ3VcFO8VnX4J4qg/UIBzp72aOf/xvYmpmsg== dependencies: loader-fs-cache "^1.0.0" loader-utils "^1.0.2" @@ -3313,9 +3499,9 @@ eslint-scope@^3.7.1: estraverse "^4.1.1" eslint-scope@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.0.tgz#50bf3071e9338bcdc43331794a0cb533f0136172" - integrity sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA== + version "4.0.3" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" + integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== dependencies: esrecurse "^4.1.0" estraverse "^4.1.1" @@ -3427,14 +3613,14 @@ event-pubsub@4.3.0: integrity sha512-z7IyloorXvKbFx9Bpie2+vMJKKx1fH1EN5yiTfp8CiLOTptSYy1g8H4yDpGlEdshL1PBiFtBHepF2cNsqeEeFQ== eventemitter3@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.0.tgz#090b4d6cdbd645ed10bf750d4b5407942d7ba163" - integrity sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA== + version "3.1.2" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" + integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q== -events@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" - integrity sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ= +events@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.0.0.tgz#9a0a0dfaf62893d92b875b8f2698ca4114973e88" + integrity sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA== eventsource@^1.0.7: version "1.0.7" @@ -3451,19 +3637,6 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: md5.js "^1.3.4" safe-buffer "^5.1.1" -execa@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.10.0.tgz#ff456a8f53f90f8eccc71a96d11bdfc7f082cb50" - integrity sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw== - dependencies: - cross-spawn "^6.0.0" - get-stream "^3.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - execa@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" @@ -3516,39 +3689,39 @@ expand-brackets@^2.1.4: snapdragon "^0.8.1" to-regex "^3.0.1" -express@^4.16.2, express@^4.16.3: - version "4.16.4" - resolved "https://registry.yarnpkg.com/express/-/express-4.16.4.tgz#fddef61926109e24c515ea97fd2f1bdbf62df12e" - integrity sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg== +express@^4.16.3, express@^4.17.1: + version "4.17.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" + integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== dependencies: - accepts "~1.3.5" + accepts "~1.3.7" array-flatten "1.1.1" - body-parser "1.18.3" - content-disposition "0.5.2" + body-parser "1.19.0" + content-disposition "0.5.3" content-type "~1.0.4" - cookie "0.3.1" + cookie "0.4.0" cookie-signature "1.0.6" debug "2.6.9" depd "~1.1.2" encodeurl "~1.0.2" escape-html "~1.0.3" etag "~1.8.1" - finalhandler "1.1.1" + finalhandler "~1.1.2" fresh "0.5.2" merge-descriptors "1.0.1" methods "~1.1.2" on-finished "~2.3.0" - parseurl "~1.3.2" + parseurl "~1.3.3" path-to-regexp "0.1.7" - proxy-addr "~2.0.4" - qs "6.5.2" - range-parser "~1.2.0" + proxy-addr "~2.0.5" + qs "6.7.0" + range-parser "~1.2.1" safe-buffer "5.1.2" - send "0.16.2" - serve-static "1.13.2" - setprototypeof "1.1.0" - statuses "~1.4.0" - type-is "~1.6.16" + send "0.17.1" + serve-static "1.14.1" + setprototypeof "1.1.1" + statuses "~1.5.0" + type-is "~1.6.18" utils-merge "1.0.1" vary "~1.1.2" @@ -3615,10 +3788,10 @@ fast-deep-equal@^2.0.1: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= -fast-glob@^2.0.2: - version "2.2.4" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.4.tgz#e54f4b66d378040e0e4d6a68ec36bbc5b04363c0" - integrity sha512-FjK2nCGI/McyzgNtTESqaWP3trPvHyRyoyY70hxjc3oKPNmDe8taohLZpoVKoUjW85tbU5txaYUZCNtVzygl1g== +fast-glob@^2.2.6: + version "2.2.7" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d" + integrity sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw== dependencies: "@mrmlnc/readdir-enhanced" "^2.2.1" "@nodelib/fs.stat" "^1.1.2" @@ -3650,13 +3823,13 @@ faye-websocket@^0.10.0: websocket-driver ">=0.5.1" faye-websocket@~0.11.1: - version "0.11.1" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.1.tgz#f0efe18c4f56e4f40afc7e06c719fd5ee6188f38" - integrity sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg= + version "0.11.3" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.3.tgz#5c0e9a8968e8912c286639fde977a8b209f2508e" + integrity sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA== dependencies: websocket-driver ">=0.5.1" -figgy-pudding@^3.1.0, figgy-pudding@^3.5.1: +figgy-pudding@^3.5.1: version "3.5.1" resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" integrity sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w== @@ -3676,10 +3849,10 @@ file-entry-cache@^2.0.0: flat-cache "^1.2.1" object-assign "^4.0.1" -file-loader@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-2.0.0.tgz#39749c82f020b9e85901dcff98e8004e6401cfde" - integrity sha512-YCsBfd1ZGCyonOKLxPiKPdu+8ld9HAaMEvJewzz+b2eTF7uL5Zm/HdBF6FjCrpCMRq25Mi0U1gl4pwn2TlH7hQ== +file-loader@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-3.0.1.tgz#f8e0ba0b599918b51adfe45d66d1e771ad560faa" + integrity sha512-4sNIOXgtH/9WZq4NvlfU3Opn5ynUsqBwSLyM+I7UOwdGigTBYfVVQEwe/msZNX/j4pCJTIM14Fsw66Svo1oVrw== dependencies: loader-utils "^1.0.2" schema-utils "^1.0.0" @@ -3699,19 +3872,27 @@ fill-range@^4.0.0: repeat-string "^1.6.1" to-regex-range "^2.1.0" -finalhandler@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.1.tgz#eebf4ed840079c83f4249038c9d703008301b105" - integrity sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg== +finalhandler@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== dependencies: debug "2.6.9" encodeurl "~1.0.2" escape-html "~1.0.3" on-finished "~2.3.0" - parseurl "~1.3.2" - statuses "~1.4.0" + parseurl "~1.3.3" + statuses "~1.5.0" unpipe "~1.0.0" +find-babel-config@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/find-babel-config/-/find-babel-config-1.2.0.tgz#a9b7b317eb5b9860cda9d54740a8c8337a2283a2" + integrity sha512-jB2CHJeqy6a820ssiqwrKMeyC6nNdmrcgkKWJWmpoxpE8RKciYJXCcXRq1h2AzCo5I5BJeN2tkGEO3hLTuePRA== + dependencies: + json5 "^0.5.1" + path-exists "^3.0.0" + find-cache-dir@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9" @@ -3731,12 +3912,12 @@ find-cache-dir@^1.0.0: pkg-dir "^2.0.0" find-cache-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.0.0.tgz#4c1faed59f45184530fb9d7fa123a4d04a98472d" - integrity sha512-LDUY6V1Xs5eFskUVYtIwatojt6+9xC9Chnlk/jYOOvn3FAFfSaWddxahDGyNHh0b2dMXa6YW2m0tk8TdVaXHlA== + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" + integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== dependencies: commondir "^1.0.1" - make-dir "^1.0.0" + make-dir "^2.0.0" pkg-dir "^3.0.0" find-up@^1.0.0: @@ -3779,19 +3960,33 @@ flat-cache@^1.2.1: write "^0.2.1" flush-write-stream@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.0.3.tgz#c5d586ef38af6097650b49bc41b55fabb19f35bd" - integrity sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw== + version "1.1.1" + resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" + integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== dependencies: - inherits "^2.0.1" - readable-stream "^2.0.4" + inherits "^2.0.3" + readable-stream "^2.3.6" + +follow-redirects@1.5.10: + version "1.5.10" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" + integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ== + dependencies: + debug "=3.1.0" + +follow-redirects@^1.0.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.7.0.tgz#489ebc198dc0e7f64167bd23b03c4c19b5784c76" + integrity sha512-m/pZQy4Gj287eNy94nivy5wchN3Kp+Q5WgUPNy5lJSZ3sgkVKSYV/ZChMAQVIgx1SqfZ2zBZtPA2YlXIWxxJOQ== + dependencies: + debug "^3.2.6" -follow-redirects@^1.0.0, follow-redirects@^1.3.0: - version "1.5.10" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" - integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ== +fomantic-ui-css@^2.7: + version "2.7.6" + resolved "https://registry.yarnpkg.com/fomantic-ui-css/-/fomantic-ui-css-2.7.6.tgz#8af84c0afce21142bf663979cf7452155562e6e2" + integrity sha512-oruD/DoMDZGSfK6fE3EnWKGad3vbhpiOtXrCwS0Bi+3QWXHwQsDU0k6P0Q8HzawoLXqHff83LmTDJWST5ARTxw== dependencies: - debug "=3.1.0" + jquery "^3.4.0" for-in@^0.1.3: version "0.1.8" @@ -3841,15 +4036,6 @@ fresh@0.5.2: resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= -friendly-errors-webpack-plugin@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.7.0.tgz#efc86cbb816224565861a1be7a9d84d0aafea136" - integrity sha512-K27M3VK30wVoOarP651zDmb93R9zF28usW4ocaK3mfQeIEI5BPht/EzZs5E8QLLwbLRJQMwscAjDxYPb1FuNiw== - dependencies: - chalk "^1.1.3" - error-stack-parser "^2.0.0" - string-width "^2.0.0" - from2@^2.1.0: version "2.3.0" resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" @@ -3868,9 +4054,9 @@ fs-extra@^7.0.1: universalify "^0.1.0" fs-minipass@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" - integrity sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ== + version "1.2.6" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.6.tgz#2c5cc30ded81282bfe8a0d7c7c1853ddeb102c07" + integrity sha512-crhvyXcMejjv3Z5d2Fa9sf5xLYVCF5O1c71QxbVnbLsmYMBEvDAftewesN/HhY03YRoA7zOMxjNGrF5svGaaeQ== dependencies: minipass "^2.2.1" @@ -3889,25 +4075,25 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= -fsevents@^1.2.2: - version "1.2.4" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.4.tgz#f41dcb1af2582af3692da36fc55cbd8e1041c426" - integrity sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg== +fsevents@^1.2.7: + version "1.2.9" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.9.tgz#3f5ed66583ccd6f400b5a00db6f7e861363e388f" + integrity sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw== dependencies: - nan "^2.9.2" - node-pre-gyp "^0.10.0" + nan "^2.12.1" + node-pre-gyp "^0.12.0" -fstream@^1.0.0, fstream@^1.0.2: - version "1.0.11" - resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" - integrity sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE= +fstream@^1.0.0, fstream@^1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" + integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg== dependencies: graceful-fs "^4.1.2" inherits "~2.0.0" mkdirp ">=0.5 0" rimraf "2" -function-bind@^1.0.2, function-bind@^1.1.0, function-bind@^1.1.1: +function-bind@^1.0.2, function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== @@ -3943,6 +4129,11 @@ get-caller-file@^1.0.1: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== +get-caller-file@^2.0.1: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + get-func-name@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" @@ -3982,6 +4173,14 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" +glob-all@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-all/-/glob-all-3.1.0.tgz#8913ddfb5ee1ac7812656241b03d5217c64b02ab" + integrity sha1-iRPd+17hrHgSZWJBsD1SF8ZLAqs= + dependencies: + glob "^7.0.5" + yargs "~1.2.6" + glob-parent@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" @@ -4007,10 +4206,10 @@ glob@7.1.2: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.2, glob@~7.1.1: - version "7.1.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" - integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== +glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.2, glob@^7.1.3, glob@~7.1.1: + version "7.1.4" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" + integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -4020,9 +4219,9 @@ glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.2, glob@~7.1.1: path-is-absolute "^1.0.0" globals@^11.0.1, globals@^11.1.0: - version "11.9.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.9.0.tgz#bde236808e987f290768a93d065060d78e6ab249" - integrity sha512-5cJVtyXWH8PiJPVLZzzoIizXx944O4OmRro5MWKx5fT4MgcN7OfaMutPeaTdJCCURwbWdhhcCWcKIffPnmTzBg== + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== globby@^6.1.0: version "6.1.0" @@ -4047,18 +4246,19 @@ globby@^7.1.1: pify "^3.0.0" slash "^1.0.0" -globby@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/globby/-/globby-8.0.1.tgz#b5ad48b8aa80b35b814fc1281ecc851f1d2b5b50" - integrity sha512-oMrYrJERnKBLXNLVTqhm3vPEdJ/b2ZE28xN4YARiix1NOIOBPEpOUnm844K1iu/BkphCaf2WNFwMszv8Soi1pw== - dependencies: - array-union "^1.0.1" - dir-glob "^2.0.0" - fast-glob "^2.0.2" - glob "^7.1.2" - ignore "^3.3.5" - pify "^3.0.0" - slash "^1.0.0" +globby@^9.2.0: + version "9.2.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-9.2.0.tgz#fd029a706c703d29bdd170f4b6db3a3f7a7cb63d" + integrity sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg== + dependencies: + "@types/glob" "^7.1.1" + array-union "^1.0.2" + dir-glob "^2.2.2" + fast-glob "^2.2.6" + glob "^7.1.3" + ignore "^4.0.3" + pify "^4.0.1" + slash "^2.0.0" globule@^1.0.0: version "1.2.1" @@ -4069,7 +4269,7 @@ globule@^1.0.0: lodash "~4.17.10" minimatch "~3.0.2" -graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6: +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6: version "4.1.15" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA== @@ -4080,17 +4280,17 @@ growl@1.10.5: integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== gzip-size@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.0.0.tgz#a55ecd99222f4c48fd8c01c625ce3b349d0a0e80" - integrity sha512-5iI7omclyqrnWw4XbXAmGhPsABkSIDQonv2K0h61lybgofWa6iZyvrI3r2zsJH4P8Nb64fFVzlvfhs0g7BBxAA== + version "5.1.1" + resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.1.1.tgz#cb9bee692f87c0612b232840a873904e4c135274" + integrity sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA== dependencies: duplexer "^0.1.1" - pify "^3.0.0" + pify "^4.0.1" -handle-thing@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-1.2.5.tgz#fd7aad726bf1a5fd16dfc29b2f7a6601d27139c4" - integrity sha1-/Xqtcmvxpf0W38KbL3pmAdJxOcQ= +handle-thing@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.0.tgz#0e039695ff50c93fc288557d696f3c1dc6776754" + integrity sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ== har-schema@^2.0.0: version "2.0.0" @@ -4158,7 +4358,7 @@ has-values@^1.0.0: is-number "^3.0.0" kind-of "^4.0.0" -has@^1.0.0, has@^1.0.1: +has@^1.0.0, has@^1.0.1, has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== @@ -4201,6 +4401,11 @@ hex-color-regex@^1.1.0: resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== +highlight.js@^9.6.0: + version "9.15.8" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.15.8.tgz#f344fda123f36f1a65490e932cf90569e4999971" + integrity sha512-RrapkKQWwE+wKdF73VsOa2RQdIoO3mxwJ4P8mhbI6KYJUraUHRKM5w5zQQKXNk0xNL4UVRdulV9SBJcmzJNzVA== + hmac-drbg@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" @@ -4210,16 +4415,6 @@ hmac-drbg@^1.0.0: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" -hoek@5.x.x: - version "5.0.4" - resolved "https://registry.yarnpkg.com/hoek/-/hoek-5.0.4.tgz#0f7fa270a1cafeb364a4b2ddfaa33f864e4157da" - integrity sha512-Alr4ZQgoMlnere5FZJsIyfIjORBqZll5POhDsF4q64dPuJR6rNxXdDxtHSQq8OXRurhmx+PWYEE8bXRROY8h0w== - -hoek@6.x.x: - version "6.1.2" - resolved "https://registry.yarnpkg.com/hoek/-/hoek-6.1.2.tgz#99e6d070561839de74ee427b61aa476bd6bddfd6" - integrity sha512-6qhh/wahGYZHFSFw12tBbJw5fsAhhwrrG/y3Cs0YMTv2WzMnL0oLPnQJjv1QJvEfylRSOFuP+xCu+tdx0tD16Q== - hoopy@^0.1.2: version "0.1.4" resolved "https://registry.yarnpkg.com/hoopy/-/hoopy-0.1.4.tgz#609207d661100033a9a9402ad3dea677381c1b1d" @@ -4231,9 +4426,9 @@ hosted-git-info@^2.1.4: integrity sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w== howler@^2.0.14: - version "2.1.1" - resolved "https://registry.yarnpkg.com/howler/-/howler-2.1.1.tgz#b8ae44b83f4b8a5b5ef354030ed0927314d8a996" - integrity sha512-9nwyDCGxhAGMmNXDfMLv0M/uS/WUg2//jG6t96D8DqbbsVZgXQzsP/ZMItbWO/Fqg7Gg69kOv3xVSDzJdd7aqA== + version "2.1.2" + resolved "https://registry.yarnpkg.com/howler/-/howler-2.1.2.tgz#8433a09d8fe84132a3e726e05cb2bd352ef8bd49" + integrity sha512-oKrTFaVXsDRoB/jik7cEpWKTj7VieoiuzMYJ7E/EU5ayvmpRhumCv3YQ3823zi9VTJkSWAhbryHnlZAionGAJg== hpack.js@^2.1.6: version "2.1.6" @@ -4267,7 +4462,7 @@ html-encoding-sniffer@^1.0.2: dependencies: whatwg-encoding "^1.0.1" -html-entities@^1.2.0: +html-entities@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f" integrity sha1-DfKTUfByEWNRXfueVUPl9u7VFi8= @@ -4285,6 +4480,11 @@ html-minifier@^3.2.3: relateurl "0.2.x" uglify-js "3.4.x" +html-tags@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-2.0.0.tgz#10b30a386085f43cede353cc8fa7cb0deeea668b" + integrity sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos= + html-webpack-plugin@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz#b01abbd723acaaa7b37b6af4492ebda03d9dd37b" @@ -4298,34 +4498,35 @@ html-webpack-plugin@^3.2.0: toposort "^1.0.0" util.promisify "1.0.0" -htmlparser2@^3.8.2, htmlparser2@^3.9.1: - version "3.10.0" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.0.tgz#5f5e422dcf6119c0d983ed36260ce9ded0bee464" - integrity sha512-J1nEUGv+MkXS0weHNWVKJJ+UrLfePxRWpN3C9bEi9fLxL2+ggW94DQvgYVXsaT30PGwYRIZKNZXuyMhp3Di4bQ== +htmlparser2@^3.10.0, htmlparser2@^3.3.0, htmlparser2@^3.8.2, htmlparser2@^3.9.1: + version "3.10.1" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" + integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== dependencies: - domelementtype "^1.3.0" + domelementtype "^1.3.1" domhandler "^2.3.0" domutils "^1.5.1" entities "^1.1.1" inherits "^2.0.1" - readable-stream "^3.0.6" - -htmlparser2@~3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.3.0.tgz#cc70d05a59f6542e43f0e685c982e14c924a9efe" - integrity sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4= - dependencies: - domelementtype "1" - domhandler "2.1" - domutils "1.1" - readable-stream "1.0" + readable-stream "^3.1.1" http-deceiver@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc= -http-errors@1.6.3, http-errors@~1.6.2, http-errors@~1.6.3: +http-errors@1.7.2, http-errors@~1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" + integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-errors@~1.6.2: version "1.6.3" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= @@ -4335,22 +4536,22 @@ http-errors@1.6.3, http-errors@~1.6.2, http-errors@~1.6.3: setprototypeof "1.1.0" statuses ">= 1.4.0 < 2" -http-parser-js@>=0.4.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.0.tgz#d65edbede84349d0dc30320815a15d39cc3cbbd8" - integrity sha512-cZdEF7r4gfRIq7ezX9J0T+kQmJNOub71dWbgAXVHDct80TKP4MCETtZQ31xyv38UwgzkWPYF/Xc0ge55dW9Z9w== +"http-parser-js@>=0.4.0 <0.4.11": + version "0.4.10" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.10.tgz#92c9c1374c35085f75db359ec56cc257cbb93fa4" + integrity sha1-ksnBN0w1CF912zWexWzCV8u5P6Q= -http-proxy-middleware@~0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.18.0.tgz#0987e6bb5a5606e5a69168d8f967a87f15dd8aab" - integrity sha512-Fs25KVMPAIIcgjMZkVHJoKg9VcXcC1C8yb9JUgeDvVXY0S/zgVIhMb+qVswDIgtJe2DfckMSY2d6TuTEutlk6Q== +http-proxy-middleware@^0.19.1: + version "0.19.1" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" + integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q== dependencies: - http-proxy "^1.16.2" + http-proxy "^1.17.0" is-glob "^4.0.0" - lodash "^4.17.5" - micromatch "^3.1.9" + lodash "^4.17.11" + micromatch "^3.1.10" -http-proxy@^1.16.2: +http-proxy@^1.17.0: version "1.17.0" resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.17.0.tgz#7ad38494658f84605e2f6db4436df410f4e5be9a" integrity sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g== @@ -4378,13 +4579,6 @@ humanize@0.0.9: resolved "https://registry.yarnpkg.com/humanize/-/humanize-0.0.9.tgz#1994ffaecdfe9c441ed2bdac7452b7bb4c9e41a4" integrity sha1-GZT/rs3+nEQe0r2sdFK3u0yeQaQ= -iconv-lite@0.4.23: - version "0.4.23" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" - integrity sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - iconv-lite@0.4.24, iconv-lite@^0.4.17, iconv-lite@^0.4.4: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" @@ -4405,9 +4599,9 @@ icss-utils@^2.1.0: postcss "^6.0.1" ieee754@^1.1.4: - version "1.1.12" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.12.tgz#50bf24e5b9c8bb98af4964c941cdb0918da7b60b" - integrity sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA== + version "1.1.13" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" + integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== iferr@^0.1.5: version "0.1.5" @@ -4426,6 +4620,11 @@ ignore@^3.3.3, ignore@^3.3.5: resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== +ignore@^4.0.3: + version "4.0.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + imagesloaded@4.1.4: version "4.1.4" resolved "https://registry.yarnpkg.com/imagesloaded/-/imagesloaded-4.1.4.tgz#1376efcd162bb768c34c3727ac89cc04051f3cc7" @@ -4485,11 +4684,6 @@ indexes-of@^1.0.1: resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= -indexof@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" - integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10= - inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -4533,18 +4727,18 @@ inquirer@^3.0.6: strip-ansi "^4.0.0" through "^2.3.6" -internal-ip@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-3.0.1.tgz#df5c99876e1d2eb2ea2d74f520e3f669a00ece27" - integrity sha512-NXXgESC2nNVtU+pqmC9e6R8B1GpKxzsAQhffvh5AL79qKnodd+L7tnEQmTiUAVngqLalPbSqRA7XGIEL5nCd0Q== +internal-ip@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" + integrity sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg== dependencies: - default-gateway "^2.6.0" - ipaddr.js "^1.5.2" + default-gateway "^4.2.0" + ipaddr.js "^1.9.0" interpret@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614" - integrity sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ= + version "1.2.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" + integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw== invariant@^2.2.2: version "2.2.4" @@ -4573,15 +4767,10 @@ ip@^1.1.0, ip@^1.1.5: resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= -ipaddr.js@1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.8.0.tgz#eaa33d6ddd7ace8f7f6fe0c9ca0440e706738b1e" - integrity sha1-6qM9bd16zo9/b+DJygRA5wZzix4= - -ipaddr.js@^1.5.2: - version "1.8.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.8.1.tgz#fa4b79fa47fd3def5e3b159825161c0a519c9427" - integrity sha1-+kt5+kf9Pe9eOxWYJRYcClGclCc= +ipaddr.js@1.9.0, ipaddr.js@^1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.0.tgz#37df74e430a0e47550fe54a2defe30d8acd95f65" + integrity sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA== is-absolute-url@^2.0.0: version "2.1.0" @@ -4624,14 +4813,12 @@ is-buffer@^1.1.5: resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -is-builtin-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" - integrity sha1-VAVy0096wxGfj3bDDLwbHgN6/74= - dependencies: - builtin-modules "^1.0.0" +is-buffer@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.3.tgz#4ecf3fcf749cbd1e472689e109ac66261a25e725" + integrity sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw== -is-callable@^1.1.3, is-callable@^1.1.4: +is-callable@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== @@ -4749,9 +4936,9 @@ is-glob@^3.1.0: is-extglob "^2.1.0" is-glob@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0" - integrity sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A= + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== dependencies: is-extglob "^2.1.1" @@ -4767,24 +4954,29 @@ is-obj@^1.0.0: resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= -is-path-cwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" - integrity sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= +is-path-cwd@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.1.0.tgz#2e0c7e463ff5b7a0eb60852d851a6809347a124c" + integrity sha512-Sc5j3/YnM8tDeyCsVeKlm/0p95075DyLmDEIkSgQ7mXkrOX+uTCtmQFm0CYzVyJwcCCmO3k8qfJt17SxQwB5Zw== -is-path-in-cwd@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" - integrity sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ== +is-path-in-cwd@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb" + integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ== dependencies: - is-path-inside "^1.0.0" + is-path-inside "^2.1.0" -is-path-inside@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" - integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= +is-path-inside@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" + integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg== dependencies: - path-is-inside "^1.0.1" + path-is-inside "^1.0.2" + +is-plain-obj@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" @@ -4859,13 +5051,6 @@ isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= -isemail@3.x.x: - version "3.2.0" - resolved "https://registry.yarnpkg.com/isemail/-/isemail-3.2.0.tgz#59310a021931a9fb06bbb51e155ce0b3f236832c" - integrity sha512-zKqkK+O+dGqevc93KNsbZ/TqTUFd46MwWjYOoMrjIMZ51eU7DtQG3Wmd9SQQT7i7RVnuTPEiYEWHU3MSbxC1Tg== - dependencies: - punycode "2.x.x" - isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" @@ -4893,29 +5078,20 @@ javascript-stringify@^1.6.0: resolved "https://registry.yarnpkg.com/javascript-stringify/-/javascript-stringify-1.6.0.tgz#142d111f3a6e3dae8f4a9afd77d45855b5a9cce3" integrity sha1-FC0RHzpuPa6PSpr9d9RYVbWpzOM= -joi@^13.0.0: - version "13.7.0" - resolved "https://registry.yarnpkg.com/joi/-/joi-13.7.0.tgz#cfd85ebfe67e8a1900432400b4d03bbd93fb879f" - integrity sha512-xuY5VkHfeOYK3Hdi91ulocfuFopwgbSORmIwzcwHKESQhC7w1kD5jaVSPnqDxS2I8t3RZ9omCKAxNwXN5zG1/Q== - dependencies: - hoek "5.x.x" - isemail "3.x.x" - topo "3.x.x" - -jquery@x.*: - version "3.3.1" - resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.3.1.tgz#958ce29e81c9790f31be7792df5d4d95fc57fbca" - integrity sha512-Ubldcmxp5np52/ENotGxlLe6aGMvmF4R8S6tZjsP6Knsaxd/xp3Zrh50cG93lR6nPXyUFwzN3ZSOQI0wRJNdGg== +jquery@^3.4.0: + version "3.4.1" + resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.4.1.tgz#714f1f8d9dde4bdfa55764ba37ef214630d80ef2" + integrity sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw== js-base64@^2.1.8: - version "2.5.0" - resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.5.0.tgz#42255ba183ab67ce59a0dee640afdc00ab5ae93e" - integrity sha512-wlEBIZ5LP8usDylWbDNhKPEFVFdI5hCHpnVoT/Ysvoi/PRhJENm/Rlh9TvjYB38HFfKZN7OzEbRjmjvLkFw11g== + version "2.5.1" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.5.1.tgz#1efa39ef2c5f7980bb1784ade4a8af2de3291121" + integrity sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw== js-levenshtein@^1.1.3: - version "1.1.4" - resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.4.tgz#3a56e3cbf589ca0081eb22cd9ba0b1290a16d26e" - integrity sha512-PxfGzSs0ztShKrUYPIn5r0MtyAhYcCwmndozzpz8YObbPnD1jFxzlBGbRnX2mIu6Z13xN6+PTu05TQFnZFlzow== + version "1.1.6" + resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d" + integrity sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g== js-logger@^1.4.1: version "1.6.0" @@ -4949,10 +5125,10 @@ js-tokens@^3.0.2: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= -js-yaml@^3.12.0, js-yaml@^3.9.0, js-yaml@^3.9.1: - version "3.12.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1" - integrity sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A== +js-yaml@^3.13.1, js-yaml@^3.9.1: + version "3.13.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" + integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== dependencies: argparse "^1.0.7" esprima "^4.0.0" @@ -4967,10 +5143,10 @@ jsdom-global@^3.0.2: resolved "https://registry.yarnpkg.com/jsdom-global/-/jsdom-global-3.0.2.tgz#6bd299c13b0c4626b2da2c0393cd4385d606acb9" integrity sha1-a9KZwTsMRiay2iwDk81DhdYGrLk= -jsdom@^13.0.0: - version "13.1.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-13.1.0.tgz#fa7356f0cc8111d0f1077cb7800d06f22f1d66c7" - integrity sha512-C2Kp0qNuopw0smXFaHeayvharqF3kkcNqlcIlSX71+3XrsOFwkEPLt/9f5JksMmaul2JZYIQuY+WTpqHpQQcLg== +jsdom@^13.2.0: + version "13.2.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-13.2.0.tgz#b1a0dbdadc255435262be8ea3723d2dba0d7eb3a" + integrity sha512-cG1NtMWO9hWpqRNRR3dSvEQa8bFI6iLlqU2x4kwX51FQjp0qus8T9aBaAO6iGp3DeBrhdwuKxckknohkmfvsFw== dependencies: abab "^2.0.0" acorn "^6.0.4" @@ -4987,7 +5163,7 @@ jsdom@^13.0.0: pn "^1.1.0" request "^2.88.0" request-promise-native "^1.0.5" - saxes "^3.1.4" + saxes "^3.1.5" symbol-tree "^3.2.2" tough-cookie "^2.5.0" w3c-hr-time "^1.0.1" @@ -5040,15 +5216,22 @@ json-stringify-safe@~5.0.1: integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= json3@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" - integrity sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE= + version "3.3.3" + resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" + integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== -json5@^0.5.0: +json5@^0.5.0, json5@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + json5@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.0.tgz#e7a0c62c48285c628d20a10b85c89bb807c32850" @@ -5096,7 +5279,7 @@ jwt-decode@^2.2.0: resolved "https://registry.yarnpkg.com/jwt-decode/-/jwt-decode-2.2.0.tgz#7d86bd56679f58ce6a84704a657dd392bba81a79" integrity sha1-fYa9VmefWM5qhHBKZX3TkruoGnk= -killable@^1.0.0: +killable@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" integrity sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg== @@ -5179,17 +5362,17 @@ load-json-file@^1.0.0: strip-bom "^2.0.0" loader-fs-cache@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/loader-fs-cache/-/loader-fs-cache-1.0.1.tgz#56e0bf08bd9708b26a765b68509840c8dec9fdbc" - integrity sha1-VuC/CL2XCLJqdltoUJhAyN7J/bw= + version "1.0.2" + resolved "https://registry.yarnpkg.com/loader-fs-cache/-/loader-fs-cache-1.0.2.tgz#54cedf6b727e1779fd8f01205f05f6e88706f086" + integrity sha512-70IzT/0/L+M20jUlEqZhZyArTU6VKLRTYRDAYN26g4jfzpJqjipLL3/hgYpySqI9PwsVRHHFja0LfEmsx9X2Cw== dependencies: find-cache-dir "^0.1.1" mkdirp "0.5.1" -loader-runner@^2.3.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.3.1.tgz#026f12fe7c3115992896ac02ba022ba92971b979" - integrity sha512-By6ZFY7ETWOc9RFaAIb23IjJVcM4dvJC/N57nmdz9RSkMXvAXGI7SyVlAw3v8vjtDRlqThgVDVmTnr9fqMlxkw== +loader-runner@^2.3.0, loader-runner@^2.3.1: + version "2.4.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" + integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== loader-utils@^0.2.16: version "0.2.17" @@ -5201,19 +5384,19 @@ loader-utils@^0.2.16: json5 "^0.5.0" object-assign "^4.0.1" -loader-utils@^1.0.1, loader-utils@^1.0.2, loader-utils@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd" - integrity sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0= +loader-utils@^1.0.1, loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" + integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== dependencies: - big.js "^3.1.3" + big.js "^5.2.2" emojis-list "^2.0.0" - json5 "^0.5.0" + json5 "^1.0.1" -loadjs@^3.5.4: - version "3.5.5" - resolved "https://registry.yarnpkg.com/loadjs/-/loadjs-3.5.5.tgz#2fbaa981ffdd079e0f8786ea75aeed643483b368" - integrity sha512-qBuLnKt4C6+vctutozFqPHQ6s4SSa9tcE64NsvDJ92UZmUrFvqGI1oVOtnZz2xwpgOT+2niQtHtQIDP4e/wlTA== +loadjs@^3.6.1: + version "3.6.1" + resolved "https://registry.yarnpkg.com/loadjs/-/loadjs-3.6.1.tgz#1e756ccd4f4c5ed4988085b330e1b4ad9b6a8340" + integrity sha512-AZEBw2GWdJk2IzBgQ+Wohoao5j+t0rajqK8dJu8jQqgYxDTxhmCt0ayMo/vCa0ZAMvZxnJcam6uLICfnVd8KAw== locate-path@^2.0.0: version "2.0.0" @@ -5231,31 +5414,41 @@ locate-path@^3.0.0: p-locate "^3.0.0" path-exists "^3.0.0" -lodash.assign@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" - integrity sha1-DZnzzNem0mHRm9rrkkUAXShYCOc= - -lodash.clonedeep@^4.3.2: +lodash.clonedeep@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= -lodash.debounce@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" - integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= - lodash.defaultsdeep@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.0.tgz#bec1024f85b1bd96cbea405b23c14ad6443a6f81" integrity sha1-vsECT4WxvZbL6kBbI8FK1kQ6b4E= +lodash.escaperegexp@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347" + integrity sha1-ZHYsSGGAglGKw99Mz11YhtriA0c= + lodash.get@^4.4.2: version "4.4.2" resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= + +lodash.isstring@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" + integrity sha1-1SfftUVuynzJu5XV2ur4i6VKVFE= + +lodash.kebabcase@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36" + integrity sha1-hImxyw0p/4gZXM7KRI/21swpXDY= + lodash.mapvalues@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz#1bafa5005de9dd6f4f26668c30ca37230cc9689c" @@ -5266,10 +5459,10 @@ lodash.memoize@^4.1.2: resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= -lodash.mergewith@^4.6.0: - version "4.6.1" - resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz#639057e726c3afbdb3e7d42741caa8d6e4335927" - integrity sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ== +lodash.mergewith@^4.6.1: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz#617121f89ac55f59047c7aec1ccd6654c6590f55" + integrity sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ== lodash.sortby@^4.7.0: version "4.7.0" @@ -5291,7 +5484,7 @@ lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= -lodash@^4.0.0, lodash@^4.13.1, lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.3.0, lodash@~4.17.10: +lodash@^4.0.0, lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.3.0, lodash@~4.17.10: version "4.17.11" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== @@ -5303,16 +5496,21 @@ log-symbols@^2.2.0: dependencies: chalk "^2.0.1" -loglevel@^1.4.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.1.tgz#e0fc95133b6ef276cdc8887cdaf24aa6f156f8fa" - integrity sha1-4PyVEztu8nbNyIh82vJKpvFW+Po= +loglevel@^1.6.2: + version "1.6.3" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.3.tgz#77f2eb64be55a404c9fd04ad16d57c1d6d6b1280" + integrity sha512-LoEDv5pgpvWgPF4kNYuIp0qqSJVWak/dML0RY74xlzMZiT9w77teNAwKYKWBTYjlokMirg+o3jBwp+vlLrcfAA== -lolex@^2.3.2, lolex@^2.7.5: +lolex@^2.7.5: version "2.7.5" resolved "https://registry.yarnpkg.com/lolex/-/lolex-2.7.5.tgz#113001d56bfc7e02d56e36291cc5c413d1aa0733" integrity sha512-l9x0+1offnKKIzYVjyXU2SiwhXDLekRzKyhnbyldPHvC7BvLPVpdNUNR2KeMAiCN2D/kLNttZgQD5WjSxuBx3Q== +lolex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/lolex/-/lolex-4.1.0.tgz#ecdd7b86539391d8237947a3419aa8ac975f0fe1" + integrity sha512-BYxIEXiVq5lGIXeVHnsFzqa1TxN5acnKnPCdlZSpzm8viNEOhiigupA4vTQ9HEFQ6nLTQ9wQOgBknJgzUYQ9Aw== + longest@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" @@ -5338,7 +5536,7 @@ lower-case@^1.1.1: resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" integrity sha1-miyr0bno4K6ZOkv31YdcOcQujqw= -lru-cache@^4.0.1, lru-cache@^4.1.1, lru-cache@^4.1.2, lru-cache@^4.1.3: +lru-cache@^4.0.1, lru-cache@^4.1.1, lru-cache@^4.1.2: version "4.1.5" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== @@ -5346,6 +5544,13 @@ lru-cache@^4.0.1, lru-cache@^4.1.1, lru-cache@^4.1.2, lru-cache@^4.1.3: pseudomap "^1.0.2" yallist "^2.1.2" +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + make-dir@^1.0.0: version "1.3.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" @@ -5353,6 +5558,14 @@ make-dir@^1.0.0: dependencies: pify "^3.0.0" +make-dir@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + map-age-cleaner@^0.1.1: version "0.1.3" resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" @@ -5412,13 +5625,13 @@ mem@^1.1.0: mimic-fn "^1.0.0" mem@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/mem/-/mem-4.0.0.tgz#6437690d9471678f6cc83659c00cbafcd6b0cdaf" - integrity sha512-WQxG/5xYc3tMbYLXoXPm81ET2WDULiU5FxbuIoNbJqLOOI8zehXFdZuiUEgfdrU2mVB1pxBZUGlYORSrpuJreA== + version "4.3.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" + integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== dependencies: map-age-cleaner "^0.1.1" - mimic-fn "^1.0.0" - p-is-promise "^1.1.0" + mimic-fn "^2.0.0" + p-is-promise "^2.0.0" memory-fs@^0.4.0, memory-fs@^0.4.1, memory-fs@~0.4.1: version "0.4.1" @@ -5466,7 +5679,7 @@ methods@~1.1.2: resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= -micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8, micromatch@^3.1.9: +micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== @@ -5493,39 +5706,45 @@ miller-rabin@^4.0.0: bn.js "^4.0.0" brorand "^1.0.1" -"mime-db@>= 1.36.0 < 2", mime-db@~1.37.0: - version "1.37.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.37.0.tgz#0b6a0ce6fdbe9576e25f1f2d2fde8830dc0ad0d8" - integrity sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg== +mime-db@1.40.0, "mime-db@>= 1.40.0 < 2": + version "1.40.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32" + integrity sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA== -mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.18, mime-types@~2.1.19: - version "2.1.21" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.21.tgz#28995aa1ecb770742fe6ae7e58f9181c744b3f96" - integrity sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg== +mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: + version "2.1.24" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81" + integrity sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ== dependencies: - mime-db "~1.37.0" + mime-db "1.40.0" -mime@1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" - integrity sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ== +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== -mime@^2.0.3, mime@^2.3.1: - version "2.4.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.0.tgz#e051fd881358585f3279df333fe694da0bcffdd6" - integrity sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w== +mime@^2.0.3, mime@^2.4.2: + version "2.4.4" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5" + integrity sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA== mimic-fn@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== -mini-css-extract-plugin@^0.4.5: - version "0.4.5" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.4.5.tgz#c99e9e78d54f3fa775633aee5933aeaa4e80719a" - integrity sha512-dqBanNfktnp2hwL2YguV9Jh91PFX7gu7nRLs4TGsbAfAG6WOtlynFRYzwDwmmeSb5uIwHo9nx1ta0f7vAZVp2w== +mimic-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +mini-css-extract-plugin@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.6.0.tgz#a3f13372d6fcde912f3ee4cd039665704801e3b9" + integrity sha512-79q5P7YGI6rdnVyIAV4NXpBQJFWdkzJxCim3Kog4078fM0piAaFlwocqbejdWtLW1cEzCexPrh6EdyFsPgVdAw== dependencies: loader-utils "^1.1.0" + normalize-url "^2.0.1" schema-utils "^1.0.0" webpack-sources "^1.1.0" @@ -5551,12 +5770,17 @@ minimist@0.0.8: resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= +minimist@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.1.0.tgz#99df657a52574c21c9057497df742790b2b4c0de" + integrity sha1-md9lelJXTCHJBXSX33QnkLK0wN4= + minimist@^1.1.3, minimist@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= -minipass@^2.2.1, minipass@^2.3.4: +minipass@^2.2.1, minipass@^2.3.5: version "2.3.5" resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848" integrity sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA== @@ -5564,7 +5788,7 @@ minipass@^2.2.1, minipass@^2.3.4: safe-buffer "^5.1.2" yallist "^3.0.0" -minizlib@^1.1.1: +minizlib@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614" integrity sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA== @@ -5667,9 +5891,9 @@ mocha@^5.2.0: supports-color "5.4.0" moment@^2.22.2: - version "2.23.0" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.23.0.tgz#759ea491ac97d54bac5ad776996e2a58cc1bc225" - integrity sha512-3IE39bHVqFbWWaPOMHZF98Q9c3LDKGTmypMiTM2QygGXXElkFWIH7GxfmlwmY2vwa+wmNsoYZmG2iusf1ZjJoA== + version "2.24.0" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b" + integrity sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg== move-concurrently@^1.0.1: version "1.0.1" @@ -5693,11 +5917,16 @@ ms@2.0.0: resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= -ms@^2.1.1: +ms@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== +ms@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + multicast-dns-service-types@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" @@ -5716,10 +5945,19 @@ mute-stream@0.0.7: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= -nan@^2.10.0, nan@^2.9.2: - version "2.12.1" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.12.1.tgz#7b1aa193e9aa86057e3c7bbd0ac448e770925552" - integrity sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw== +mz@^2.4.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" + integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== + dependencies: + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" + +nan@^2.12.1, nan@^2.13.2: + version "2.14.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" + integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== nanomatch@^1.2.9: version "1.2.13" @@ -5744,23 +5982,23 @@ natural-compare@^1.4.0: integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= needle@^2.2.1: - version "2.2.4" - resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.4.tgz#51931bff82533b1928b7d1d69e01f1b00ffd2a4e" - integrity sha512-HyoqEb4wr/rsoaIDfTH2aVL9nWtQqba2/HvMv+++m8u0dz808MaagKILxtfeSN7QU7nvbQ79zk3vYOJp9zsNEA== + version "2.4.0" + resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c" + integrity sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg== dependencies: - debug "^2.1.2" + debug "^3.2.6" iconv-lite "^0.4.4" sax "^1.2.4" -negotiator@0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" - integrity sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk= +negotiator@0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" + integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== -neo-async@^2.5.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.0.tgz#b9d15e4d71c6762908654b5183ed38b753340835" - integrity sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA== +neo-async@^2.5.0, neo-async@^2.6.0: + version "2.6.1" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" + integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== nice-try@^1.0.4: version "1.0.5" @@ -5768,15 +6006,15 @@ nice-try@^1.0.4: integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== nise@^1.4.5: - version "1.4.8" - resolved "https://registry.yarnpkg.com/nise/-/nise-1.4.8.tgz#ce91c31e86cf9b2c4cac49d7fcd7f56779bfd6b0" - integrity sha512-kGASVhuL4tlAV0tvA34yJYZIVihrUt/5bDwpp4tTluigxUr2bBlJeDXmivb6NuEdFkqvdv/Ybb9dm16PSKUhtw== + version "1.5.0" + resolved "https://registry.yarnpkg.com/nise/-/nise-1.5.0.tgz#d03ea0e6c1b75c638015aa3585eddc132949a50d" + integrity sha512-Z3sfYEkLFzFmL8KY6xnSJLRxwQwYBjOXi/24lb62ZnZiGA0JUzGGTI6TBIgfCSMIDl9Jlu8SRmHNACLTemDHww== dependencies: "@sinonjs/formatio" "^3.1.0" + "@sinonjs/text-encoding" "^0.7.1" just-extend "^4.0.2" - lolex "^2.3.2" + lolex "^4.1.0" path-to-regexp "^1.7.0" - text-encoding "^0.6.4" no-case@^2.2.0: version "2.3.2" @@ -5818,9 +6056,9 @@ node-ipc@^9.1.1: js-queue "2.0.0" node-libs-browser@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.1.0.tgz#5f94263d404f6e44767d726901fff05478d600df" - integrity sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg== + version "2.2.1" + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" + integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== dependencies: assert "^1.1.1" browserify-zlib "^0.2.0" @@ -5829,10 +6067,10 @@ node-libs-browser@^2.0.0: constants-browserify "^1.0.0" crypto-browserify "^3.11.0" domain-browser "^1.1.1" - events "^1.0.0" + events "^3.0.0" https-browserify "^1.0.0" os-browserify "^0.3.0" - path-browserify "0.0.0" + path-browserify "0.0.1" process "^0.11.10" punycode "^1.2.4" querystring-es3 "^0.2.0" @@ -5843,13 +6081,13 @@ node-libs-browser@^2.0.0: timers-browserify "^2.0.4" tty-browserify "0.0.0" url "^0.11.0" - util "^0.10.3" - vm-browserify "0.0.4" + util "^0.11.0" + vm-browserify "^1.0.1" -node-pre-gyp@^0.10.0: - version "0.10.3" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz#3070040716afdc778747b61b6887bf78880b80fc" - integrity sha512-d1xFs+C/IPS8Id0qPTZ4bUT8wWryfR/OzzAFxweG+uLN85oPzyo2Iw6bVlLQ/JOdgNonXLCoRyqDzDWq4iw72A== +node-pre-gyp@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz#39ba4bb1439da030295f899e3b520b7785766149" + integrity sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A== dependencies: detect-libc "^1.0.2" mkdirp "^0.5.1" @@ -5862,17 +6100,17 @@ node-pre-gyp@^0.10.0: semver "^5.3.0" tar "^4" -node-releases@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.2.tgz#93c17fba5eec8650ad908de5433fa8763baebe4d" - integrity sha512-j1gEV/zX821yxdWp/1vBMN0pSUjuH9oGUdLCb4PfUko6ZW7KdRs3Z+QGGwDUhYtSpQvdVVyLd2V0YvLsmdg5jQ== +node-releases@^1.1.23: + version "1.1.23" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.23.tgz#de7409f72de044a2fa59c097f436ba89c39997f0" + integrity sha512-uq1iL79YjfYC0WXoHbC/z28q/9pOl8kSHaXdWmAAc8No+bDwqkZbzIJz55g/MUsPgSGm9LZ7QSUbzTcH5tz47w== dependencies: semver "^5.3.0" node-sass@^4.9.3: - version "4.11.0" - resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.11.0.tgz#183faec398e9cbe93ba43362e2768ca988a6369a" - integrity sha512-bHUdHTphgQJZaF1LASx0kAviPH7sGlcyNhWade4eVIpFp6tsn7SV8xNMTbsQFpEV9VXpnwTTnNYlfsZXgGgmkA== + version "4.12.0" + resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.12.0.tgz#0914f531932380114a30cc5fa4fa63233a25f017" + integrity sha512-A1Iv4oN+Iel6EPv77/HddXErL2a+gZ4uBeZUy+a8O35CFYTXhgA8MgLCWBtwpGZdCvTvQ9d+bQxX/QC36GDPpQ== dependencies: async-foreach "^0.1.3" chalk "^1.1.1" @@ -5881,12 +6119,10 @@ node-sass@^4.9.3: get-stdin "^4.0.1" glob "^7.0.3" in-publish "^2.0.0" - lodash.assign "^4.2.0" - lodash.clonedeep "^4.3.2" - lodash.mergewith "^4.6.0" + lodash "^4.17.11" meow "^3.7.0" mkdirp "^0.5.1" - nan "^2.10.0" + nan "^2.13.2" node-gyp "^3.8.0" npmlog "^4.0.0" request "^2.88.0" @@ -5914,13 +6150,13 @@ nopt@^4.0.1: abbrev "1" osenv "^0.1.4" -normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: - version "2.4.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" - integrity sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw== +normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== dependencies: hosted-git-info "^2.1.4" - is-builtin-module "^1.0.0" + resolve "^1.10.0" semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" @@ -5936,25 +6172,39 @@ normalize-path@^2.0.1, normalize-path@^2.1.1: dependencies: remove-trailing-separator "^1.0.1" +normalize-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + normalize-range@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= +normalize-url@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-2.0.1.tgz#835a9da1551fa26f70e92329069a23aa6574d7e6" + integrity sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw== + dependencies: + prepend-http "^2.0.0" + query-string "^5.0.1" + sort-keys "^2.0.0" + normalize-url@^3.0.0: version "3.3.0" resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== npm-bundled@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.5.tgz#3c1732b7ba936b3a10325aef616467c0ccbcc979" - integrity sha512-m/e6jgWu8/v5niCUKQi9qQl8QdeEduFA96xHDDzFGqly0OOjI7c+60KM/2sppfnUU9JJagf+zs+yGhqSOFj71g== + version "1.0.6" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" + integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g== npm-packlist@^1.1.6: - version "1.1.12" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.1.12.tgz#22bde2ebc12e72ca482abd67afc51eb49377243a" - integrity sha512-WJKFOVMeAlsU/pjXuqVdzU0WfgtIBCupkEVwn+1Y0ERAbUfWw8R4GjgVbaKnUjRoD2FoQbHOCbOyT5Mbs9Lw4g== + version "1.4.1" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.1.tgz#19064cdf988da80ea3cee45533879d90192bbfbc" + integrity sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw== dependencies: ignore-walk "^3.0.1" npm-bundled "^1.0.1" @@ -5994,16 +6244,16 @@ number-is-nan@^1.0.0: integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= nwsapi@^2.0.9: - version "2.0.9" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.0.9.tgz#77ac0cdfdcad52b6a1151a84e73254edc33ed016" - integrity sha512-nlWFSCTYQcHk/6A9FFnfhKc14c3aFhfdNBXgo8Qgi9QTBu/qg3Ww+Uiz9wMzXd1T8GFxPc2QIHB6Qtf2XFryFQ== + version "2.1.4" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.1.4.tgz#e006a878db23636f8e8a67d33ca0e4edf61a842f" + integrity sha512-iGfd9Y6SFdTNldEy2L0GUhcarIutFmk+MPWIn9dmj8NMIup03G08uUF2KGbbmv/Ux4RT0VZJoP/sVbWA6d/VIw== oauth-sign@~0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== -object-assign@^4.0.1, object-assign@^4.1.0: +object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= @@ -6023,9 +6273,9 @@ object-hash@^1.1.4: integrity sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA== object-keys@^1.0.11, object-keys@^1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.12.tgz#09c53855377575310cca62f55bb334abff7b3ed2" - integrity sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag== + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== object-visit@^1.0.0: version "1.0.1" @@ -6059,17 +6309,17 @@ object.pick@^1.3.0: dependencies: isobject "^3.0.1" -object.values@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.0.4.tgz#e524da09b4f66ff05df457546ec72ac99f13069a" - integrity sha1-5STaCbT2b/Bd9FdUbscqyZ8TBpo= +object.values@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.0.tgz#bf6810ef5da3e5325790eaaa2be213ea84624da9" + integrity sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg== dependencies: - define-properties "^1.1.2" - es-abstract "^1.6.1" - function-bind "^1.1.0" - has "^1.0.1" + define-properties "^1.1.3" + es-abstract "^1.12.0" + function-bind "^1.1.1" + has "^1.0.3" -obuf@^1.0.0, obuf@^1.1.1: +obuf@^1.0.0, obuf@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== @@ -6081,10 +6331,10 @@ on-finished@~2.3.0: dependencies: ee-first "1.1.1" -on-headers@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7" - integrity sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c= +on-headers@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" @@ -6100,15 +6350,22 @@ onetime@^2.0.0: dependencies: mimic-fn "^1.0.0" +open@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/open/-/open-6.3.0.tgz#60d0b845ee38fae0631f5d739a21bd40e3d2a527" + integrity sha512-6AHdrJxPvAXIowO/aIaeHZ8CeMdDf7qCyRNq8NwJpinmCdXhz+NZR7ie1Too94lpciCDsG+qHGO9Mt0svA4OqA== + dependencies: + is-wsl "^1.1.0" + opener@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.1.tgz#6d2f0e77f1a0af0032aca716c2c1fbb8e7e8abed" integrity sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA== -opn@^5.1.0, opn@^5.3.0: - version "5.4.0" - resolved "https://registry.yarnpkg.com/opn/-/opn-5.4.0.tgz#cb545e7aab78562beb11aa3bfabc7042e1761035" - integrity sha512-YF9MNdVy/0qvJvDtunAOzFw9iasOQHpVthTCvGzxt61Il64AYSGdK+rYwld7NAfk9qJ7dt+hymBNSc9LNYS+Sw== +opn@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" + integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA== dependencies: is-wsl "^1.1.0" @@ -6124,28 +6381,16 @@ optionator@^0.8.1, optionator@^0.8.2: type-check "~0.3.2" wordwrap "~1.0.0" -ora@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/ora/-/ora-2.1.0.tgz#6caf2830eb924941861ec53a173799e008b51e5b" - integrity sha512-hNNlAd3gfv/iPmsNxYoAPLvxg7HuPozww7fFonMZvL84tP6Ox5igfk5j/+a9rtJJwqMgKK+JgWsAQik5o0HTLA== - dependencies: - chalk "^2.3.1" - cli-cursor "^2.1.0" - cli-spinners "^1.1.0" - log-symbols "^2.2.0" - strip-ansi "^4.0.0" - wcwidth "^1.0.1" - -ora@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ora/-/ora-3.0.0.tgz#8179e3525b9aafd99242d63cc206fd64732741d0" - integrity sha512-LBS97LFe2RV6GJmXBi6OKcETKyklHNMV0xw7BtsVn2MlsgsydyZetSCbCANr+PFLmDyv4KV88nn0eCKza665Mg== +ora@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/ora/-/ora-3.4.0.tgz#bf0752491059a3ef3ed4c85097531de9fdbcd318" + integrity sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg== dependencies: - chalk "^2.3.1" + chalk "^2.4.2" cli-cursor "^2.1.0" - cli-spinners "^1.1.0" + cli-spinners "^2.0.0" log-symbols "^2.2.0" - strip-ansi "^4.0.0" + strip-ansi "^5.2.0" wcwidth "^1.0.1" original@^1.0.0: @@ -6181,12 +6426,12 @@ os-locale@^2.0.0: lcid "^1.0.0" mem "^1.1.0" -os-locale@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.0.1.tgz#3b014fbf01d87f60a1e5348d80fe870dc82c4620" - integrity sha512-7g5e7dmXPtzcP4bgsZ8ixDVqA7oWYuEz4lOSujeWyliPai4gfVDiFIcwBg3aGCPnmSGfzOKTK3ccPn0CKv3DBw== +os-locale@^3.0.0, os-locale@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" + integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== dependencies: - execa "^0.10.0" + execa "^1.0.0" lcid "^2.0.0" mem "^4.0.0" @@ -6222,10 +6467,10 @@ p-finally@^1.0.0: resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= -p-is-promise@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-1.1.0.tgz#9c9456989e9f6588017b0434d56097675c3da05e" - integrity sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4= +p-is-promise@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" + integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== p-limit@^1.0.0, p-limit@^1.1.0: version "1.3.0" @@ -6235,9 +6480,9 @@ p-limit@^1.0.0, p-limit@^1.1.0: p-try "^1.0.0" p-limit@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.0.0.tgz#e624ed54ee8c460a778b3c9f3670496ff8a57aec" - integrity sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A== + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.0.tgz#417c9941e6027a9abcba5092dd2904e255b5fbc2" + integrity sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ== dependencies: p-try "^2.0.0" @@ -6255,10 +6500,17 @@ p-locate@^3.0.0: dependencies: p-limit "^2.0.0" -p-map@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" - integrity sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA== +p-map@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" + integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== + +p-retry@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328" + integrity sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w== + dependencies: + retry "^0.12.0" p-try@^1.0.0: version "1.0.0" @@ -6266,14 +6518,14 @@ p-try@^1.0.0: integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= p-try@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.0.0.tgz#85080bb87c64688fa47996fe8f7dfbe8211760b1" - integrity sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ== + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== pako@~1.0.5: - version "1.0.7" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.7.tgz#2473439021b57f1516c82f58be7275ad8ef1bb27" - integrity sha512-3HNK5tW4x8o5mO8RuHZp3Ydw9icZXx0RANAOMzlMzx7LVXhMJ4mo3MOBpzyd7r/+RUu8BmndP47LXT+vzjtWcQ== + version "1.0.10" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732" + integrity sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw== parallel-transform@^1.1.0: version "1.1.0" @@ -6292,15 +6544,16 @@ param-case@2.1.x: no-case "^2.2.0" parse-asn1@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.1.tgz#f6bf293818332bd0dab54efb16087724745e6ca8" - integrity sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw== + version "5.1.4" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.4.tgz#37f6628f823fbdeb2273b4d540434a22f3ef1fcc" + integrity sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw== dependencies: asn1.js "^4.0.0" browserify-aes "^1.0.0" create-hash "^1.1.0" evp_bytestokey "^1.0.0" pbkdf2 "^3.0.3" + safe-buffer "^5.1.1" parse-json@^2.2.0: version "2.2.0" @@ -6329,20 +6582,25 @@ parse5@^3.0.1: dependencies: "@types/node" "*" -parseurl@~1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" - integrity sha1-/CidTtiZMRlGDBViUyYs3I3mW/M= +parse5@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" + integrity sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA== + +parseurl@~1.3.2, parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== pascalcase@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= -path-browserify@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" - integrity sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo= +path-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" + integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== path-dirname@^1.0.0: version "1.0.2" @@ -6366,7 +6624,7 @@ path-is-absolute@^1.0.0: resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= -path-is-inside@^1.0.1, path-is-inside@^1.0.2: +path-is-inside@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= @@ -6440,6 +6698,11 @@ pify@^3.0.0: resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + pinkie-promise@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" @@ -6473,21 +6736,29 @@ pkg-dir@^3.0.0: dependencies: find-up "^3.0.0" +pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f" + integrity sha1-yBmscoBZpGHKscOImivjxJoATX8= + dependencies: + find-up "^2.1.0" + pluralize@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" integrity sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow== -plyr@^3.4.5: - version "3.4.7" - resolved "https://registry.yarnpkg.com/plyr/-/plyr-3.4.7.tgz#7d92470fb27f8019422c6d4edfd3b172d902ef06" - integrity sha512-RxxT2WdC4/sEZQT7CBZqKx5ImVw96aWjT6kB6DM82jy9GcWDiBBnv04m/AeeaXg9S5ambPdiHhB6Pzfm2q84Gw== +plyr@^3.5.2: + version "3.5.4" + resolved "https://registry.yarnpkg.com/plyr/-/plyr-3.5.4.tgz#21ee9e2f06c3a88568eb432689c70de0b6d43dfb" + integrity sha512-ECS2uzeDyPfM0+1X3oTNdRDmLN+dxoo2GcJYeWsfnyH4CHLoRA/w1Fvp4sMhM+k2QBRxFH/bu46nogduS1DPhQ== dependencies: - core-js "^2.5.7" - custom-event-polyfill "^1.0.6" - loadjs "^3.5.4" + core-js "^3.0.1" + custom-event-polyfill "^1.0.7" + loadjs "^3.6.1" + rangetouch "^2.0.0" raven-js "^3.27.0" - url-polyfill "^1.1.0" + url-polyfill "^1.1.5" pn@^1.1.0: version "1.1.0" @@ -6499,7 +6770,7 @@ pofile@^1.0.10: resolved "https://registry.yarnpkg.com/pofile/-/pofile-1.0.11.tgz#35aff58c17491d127a07336d5522ebc9df57c954" integrity sha512-Vy9eH1dRD9wHjYt/QqXcTz+RnX/zg53xK+KljFSX30PvdDMb2z+c6uDUeblUGqqJgz3QFsdlA0IJvHziPmWtQg== -portfinder@^1.0.19, portfinder@^1.0.9: +portfinder@^1.0.20: version "1.0.20" resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.20.tgz#bea68632e54b2e13ab7b0c4775e9b41bf270e44a" integrity sha512-Yxe4mTyDzTd59PZJY4ojZR8F+E5e97iq2ZOHPz3HDgSvYC5siNad2tLooQ5y5QHyQhc3xVqvyk/eNA3wuoa7Sw== @@ -6513,7 +6784,7 @@ posix-character-classes@^0.1.0: resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= -postcss-calc@^7.0.0: +postcss-calc@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.1.tgz#36d77bab023b0ecbb9789d84dcb23c4941145436" integrity sha512-oXqx0m6tb4N3JGdmeMSc/i91KppbYsFZKdH0xMOqK8V1rJlzrKlTdokz8ozUXLVejydRN6u2IddxpcijRj2FqQ== @@ -6523,10 +6794,10 @@ postcss-calc@^7.0.0: postcss-selector-parser "^5.0.0-rc.4" postcss-value-parser "^3.3.1" -postcss-colormin@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-4.0.2.tgz#93cd1fa11280008696887db1a528048b18e7ed99" - integrity sha512-1QJc2coIehnVFsz0otges8kQLsryi4lo19WD+U5xCWvXd0uw/Z+KKYnbiNDCnO9GP+PvErPHCG0jNvWTngk9Rw== +postcss-colormin@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-4.0.3.tgz#ae060bce93ed794ac71264f08132d550956bd381" + integrity sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw== dependencies: browserslist "^4.0.0" color "^3.0.0" @@ -6542,10 +6813,10 @@ postcss-convert-values@^4.0.1: postcss "^7.0.0" postcss-value-parser "^3.0.0" -postcss-discard-comments@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-4.0.1.tgz#30697735b0c476852a7a11050eb84387a67ef55d" - integrity sha512-Ay+rZu1Sz6g8IdzRjUgG2NafSNpp2MSMOQUb+9kkzzzP+kh07fP0yNbhtFejURnyVXSX3FYy2nVNW1QTnNjgBQ== +postcss-discard-comments@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz#1fbabd2c246bff6aaad7997b2b0918f4d7af4033" + integrity sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg== dependencies: postcss "^7.0.0" @@ -6571,11 +6842,11 @@ postcss-discard-overridden@^4.0.1: postcss "^7.0.0" postcss-load-config@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.0.0.tgz#f1312ddbf5912cd747177083c5ef7a19d62ee484" - integrity sha512-V5JBLzw406BB8UIfsAWSK2KSwIJ5yoEIVFb4gVkXci0QdKgA24jLmHZ/ghe/GgX0lJ0/D1uUK1ejhzEY94MChQ== + version "2.1.0" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.1.0.tgz#c84d692b7bb7b41ddced94ee62e8ab31b417b003" + integrity sha512-4pV3JJVPLd5+RueiVVB+gFOAa7GWc25XQcMp86Zexzke69mKf6Nx9LRcQywdz7yZI9n1udOxmLuAwTBypypF8Q== dependencies: - cosmiconfig "^4.0.0" + cosmiconfig "^5.0.0" import-cwd "^2.0.0" postcss-loader@^3.0.0: @@ -6588,20 +6859,20 @@ postcss-loader@^3.0.0: postcss-load-config "^2.0.0" schema-utils "^1.0.0" -postcss-merge-longhand@^4.0.9: - version "4.0.9" - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.9.tgz#c2428b994833ffb2a072f290ca642e75ceabcd6f" - integrity sha512-UVMXrXF5K/kIwUbK/crPFCytpWbNX2Q3dZSc8+nQUgfOHrCT4+MHncpdxVphUlQeZxlLXUJbDyXc5NBhTnS2tA== +postcss-merge-longhand@^4.0.11: + version "4.0.11" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz#62f49a13e4a0ee04e7b98f42bb16062ca2549e24" + integrity sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw== dependencies: css-color-names "0.0.4" postcss "^7.0.0" postcss-value-parser "^3.0.0" stylehacks "^4.0.0" -postcss-merge-rules@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-4.0.2.tgz#2be44401bf19856f27f32b8b12c0df5af1b88e74" - integrity sha512-UiuXwCCJtQy9tAIxsnurfF0mrNHKc4NnNx6NxqmzNNjXpQwLSukUxELHTRF0Rg1pAmcoKLih8PwvZbiordchag== +postcss-merge-rules@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz#362bea4ff5a1f98e4075a713c6cb25aefef9a650" + integrity sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ== dependencies: browserslist "^4.0.0" caniuse-api "^3.0.0" @@ -6618,20 +6889,20 @@ postcss-minify-font-values@^4.0.2: postcss "^7.0.0" postcss-value-parser "^3.0.0" -postcss-minify-gradients@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.1.tgz#6da95c6e92a809f956bb76bf0c04494953e1a7dd" - integrity sha512-pySEW3E6Ly5mHm18rekbWiAjVi/Wj8KKt2vwSfVFAWdW6wOIekgqxKxLU7vJfb107o3FDNPkaYFCxGAJBFyogA== +postcss-minify-gradients@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz#93b29c2ff5099c535eecda56c4aa6e665a663471" + integrity sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q== dependencies: cssnano-util-get-arguments "^4.0.0" is-color-stop "^1.0.0" postcss "^7.0.0" postcss-value-parser "^3.0.0" -postcss-minify-params@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-4.0.1.tgz#5b2e2d0264dd645ef5d68f8fec0d4c38c1cf93d2" - integrity sha512-h4W0FEMEzBLxpxIVelRtMheskOKKp52ND6rJv+nBS33G1twu2tCyurYj/YtgU76+UDCvWeNs0hs8HFAWE2OUFg== +postcss-minify-params@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz#6b9cef030c11e35261f95f618c90036d680db874" + integrity sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg== dependencies: alphanum-sort "^1.0.0" browserslist "^4.0.0" @@ -6640,10 +6911,10 @@ postcss-minify-params@^4.0.1: postcss-value-parser "^3.0.0" uniqs "^2.0.0" -postcss-minify-selectors@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.1.tgz#a891c197977cc37abf60b3ea06b84248b1c1e9cd" - integrity sha512-8+plQkomve3G+CodLCgbhAKrb5lekAnLYuL1d7Nz+/7RANpBEVdgBkPNwljfSKvZ9xkkZTZITd04KP+zeJTJqg== +postcss-minify-selectors@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz#e2e5eb40bfee500d0cd9243500f5f8ea4262fbd8" + integrity sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g== dependencies: alphanum-sort "^1.0.0" has "^1.0.0" @@ -6688,48 +6959,48 @@ postcss-normalize-charset@^4.0.1: dependencies: postcss "^7.0.0" -postcss-normalize-display-values@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.1.tgz#d9a83d47c716e8a980f22f632c8b0458cfb48a4c" - integrity sha512-R5mC4vaDdvsrku96yXP7zak+O3Mm9Y8IslUobk7IMP+u/g+lXvcN4jngmHY5zeJnrQvE13dfAg5ViU05ZFDwdg== +postcss-normalize-display-values@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz#0dbe04a4ce9063d4667ed2be476bb830c825935a" + integrity sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ== dependencies: cssnano-util-get-match "^4.0.0" postcss "^7.0.0" postcss-value-parser "^3.0.0" -postcss-normalize-positions@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.1.tgz#ee2d4b67818c961964c6be09d179894b94fd6ba1" - integrity sha512-GNoOaLRBM0gvH+ZRb2vKCIujzz4aclli64MBwDuYGU2EY53LwiP7MxOZGE46UGtotrSnmarPPZ69l2S/uxdaWA== +postcss-normalize-positions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz#05f757f84f260437378368a91f8932d4b102917f" + integrity sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA== dependencies: cssnano-util-get-arguments "^4.0.0" has "^1.0.0" postcss "^7.0.0" postcss-value-parser "^3.0.0" -postcss-normalize-repeat-style@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.1.tgz#5293f234b94d7669a9f805495d35b82a581c50e5" - integrity sha512-fFHPGIjBUyUiswY2rd9rsFcC0t3oRta4wxE1h3lpwfQZwFeFjXFSiDtdJ7APCmHQOnUZnqYBADNRPKPwFAONgA== +postcss-normalize-repeat-style@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz#c4ebbc289f3991a028d44751cbdd11918b17910c" + integrity sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q== dependencies: cssnano-util-get-arguments "^4.0.0" cssnano-util-get-match "^4.0.0" postcss "^7.0.0" postcss-value-parser "^3.0.0" -postcss-normalize-string@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-4.0.1.tgz#23c5030c2cc24175f66c914fa5199e2e3c10fef3" - integrity sha512-IJoexFTkAvAq5UZVxWXAGE0yLoNN/012v7TQh5nDo6imZJl2Fwgbhy3J2qnIoaDBrtUP0H7JrXlX1jjn2YcvCQ== +postcss-normalize-string@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz#cd44c40ab07a0c7a36dc5e99aace1eca4ec2690c" + integrity sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA== dependencies: has "^1.0.0" postcss "^7.0.0" postcss-value-parser "^3.0.0" -postcss-normalize-timing-functions@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.1.tgz#8be83e0b9cb3ff2d1abddee032a49108f05f95d7" - integrity sha512-1nOtk7ze36+63ONWD8RCaRDYsnzorrj+Q6fxkQV+mlY5+471Qx9kspqv0O/qQNMeApg8KNrRf496zHwJ3tBZ7w== +postcss-normalize-timing-functions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz#8e009ca2a3949cdaf8ad23e6b6ab99cb5e7d28d9" + integrity sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A== dependencies: cssnano-util-get-match "^4.0.0" postcss "^7.0.0" @@ -6754,37 +7025,37 @@ postcss-normalize-url@^4.0.1: postcss "^7.0.0" postcss-value-parser "^3.0.0" -postcss-normalize-whitespace@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.1.tgz#d14cb639b61238418ac8bc8d3b7bdd65fc86575e" - integrity sha512-U8MBODMB2L+nStzOk6VvWWjZgi5kQNShCyjRhMT3s+W9Jw93yIjOnrEkKYD3Ul7ChWbEcjDWmXq0qOL9MIAnAw== +postcss-normalize-whitespace@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz#bf1d4070fe4fcea87d1348e825d8cc0c5faa7d82" + integrity sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA== dependencies: postcss "^7.0.0" postcss-value-parser "^3.0.0" -postcss-ordered-values@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-4.1.1.tgz#2e3b432ef3e489b18333aeca1f1295eb89be9fc2" - integrity sha512-PeJiLgJWPzkVF8JuKSBcylaU+hDJ/TX3zqAMIjlghgn1JBi6QwQaDZoDIlqWRcCAI8SxKrt3FCPSRmOgKRB97Q== +postcss-ordered-values@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz#0cf75c820ec7d5c4d280189559e0b571ebac0eee" + integrity sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw== dependencies: cssnano-util-get-arguments "^4.0.0" postcss "^7.0.0" postcss-value-parser "^3.0.0" -postcss-reduce-initial@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.2.tgz#bac8e325d67510ee01fa460676dc8ea9e3b40f15" - integrity sha512-epUiC39NonKUKG+P3eAOKKZtm5OtAtQJL7Ye0CBN1f+UQTHzqotudp+hki7zxXm7tT0ZAKDMBj1uihpPjP25ug== +postcss-reduce-initial@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz#7fd42ebea5e9c814609639e2c2e84ae270ba48df" + integrity sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA== dependencies: browserslist "^4.0.0" caniuse-api "^3.0.0" has "^1.0.0" postcss "^7.0.0" -postcss-reduce-transforms@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.1.tgz#8600d5553bdd3ad640f43bff81eb52f8760d4561" - integrity sha512-sZVr3QlGs0pjh6JAIe6DzWvBaqYw05V1t3d9Tp+VnFRT5j+rsqoWsysh/iSD7YNsULjq9IAylCznIwVd5oU/zA== +postcss-reduce-transforms@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz#17efa405eacc6e07be3414a5ca2d1074681d4e29" + integrity sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg== dependencies: cssnano-util-get-match "^4.0.0" has "^1.0.0" @@ -6800,19 +7071,28 @@ postcss-selector-parser@^3.0.0, postcss-selector-parser@^3.1.1: indexes-of "^1.0.1" uniq "^1.0.1" -postcss-selector-parser@^5.0.0-rc.4: - version "5.0.0-rc.4" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-5.0.0-rc.4.tgz#ca5e77238bf152966378c13e91ad6d611568ea87" - integrity sha512-0XvfYuShrKlTk1ooUrVzMCFQRcypsdEIsGqh5IxC5rdtBi4/M/tDAJeSONwC2MTqEFsmPZYAV7Dd4X8rgAfV0A== +postcss-selector-parser@^5.0.0, postcss-selector-parser@^5.0.0-rc.4: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz#249044356697b33b64f1a8f7c80922dddee7195c" + integrity sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ== dependencies: cssesc "^2.0.0" indexes-of "^1.0.1" uniq "^1.0.1" -postcss-svgo@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.1.tgz#5628cdb38f015de6b588ce6d0bf0724b492b581d" - integrity sha512-YD5uIk5NDRySy0hcI+ZJHwqemv2WiqqzDgtvgMzO8EGSkK5aONyX8HMVFRFJSdO8wUWTuisUFn/d7yRRbBr5Qw== +postcss-selector-parser@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz#934cf799d016c83411859e09dcecade01286ec5c" + integrity sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg== + dependencies: + cssesc "^3.0.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-svgo@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.2.tgz#17b997bc711b333bab143aaed3b8d3d6e3d38258" + integrity sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw== dependencies: is-svg "^3.0.0" postcss "^7.0.0" @@ -6828,7 +7108,7 @@ postcss-unique-selectors@^4.0.1: postcss "^7.0.0" uniqs "^2.0.0" -postcss-value-parser@^3.0.0, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0, postcss-value-parser@^3.3.1: +postcss-value-parser@^3.0.0, postcss-value-parser@^3.3.0, postcss-value-parser@^3.3.1: version "3.3.1" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== @@ -6842,29 +7122,34 @@ postcss@^6.0.1, postcss@^6.0.20, postcss@^6.0.23: source-map "^0.6.1" supports-color "^5.4.0" -postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.5: - version "7.0.7" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.7.tgz#2754d073f77acb4ef08f1235c36c5721a7201614" - integrity sha512-HThWSJEPkupqew2fnuQMEI2YcTj/8gMV3n80cMdJsKxfIh5tHf7nM5JigNX6LxVMqo6zkgQNAI88hyFvBk41Pg== +postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.16, postcss@^7.0.5: + version "7.0.17" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.17.tgz#4da1bdff5322d4a0acaab4d87f3e782436bad31f" + integrity sha512-546ZowA+KZ3OasvQZHsbuEpysvwTZNGJv9EfyCQdsIDltPSWHAeTQ5fQy/Npi2ZDtLI3zs7Ps/p6wThErhm9fQ== dependencies: - chalk "^2.4.1" + chalk "^2.4.2" source-map "^0.6.1" - supports-color "^5.5.0" + supports-color "^6.1.0" prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= -prettier@1.13.7: - version "1.13.7" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.13.7.tgz#850f3b8af784a49a6ea2d2eaa7ed1428a34b7281" - integrity sha512-KIU72UmYPGk4MujZGYMFwinB7lOf2LsDNGSOC8ufevsrPLISrZbNJlWstRi3m0AMuszbH+EFSQ/r6w56RSPK6w== +prepend-http@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" + integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= + +prettier@1.16.3: + version "1.16.3" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.16.3.tgz#8c62168453badef702f34b45b6ee899574a6a65d" + integrity sha512-kn/GU6SMRYPxUakNXhpP0EedT/KmaPzr0H5lIsDogrykbaxOpOfAFfk5XA7DZrJyMAv1wlMV3CPcZruGXVVUZw== prettier@^1.13.0: - version "1.15.3" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.15.3.tgz#1feaac5bdd181237b54dbe65d874e02a1472786a" - integrity sha512-gAU9AGAPMaKb3NNSUUuhhFAS7SCO4ALTN4nRIn6PJ075Qd28Yn2Ig2ahEJWdJwJmlEBTUfC7mMUSFy8MwsOCfg== + version "1.18.2" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.18.2.tgz#6823e7c5900017b4bd3acf46fe9ac4b4d7bda9ea" + integrity sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw== pretty-error@^2.0.2: version "2.1.1" @@ -6906,13 +7191,13 @@ promise@^7.0.1: dependencies: asap "~2.0.3" -proxy-addr@~2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.4.tgz#ecfc733bf22ff8c6f407fa275327b9ab67e48b93" - integrity sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA== +proxy-addr@~2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.5.tgz#34cbd64a2d81f4b1fd21e76f9f06c8a45299ee34" + integrity sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ== dependencies: forwarded "~0.1.2" - ipaddr.js "1.8.0" + ipaddr.js "1.9.0" prr@~1.0.1: version "1.0.1" @@ -6925,9 +7210,9 @@ pseudomap@^1.0.2: integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= psl@^1.1.24, psl@^1.1.28: - version "1.1.31" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.31.tgz#e9aa86d0101b5b105cbe93ac6b784cd547276184" - integrity sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw== + version "1.1.32" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.32.tgz#3f132717cf2f9c169724b2b6caf373cf694198db" + integrity sha512-MHACAkHpihU/REGGPLj4sEfc/XKW2bheigvHO1dUqjaKigMp1C8+WLQYRGgeKFMsw5PMfegZcaN8IDXK/cD0+g== public-encrypt@^4.0.0: version "4.0.3" @@ -7076,26 +7361,58 @@ punycode@1.3.2: resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= -punycode@2.x.x, punycode@^2.1.0, punycode@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - punycode@^1.2.4, punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= +punycode@^2.1.0, punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +purgecss-webpack-plugin@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/purgecss-webpack-plugin/-/purgecss-webpack-plugin-1.6.0.tgz#7b5d6d189f5574c1365592e1445d252162404e4a" + integrity sha512-rVrTWYsOTShUvD5gl0q/krkwTlBUILlyoqRk2XoujNm2dETt276yvK4vP9oyXVPSQyaMCjjP5YPMCq9PNgIlJQ== + dependencies: + purgecss "^1.4.0" + webpack-sources "^1.4.3" + +purgecss@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/purgecss/-/purgecss-1.4.0.tgz#79905624ec1c6c8e1f03044bca92dd8a598ba429" + integrity sha512-or7/16i7O6DH+NpXqY8NCcWCc940O6PxOgjWAcMTElzgccKOJua1/n6JVtM8UYqoMMWoCyKk+CbLpo4+4mY3BQ== + dependencies: + glob "^7.1.3" + postcss "^7.0.14" + postcss-selector-parser "^6.0.0" + yargs "^14.0.0" + q@^1.1.2: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= -qs@6.5.2, qs@~6.5.2: +qs@6.7.0, qs@^6.7.0: + version "6.7.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" + integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== + +qs@~6.5.2: version "6.5.2" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== +query-string@^5.0.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb" + integrity sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw== + dependencies: + decode-uri-component "^0.2.0" + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + querystring-es3@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" @@ -7106,15 +7423,15 @@ querystring@0.2.0: resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= -querystringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.0.tgz#7ded8dfbf7879dcc60d0a644ac6754b283ad17ef" - integrity sha512-sluvZZ1YiTLD5jsqZcDmFyV2EwToyXZBfpoVOmktMmW+VEnhgakFHnasVph65fOjGPTWN0Nw3+XQaSeMayr0kg== +querystringify@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e" + integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA== randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.6.tgz#d302c522948588848a8d300c932b44c24231da80" - integrity sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A== + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== dependencies: safe-buffer "^5.1.0" @@ -7126,24 +7443,29 @@ randomfill@^1.0.3: randombytes "^2.0.5" safe-buffer "^5.1.0" -range-parser@^1.0.3, range-parser@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" - integrity sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4= +range-parser@^1.2.1, range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +rangetouch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/rangetouch/-/rangetouch-2.0.0.tgz#5459cdb38b929326c5484ab47aac9632fbe3a896" + integrity sha512-y66wTFbwh7KafYligRsmIYYR1kZY8U9tGHH9PgbVhBUFmGzPMsOSjslXPedgR5D3M9W1QKVbAf1AtaVAt7JJTw== raven-js@^3.27.0: - version "3.27.0" - resolved "https://registry.yarnpkg.com/raven-js/-/raven-js-3.27.0.tgz#9f47c03e17933ce756e189f3669d49c441c1ba6e" - integrity sha512-vChdOL+yzecfnGA+B5EhEZkJ3kY3KlMzxEhShKh6Vdtooyl0yZfYNFQfYzgMf2v4pyQa+OTZ5esTxxgOOZDHqw== + version "3.27.2" + resolved "https://registry.yarnpkg.com/raven-js/-/raven-js-3.27.2.tgz#6c33df952026cd73820aa999122b7b7737a66775" + integrity sha512-mFWQcXnhRFEQe5HeFroPaEghlnqy7F5E2J3Fsab189ondqUzcjwSVi7el7F36cr6PvQYXoZ1P2F5CSF2/azeMQ== -raw-body@2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.3.tgz#1b324ece6b5706e153855bc1148c65bb7f6ea0c3" - integrity sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw== +raw-body@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" + integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== dependencies: - bytes "3.0.0" - http-errors "1.6.3" - iconv-lite "0.4.23" + bytes "3.1.0" + http-errors "1.7.2" + iconv-lite "0.4.24" unpipe "1.0.0" rc@^1.2.7: @@ -7173,16 +7495,17 @@ read-pkg@^1.0.0: normalize-package-data "^2.3.2" path-type "^1.0.0" -read-pkg@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-4.0.1.tgz#963625378f3e1c4d48c85872b5a6ec7d5d093237" - integrity sha1-ljYlN48+HE1IyFhytabsfV0JMjc= +read-pkg@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.1.1.tgz#5cf234dde7a405c90c88a519ab73c467e9cb83f5" + integrity sha512-dFcTLQi6BZ+aFUaICg7er+/usEoqFdQxiEBsEMNGoipenihtxxtdrQuBXvyANCEI8VuUIVYFgeHGx9sLLvim4w== dependencies: - normalize-package-data "^2.3.2" + "@types/normalize-package-data" "^2.4.0" + normalize-package-data "^2.5.0" parse-json "^4.0.0" - pify "^3.0.0" + type-fest "^0.4.1" -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.9, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== @@ -7195,26 +7518,16 @@ read-pkg@^4.0.1: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@1.0: - version "1.0.34" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" - integrity sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw= - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -readable-stream@^3.0.6: - version "3.1.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.1.0.tgz#19c2e9c1ce43507c53f6eefbcf1ee3d4aaa786f5" - integrity sha512-vpydAvIJvPODZNagCPuHG87O9JNPtvFEtjHHRVwNVsVVRBqemvPJkc2SYbxJsiZXawJdtZNmkmnsPuE3IgsG0A== +readable-stream@^3.0.6, readable-stream@^3.1.1: + version "3.4.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc" + integrity sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ== dependencies: inherits "^2.0.3" string_decoder "^1.1.1" util-deprecate "^1.0.1" -readdirp@^2.0.0: +readdirp@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== @@ -7236,10 +7549,10 @@ redent@^1.0.0: indent-string "^2.1.0" strip-indent "^1.0.1" -regenerate-unicode-properties@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-7.0.0.tgz#107405afcc4a190ec5ed450ecaa00ed0cafa7a4c" - integrity sha512-s5NGghCE4itSlUS+0WUj88G6cfMVMmH8boTPNvABf8od+2dhT9WDlWu8n01raQAJZMOK8Ch6jSexaRO7swd6aw== +regenerate-unicode-properties@^8.0.2: + version "8.1.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz#ef51e0f0ea4ad424b77bf7cb41f3e015c70a3f0e" + integrity sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA== dependencies: regenerate "^1.4.0" @@ -7253,15 +7566,15 @@ regenerator-runtime@^0.11.0: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== -regenerator-runtime@^0.12.0: - version "0.12.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz#fa1a71544764c036f8c49b13a08b2594c9f8a0de" - integrity sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg== +regenerator-runtime@^0.13.2: + version "0.13.2" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz#32e59c9a6fb9b1a4aff09b4930ca2d4477343447" + integrity sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA== -regenerator-transform@^0.13.3: - version "0.13.3" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.13.3.tgz#264bd9ff38a8ce24b06e0636496b2c856b57bcbb" - integrity sha512-5ipTrZFSq5vU2YoGoww4uaRVAK4wyYC4TSICibbfEPOruUu8FFP7ErV0BjmbIOEpn3O/k9na9UEdYR/3m7N6uA== +regenerator-transform@^0.14.0: + version "0.14.0" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.0.tgz#2ca9aaf7a2c239dd32e4761218425b8c7a86ecaf" + integrity sha512-rtOelq4Cawlbmq9xuMR5gdFmv7ku/sFoB7sRiywx7aq53bc52b4j6zvH7Te1Vt/X2YveDKnCGUbioieU7FEL3w== dependencies: private "^0.1.6" @@ -7273,6 +7586,11 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" +regexp-tree@^0.1.6: + version "0.1.10" + resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.10.tgz#d837816a039c7af8a8d64d7a7c3cf6a1d93450bc" + integrity sha512-K1qVSbcedffwuIslMwpe6vGlj+ZXRnGkvjAtFHfDZZZuEdA/h0dxljAPu9vhUo6Rrx2U2AwJ+nSQ6hK+lrP5MQ== + regexpp@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-1.1.0.tgz#0e3516dd0b7904f413d2d4193dce4618c3a689ab" @@ -7287,17 +7605,17 @@ regexpu-core@^1.0.0: regjsgen "^0.2.0" regjsparser "^0.1.4" -regexpu-core@^4.1.3, regexpu-core@^4.2.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.4.0.tgz#8d43e0d1266883969720345e70c275ee0aec0d32" - integrity sha512-eDDWElbwwI3K0Lo6CqbQbA6FwgtCz4kYTarrri1okfkRLZAqstU+B3voZBCjg8Fl6iq0gXrJG6MvRgLthfvgOA== +regexpu-core@^4.5.4: + version "4.5.4" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.5.4.tgz#080d9d02289aa87fe1667a4f5136bc98a6aebaae" + integrity sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ== dependencies: regenerate "^1.4.0" - regenerate-unicode-properties "^7.0.0" + regenerate-unicode-properties "^8.0.2" regjsgen "^0.5.0" regjsparser "^0.6.0" unicode-match-property-ecmascript "^1.0.4" - unicode-match-property-value-ecmascript "^1.0.2" + unicode-match-property-value-ecmascript "^1.1.0" regjsgen@^0.2.0: version "0.2.0" @@ -7334,13 +7652,13 @@ remove-trailing-separator@^1.0.1: integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= renderkid@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.2.tgz#12d310f255360c07ad8fde253f6c9e9de372d2aa" - integrity sha512-FsygIxevi1jSiPY9h7vZmBFUbAOcbYm9UwyiLNdVsLRs/5We9Ob5NMPbGYUTWiLq5L+ezlVdE0A8bbME5CWTpg== + version "2.0.3" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.3.tgz#380179c2ff5ae1365c522bf2fcfcff01c5b74149" + integrity sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA== dependencies: css-select "^1.1.0" - dom-converter "~0.2" - htmlparser2 "~3.3.0" + dom-converter "^0.2" + htmlparser2 "^3.3.0" strip-ansi "^3.0.0" utila "^0.4.0" @@ -7361,21 +7679,21 @@ repeating@^2.0.0: dependencies: is-finite "^1.0.0" -request-promise-core@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.1.tgz#3eee00b2c5aa83239cfb04c5700da36f81cd08b6" - integrity sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY= +request-promise-core@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.2.tgz#339f6aababcafdb31c799ff158700336301d3346" + integrity sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag== dependencies: - lodash "^4.13.1" + lodash "^4.17.11" -request-promise-native@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.5.tgz#5281770f68e0c9719e5163fd3fab482215f4fda5" - integrity sha1-UoF3D2jgyXGeUWP9P6tIIhX0/aU= +request-promise-native@^1.0.5, request-promise-native@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.7.tgz#a49868a624bdea5069f1251d0a836e0d89aa2c59" + integrity sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w== dependencies: - request-promise-core "1.1.1" - stealthy-require "^1.1.0" - tough-cookie ">=2.3.3" + request-promise-core "1.1.2" + stealthy-require "^1.1.1" + tough-cookie "^2.3.3" request@^2.87.0, request@^2.88.0: version "2.88.0" @@ -7408,16 +7726,16 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= -require-from-string@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - require-main-filename@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + require-uncached@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" @@ -7431,6 +7749,11 @@ requires-port@^1.0.0: resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= +reselect@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/reselect/-/reselect-3.0.1.tgz#efdaa98ea7451324d092b2b2163a6a1d7a9a2147" + integrity sha1-79qpjqdFEyTQkrKyFjpqHXqaIUc= + resolve-cwd@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" @@ -7453,10 +7776,10 @@ resolve-url@^0.2.1: resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= -resolve@^1.1.6, resolve@^1.3.2, resolve@^1.8.1: - version "1.9.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.9.0.tgz#a14c6fdfa8f92a7df1d996cb7105fa744658ea06" - integrity sha512-TZNye00tI67lwYvzxCxHGjwTNlUV70io54/Ed4j6PscB8xVfuBJpRenI/o6dVk0cY0PYTY27AgCoGGxRnYuItQ== +resolve@^1.1.6, resolve@^1.10.0, resolve@^1.3.2, resolve@^1.4.0, resolve@^1.8.1: + version "1.11.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.11.0.tgz#4014870ba296176b86343d50b60f3b50609ce232" + integrity sha512-WL2pBDjqT6pGUNSUzMw00o4T7If+z4H2x3Gz893WoUQ5KW8Vr9txp00ykiP16VBaZF5+j/OcXJHZ9+PCvdiDKw== dependencies: path-parse "^1.0.6" @@ -7473,6 +7796,11 @@ ret@~0.1.10: resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= + rgb-regex@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1" @@ -7490,12 +7818,12 @@ right-align@^0.1.1: dependencies: align-text "^0.1.1" -rimraf@2, rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@~2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" - integrity sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w== +rimraf@2, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3, rimraf@~2.6.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== dependencies: - glob "^7.0.5" + glob "^7.1.3" ripemd160@^2.0.0, ripemd160@^2.0.1: version "2.0.2" @@ -7531,7 +7859,7 @@ rx-lite@*, rx-lite@^4.0.8: resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" integrity sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ= -safe-buffer@5.1.2, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: +safe-buffer@5.1.2, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== @@ -7548,6 +7876,22 @@ safe-regex@^1.1.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== +sanitize-html@^1.20.1: + version "1.20.1" + resolved "https://registry.yarnpkg.com/sanitize-html/-/sanitize-html-1.20.1.tgz#f6effdf55dd398807171215a62bfc21811bacf85" + integrity sha512-txnH8TQjaQvg2Q0HY06G6CDJLVYCpbnxrdO0WN8gjCKaU5J0KbyGYhZxx5QJg3WLZ1lB7XU9kDkfrCXUozqptA== + dependencies: + chalk "^2.4.1" + htmlparser2 "^3.10.0" + lodash.clonedeep "^4.5.0" + lodash.escaperegexp "^4.1.2" + lodash.isplainobject "^4.0.6" + lodash.isstring "^4.0.1" + lodash.mergewith "^4.6.1" + postcss "^7.0.5" + srcset "^1.0.0" + xtend "^4.0.1" + sass-graph@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.4.tgz#13fbd63cd1caf0908b9fd93476ad43a51d1e0b49" @@ -7575,14 +7919,14 @@ sax@^1.2.4, sax@~1.2.4: resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== -saxes@^3.1.4: - version "3.1.4" - resolved "https://registry.yarnpkg.com/saxes/-/saxes-3.1.4.tgz#4ad5c53eb085ac0570ea1071a07aaf22ad29cebd" - integrity sha512-GVZmLJnkS4Vl8Pe9o4nc5ALZ615VOVxCmea8Cs0l+8GZw3RQ5XGOSUomIUfuZuk4Todo44v4y+HY1EATkDDiZg== +saxes@^3.1.5: + version "3.1.10" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-3.1.10.tgz#6028a4d6d65f0b5f5b5d250c0500be6a7950fe13" + integrity sha512-G/mVZCCGhJqgS+I7wT5gBHyTNXLe2SQcu2qmhwl1OKcSHyJEXKQY2CLT+qWIxV+m6uiGMLfSOJGLQQHhklIeEQ== dependencies: xmlchars "^1.3.1" -schema-utils@^0.4.2, schema-utils@^0.4.4: +schema-utils@^0.4.4: version "0.4.7" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.7.tgz#ba74f597d2be2ea880131746ee17d0a093c68187" integrity sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ== @@ -7612,34 +7956,32 @@ select-hose@^2.0.0: resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= -selfsigned@^1.9.1: +selfsigned@^1.10.4: version "1.10.4" resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.4.tgz#cdd7eccfca4ed7635d47a08bf2d5d3074092e2cd" integrity sha512-9AukTiDmHXGXWtWjembZ5NDmVvP2695EtpgbCsxCa68w3c88B+alqbmZ4O3hZ4VWGXeGWzEVdvqgAJD8DQPCDw== dependencies: node-forge "0.7.5" -semantic-ui-css@^2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/semantic-ui-css/-/semantic-ui-css-2.4.1.tgz#f5aea39fafb787cbd905ec724272a3f9cba9004a" - integrity sha512-Pkp0p9oWOxlH0kODx7qFpIRYpK1T4WJOO4lNnpNPOoWKCrYsfHqYSKgk5fHfQtnWnsAKy7nLJMW02bgDWWFZFg== - dependencies: - jquery x.* - "semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: - version "5.6.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" - integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg== + version "5.7.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" + integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== + +semver@^6.0.0, semver@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.1.1.tgz#53f53da9b30b2103cd4f15eab3a18ecbcb210c9b" + integrity sha512-rWYq2e5iYW+fFe/oPPtYJxYgjBm8sC4rmoGdUOgBB7VnwKt6HrL793l2voH1UlsyYZpJ4g0wfjnTEO1s1NP2eQ== semver@~5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8= -send@0.16.2: - version "0.16.2" - resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1" - integrity sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw== +send@0.17.1: + version "0.17.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" + integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== dependencies: debug "2.6.9" depd "~1.1.2" @@ -7648,19 +7990,19 @@ send@0.16.2: escape-html "~1.0.3" etag "~1.8.1" fresh "0.5.2" - http-errors "~1.6.2" - mime "1.4.1" - ms "2.0.0" + http-errors "~1.7.2" + mime "1.6.0" + ms "2.1.1" on-finished "~2.3.0" - range-parser "~1.2.0" - statuses "~1.4.0" + range-parser "~1.2.1" + statuses "~1.5.0" -serialize-javascript@^1.4.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.5.0.tgz#1aa336162c88a890ddad5384baebc93a655161fe" - integrity sha512-Ga8c8NjAAp46Br4+0oZ2WxJCwIzwP60Gq1YPgU+39PiTVxyed/iKE/zyZI6+UlVYH5Q4PaQdHhcegIFPZTUfoQ== +serialize-javascript@^1.4.0, serialize-javascript@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.7.0.tgz#d6e0dfb2a3832a8c94468e6eb1db97e55a192a65" + integrity sha512-ke8UG8ulpFOxO8f8gRYabHQe/ZntKlcig2Mp+8+URDP1D8vJZ0KUt7LYo07q25Z/+JVSgpr/cui9PIp5H6/+nA== -serve-index@^1.7.2: +serve-index@^1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk= @@ -7673,15 +8015,15 @@ serve-index@^1.7.2: mime-types "~2.1.17" parseurl "~1.3.2" -serve-static@1.13.2: - version "1.13.2" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1" - integrity sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw== +serve-static@1.14.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" + integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== dependencies: encodeurl "~1.0.2" escape-html "~1.0.3" - parseurl "~1.3.2" - send "0.16.2" + parseurl "~1.3.3" + send "0.17.1" set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" @@ -7718,6 +8060,11 @@ setprototypeof@1.1.0: resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== +setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" + integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== + sha.js@^2.4.0, sha.js@^2.4.8: version "2.4.11" resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" @@ -7863,10 +8210,17 @@ sockjs@0.3.19: faye-websocket "^0.10.0" uuid "^3.0.1" -sortablejs@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/sortablejs/-/sortablejs-1.7.0.tgz#80a2b2370abd568e1cec8c271131ef30a904fa28" - integrity sha1-gKKyNwq9Vo4c7IwnETHvMKkE+ig= +sort-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" + integrity sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg= + dependencies: + is-plain-obj "^1.0.0" + +sortablejs@^1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/sortablejs/-/sortablejs-1.9.0.tgz#2d1e74ae6bac2cb4ad0622908f340848969eb88d" + integrity sha512-Ot6bYJ6PoqPmpsqQYXjn1+RKrY2NWQvQt/o4jfd/UYwVWndyO5EPO8YHbnm5HIykf8ENsm4JUrdAvolPT86yYA== source-list-map@^2.0.0: version "2.0.1" @@ -7884,10 +8238,10 @@ source-map-resolve@^0.5.0: source-map-url "^0.4.0" urix "^0.1.0" -source-map-support@^0.5.0, source-map-support@~0.5.6: - version "0.5.9" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.9.tgz#41bc953b2534267ea2d605bccfa7bfa3111ced5f" - integrity sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA== +source-map-support@^0.5.0, source-map-support@~0.5.10: + version "0.5.12" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.12.tgz#b4f3b10d51857a5af0138d3ce8003b201613d599" + integrity sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" @@ -7936,34 +8290,32 @@ spdx-expression-parse@^3.0.0: spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.2.tgz#a59efc09784c2a5bada13cfeaf5c75dd214044d2" - integrity sha512-qky9CVt0lVIECkEsYbNILVnPvycuEBkXoMFLRWsREkomQLevYhtRKC+R91a5TOAQ3bCMjikRwhyaRqj1VYatYg== + version "3.0.4" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz#75ecd1a88de8c184ef015eafb51b5b48bfd11bb1" + integrity sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA== -spdy-transport@^2.0.18: - version "2.1.1" - resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-2.1.1.tgz#c54815d73858aadd06ce63001e7d25fa6441623b" - integrity sha512-q7D8c148escoB3Z7ySCASadkegMmUZW8Wb/Q1u0/XBgDKMO880rLQDj8Twiew/tYi7ghemKUi/whSYOwE17f5Q== +spdy-transport@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" + integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== dependencies: - debug "^2.6.8" - detect-node "^2.0.3" + debug "^4.1.0" + detect-node "^2.0.4" hpack.js "^2.1.6" - obuf "^1.1.1" - readable-stream "^2.2.9" - safe-buffer "^5.0.1" - wbuf "^1.7.2" + obuf "^1.1.2" + readable-stream "^3.0.6" + wbuf "^1.7.3" -spdy@^3.4.1: - version "3.4.7" - resolved "https://registry.yarnpkg.com/spdy/-/spdy-3.4.7.tgz#42ff41ece5cc0f99a3a6c28aabb73f5c3b03acbc" - integrity sha1-Qv9B7OXMD5mjpsKKq7c/XDsDrLw= +spdy@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.0.tgz#81f222b5a743a329aa12cea6a390e60e9b613c52" + integrity sha512-ot0oEGT/PGUpzf/6uk4AWLqkq+irlqHXkrdbk51oWONh3bxQmBuljxPNl66zlRRcIJStWq0QkLUCPOPjgjvU0Q== dependencies: - debug "^2.6.8" - handle-thing "^1.2.5" + debug "^4.1.0" + handle-thing "^2.0.0" http-deceiver "^1.2.7" - safe-buffer "^5.0.1" select-hose "^2.0.0" - spdy-transport "^2.0.18" + spdy-transport "^3.0.0" split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" @@ -7977,10 +8329,18 @@ sprintf-js@~1.0.2: resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= +srcset@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/srcset/-/srcset-1.0.0.tgz#a5669de12b42f3b1d5e83ed03c71046fc48f41ef" + integrity sha1-pWad4StC87HV6D7QPHEEb8SPQe8= + dependencies: + array-uniq "^1.0.2" + number-is-nan "^1.0.0" + sshpk@^1.7.0: - version "1.15.2" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.15.2.tgz#c946d6bd9b1a39d0e8635763f5242d6ed6dcb629" - integrity sha512-Ra/OXQtuh0/enyl4ETZAfTaeksa6BXks5ZcjpSUNrjBr0DvrJKX+1fsKDPpT9TBXgHAFsa4510aNVgI8g/+SzA== + version "1.16.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" + integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== dependencies: asn1 "~0.2.3" assert-plus "^1.0.0" @@ -7999,14 +8359,14 @@ ssri@^5.2.4: dependencies: safe-buffer "^5.1.1" -ssri@^6.0.0, ssri@^6.0.1: +ssri@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA== dependencies: figgy-pudding "^3.5.1" -stable@~0.1.6: +stable@^0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== @@ -8024,16 +8384,11 @@ static-extend@^0.1.1: define-property "^0.2.5" object-copy "^0.1.0" -"statuses@>= 1.4.0 < 2": +"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= -statuses@~1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" - integrity sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew== - stdout-stream@^1.4.0: version "1.4.1" resolved "https://registry.yarnpkg.com/stdout-stream/-/stdout-stream-1.4.1.tgz#5ac174cdd5cd726104aa0c0b2bd83815d8d535de" @@ -8041,15 +8396,15 @@ stdout-stream@^1.4.0: dependencies: readable-stream "^2.0.1" -stealthy-require@^1.1.0: +stealthy-require@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= stream-browserify@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db" - integrity sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds= + version "2.0.2" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" + integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== dependencies: inherits "~2.0.1" readable-stream "^2.0.2" @@ -8078,6 +8433,11 @@ stream-shift@^1.0.0: resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" integrity sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI= +strict-uri-encode@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" + integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= + string-width@^1.0.1, string-width@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" @@ -8095,6 +8455,15 @@ string-width@^1.0.1, string-width@^1.0.2: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" +string-width@^3.0.0, string-width@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + string.prototype.padend@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.0.0.tgz#f3aaef7c1719f170c5eab1c32bf780d96e21f2f0" @@ -8120,11 +8489,6 @@ string_decoder@^1.0.0, string_decoder@^1.1.1: dependencies: safe-buffer "~5.1.0" -string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= - string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" @@ -8146,6 +8510,13 @@ strip-ansi@^4.0.0: dependencies: ansi-regex "^3.0.0" +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + strip-bom@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" @@ -8176,9 +8547,9 @@ strip-json-comments@~2.0.1: integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= stylehacks@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.1.tgz#3186595d047ab0df813d213e51c8b94e0b9010f2" - integrity sha512-TK5zEPeD9NyC1uPIdjikzsgWxdQQN/ry1X3d1iOz1UkYDCmcr928gWD1KHgyC27F50UnE0xCTrBOO1l6KR8M4w== + version "4.0.3" + resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5" + integrity sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g== dependencies: browserslist "^4.0.0" postcss "^7.0.0" @@ -8196,37 +8567,49 @@ supports-color@^2.0.0: resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= -supports-color@^5.1.0, supports-color@^5.3.0, supports-color@^5.4.0, supports-color@^5.5.0: +supports-color@^5.3.0, supports-color@^5.4.0, supports-color@^5.5.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" +supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== + dependencies: + has-flag "^3.0.0" + +svg-tags@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764" + integrity sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q= + svgo@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.1.1.tgz#12384b03335bcecd85cfa5f4e3375fed671cb985" - integrity sha512-GBkJbnTuFpM4jFbiERHDWhZc/S/kpHToqmZag3aEBjPYK44JAN2QBjvrGIxLOoCyMZjuFQIfTO2eJd8uwLY/9g== + version "1.2.2" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.2.2.tgz#0253d34eccf2aed4ad4f283e11ee75198f9d7316" + integrity sha512-rAfulcwp2D9jjdGu+0CuqlrAUin6bBWrpoqXWwKDZZZJfXcUXQSxLJOFJCQCSA0x0pP2U0TxSlJu2ROq5Bq6qA== dependencies: - coa "~2.0.1" - colors "~1.1.2" + chalk "^2.4.1" + coa "^2.0.2" css-select "^2.0.0" - css-select-base-adapter "~0.1.0" + css-select-base-adapter "^0.1.1" css-tree "1.0.0-alpha.28" css-url-regex "^1.1.0" - csso "^3.5.0" - js-yaml "^3.12.0" + csso "^3.5.1" + js-yaml "^3.13.1" mkdirp "~0.5.1" - object.values "^1.0.4" + object.values "^1.1.0" sax "~1.2.4" - stable "~0.1.6" + stable "^0.1.8" unquote "~1.1.1" util.promisify "~1.0.0" symbol-tree@^3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" - integrity sha1-rifbOPZgp64uHDt9G8KQgZuFGeY= + version "3.2.4" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== table@4.0.2: version "4.0.2" @@ -8241,73 +8624,84 @@ table@4.0.2: string-width "^2.1.1" tapable@^1.0.0, tapable@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.1.tgz#4d297923c5a72a42360de2ab52dadfaaec00018e" - integrity sha512-9I2ydhj8Z9veORCw5PRm4u9uebCn0mcCa6scWoNcbZ6dAtoo2618u9UUzxgmsCOreJpqDDuv61LvwofW7hLcBA== + version "1.1.3" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" + integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== tar@^2.0.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" - integrity sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE= + version "2.2.2" + resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.2.tgz#0ca8848562c7299b8b446ff6a4d60cdbb23edc40" + integrity sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA== dependencies: block-stream "*" - fstream "^1.0.2" + fstream "^1.0.12" inherits "2" tar@^4: - version "4.4.8" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.8.tgz#b19eec3fde2a96e64666df9fdb40c5ca1bc3747d" - integrity sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ== + version "4.4.10" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.10.tgz#946b2810b9a5e0b26140cf78bea6b0b0d689eba1" + integrity sha512-g2SVs5QIxvo6OLp0GudTqEf05maawKUxXru104iaayWA09551tFCTI8f1Asb4lPfkBr91k07iL4c11XO3/b0tA== dependencies: chownr "^1.1.1" fs-minipass "^1.2.5" - minipass "^2.3.4" - minizlib "^1.1.1" + minipass "^2.3.5" + minizlib "^1.2.1" mkdirp "^0.5.0" safe-buffer "^5.1.2" - yallist "^3.0.2" + yallist "^3.0.3" -terser-webpack-plugin@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.1.0.tgz#cf7c25a1eee25bf121f4a587bb9e004e3f80e528" - integrity sha512-61lV0DSxMAZ8AyZG7/A4a3UPlrbOBo8NIQ4tJzLPAdGOQ+yoNC7l5ijEow27lBAL2humer01KLS6bGIMYQxKoA== +terser-webpack-plugin@^1.1.0, terser-webpack-plugin@^1.2.3: + version "1.3.0" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.3.0.tgz#69aa22426299f4b5b3775cbed8cb2c5d419aa1d4" + integrity sha512-W2YWmxPjjkUcOWa4pBEv4OP4er1aeQJlSo2UhtCFQCuRXEHjOFscO8VyWHj9JLlA0RzQb8Y2/Ta78XZvT54uGg== dependencies: - cacache "^11.0.2" + cacache "^11.3.2" find-cache-dir "^2.0.0" + is-wsl "^1.1.0" + loader-utils "^1.2.3" schema-utils "^1.0.0" - serialize-javascript "^1.4.0" + serialize-javascript "^1.7.0" source-map "^0.6.1" - terser "^3.8.1" - webpack-sources "^1.1.0" - worker-farm "^1.5.2" + terser "^4.0.0" + webpack-sources "^1.3.0" + worker-farm "^1.7.0" -terser@^3.8.1: - version "3.13.1" - resolved "https://registry.yarnpkg.com/terser/-/terser-3.13.1.tgz#a02e8827fb9705fe7b609c31093d010b28cea8eb" - integrity sha512-ogyZye4DFqOtMzT92Y3Nxxw8OvXmL39HOALro4fc+EUYFFF9G/kk0znkvwMz6PPYgBtdKAodh3FPR70eugdaQA== +terser@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.0.0.tgz#ef356f6f359a963e2cc675517f21c1c382877374" + integrity sha512-dOapGTU0hETFl1tCo4t56FN+2jffoKyER9qBGoUFyZ6y7WLoKT0bF+lAYi6B6YsILcGF3q1C2FBh8QcKSCgkgA== dependencies: - commander "~2.17.1" + commander "^2.19.0" source-map "~0.6.1" - source-map-support "~0.5.6" - -text-encoding@^0.6.4: - version "0.6.4" - resolved "https://registry.yarnpkg.com/text-encoding/-/text-encoding-0.6.4.tgz#e399a982257a276dae428bb92845cb71bdc26d19" - integrity sha1-45mpgiV6J22uQou5KEXLcb3CbRk= + source-map-support "~0.5.10" text-table@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= -thread-loader@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/thread-loader/-/thread-loader-1.2.0.tgz#35dedb23cf294afbbce6c45c1339b950ed17e7a4" - integrity sha512-acJ0rvUk53+ly9cqYWNOpPqOgCkNpmHLPDGduNm4hDQWF7EDKEJXAopG9iEWsPPcml09wePkq3NF+ZUqnO6tbg== +thenify-all@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + integrity sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY= dependencies: - async "^2.3.0" - loader-runner "^2.3.0" + thenify ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4": + version "3.3.0" + resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.0.tgz#e69e38a1babe969b0108207978b9f62b88604839" + integrity sha1-5p44obq+lpsBCCB5eLn2K4hgSDk= + dependencies: + any-promise "^1.0.0" + +thread-loader@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/thread-loader/-/thread-loader-2.1.2.tgz#f585dd38e852c7f9cded5d092992108148f5eb30" + integrity sha512-7xpuc9Ifg6WU+QYw/8uUqNdRwMD+N5gjwHKMqETrs96Qn+7BHwECpt2Brzr4HFlf4IAkZsayNhmGdbkBsTJ//w== + dependencies: + loader-runner "^2.3.1" loader-utils "^1.1.0" + neo-async "^2.6.0" through2@^2.0.0: version "2.0.5" @@ -8386,24 +8780,22 @@ to-regex@^3.0.1, to-regex@^3.0.2: regex-not "^1.0.2" safe-regex "^1.1.0" +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== + token-stream@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/token-stream/-/token-stream-0.0.1.tgz#ceeefc717a76c4316f126d0b9dbaa55d7e7df01a" integrity sha1-zu78cXp2xDFvEm0LnbqlXX598Bo= -topo@3.x.x: - version "3.0.3" - resolved "https://registry.yarnpkg.com/topo/-/topo-3.0.3.tgz#d5a67fb2e69307ebeeb08402ec2a2a6f5f7ad95c" - integrity sha512-IgpPtvD4kjrJ7CRA3ov2FhWQADwv+Tdqbsf1ZnPUSAtCJ9e1Z44MmoSGDXGk4IppoZA7jd/QRkNddlLJWlUZsQ== - dependencies: - hoek "6.x.x" - toposort@^1.0.0: version "1.0.7" resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.7.tgz#2e68442d9f64ec720b8cc89e6443ac6caa950029" integrity sha1-LmhELZ9k7HILjMieZEOsbKqVACk= -tough-cookie@>=2.3.3, tough-cookie@^2.5.0: +tough-cookie@^2.3.3, tough-cookie@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== @@ -8449,9 +8841,9 @@ tryer@^1.0.0: integrity sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA== tslib@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" - integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ== + version "1.10.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" + integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== tty-browserify@0.0.0: version "0.0.0" @@ -8482,13 +8874,18 @@ type-detect@4.0.8, type-detect@^4.0.0, type-detect@^4.0.5, type-detect@^4.0.8: resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== -type-is@~1.6.16: - version "1.6.16" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194" - integrity sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q== +type-fest@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.4.1.tgz#8bdf77743385d8a4f13ba95f610f5ccd68c728f8" + integrity sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw== + +type-is@~1.6.17, type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== dependencies: media-typer "0.3.0" - mime-types "~2.1.18" + mime-types "~2.1.24" typedarray@^0.0.6: version "0.0.6" @@ -8496,11 +8893,11 @@ typedarray@^0.0.6: integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= uglify-js@3.4.x: - version "3.4.9" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.9.tgz#af02f180c1207d76432e473ed24a28f4a782bae3" - integrity sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q== + version "3.4.10" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.10.tgz#9ad9563d8eb3acdfb8d38597d2af1d815f6a755f" + integrity sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw== dependencies: - commander "~2.17.1" + commander "~2.19.0" source-map "~0.6.1" uglify-js@^2.6.1: @@ -8531,15 +8928,15 @@ unicode-match-property-ecmascript@^1.0.4: unicode-canonical-property-names-ecmascript "^1.0.4" unicode-property-aliases-ecmascript "^1.0.4" -unicode-match-property-value-ecmascript@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.0.2.tgz#9f1dc76926d6ccf452310564fd834ace059663d4" - integrity sha512-Rx7yODZC1L/T8XKo/2kNzVAQaRE88AaMvI1EF/Xnj3GW2wzN6fop9DDWuFAKUVFH7vozkz26DzP0qyWLKLIVPQ== +unicode-match-property-value-ecmascript@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz#5b4b426e08d13a80365e0d657ac7a6c1ec46a277" + integrity sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g== unicode-property-aliases-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.4.tgz#5a533f31b4317ea76f17d807fa0d116546111dd0" - integrity sha512-2WSLa6OdYd2ng8oqiGIWnJqyFArvhn+5vgx5GTxMbUYjCYKUcuKS62YLFF0R/BDGlB1yzXjQOLtPAfHsgirEpg== + version "1.0.5" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz#a9cc6cc7ce63a0a3023fc99e341b94431d405a57" + integrity sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw== union-value@^1.0.0: version "1.0.0" @@ -8561,7 +8958,7 @@ uniqs@^2.0.0: resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI= -unique-filename@^1.1.0: +unique-filename@^1.1.0, unique-filename@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== @@ -8569,9 +8966,9 @@ unique-filename@^1.1.0: unique-slug "^2.0.0" unique-slug@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.1.tgz#5e9edc6d1ce8fb264db18a507ef9bd8544451ca6" - integrity sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg== + version "2.0.2" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== dependencies: imurmurhash "^0.1.4" @@ -8598,10 +8995,10 @@ unset-value@^1.0.0: has-value "^0.3.1" isobject "^3.0.0" -upath@^1.0.5: - version "1.1.0" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.0.tgz#35256597e46a581db4793d0ce47fa9aebfc9fabd" - integrity sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw== +upath@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.2.tgz#3db658600edaeeccbe6db5e684d67ee8c2acd068" + integrity sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q== upper-case@^1.1.1: version "1.1.3" @@ -8630,17 +9027,17 @@ url-loader@^1.1.2: schema-utils "^1.0.0" url-parse@^1.4.3: - version "1.4.4" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.4.tgz#cac1556e95faa0303691fec5cf9d5a1bc34648f8" - integrity sha512-/92DTTorg4JjktLNLe6GPS2/RvAd/RGr6LuktmWSMLEOa6rjnlrFXNgSbSmkNvCoL2T028A0a1JaJLzRMlFoHg== + version "1.4.7" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.7.tgz#a8a83535e8c00a316e403a5db4ac1b9b853ae278" + integrity sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg== dependencies: - querystringify "^2.0.0" + querystringify "^2.1.1" requires-port "^1.0.0" -url-polyfill@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/url-polyfill/-/url-polyfill-1.1.3.tgz#ce0bdf2e923aa6f66bc198ab776323dfc5a91e62" - integrity sha512-xIAXc0DyXJCd767sSeRu4eqisyYhR0z0sohWArCn+WPwIatD39xGrc09l+tluIUi6jGkpGa8Gz8TKwkKYxMQvQ== +url-polyfill@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/url-polyfill/-/url-polyfill-1.1.5.tgz#bec79b72b5407dba6d8cced2e32e4ab273aa9fb1" + integrity sha512-9XjIJ6nwrU+nGd8t90Ze0Zs7t8A+SU0gqsqPttj6j3zAVe5q0HFcuv37nDBdVSPpi4aTHTfbUF/i+ZVD+o2EbA== url@^0.11.0: version "0.11.0" @@ -8660,7 +9057,7 @@ util-deprecate@^1.0.1, util-deprecate@~1.0.1: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= -util.promisify@1.0.0, util.promisify@^1.0.0, util.promisify@~1.0.0: +util.promisify@1.0.0, util.promisify@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== @@ -8675,10 +9072,10 @@ util@0.10.3: dependencies: inherits "2.0.1" -util@^0.10.3: - version "0.10.4" - resolved "https://registry.yarnpkg.com/util/-/util-0.10.4.tgz#3aa0125bfe668a4672de58857d3ace27ecb76901" - integrity sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A== +util@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" + integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== dependencies: inherits "2.0.3" @@ -8711,9 +9108,9 @@ vary@~1.1.2: integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= vendors@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.2.tgz#7fcb5eef9f5623b156bcea89ec37d63676f21801" - integrity sha512-w/hry/368nO21AN9QljsaIhb9ZiZtZARoVH5f3CsFbawdLdayCgKRPup7CggujvySMxx0I91NOyxdVENohprLQ== + version "1.0.3" + resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.3.tgz#a6467781abd366217c050f8202e7e50cc9eef8c0" + integrity sha512-fOi47nsJP5Wqefa43kyWSg80qF+Q3XA6MUkgi7Hp1HQaKDQW4cQrK2D0P7mmbFtsV1N89am55Yru/nyEwRubcw== verror@1.10.0: version "1.10.0" @@ -8724,12 +9121,10 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" -vm-browserify@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73" - integrity sha1-XX6kW7755Kb/ZflUOOCofDV9WnM= - dependencies: - indexof "0.0.1" +vm-browserify@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.0.tgz#bd76d6a23323e2ca8ffa12028dc04559c75f9019" + integrity sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw== void-elements@^2.0.1: version "2.0.1" @@ -8749,26 +9144,26 @@ vue-eslint-parser@^2.0.3: lodash "^4.17.4" vue-gettext@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/vue-gettext/-/vue-gettext-2.1.1.tgz#8431b57c27d0becff131de6a643ac4ea8ffcb52c" - integrity sha512-vbKhl7VGlVtTElNIdvpC4GKTRH1CwZmzhELcP6jS/UaFcF+yZvS5bIIAiPCQzMEU5dpAI0hIgJAxAKOMIg7UXw== + version "2.1.5" + resolved "https://registry.yarnpkg.com/vue-gettext/-/vue-gettext-2.1.5.tgz#6bede1091c25ca657c591532a154b7e5680abd84" + integrity sha512-QAfPupLNthQLDVSIoLKOSiDeBqXja3qfT48Civhuxwjdee0fdi0MHTgsvnseMsHDfMJq6GBxIMBMhoRp6NJdjg== vue-hot-reload-api@^2.3.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.1.tgz#b2d3d95402a811602380783ea4f566eb875569a2" - integrity sha512-AA86yKZ5uOKz87/q1UpngEXhbRkaYg1b7HMMVRobNV1IVKqZe8oLIzo6iMocVwZXnYitlGwf2k4ZRLOZlS8oPQ== + version "2.3.3" + resolved "https://registry.yarnpkg.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.3.tgz#2756f46cb3258054c5f4723de8ae7e87302a1ccf" + integrity sha512-KmvZVtmM26BQOMK1rwUZsrqxEGeKiYSZGA7SNWE6uExx8UX/cj9hq2MRV/wWC3Cq6AoeDGk57rL9YMFRel/q+g== vue-lazyload@^1.2.6: version "1.2.6" resolved "https://registry.yarnpkg.com/vue-lazyload/-/vue-lazyload-1.2.6.tgz#baa04c172d52a812608eb12c7a6bfb14f5c91079" integrity sha512-6a61+pzwcfowhLRQiPdmRuJ40n/4fL/sEynu8KQZoCf5RVA0NH0X68vplLY0+lUM8mKNScYomaepV+hdjgnZhg== -vue-loader@^15.4.2: - version "15.4.2" - resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-15.4.2.tgz#812bb26e447dd3b84c485eb634190d914ce125e2" - integrity sha512-nVV27GNIA9MeoD8yQ3dkUzwlAaAsWeYSWZHsu/K04KCD339lW0Jv2sJWsjj3721SP7sl2lYdPmjcHgkWQSp5bg== +vue-loader@^15.7.0: + version "15.7.0" + resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-15.7.0.tgz#27275aa5a3ef4958c5379c006dd1436ad04b25b3" + integrity sha512-x+NZ4RIthQOxcFclEcs8sXGEWqnZHodL2J9Vq+hUz+TDZzBaDIh1j3d9M2IUlTjtrHTZy4uMuRdTi8BGws7jLA== dependencies: - "@vue/component-compiler-utils" "^2.0.0" + "@vue/component-compiler-utils" "^2.5.1" hash-sum "^1.0.2" loader-utils "^1.1.0" vue-hot-reload-api "^2.3.0" @@ -8784,16 +9179,16 @@ vue-masonry@^0.11.5: vue "^2.0.0" vue-plyr@^5.0.4: - version "5.0.4" - resolved "https://registry.yarnpkg.com/vue-plyr/-/vue-plyr-5.0.4.tgz#13083b71a876d01200a3c93ebfd11585b671afda" - integrity sha512-zOLD7SZiYR/8DPYkZZR9zGTV+04GAc+fhnBymAWSRryncAG4889cYxXJSbIvlsNVGpdGRIOSIZ4p6pIupfmZ5w== + version "5.1.3" + resolved "https://registry.yarnpkg.com/vue-plyr/-/vue-plyr-5.1.3.tgz#38da58f71b952c3dbfa8c7fccc5b2471a118c654" + integrity sha512-Nx9uyn7OUfJ4FlcWs4u2N1YHuAdVhmlc/CEbT8IvwFOU9WP/8nxwOxMoAycMWrHK23a4MdYjrADEKC2QHWsw4A== dependencies: - plyr "^3.4.5" + plyr "^3.5.2" vue-router@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-3.0.2.tgz#dedc67afe6c4e2bc25682c8b1c2a8c0d7c7e56be" - integrity sha512-opKtsxjp9eOcFWdp6xLQPLmRGgfM932Tl56U9chYTnoWqKxQ8M20N7AkdEbM5beUh6wICoFGYugAX9vQjyJLFg== + version "3.0.6" + resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-3.0.6.tgz#2e4f0f9cbb0b96d0205ab2690cfe588935136ac3" + integrity sha512-Ox0ciFLswtSGRTHYhGvx2L44sVbTPNS+uD2kRISuo8B39Y79rOo0Kw0hzupTmiVtftQYCZl87mwldhh2L9Aquw== vue-style-loader@^4.1.0: version "4.1.2" @@ -8804,34 +9199,34 @@ vue-style-loader@^4.1.0: loader-utils "^1.0.2" vue-template-compiler@^2.5.16, vue-template-compiler@^2.5.17: - version "2.5.21" - resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.5.21.tgz#a57ceb903177e8f643560a8d639a0f8db647054a" - integrity sha512-Vmk5Cv7UcmI99B9nXJEkaK262IQNnHp5rJYo+EwYpe2epTAXqcVyExhV6pk8jTkxQK2vRc8v8KmZBAwdmUZvvw== + version "2.6.10" + resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.6.10.tgz#323b4f3495f04faa3503337a82f5d6507799c9cc" + integrity sha512-jVZkw4/I/HT5ZMvRnhv78okGusqe0+qH2A0Em0Cp8aq78+NK9TII263CDVz2QXZsIT+yyV/gZc/j/vlwa+Epyg== dependencies: de-indent "^1.0.2" he "^1.1.0" -vue-template-es2015-compiler@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.6.0.tgz#dc42697133302ce3017524356a6c61b7b69b4a18" - integrity sha512-x3LV3wdmmERhVCYy3quqA57NJW7F3i6faas++pJQWtknWT+n7k30F4TVdHvCLn48peTJFRvCpxs3UuFPqgeELg== +vue-template-es2015-compiler@^1.6.0, vue-template-es2015-compiler@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz#1ee3bc9a16ecbf5118be334bb15f9c46f82f5825" + integrity sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw== vue-upload-component@^2.8.11: - version "2.8.16" - resolved "https://registry.yarnpkg.com/vue-upload-component/-/vue-upload-component-2.8.16.tgz#cf8c9c7d6b342a5e0485d6955cebd22f31806ed2" - integrity sha512-aDFKA1lpZojNFzSeC9iGah5qupj1ZhUCDjYFk4FyMNrUXhICSBicc+zzXGB1gQtoqjbmPjrWLZ/r2ejJ+iCcsA== + version "2.8.20" + resolved "https://registry.yarnpkg.com/vue-upload-component/-/vue-upload-component-2.8.20.tgz#60824d3f20f3216dca90d8c86a5c980851b04ea0" + integrity sha512-zrnJvULu4rnZe36Ib2/AZrI/h/mmNbUJZ+acZD652PyumzbvjCOQeYHe00sGifTdYjzzS66CwhTT+ubZ2D0Aow== vue@^2.0.0, vue@^2.5.17: - version "2.5.21" - resolved "https://registry.yarnpkg.com/vue/-/vue-2.5.21.tgz#3d33dcd03bb813912ce894a8303ab553699c4a85" - integrity sha512-Aejvyyfhn0zjVeLvXd70h4hrE4zZDx1wfZqia6ekkobLmUZ+vNFQer53B4fu0EjWBSiqApxPejzkO1Znt3joxQ== + version "2.6.10" + resolved "https://registry.yarnpkg.com/vue/-/vue-2.6.10.tgz#a72b1a42a4d82a721ea438d1b6bf55e66195c637" + integrity sha512-ImThpeNU9HbdZL3utgMCq0oiMzAkt1mcgy3/E6zWC/G6AaQoeuFdsl9nDhTDU3X1R6FK7nsIUuRACVcjI+A2GQ== vuedraggable@^2.16.0: - version "2.17.0" - resolved "https://registry.yarnpkg.com/vuedraggable/-/vuedraggable-2.17.0.tgz#489c16c9bcb9eb06f441944d3c52e5f2bb7060f9" - integrity sha512-TAC5tJTSbHSINQCSB59qHnuzT0Ad+E3IgvSWuA1e9UaebD8DxKaY1tCdvL3XvuLoaM3wc1dhpP/NbjpdxYsrng== + version "2.21.0" + resolved "https://registry.yarnpkg.com/vuedraggable/-/vuedraggable-2.21.0.tgz#30c485ed737a9a6a73ea8f21cc8e1ed59aaddc92" + integrity sha512-UDp0epjaZikuInoJA9rlEIJaSTQThabq0R9x7TqBdl0qGVFKKzo6glP6ubfzWBmV4iRIfbSOs2DV06s3B5h5tA== dependencies: - sortablejs "^1.7.0" + sortablejs "^1.9.0" vuex-persistedstate@^2.5.4: version "2.5.4" @@ -8847,9 +9242,9 @@ vuex-router-sync@^5.0.0: integrity sha512-Mry2sO4kiAG64714X1CFpTA/shUH1DmkZ26DFDtwoM/yyx6OtMrc+MxrU+7vvbNLO9LSpgwkiJ8W+rlmRtsM+w== vuex@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/vuex/-/vuex-3.0.1.tgz#e761352ebe0af537d4bb755a9b9dc4be3df7efd2" - integrity sha512-wLoqz0B7DSZtgbWL1ShIBBCjv22GV5U+vcBFox658g6V0s4wZV9P4YjCNyoHSyIBpj1f29JBoNQIqD82cR4O3w== + version "3.1.1" + resolved "https://registry.yarnpkg.com/vuex/-/vuex-3.1.1.tgz#0c264bfe30cdbccf96ab9db3177d211828a5910e" + integrity sha512-ER5moSbLZuNSMBFnEBVGhQ1uCBNJslH9W/Dw2W7GZN23UQA69uapP5GTT9Vm8Trc0PzBSVt6LzF3hGjmv41xcg== w3c-hr-time@^1.0.1: version "1.0.1" @@ -8859,9 +9254,9 @@ w3c-hr-time@^1.0.1: browser-process-hrtime "^0.1.2" w3c-xmlserializer@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-1.0.1.tgz#054cdcd359dc5d1f3ec9be4e272c756af4b21d39" - integrity sha512-XZGI1OH/OLQr/NaJhhPmzhngwcAnZDLytsvXnRmlYeRkmbb0I7sqFFA22erq4WQR0sUu17ZSQOAV9mFwCqKRNg== + version "1.1.2" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz#30485ca7d70a6fd052420a3d12fd90e6339ce794" + integrity sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg== dependencies: domexception "^1.0.1" webidl-conversions "^4.0.2" @@ -8876,7 +9271,7 @@ watchpack@^1.5.0: graceful-fs "^4.1.2" neo-async "^2.5.0" -wbuf@^1.1.0, wbuf@^1.7.2: +wbuf@^1.1.0, wbuf@^1.7.3: version "1.7.3" resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== @@ -8895,12 +9290,13 @@ webidl-conversions@^4.0.2: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== -webpack-bundle-analyzer@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.0.3.tgz#dbc7fff8f52058b6714a20fddf309d0790e3e0a0" - integrity sha512-naLWiRfmtH4UJgtUktRTLw6FdoZJ2RvCR9ePbwM9aRMsS/KjFerkPZG9epEvXRAw5d5oPdrs9+3p+afNjxW8Xw== +webpack-bundle-analyzer@^3.3.0: + version "3.3.2" + resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.3.2.tgz#3da733a900f515914e729fcebcd4c40dde71fc6f" + integrity sha512-7qvJLPKB4rRWZGjVp5U1KEjwutbDHSKboAl0IfafnrdXMrgC0tOtZbQD6Rw0u4cmpgRN4O02Fc0t8eAT+FgGzA== dependencies: - acorn "^5.7.3" + acorn "^6.0.7" + acorn-walk "^6.1.1" bfj "^6.1.1" chalk "^2.4.1" commander "^2.18.0" @@ -8930,49 +9326,52 @@ webpack-chain@^4.11.0: deepmerge "^1.5.2" javascript-stringify "^1.6.0" -webpack-dev-middleware@3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.4.0.tgz#1132fecc9026fd90f0ecedac5cbff75d1fb45890" - integrity sha512-Q9Iyc0X9dP9bAsYskAVJ/hmIZZQwf/3Sy4xCAZgL5cUkjZmUZLt4l5HpbST/Pdgjn3u6pE7u5OdGd1apgzRujA== +webpack-dev-middleware@^3.7.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.0.tgz#ef751d25f4e9a5c8a35da600c5fda3582b5c6cff" + integrity sha512-qvDesR1QZRIAZHOE3iQ4CXLZZSQ1lAUsSpnQmlB1PBfoN/xdRjmge3Dok0W4IdaVLJOGJy3sGI4sZHwjRU0PCA== dependencies: - memory-fs "~0.4.1" - mime "^2.3.1" - range-parser "^1.0.3" + memory-fs "^0.4.1" + mime "^2.4.2" + range-parser "^1.2.1" webpack-log "^2.0.0" -webpack-dev-server@^3.1.10: - version "3.1.10" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.1.10.tgz#507411bee727ee8d2fdffdc621b66a64ab3dea2b" - integrity sha512-RqOAVjfqZJtQcB0LmrzJ5y4Jp78lv9CK0MZ1YJDTaTmedMZ9PU9FLMQNrMCfVu8hHzaVLVOJKBlGEHMN10z+ww== +webpack-dev-server@^3.4.1: + version "3.7.1" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.7.1.tgz#ce10ca0ad6cf28b03e2ce9808684a8616039155d" + integrity sha512-GSBjjDMQ+uJI/Rcw/NfXDq5QpfE4HviafCy2SdbJ8Q22MwsnyoHd5TbWRfxgkbklsMx+ZNgWIKK+cB28ynjiDQ== dependencies: ansi-html "0.0.7" bonjour "^3.5.0" - chokidar "^2.0.0" - compression "^1.5.2" - connect-history-api-fallback "^1.3.0" - debug "^3.1.0" - del "^3.0.0" - express "^4.16.2" - html-entities "^1.2.0" - http-proxy-middleware "~0.18.0" + chokidar "^2.1.6" + compression "^1.7.4" + connect-history-api-fallback "^1.6.0" + debug "^4.1.1" + del "^4.1.1" + express "^4.17.1" + html-entities "^1.2.1" + http-proxy-middleware "^0.19.1" import-local "^2.0.0" - internal-ip "^3.0.1" + internal-ip "^4.3.0" ip "^1.1.5" - killable "^1.0.0" - loglevel "^1.4.1" - opn "^5.1.0" - portfinder "^1.0.9" + killable "^1.0.1" + loglevel "^1.6.2" + opn "^5.5.0" + p-retry "^3.0.1" + portfinder "^1.0.20" schema-utils "^1.0.0" - selfsigned "^1.9.1" - serve-index "^1.7.2" + selfsigned "^1.10.4" + semver "^6.1.1" + serve-index "^1.9.1" sockjs "0.3.19" sockjs-client "1.3.0" - spdy "^3.4.1" - strip-ansi "^3.0.0" - supports-color "^5.1.0" - webpack-dev-middleware "3.4.0" + spdy "^4.0.0" + strip-ansi "^3.0.1" + supports-color "^6.1.0" + url "^0.11.0" + webpack-dev-middleware "^3.7.0" webpack-log "^2.0.0" - yargs "12.0.2" + yargs "12.0.5" webpack-log@^2.0.0: version "2.0.0" @@ -8982,10 +9381,10 @@ webpack-log@^2.0.0: ansi-colors "^3.0.0" uuid "^3.3.2" -webpack-merge@^4.1.4: - version "4.1.5" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.1.5.tgz#2be31e846c20767d1bef56bdca64c328a681190a" - integrity sha512-sVcM+MMJv6DO0C0GLLltx8mUlGMKXE0zBsuMqZ9jz2X9gsekALw6Rs0cAfTWc97VuWS6NpVUa78959zANnMMLQ== +webpack-merge@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.2.1.tgz#5e923cf802ea2ace4fd5af1d3247368a633489b4" + integrity sha512-4p8WQyS98bUJcCvFMbdGZyZmsKuWjWVnVHnAS3FFg0HDaRVrPbkivx2RYCre8UiemD67RsiFFLfn4JhLAin8Vw== dependencies: lodash "^4.17.5" @@ -8997,10 +9396,18 @@ webpack-sources@^1.1.0, webpack-sources@^1.3.0: source-list-map "^2.0.0" source-map "~0.6.1" -webpack@^4.26.1: - version "4.28.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.28.0.tgz#6bdc26c17fe4c7e28c29fa002e6d37ac92caae9e" - integrity sha512-gPNTMGR5ZlBucXmEQ34TRxRqXnGYq9P3t8LeP9rvhkNnr+Cn+HvZMxGuJ4Hl7zdmoRUZP+GosniqJiadXW/RqQ== +webpack-sources@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" + integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== + dependencies: + source-list-map "^2.0.0" + source-map "~0.6.1" + +"webpack@>=4 < 4.29": + version "4.28.4" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.28.4.tgz#1ddae6c89887d7efb752adf0c3cd32b9b07eacd0" + integrity sha512-NxjD61WsK/a3JIdwWjtIpimmvE6UrRi3yG54/74Hk9rwNj5FPkA4DJCf1z4ByDWLkvZhTZE+P3C/eh6UD5lDcw== dependencies: "@webassemblyjs/ast" "1.7.11" "@webassemblyjs/helper-module-context" "1.7.11" @@ -9028,11 +9435,12 @@ webpack@^4.26.1: webpack-sources "^1.3.0" websocket-driver@>=0.5.1: - version "0.7.0" - resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.0.tgz#0caf9d2d755d93aee049d4bdd0d3fe2cca2a24eb" - integrity sha1-DK+dLXVdk67gSdS90NP+LMoqJOs= + version "0.7.3" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.3.tgz#a2d4e0d4f4f116f1e6297eba58b05d430100e9f9" + integrity sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg== dependencies: - http-parser-js ">=0.4.0" + http-parser-js ">=0.4.0 <0.4.11" + safe-buffer ">=5.1.0" websocket-extensions ">=0.1.1" websocket-extensions@>=0.1.1: @@ -9108,10 +9516,10 @@ wordwrap@~1.0.0: resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= -worker-farm@^1.5.2: - version "1.6.0" - resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.6.0.tgz#aecc405976fab5a95526180846f0dba288f3a4a0" - integrity sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ== +worker-farm@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" + integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== dependencies: errno "~0.1.7" @@ -9123,6 +9531,15 @@ wrap-ansi@^2.0.0: string-width "^1.0.1" strip-ansi "^3.0.1" +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" + integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== + dependencies: + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" @@ -9136,9 +9553,9 @@ write@^0.2.1: mkdirp "^0.5.1" ws@^6.0.0, ws@^6.1.2: - version "6.1.2" - resolved "https://registry.yarnpkg.com/ws/-/ws-6.1.2.tgz#3cc7462e98792f0ac679424148903ded3b9c3ad8" - integrity sha512-rfUqzvz0WxmSXtJpPMX2EeASXabOrSMk1ruMOV3JBTBjo4ac2lDjGGsbQSyxj8Odhw5fBib8ZKEjDNvgouNKYw== + version "6.2.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" + integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== dependencies: async-limiter "~1.0.0" @@ -9152,16 +9569,16 @@ xmlchars@^1.3.1: resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-1.3.1.tgz#1dda035f833dbb4f86a0c28eaa6ca769214793cf" integrity sha512-tGkGJkN8XqCod7OT+EvGYK5Z4SfDQGD30zAa58OcnAa0RRWgzUEK72tkXhsX1FZd+rgnhRxFtmO+ihkp8LHSkw== -xregexp@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.0.0.tgz#e698189de49dd2a18cc5687b05e17c8e43943020" - integrity sha512-PHyM+sQouu7xspQQwELlGwwd05mXUFqwFYfqPO0cC7x4fxyHnnuetmQr6CjJiafIDoH4MogHb9dOoJzR/Y4rFg== - xtend@^4.0.0, xtend@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68= +xtend@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + y18n@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" @@ -9177,17 +9594,26 @@ yallist@^2.1.2: resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= -yallist@^3.0.0, yallist@^3.0.2: +yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A== -yargs-parser@^10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" - integrity sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ== +yargs-parser@^11.1.1: + version "11.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4" + integrity sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ== dependencies: - camelcase "^4.1.0" + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@^13.1.0, yargs-parser@^13.1.1: + version "13.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0" + integrity sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" yargs-parser@^5.0.0: version "5.0.0" @@ -9210,13 +9636,13 @@ yargs-parser@^9.0.2: dependencies: camelcase "^4.1.0" -yargs@12.0.2: - version "12.0.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.2.tgz#fe58234369392af33ecbef53819171eff0f5aadc" - integrity sha512-e7SkEx6N6SIZ5c5H22RTZae61qtn3PYUE8JYbBFlK9sYmh3DMQ6E5ygtaG/2BW0JZi4WGgTR2IV5ChqlqrDGVQ== +yargs@12.0.5: + version "12.0.5" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" + integrity sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw== dependencies: cliui "^4.0.0" - decamelize "^2.0.0" + decamelize "^1.2.0" find-up "^3.0.0" get-caller-file "^1.0.1" os-locale "^3.0.0" @@ -9226,7 +9652,7 @@ yargs@12.0.2: string-width "^2.0.0" which-module "^2.0.0" y18n "^3.2.1 || ^4.0.0" - yargs-parser "^10.1.0" + yargs-parser "^11.1.1" yargs@^10.0.3: version "10.1.2" @@ -9264,6 +9690,40 @@ yargs@^11.0.0: y18n "^3.2.1" yargs-parser "^9.0.2" +yargs@^13.0.0: + version "13.2.4" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.2.4.tgz#0b562b794016eb9651b98bd37acf364aa5d6dc83" + integrity sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg== + dependencies: + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + os-locale "^3.1.0" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.0" + +yargs@^14.0.0: + version "14.0.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-14.0.0.tgz#ba4cacc802b3c0b3e36a9e791723763d57a85066" + integrity sha512-ssa5JuRjMeZEUjg7bEL99AwpitxU/zWGAGpdj0di41pOEmJti8NR6kyUIJBkR78DTYNPZOU08luUo0GTHuB+ow== + dependencies: + cliui "^5.0.0" + decamelize "^1.2.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.1" + yargs@^7.0.0: version "7.1.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" @@ -9283,6 +9743,13 @@ yargs@^7.0.0: y18n "^3.2.1" yargs-parser "^5.0.0" +yargs@~1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-1.2.6.tgz#9c7b4a82fd5d595b2bf17ab6dcc43135432fe34b" + integrity sha1-nHtKgv1dWVsr8Xq23MQxNUMv40s= + dependencies: + minimist "^0.1.0" + yargs@~3.10.0: version "3.10.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" diff --git a/scripts/is-docker-latest.py b/scripts/is-docker-latest.py new file mode 100755 index 0000000000000000000000000000000000000000..2e3854989104e80fb1069b165f4f6c7f270bb6c9 --- /dev/null +++ b/scripts/is-docker-latest.py @@ -0,0 +1,40 @@ +#!/usr/bin/env python3 +import argparse +import json +import sys +from distutils.version import StrictVersion + + +def main(current, releases_json): + try: + version = StrictVersion(current) + except ValueError: + print("Version number '{}' isn't valid".format(current)) + sys.exit(1) + + releases = json.loads(releases_json) + latest_release = releases["releases"][0]["id"] + + if version != latest_release: + print( + "Version number '{}' doesn't match latest release {}".format( + current, latest_release + ) + ) + sys.exit(1) + print("Version number '{}' is latest release!".format(current)) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser( + description=""" + Exit with code 0 if the given version matches the latest one + fron the list of releases found in releases_json. Primary use + is to check whether the current version can be safely pushed + as the latest one on the docker Hub. + """ + ) + parser.add_argument("current", help="Current version") + parser.add_argument("releases_json", type=argparse.FileType("r")) + args = parser.parse_args() + main(args.current, args.releases_json.read())